"""Configuration management using Pydantic Settings.""" from pathlib import Path from pydantic_settings import BaseSettings from pydantic import Field class Settings(BaseSettings): """Application settings with environment variable overrides.""" # OpenRouter openrouter_api_key: str = Field(default="", env="OPENROUTER_API_KEY") openrouter_model: str = Field( default="stepfun/step-3.5-flash:free", env="OPENROUTER_MODEL" ) # Discord discord_bot_token: str = Field(default="", env="DISCORD_BOT_TOKEN") discord_guild_id: str | None = Field(default=None, env="DISCORD_GUILD_ID") # Gitea gitea_token: str = Field(default="", env="GITEA_TOKEN") gitea_owner: str = Field(default="cal", env="GITEA_OWNER") gitea_repo: str = Field(default="strat-chatbot", env="GITEA_REPO") gitea_base_url: str = Field( default="https://git.manticorum.com/api/v1", env="GITEA_BASE_URL" ) # Paths data_dir: Path = Field(default=Path("./data"), env="DATA_DIR") rules_dir: Path = Field(default=Path("./data/rules"), env="RULES_DIR") chroma_dir: Path = Field(default=Path("./data/chroma"), env="CHROMA_DIR") # Database db_url: str = Field( default="sqlite+aiosqlite:///./data/conversations.db", env="DB_URL" ) # Conversation state TTL (seconds) conversation_ttl: int = Field(default=1800, env="CONVERSATION_TTL") # Vector search top_k_rules: int = Field(default=10, env="TOP_K_RULES") embedding_model: str = Field( default="sentence-transformers/all-MiniLM-L6-v2", env="EMBEDDING_MODEL" ) class Config: env_file = ".env" env_file_encoding = "utf-8" settings = Settings()