from pydantic_settings import BaseSettings from functools import lru_cache from typing import Optional class Settings(BaseSettings): DEBUG: bool = False APP_NAME: str = "IntegraRAG" QDRANT_COLLECTION: str = "docs" CustomLoaders: Optional[bool] = None QDRANT_TYPE: str = "docker" QDRANT_DOCKER_URL: str = "http://localhost:6333" QDRANT_API_KEY: Optional[str] = None CHUNK_SIZE: int = 1000 CHUNK_OVERLAP: Optional[int] = None CHUNK_METHOD: Optional[str] = None GRADE_WEBHOOK_URL: Optional[str] = None REDIS_HOST: str = "localhost" REDIS_PORT: int = 6379 REDIS_PASSWORD: Optional[str] = None CALLBACK_URL: Optional[str] = None # ---------- BACKENDS ---------- GENERATION_BACKEND: str = "OLLAMA" EMBEDDING_BACKEND: str = "OLLAMA" # ---------- API KEYS ---------- OPENAI_API_KEY: Optional[str] = None OPENAI_API_URL: Optional[str] = None COHERE_API_KEY: Optional[str] = None OLLAMA_URL: str = "http://localhost:11434" OLLAMA_API_KEY: Optional[str] = None MISTRAL_API_KEY: Optional[str] = None GROQ_API_KEY: Optional[str] = None OPENROUTER_API_KEY: Optional[str] = None OPENROUTER_SITE_URL: str = "http://localhost" OPENROUTER_APP_NAME: str = "IntegraRAG" OPENROUTER_SEARCH_MODEL: str = "perplexity/sonar-online" HF_API_KEY: Optional[str] = None DEEPSEEK_API_KEY: Optional[str] = None GEMINI_API_KEY: Optional[str] = None # ---------- MODELS ---------- GENERATION_MODEL_ID: str = "deepseek-v3.1:671b-cloud" EMBEDDING_MODEL_ID: str = "embeddinggemma:latest" EMBEDDING_MODEL_SIZE: int = 768 INPUT_DAFAULT_MAX_CHARACTERS: Optional[int] = None GENERATION_DAFAULT_MAX_TOKENS: Optional[int] = None GENERATION_DAFAULT_TEMPERATURE: Optional[float] = None class Config: env_file = ".env" @lru_cache def get_settings(): return Settings()