stochastic / config.py
Sonu Prasad
initial commit
822c114
import os
from pathlib import Path
from typing import Optional
class Config:
BASE_DIR: Path = Path(__file__).parent
DATA_DIR: Path = BASE_DIR / "data"
PAPERS_DIR: Path = DATA_DIR / "papers"
QDRANT_URL: Optional[str] = os.getenv("QDRANT_URL")
QDRANT_API_KEY: Optional[str] = os.getenv("QDRANT_API_KEY")
QDRANT_COLLECTION: str = os.getenv("QDRANT_COLLECTION", "documents")
OPENROUTER_API_KEY: Optional[str] = os.getenv("OPENROUTER_API_KEY")
OPENROUTER_MODEL: str = os.getenv("OPENROUTER_MODEL", "openai/gpt-4.1")
OPENROUTER_BASE_URL: str = "https://openrouter.ai/api/v1"
GEMINI_API_KEY: Optional[str] = os.getenv("GEMINI_API_KEY")
GEMINI_MODEL: str = os.getenv("GEMINI_MODEL", "gemini-1.5-flash")
EMBEDDING_MODEL: str = os.getenv("EMBEDDING_MODEL", "all-MiniLM-L6-v2")
TOP_K_CHUNKS: int = int(os.getenv("TOP_K_CHUNKS", "5"))
MAX_CONTEXT_TOKENS: int = int(os.getenv("MAX_CONTEXT_TOKENS", "4000"))
HOST: str = os.getenv("HOST", "0.0.0.0")
PORT: int = int(os.getenv("PORT", "7860"))
FRONTEND_URL: str = os.getenv("FRONTEND_URL", "https://stochast.netlify.app")
@classmethod
def ensure_directories(cls) -> None:
cls.PAPERS_DIR.mkdir(parents=True, exist_ok=True)
@classmethod
def validate(cls) -> list[str]:
warnings = []
if not cls.QDRANT_URL:
warnings.append("QDRANT_URL not set - Vector storage unavailable")
if not cls.QDRANT_API_KEY:
warnings.append("QDRANT_API_KEY not set - Vector storage unavailable")
if not cls.OPENROUTER_API_KEY and not cls.GEMINI_API_KEY:
warnings.append("No LLM API key configured. Q&A will not work.")
return warnings
config = Config()