from __future__ import annotations import os from dataclasses import dataclass @dataclass(slots=True) class Settings: app_name: str = "Gorich RAG API" site_url: str = os.getenv("GORICH_SITE_URL", "https://gorych34.ru/") chroma_path: str = os.getenv("CHROMA_PATH", "/data/chroma") huggingface_cache_dir: str = os.getenv("HUGGINGFACE_CACHE_DIR", "/data/huggingface") knowledge_collection: str = os.getenv("KNOWLEDGE_COLLECTION", "gorich_knowledge") menu_collection: str = os.getenv("MENU_COLLECTION", "gorich_menu") menu_snapshot_path: str = os.getenv("MENU_SNAPSHOT_PATH", "/data/menu/gorich_menu.json") openrouter_api_key: str = os.getenv("OPENROUTER_API_KEY", "") openrouter_model: str = os.getenv("OPENROUTER_MODEL", "mistralai/mistral-medium-3-5") openrouter_base_url: str = os.getenv("OPENROUTER_BASE_URL", "https://openrouter.ai/api/v1") public_app_url: str = os.getenv("PUBLIC_APP_URL", "http://localhost:8000") public_app_name: str = os.getenv("PUBLIC_APP_NAME", "Gorich Bot RAG") embedding_model: str = os.getenv( "EMBEDDING_MODEL", "sergeyzh/rubert-mini-frida", ) embedding_query_prefix: str = os.getenv("EMBEDDING_QUERY_PREFIX", "search_query: ") embedding_document_prefix: str = os.getenv( "EMBEDDING_DOCUMENT_PREFIX", "search_document: ", ) embedding_max_length: int = int(os.getenv("EMBEDDING_MAX_LENGTH", "512")) embedding_batch_size: int = int(os.getenv("EMBEDDING_BATCH_SIZE", "32")) request_timeout: float = float(os.getenv("REQUEST_TIMEOUT_SECONDS", "60")) top_k: int = int(os.getenv("RAG_TOP_K", "5")) index_on_startup: bool = os.getenv("INDEX_ON_STARTUP", "true").lower() == "true" settings = Settings()