strat-chatbot/app/config.py
Cal Corum c42fea66ba feat: initial chatbot implementation with FastAPI, ChromaDB, Discord bot, and Gitea integration
- Add vector store with sentence-transformers for semantic search
- FastAPI backend with /chat and /health endpoints
- Conversation state persistence via SQLite
- OpenRouter integration with structured JSON responses
- Discord bot with /ask slash command and reply-based follow-ups
- Automated Gitea issue creation for unanswered questions
- Docker support with docker-compose for easy deployment
- Example rule file and ingestion script
- Comprehensive documentation in README
2026-03-08 15:19:26 -05:00

54 lines
1.7 KiB
Python

"""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()