Study-with-ChampAI / config /settings.py
SolusOps's picture
feat: config package
4040c6b verified
Raw
History Blame Contribute Delete
1.81 kB
from __future__ import annotations
import os
from dataclasses import dataclass
try:
from dotenv import load_dotenv
load_dotenv()
except ImportError:
pass
@dataclass(frozen=True)
class Settings:
# Model IDs β€” each maps to a sponsor prize
ocr_model_id: str # MiniCPM-V 4.6 β†’ πŸ† Best MiniCPM Build
reasoning_model_id: str # Nemotron 3 Nano 4B β†’ πŸ† Nemotron Hardware Prize
multilingual_model_id: str # Tiny Aya 3.3B β†’ multilingual demo
speech_model_id: str # Whisper large-v3 β†’ voice mode
# API keys β€” two providers only
hf_api_key: str # HuggingFace (MiniCPM, Aya, Whisper)
featherless_api_key: str # Featherless (Nemotron)
# Generation params
max_new_tokens: int
temperature: float
# Storage
db_path: str
# Quiz config
questions_per_quest: int # regular questions per quest (boss always +1)
default_language: str
def load_settings() -> Settings:
return Settings(
ocr_model_id=os.getenv("OCR_MODEL_ID", "openbmb/MiniCPM-V-4_6"),
reasoning_model_id=os.getenv("REASONING_MODEL_ID", "nvidia/Nemotron-3-Nano-4B"),
multilingual_model_id=os.getenv("MULTILINGUAL_MODEL_ID", "CohereForAI/aya-23-35B"),
speech_model_id=os.getenv("SPEECH_MODEL_ID", "openai/whisper-large-v3"),
hf_api_key=os.getenv("HF_API_KEY", ""),
featherless_api_key=os.getenv("FEATHERLESS_API_KEY", ""),
max_new_tokens=int(os.getenv("MAX_NEW_TOKENS", "1024")),
temperature=float(os.getenv("TEMPERATURE", "0.3")),
db_path=os.getenv("DB_PATH", "studywithchampai.db"),
questions_per_quest=int(os.getenv("QUESTIONS_PER_QUEST", "3")),
default_language=os.getenv("DEFAULT_LANGUAGE", "en"),
)
SETTINGS = load_settings()