import os from pathlib import Path from dotenv import load_dotenv from pydantic import BaseModel load_dotenv() class Settings(BaseModel): VECTOR_DB_PATH: Path = Path(os.getenv("VECTOR_DB_PATH", "./storage/vector_db")) EMBEDDING_MODEL: str = os.getenv("EMBEDDING_MODEL", "all-MiniLM-L6-v2") CHUNK_SIZE: int = int(os.getenv("CHUNK_SIZE", "512")) CHUNK_OVERLAP: int = int(os.getenv("CHUNK_OVERLAP", "50")) TOP_K: int = int(os.getenv("TOP_K", "5")) GROQ_API_KEY: str = os.getenv("GROQ_API_KEY", "") SERPER_API_KEY: str = os.getenv("SERPER_API_KEY", "") TAVILY_API_KEY: str = os.getenv("TAVILY_API_KEY", "") ALLOWED_MODES: list = ["web", "pdf", "hybrid", "restricted"] UPLOAD_DIR: Path = Path(os.path.abspath("./storage/uploads")) MAX_FILE_SIZE: int = 10 * 1024 * 1024 ALLOWED_FILE_TYPES: list = ["application/pdf"] GROQ_MODEL: str = os.getenv("GROQ_MODEL", "llama-3.3-70b-versatile") GROQ_MODEL_PRIMARY: str = os.getenv("GROQ_MODEL_PRIMARY", "llama-3.1-8b-instant") GROQ_MODEL_SECONDARY: str = os.getenv("GROQ_MODEL_SECONDARY", "mixtral-8x7b-32768") GROQ_MODEL_FALLBACK: str = os.getenv( "GROQ_MODEL_FALLBACK", "llama-3.3-70b-versatile" ) MAX_TOKENS: int = int(os.getenv("MAX_TOKENS", "2048")) TEMPERATURE: float = float(os.getenv("TEMPERATURE", "0.1")) WEB_SEARCH_MAX_RESULTS: int = int(os.getenv("WEB_SEARCH_MAX_RESULTS", "5")) SIMILARITY_THRESHOLD: float = float(os.getenv("SIMILARITY_THRESHOLD", "0.7")) CORS_ORIGINS: list = [ "http://localhost:3000", "http://localhost:5173", "https://yuvis-web-based-rag.hf.space", "https://*.hf.space", ] settings = Settings()