""" src/config.py — Central configuration loaded from environment variables. For local development: create a .env file (see .env.example). For Hugging Face Spaces: set these under Space Settings → Secrets/Variables. """ import os from pathlib import Path # ─── Load local .env if present (dev-mode only) ────────────────────────────── # override=True ensures .env values always win over any inherited empty env vars. # We try two locations: project root (relative to this file) and current working # directory, so the app works whether launched from the repo root or src/. try: from dotenv import load_dotenv _env_candidates = [ Path(__file__).parent.parent / ".env", # /.env Path.cwd() / ".env", # wherever Streamlit was launched ] for _env_path in _env_candidates: if _env_path.exists(): load_dotenv(_env_path, override=True) break except ImportError: pass # python-dotenv is optional; HF Spaces inject vars directly # ─── LLM / Ollama settings ──────────────────────────────────────────────────── # MODEL_PROVIDER is always "ollama" — no other provider is supported. MODEL_PROVIDER: str = "ollama" # Defaults mirror the values in .env so the app works without an explicit # HF Secret if the .env file is present locally. MODEL_NAME: str = os.getenv("MODEL_NAME", "gpt-oss:120b") _raw_base_url: str = os.getenv("MODEL_BASE_URL", "https://ollama.com/v1") or "https://ollama.com/v1" MODEL_BASE_URL: str = _raw_base_url.rstrip("/") CHAT_COMPLETION_URL: str = MODEL_BASE_URL + "/chat/completions" OLLAMA_API_KEY: str = os.getenv("OLLAMA_API_KEY", "") MAX_TOKENS: int = int(os.getenv("MAX_TOKENS", "1024")) TEMPERATURE: float = float(os.getenv("TEMPERATURE", "0.7")) REQUEST_TIMEOUT: int = int(os.getenv("REQUEST_TIMEOUT", "60")) # ─── App display ────────────────────────────────────────────────────────────── APP_TITLE: str = "PharmGPT" APP_SUBTITLE: str = "AI-Powered Pharmaceutical & Medical Assistant" # ─── Storage paths ──────────────────────────────────────────────────────────── _project_root = Path(__file__).parent.parent DATA_DIR: Path = Path(os.getenv("DATA_DIR", str(_project_root / "data"))) LOGS_DIR: Path = Path(os.getenv("LOGS_DIR", str(_project_root / "logs"))) DB_PATH: Path = DATA_DIR / "pharmgpt.db" LOG_PATH: Path = LOGS_DIR / "pharmgpt.log" # Create directories on import so every module can rely on them existing DATA_DIR.mkdir(parents=True, exist_ok=True) LOGS_DIR.mkdir(parents=True, exist_ok=True)