from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): # 环境 env: str = "dev" # 项目基础信息 project_name: str = "FastAPI App" version: str = "0.1.0" server_port: int = 8000 # CORS cors_origins: list[str] = ["*"] cors_allow_methods: list[str] = ["*"] cors_allow_headers: list[str] = ["*"] # 数据库 (MySQL) db_host: str = "192.168.31.105" db_port: int = 3306 db_user: str = "root" db_password: str = "123456" db_name: str = "offerpie" db_pool_size: int = 10 db_max_overflow: int = 20 db_pool_recycle: int = 3600 # Redis redis_host: str = "192.168.31.105" redis_port: int = 6379 redis_password: str = "123456" redis_db: int = 0 redis_pool_size: int = 10 # LLM 供应商连接配置 # 火山引擎 volcengine_api_key: str = "fd065993-bee2-4f31-8bf2-56d5d3012c02" volcengine_base_url: str = "https://ark.cn-beijing.volces.com/api/v3" # jiekou jiekou_api_key: str = "sk_4BXi4_yvwx-NW4_zuVt2LufrrlGyhs2q9qMN5Vq_j7Q" jiekou_base_url: str = "https://api.jiekou.ai/openai" # jiayu jiayu_api_key: str = "Aa123123" jiayu_base_url: str = "http://192.168.31.133:8800/v1" #zm zm_api_key: str = "3-chatgpt-is-free-free-free" zm_base_url: str = "http://re.94xy.cn/v1" # JWT jwt_secret: str = "Aa123123" token_expire_seconds: int = 5184000 # 鉴权白名单路径 auth_whitelist: list[str] = ["/health/**", "/docs/**", "/redoc/**", "/openapi.json"] # 日志 logging_level: str = "DEBUG" log_file_name: str = "app.log" @property def database_url(self) -> str: return ( f"mysql+asyncmy://{self.db_user}:{self.db_password}" f"@{self.db_host}:{self.db_port}/{self.db_name}" ) @property def redis_url(self) -> str: if self.redis_password: from urllib.parse import quote return ( f"redis://:{quote(self.redis_password, safe='')}" f"@{self.redis_host}:{self.redis_port}/{self.redis_db}" ) return f"redis://{self.redis_host}:{self.redis_port}/{self.redis_db}" model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, extra="ignore", )