from pydantic_settings import BaseSettings from typing import List class Settings(BaseSettings): app_name: str = "ai-flow" # 日志级别 log_level: str = "INFO" # Redis redis_host: str redis_port: int redis_password: str redis_db: int = 0 redis_timeout: int = 2000 # 存储后端: "redis" 或 "local" store_backend: str = "redis" # Redis Pub/Sub redis_publish_enabled: bool = True redis_publish_channel: str = "WORKFLOW_TASK" # 工作流线程池 executor_pool_size: int = 8 http_timeout: int = 300 step_retry_count: int = 1 # 模板缓存 template_cache_enabled: bool = True template_cache_dir: str = "data/templates" template_download_timeout: int = 30000 template_download_max_size: int = 104857600 # API Key 认证 api_auth_enabled: bool = False api_auth_keys: List[str] = [] api_auth_header_name: str = "Authorization" api_auth_prefix: str = "Bearer" api_auth_error_message: str = "Invalid API Key" # 本地存储 task_store_data_dir: str = "data/tasks" # 阿里云 OSS aliyun_endpoint: str aliyun_access_key_id: str aliyun_access_key_secret: str aliyun_bucket_name: str # Google Cloud Storage gcs_project_id: str gcs_bucket_name: str gcs_credentials_json: str = "" gcs_credentials_file: str = "" # Gemini API gemini_api_key: str gemini_base_url: str gemini_nano_banana_model: str gemini_veo3_model: str # Kontext (BFL) API kontext_api_key: str kontext_pro_url: str kontext_max_url: str # Keling API keling_app_key: str keling_app_secret: str keling_image2video_url: str keling_video2effect_url: str # SeedDance / SeedDream API seed_api_key: str seedance_video_url: str seedream_image_url: str # 资源路径 resources_path: str = "resources" model_config = {"env_prefix": "AI_FLOW_", "env_file": ".env"} settings = Settings()