Files
WeChat-AI/huggingface/wechat-ai-tools/config.py
T

55 lines
1.9 KiB
Python

"""Runtime configuration for wechat-ai-tools (HF / Docker)."""
from __future__ import annotations
import os
from functools import lru_cache
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",
populate_by_name=True,
)
tools_api_key: str = Field(default="", alias="TOOLS_API_KEY")
upstream_llm_base_url: str = Field(
default="https://api.openai.com/v1",
alias="UPSTREAM_LLM_BASE_URL",
)
upstream_llm_api_key: str = Field(default="", alias="UPSTREAM_LLM_API_KEY")
upstream_llm_model: str = Field(default="gpt-4o-mini", alias="UPSTREAM_LLM_MODEL")
allow_request_upstream: bool = Field(default=True, alias="ALLOW_REQUEST_UPSTREAM")
upstream_deny_private: bool = Field(default=True, alias="UPSTREAM_DENY_PRIVATE")
upstream_timeout_ms: int = Field(default=60_000, alias="UPSTREAM_TIMEOUT_MS")
max_body_bytes: int = Field(default=1_048_576, alias="MAX_BODY_BYTES")
search_provider: str = Field(default="ddg", alias="SEARCH_PROVIDER")
searxng_url: str = Field(default="", alias="SEARXNG_URL")
tavily_api_key: str = Field(default="", alias="TAVILY_API_KEY")
search_timeout_ms: int = Field(default=15_000, alias="SEARCH_TIMEOUT_MS")
search_max_results: int = Field(default=8, alias="SEARCH_MAX_RESULTS")
host: str = Field(default="0.0.0.0", alias="HOST")
port: int = Field(default=7860, alias="PORT")
log_level: str = Field(default="info", alias="LOG_LEVEL")
@lru_cache
def get_settings() -> Settings:
return Settings()
def env_bool(name: str, default: bool = False) -> bool:
raw = os.environ.get(name)
if raw is None:
return default
return raw.strip().lower() in {"1", "true", "yes", "on"}