89 lines
2.7 KiB
Python
89 lines
2.7 KiB
Python
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8")
|
|
|
|
APP_NAME: str = "VideoGen API"
|
|
APP_VERSION: str = "1.0.0"
|
|
DEBUG: bool = False
|
|
SECRET_KEY: str = "change-me"
|
|
|
|
DATABASE_URL: str = "sqlite+aiosqlite:///./videogen.db"
|
|
|
|
REDIS_URL: str = "" # Leave empty to disable Redis (rate limiting, captcha)
|
|
|
|
JWT_ALGORITHM: str = "HS256"
|
|
JWT_EXPIRE_MINUTES: int = 1440
|
|
JWT_EXPIRE_REMEMBER_MINUTES: int = 10080
|
|
|
|
SEEDANCE_API_KEY: str = ""
|
|
SEEDANCE_API_BASE: str = "https://ark.cn-beijing.volces.com/api/v3"
|
|
SEEDANCE_CALLBACK_URL: str = ""
|
|
|
|
LLM_API_BASE: str = "https://api.openai.com/v1"
|
|
LLM_API_KEY: str = ""
|
|
LLM_MODEL: str = "gpt-4o"
|
|
LLM_MOCK: bool = True
|
|
|
|
ENCRYPTION_KEY: str = "changeme-32bytes-base64-key-here!!"
|
|
|
|
# SMS settings
|
|
SMS_API_URL: str = ""
|
|
SMS_API_KEY: str = ""
|
|
SMS_SIGN_NAME: str = "VideoGen"
|
|
SMS_TEMPLATE_CODE: str = "SMS_001"
|
|
SMS_MOCK: bool = True
|
|
|
|
# Payment settings
|
|
WECHAT_MCH_ID: str = ""
|
|
WECHAT_API_KEY: str = ""
|
|
WECHAT_CERT_PATH: str = ""
|
|
ALIPAY_APP_ID: str = ""
|
|
ALIPAY_PRIVATE_KEY: str = ""
|
|
ALIPAY_PUBLIC_KEY: str = ""
|
|
PAYMENT_MOCK: bool = True
|
|
|
|
STORAGE_TYPE: str = "local"
|
|
STORAGE_LOCAL_PATH: str = "./storage/videos"
|
|
STORAGE_IMAGE_LOCAL_PATH: str = "./storage/images"
|
|
UPLOAD_LOCAL_PATH: str = "./storage/uploads"
|
|
|
|
|
|
CAPTCHA_ENABLED: bool = True
|
|
|
|
BASE_URL: str = "http://ceshi.apiforeign.minzhong.cn"
|
|
|
|
CORS_ORIGINS: list[str] = ["*"]
|
|
|
|
RATE_LIMIT_ENABLED: bool = True
|
|
|
|
# ChatAPI async generation pipeline settings
|
|
CELERY_BROKER_URL: str = ""
|
|
CELERY_RESULT_BACKEND: str = ""
|
|
CHATAPI_REQUEST_TIMEOUT_SECONDS: int = 120
|
|
CHATAPI_VIDEO_FPS: float = 0.5
|
|
CHATAPI_ASYNC_MAX_RETRIES: int = 3
|
|
CHATAPI_ASYNC_RETRY_BACKOFF_SECONDS: int = 30
|
|
CHATAPI_ASYNC_POLL_INTERVAL_SECONDS: int = 30
|
|
CHATAPI_ASYNC_IMAGE_DEADLINE_MINUTES: int = 10
|
|
CHATAPI_ASYNC_VIDEO_DEADLINE_MINUTES: int = 30
|
|
|
|
# Distributed provider concurrency limits. 0 means disabled/no-op.
|
|
ARK_CHAT_PROMPT_MAX_CONCURRENCY: int = 20
|
|
ARK_IMAGE_CREATE_MAX_CONCURRENCY: int = 10
|
|
ARK_VIDEO_CREATE_MAX_CONCURRENCY: int = 10
|
|
ARK_IMAGE_POLL_MAX_CONCURRENCY: int = 50
|
|
ARK_VIDEO_POLL_MAX_CONCURRENCY: int = 50
|
|
RESULT_DOWNLOAD_MAX_CONCURRENCY: int = 10
|
|
PROVIDER_LIMIT_WAIT_TIMEOUT_SECONDS: float = 30.0
|
|
PROVIDER_LIMIT_TOKEN_TTL_SECONDS: int = 600
|
|
|
|
CELERY_DB_POOL_SIZE: int = 1
|
|
CELERY_DB_MAX_OVERFLOW: int = 1
|
|
CELERY_DB_POOL_TIMEOUT: int = 30
|
|
CELERY_DB_POOL_RECYCLE: int = 1800
|
|
|
|
|
|
settings = Settings()
|