duongtruongbinh's picture
Add chatbot functionality and UI enhancements
26d4216
"""Application configuration for Hugging Face Spaces.
Defaults live in code; a small set of values can be overridden via env vars.
"""
from __future__ import annotations
from functools import lru_cache
from pathlib import Path
from typing import Literal
from pydantic import Field, model_validator
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
model_config = SettingsConfigDict(
env_file=".env",
env_prefix="RAG_",
extra="ignore",
)
data_dir: Path = Path("data")
storage_dir: Path = Path("storage/qdrant")
qdrant_collection: str = "rag_chunks"
chunk_size: int = Field(default=1500, ge=500)
chunk_overlap: int = Field(default=200, ge=0)
top_k: int = Field(default=5, ge=1, le=64)
llm_provider: Literal["gemini"] = "gemini"
llm_model: str = "gemini-flash-lite-latest"
llm_temperature: float = Field(default=0.1, ge=0.0, le=2.0)
llm_max_new_tokens: int = Field(default=10000, ge=1, le=20000)
embedding_provider: Literal["local"] = "local"
embedding_model: str = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
gemini_api_key: str | None = Field(default=None, validation_alias="GEMINI_API_KEY")
summarize_batch_size: int = Field(default=10, ge=1)
summarize_retrieval_k: int = Field(default=12, ge=1, le=128)
generation_retrieval_k: int = Field(default=16, ge=1, le=128)
quiz_default_count: int = Field(default=8, ge=1, le=50)
flashcards_default_count: int = Field(default=15, ge=1, le=100)
@model_validator(mode="after")
def validate_config(self) -> "Settings":
if self.chunk_overlap >= self.chunk_size:
raise ValueError("chunk_overlap must be smaller than chunk_size.")
return self
@lru_cache(maxsize=1)
def get_settings() -> Settings:
return Settings()
settings = get_settings()