59 lines
2.7 KiB
Python
59 lines
2.7 KiB
Python
from pydantic import Field
|
||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||
|
||
|
||
class Settings(BaseSettings):
|
||
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
|
||
|
||
app_name: str = "X2WeChat Studio"
|
||
openai_api_key: str | None = Field(default=None, alias="OPENAI_API_KEY")
|
||
openai_base_url: str | None = Field(default=None, alias="OPENAI_BASE_URL")
|
||
openai_model: str = Field(default="gpt-4.1-mini", alias="OPENAI_MODEL")
|
||
openai_timeout: float = Field(
|
||
default=120.0,
|
||
alias="OPENAI_TIMEOUT",
|
||
description="HTTP 等待模型单轮响应的最长时间(秒)。通义长文 JSON 建议 120~180",
|
||
)
|
||
openai_max_retries: int = Field(
|
||
default=0,
|
||
alias="OPENAI_MAX_RETRIES",
|
||
description="OpenAI SDK 自动重试次数。为避免单次请求被重试拉长,默认 0。",
|
||
)
|
||
openai_max_output_tokens: int = Field(
|
||
default=8192,
|
||
alias="OPENAI_MAX_OUTPUT_TOKENS",
|
||
description="单次模型输出 token 上限;通义等长文 JSON 需足够大",
|
||
)
|
||
openai_source_max_chars: int = Field(default=5000, alias="OPENAI_SOURCE_MAX_CHARS")
|
||
ai_soft_accept: bool = Field(
|
||
default=True,
|
||
alias="AI_SOFT_ACCEPT",
|
||
description="质检未通过时仍输出模型洗稿正文(mode=ai,quality_notes 记录问题),仅模型完全失败时用保底稿",
|
||
)
|
||
|
||
wechat_appid: str | None = Field(default=None, alias="WECHAT_APPID")
|
||
wechat_secret: str | None = Field(default=None, alias="WECHAT_SECRET")
|
||
wechat_author: str = Field(default="AI 编辑部", alias="WECHAT_AUTHOR")
|
||
wechat_thumb_media_id: str | None = Field(
|
||
default=None,
|
||
alias="WECHAT_THUMB_MEDIA_ID",
|
||
description="草稿图文封面:永久素材 media_id(素材库或 add_material)。与 WECHAT_THUMB_IMAGE_PATH 二选一即可",
|
||
)
|
||
wechat_thumb_image_path: str | None = Field(
|
||
default=None,
|
||
alias="WECHAT_THUMB_IMAGE_PATH",
|
||
description="本地封面图路径(容器内),将自动上传为永久素材;不配则使用内置灰底图上传",
|
||
)
|
||
|
||
im_webhook_url: str | None = Field(default=None, alias="IM_WEBHOOK_URL")
|
||
im_secret: str | None = Field(default=None, alias="IM_SECRET")
|
||
|
||
auth_db_path: str = Field(default="./data/app.db", alias="AUTH_DB_PATH")
|
||
auth_cookie_name: str = Field(default="x2ws_session", alias="AUTH_COOKIE_NAME")
|
||
auth_session_ttl_sec: int = Field(default=86400, alias="AUTH_SESSION_TTL_SEC")
|
||
auth_remember_session_ttl_sec: int = Field(default=604800, alias="AUTH_REMEMBER_SESSION_TTL_SEC")
|
||
auth_password_reset_key: str | None = Field(default="x2ws-reset-2026", alias="AUTH_PASSWORD_RESET_KEY")
|
||
|
||
|
||
settings = Settings()
|