"""Small configuration helpers for the RAG prototype."""
from __future__ import annotations
import os
from pathlib import Path
PROJECT_ROOT = Path(__file__).resolve().parents[1]
CORPUS_DIR = PROJECT_ROOT / "data" / "corpus"
INDEX_DIR = PROJECT_ROOT / "data" / "index"
EVAL_FILE = PROJECT_ROOT / "data" / "eval" / "questions.jsonl"
EVAL_RESULTS_DIR = PROJECT_ROOT / "data" / "eval" / "results"
DEFAULT_EMBEDDING_MODEL = "sentence-transformers/all-MiniLM-L6-v2"
DEFAULT_OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1"
DEFAULT_GENERATION_MODEL = "openai/gpt-5-mini"
DEFAULT_JUDGE_MODEL = "openai/gpt-5-mini"
DEFAULT_TOP_K = 7
def load_env_file() -> None:
path = PROJECT_ROOT / ".env"
if not path.exists():
return
for raw_line in path.read_text(encoding="utf-8").splitlines():
line = raw_line.strip()
if not line:
continue
if line.startswith("#"):
continue
if "=" not in line:
continue
key, value = line.split("=", 1)
key = key.strip()
value = value.strip().strip('"').strip("'")
if key and key not in os.environ:
os.environ[key] = value
def get_embedding_model_name() -> str:
return os.getenv("EMBEDDING_MODEL", DEFAULT_EMBEDDING_MODEL)
def get_openrouter_api_key() -> str | None:
return os.getenv("OPENROUTER_API_KEY")
def get_openrouter_base_url() -> str:
return os.getenv("OPENROUTER_BASE_URL", DEFAULT_OPENROUTER_BASE_URL)
def get_generation_model() -> str:
return os.getenv("GENERATION_MODEL", DEFAULT_GENERATION_MODEL)
def get_judge_model() -> str:
return os.getenv("JUDGE_MODEL", DEFAULT_JUDGE_MODEL)
def get_top_k() -> int:
raw_value = os.getenv("TOP_K")
if not raw_value:
return DEFAULT_TOP_K
try:
return int(raw_value)
except ValueError:
return DEFAULT_TOP_K