Add File
This commit is contained in:
96
backend/common/core/config.py
Normal file
96
backend/common/core/config.py
Normal file
@@ -0,0 +1,96 @@
|
||||
import secrets
|
||||
from typing import Annotated, Any, Literal
|
||||
|
||||
from pydantic import (
|
||||
AnyUrl,
|
||||
BeforeValidator,
|
||||
PostgresDsn,
|
||||
computed_field,
|
||||
)
|
||||
from pydantic_core import MultiHostUrl
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
|
||||
def parse_cors(v: Any) -> list[str] | str:
|
||||
if isinstance(v, str) and not v.startswith("["):
|
||||
return [i.strip() for i in v.split(",")]
|
||||
elif isinstance(v, list | str):
|
||||
return v
|
||||
raise ValueError(v)
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
model_config = SettingsConfigDict(
|
||||
# Use top level .env file (one level above ./backend/)
|
||||
env_file="../.env",
|
||||
env_ignore_empty=True,
|
||||
extra="ignore",
|
||||
)
|
||||
PROJECT_NAME: str = "SQLBot"
|
||||
API_V1_STR: str = "/api/v1"
|
||||
SECRET_KEY: str = secrets.token_urlsafe(32)
|
||||
# 60 minutes * 24 hours * 8 days = 8 days
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8
|
||||
FRONTEND_HOST: str = "http://localhost:5173"
|
||||
|
||||
BACKEND_CORS_ORIGINS: Annotated[
|
||||
list[AnyUrl] | str, BeforeValidator(parse_cors)
|
||||
] = []
|
||||
|
||||
@computed_field # type: ignore[prop-decorator]
|
||||
@property
|
||||
def all_cors_origins(self) -> list[str]:
|
||||
return [str(origin).rstrip("/") for origin in self.BACKEND_CORS_ORIGINS] + [
|
||||
self.FRONTEND_HOST
|
||||
]
|
||||
|
||||
POSTGRES_SERVER: str = 'localhost'
|
||||
POSTGRES_PORT: int = 5432
|
||||
POSTGRES_USER: str = 'root'
|
||||
POSTGRES_PASSWORD: str = "Password123@pg"
|
||||
POSTGRES_DB: str = "sqlbot"
|
||||
SQLBOT_DB_URL: str = ''
|
||||
# SQLBOT_DB_URL: str = 'mysql+pymysql://root:Password123%40mysql@127.0.0.1:3306/sqlbot'
|
||||
|
||||
TOKEN_KEY: str = "X-SQLBOT-TOKEN"
|
||||
DEFAULT_PWD: str = "SQLBot@123456"
|
||||
ASSISTANT_TOKEN_KEY: str = "X-SQLBOT-ASSISTANT-TOKEN"
|
||||
|
||||
CACHE_TYPE: Literal["redis", "memory", "None"] = "memory"
|
||||
CACHE_REDIS_URL: str | None = None # Redis URL, e.g., "redis://[[username]:[password]]@localhost:6379/0"
|
||||
|
||||
LOG_LEVEL: str = "INFO" # DEBUG, INFO, WARNING, ERROR
|
||||
LOG_DIR: str = "logs"
|
||||
LOG_FORMAT: str = "%(asctime)s - %(name)s - %(levelname)s:%(lineno)d - %(message)s"
|
||||
SQL_DEBUG: bool = False
|
||||
|
||||
UPLOAD_DIR: str = "/opt/sqlbot/data/file"
|
||||
SQLBOT_KEY_EXPIRED: int = 100 # License key expiration timestamp, 0 means no expiration
|
||||
|
||||
@computed_field # type: ignore[prop-decorator]
|
||||
@property
|
||||
def SQLALCHEMY_DATABASE_URI(self) -> PostgresDsn | str:
|
||||
if self.SQLBOT_DB_URL:
|
||||
return self.SQLBOT_DB_URL
|
||||
return MultiHostUrl.build(
|
||||
scheme="postgresql+psycopg",
|
||||
username=self.POSTGRES_USER,
|
||||
password=self.POSTGRES_PASSWORD,
|
||||
host=self.POSTGRES_SERVER,
|
||||
port=self.POSTGRES_PORT,
|
||||
path=self.POSTGRES_DB,
|
||||
)
|
||||
|
||||
MCP_IMAGE_PATH: str = '/opt/sqlbot/images'
|
||||
EXCEL_PATH: str = '/opt/sqlbot/data/excel'
|
||||
MCP_IMAGE_HOST: str = 'http://localhost:3000'
|
||||
SERVER_IMAGE_HOST: str = 'https://YOUR_SERVE_IP:MCP_PORT/images/'
|
||||
|
||||
LOCAL_MODEL_PATH: str = '/opt/sqlbot/models'
|
||||
DEFAULT_EMBEDDING_MODEL: str = 'shibing624/text2vec-base-chinese'
|
||||
EMBEDDING_ENABLED: bool = True
|
||||
EMBEDDING_SIMILARITY: float = 0.4
|
||||
EMBEDDING_TOP_COUNT: int = 5
|
||||
|
||||
|
||||
settings = Settings() # type: ignore
|
||||
Reference in New Issue
Block a user