""" Central configuration for the University Admissions RAG Chatbot. All parameters are environment-variable-driven with sensible defaults. """ import os from dataclasses import dataclass, field from dotenv import load_dotenv load_dotenv() @dataclass class ModelConfig: model_id: str = "ibm-granite/granite-4.1-3b-instruct" max_new_tokens: int = 512 temperature: float = 0.3 top_p: float = 0.9 repetition_penalty: float = 1.15 do_sample: bool = True device_map: str = "auto" torch_dtype: str = "auto" # resolved at runtime @dataclass class EmbeddingConfig: model_name: str = "sentence-transformers/all-MiniLM-L6-v2" batch_size: int = 64 normalize_embeddings: bool = True @dataclass class ChunkingConfig: chunk_size: int = 600 chunk_overlap: int = 80 separators: list = field(default_factory=lambda: ["\n\n", "\n", ". ", " ", ""]) @dataclass class RetrievalConfig: top_k: int = 4 score_threshold: float = 0.0 # cosine similarity lower-bound (FAISS L2 inverse) index_path: str = "faiss_index" index_file: str = "faiss_index/index.faiss" metadata_file: str = "faiss_index/metadata.pkl" @dataclass class AppConfig: title: str = "🎓 University Admissions Assistant" description: str = ( "Ask me anything about admissions requirements, programs, fees, " "scholarships, deadlines, and more. Powered by IBM Granite 4.1 3B Instruct." ) max_file_size_mb: int = 20 allowed_extensions: tuple = (".pdf", ".docx", ".txt") data_dir: str = "data" log_dir: str = "logs" max_history_turns: int = 6 # pairs kept in context @dataclass class Config: model: ModelConfig = field(default_factory=ModelConfig) embedding: EmbeddingConfig = field(default_factory=EmbeddingConfig) chunking: ChunkingConfig = field(default_factory=ChunkingConfig) retrieval: RetrievalConfig = field(default_factory=RetrievalConfig) app: AppConfig = field(default_factory=AppConfig) @property def hf_token(self) -> str | None: return os.environ.get("HF_TOKEN") def validate(self) -> None: if not self.hf_token: raise EnvironmentError( "HF_TOKEN environment variable is not set. " "Export it or add it to your .env file." ) # Singleton cfg = Config()