- 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
54 lines
1.7 KiB
Python
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()
|