import os from dotenv import load_dotenv load_dotenv() class Config: # DeepSeek API - PRIMARY (OpenAI-compatible) DEEPSEEK_API_KEY = os.getenv('DEEPSEEK_API_KEY', '') DEEPSEEK_BASE_URL = 'https://api.deepseek.com/v1' DEEPSEEK_MODEL = 'deepseek-chat' # DeepSeek V3 model # OpenRouter API - For OCR and fallback LLM OPENROUTER_API_KEY = os.getenv('OPENROUTER_API_KEY', '') OPENROUTER_BASE_URL = 'https://openrouter.ai/api/v1' # AI Models (OpenRouter fallback) MODEL_MAP = { 'gemma': 'google/gemma-3-4b-it:free', 'mistral': 'mistralai/mistral-small-3.1-24b-instruct:free', } # Use DeepSeek first, then OpenRouter models USE_DEEPSEEK = True # Set to False to use OpenRouter instead FALLBACK_ORDER = ['gemma', 'mistral'] # ChromaDB Cloud Configuration CHROMA_API_KEY = os.getenv('CHROMA_API_KEY', '') CHROMA_TENANT = os.getenv('CHROMA_TENANT', 'default_tenant') CHROMA_DATABASE = os.getenv('CHROMA_DATABASE', 'default_database') CHROMA_HOST = 'api.trychroma.com' # ChromaDB Cloud endpoint # JWT Configuration JWT_SECRET = os.getenv('JWT_SECRET', 'your-secret-key-change-in-production') JWT_EXPIRY_HOURS = 24 # Upload Configuration UPLOAD_FOLDER = os.path.join(os.path.dirname(__file__), 'uploads') MAX_CONTENT_LENGTH = 200 * 1024 * 1024 # 200MB max file size ALLOWED_EXTENSIONS = {'pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'txt', 'md', 'png', 'jpg', 'jpeg', 'gif', 'webp'} CHUNK_SIZE = 500 # Smaller chunks for higher precision with many documents CHUNK_OVERLAP = 150 # Good overlap to avoid losing info at boundaries TOP_K_RESULTS = 100 # High - comprehensive retrieval for 3000+ docs across buckets AI_TEMPERATURE = 0.0 # Zero temperature for maximum determinism and accuracy RELEVANCE_THRESHOLD = 3.0 # Higher threshold - include all potentially relevant MAX_CONVERSATION_HISTORY = 20 # Remember more conversation for pronoun context AI_MAX_TOKENS = 4096 # Maximum tokens for detailed responses AI_TIMEOUT = 90 # More time for complex multi-document queries