from __future__ import annotations import os from dataclasses import dataclass from pathlib import Path from dotenv import load_dotenv ROOT_DIR = Path(__file__).resolve().parents[2] load_dotenv(ROOT_DIR / ".env") @dataclass(frozen=True) class Settings: root_dir: Path = ROOT_DIR chroma_dir: Path = ROOT_DIR / "data" / "chroma" processed_dir: Path = ROOT_DIR / "data" / "processed" uploads_dir: Path = ROOT_DIR / "data" / "uploads" collection_name: str = os.getenv("CHROMA_COLLECTION", "class12_math_rag") ollama_base_url: str = os.getenv("OLLAMA_BASE_URL", "http://127.0.0.1:11434") llm_model: str = os.getenv("OLLAMA_LLM_MODEL", "qwen2.5:7b-instruct") embed_model: str = os.getenv("OLLAMA_EMBED_MODEL", "nomic-embed-text") chunk_size: int = 1200 chunk_overlap: int = 200 top_k: int = int(os.getenv("TOP_K", "5")) request_timeout: int = 120 def get_settings() -> Settings: return Settings()