Rag-api / app /config.py
Kaave19's picture
Deploy FastAPI RAG Space
60d8fe7 verified
Raw
History Blame Contribute Delete
1.44 kB
from functools import lru_cache
from pathlib import Path
from pydantic import Field, field_validator
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
hf_api_key: str | None = Field(default=None, alias="HF_API_KEY")
embedding_model: str = Field(
default="sentence-transformers/all-MiniLM-L6-v2", alias="EMBEDDING_MODEL"
)
generation_model: str = Field(
default="meta-llama/Llama-3.2-1B-Instruct", alias="GENERATION_MODEL"
)
chunk_size: int = Field(default=512, alias="CHUNK_SIZE", gt=0)
chunk_overlap: int = Field(default=64, alias="CHUNK_OVERLAP", ge=0)
top_k_default: int = Field(default=5, alias="TOP_K_DEFAULT", gt=0)
data_dir: Path = Field(default=Path("data"), alias="DATA_DIR")
max_upload_mb: int = Field(default=10, alias="MAX_UPLOAD_MB", gt=0)
hf_timeout_seconds: int = Field(default=60, alias="HF_TIMEOUT_SECONDS", gt=0)
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
@field_validator("chunk_overlap")
@classmethod
def overlap_must_be_smaller_than_size(cls, value: int, info) -> int:
chunk_size = info.data.get("chunk_size")
if chunk_size is not None and value >= chunk_size:
raise ValueError("CHUNK_OVERLAP must be smaller than CHUNK_SIZE")
return value
@lru_cache
def get_settings() -> Settings:
return Settings()