from functools import lru_cache from os import getenv DEFAULT_MODEL_NAME = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2" DEFAULT_DIMENSION = 384 def _read_int(name: str, default: int, minimum: int, maximum: int) -> int: raw_value = getenv(name) if raw_value is None or raw_value.strip() == "": return default try: value = int(raw_value) except ValueError as exc: raise RuntimeError(f"{name} must be an integer") from exc if value < minimum or value > maximum: raise RuntimeError(f"{name} must be between {minimum} and {maximum}") return value class Settings: def __init__(self) -> None: self.model_name = getenv("MODEL_NAME", DEFAULT_MODEL_NAME) self.api_key = getenv("EMBEDDING_API_KEY") self.max_text_length = _read_int("MAX_TEXT_LENGTH", 3000, 1, 100_000) self.max_batch_size = _read_int("MAX_BATCH_SIZE", 64, 1, 512) self.dimension = DEFAULT_DIMENSION @lru_cache def get_settings() -> Settings: return Settings()