"""Runtime configuration for the KORA backend.""" from __future__ import annotations from functools import lru_cache from pathlib import Path from pydantic import Field from pydantic_settings import BaseSettings, SettingsConfigDict BASE_DIR = Path(__file__).resolve().parents[2] class Settings(BaseSettings): """Environment-driven settings with safe defaults.""" model_config = SettingsConfigDict( env_file=str(BASE_DIR / ".env"), env_file_encoding="utf-8", extra="ignore", ) app_name: str = Field(default="KORA AI Backend", alias="APP_NAME") app_env: str = Field(default="production", alias="APP_ENV") log_level: str = Field(default="INFO", alias="LOG_LEVEL") model_name: str = Field(default="microsoft/Phi-3-mini-4k-instruct", alias="MODEL_NAME") trust_remote_code: bool = Field(default=True, alias="TRUST_REMOTE_CODE") low_cpu_mem_usage: bool = Field(default=True, alias="LOW_CPU_MEM_USAGE") max_input_tokens: int = Field(default=3072, alias="MAX_INPUT_TOKENS") torch_num_threads: int = Field(default=0, alias="TORCH_NUM_THREADS") torch_num_interop_threads: int = Field(default=0, alias="TORCH_NUM_INTEROP_THREADS") default_temperature: float = Field(default=0.7, alias="DEFAULT_TEMPERATURE") default_top_p: float = Field(default=0.9, alias="DEFAULT_TOP_P") default_max_tokens: int = Field(default=512, alias="DEFAULT_MAX_TOKENS") system_prompt_file: Path = Field(default=BASE_DIR / "prompts" / "system_prompt.txt") knowledge_file: Path = Field(default=BASE_DIR / "knowledge" / "kontyra.md") @lru_cache def get_settings() -> Settings: """Return a cached settings instance.""" return Settings() settings = get_settings()