from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
import os
from dotenv import load_dotenv
@dataclass(frozen=True)
class Settings:
data_dir: Path
index_dir: Path
embed_model: str
chunk_size: int
chunk_overlap: int
top_k: int
use_faiss: bool
log_level: str
def get_settings() -> Settings:
load_dotenv()
data_dir = Path(os.getenv("DATA_DIR", "./data")).resolve()
index_dir = Path(os.getenv("INDEX_DIR", "./.index")).resolve()
embed_model = os.getenv("EMBED_MODEL", "sentence-transformers/all-MiniLM-L6-v2")
chunk_size = int(os.getenv("CHUNK_SIZE", "800"))
chunk_overlap = int(os.getenv("CHUNK_OVERLAP", "100"))
top_k = int(os.getenv("TOP_K", "5"))
use_faiss = os.getenv("USE_FAISS", "true").lower() == "true"
log_level = os.getenv("LOG_LEVEL", "INFO")
index_dir.mkdir(parents=True, exist_ok=True)
data_dir.mkdir(parents=True, exist_ok=True)
return Settings(
data_dir=data_dir,
index_dir=index_dir,
embed_model=embed_model,
chunk_size=chunk_size,
chunk_overlap=chunk_overlap,
top_k=top_k,
use_faiss=use_faiss,
log_level=log_level,
)