"""Configuration settings for the API""" import os from pathlib import Path from dotenv import load_dotenv import logging logger = logging.getLogger(__name__) # Load .env variables load_dotenv() # ============ DIRECTORIES ============ API_DIR = Path(__file__).parent PROJECT_ROOT = API_DIR # config.py is in the project root, so API_DIR is the project root # ============ HUGGING FACE MODELS ============ HUGGINGFACE_API_KEY = os.getenv("HUGGINGFACE_API_KEY", "") HUGGINGFACE_STANCE_MODEL_ID = os.getenv("HUGGINGFACE_STANCE_MODEL_ID") HUGGINGFACE_LABEL_MODEL_ID = os.getenv("HUGGINGFACE_LABEL_MODEL_ID") HUGGINGFACE_GENERATE_MODEL_ID = os.getenv("HUGGINGFACE_GENERATE_MODEL_ID") # Use Hugging Face model ID instead of local path STANCE_MODEL_ID = HUGGINGFACE_STANCE_MODEL_ID LABEL_MODEL_ID = HUGGINGFACE_LABEL_MODEL_ID GENERATE_MODEL_ID = HUGGINGFACE_GENERATE_MODEL_ID # ============ GROQ MODELS ============ GROQ_API_KEY = os.getenv("GROQ_API_KEY", "") # ============ GOOGLE MODELS ============ GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY", "") # **Speech-to-Text** GROQ_STT_MODEL = "whisper-large-v3-turbo" # **Text-to-Speech** GROQ_TTS_MODEL = "playai-tts" GROQ_TTS_VOICE = "Aaliyah-PlayAI" GROQ_TTS_FORMAT = "wav" # **Chat Model** GROQ_CHAT_MODEL = "llama3-70b-8192" # **Topic Extraction Model** GROQ_TOPIC_MODEL = "llama-3.3-70b-versatile" # Latest production model, fallback: "llama3-70b-8192" # ============ SUPABASE ============ SUPABASE_URL = os.getenv("SUPABASE_URL", "") SUPABASE_KEY = os.getenv("SUPABASE_KEY", "") # ============ API META ============ API_TITLE = "NLP Debater - Voice Chatbot" API_DESCRIPTION = "NLP stance detection, KPA, and Groq STT/TTS chatbot" API_VERSION = "2.0.0" # ============ SERVER ============ HOST = os.getenv("HOST", "0.0.0.0") PORT = int(os.getenv("PORT", 7860)) RELOAD = os.getenv("RELOAD", "false").lower() == "true" # ============ CORS ============ CORS_ORIGINS = ["*"] CORS_CREDENTIALS = True CORS_METHODS = ["*"] CORS_HEADERS = ["*"] # ============ AUDIO SETTINGS ============ MAX_AUDIO_SIZE = 10 * 1024 * 1024 # 10MB AUDIO_SAMPLE_RATE = 16000 AUDIO_DURATION_LIMIT = 120 # seconds ALLOWED_AUDIO_TYPES = { "audio/wav", "audio/x-wav", "audio/mpeg", "audio/mp3", "audio/mp4", "audio/m4a" } # ============ MODEL PRELOADING ============ PRELOAD_MODELS_ON_STARTUP = True LOAD_STANCE_MODEL = True LOAD_KPA_MODEL = True LOAD_STT_MODEL = False # Groq STT = no preload LOAD_CHATBOT_MODEL = False # Groq Chat = no preload LOAD_TTS_MODEL = False # Groq TTS = no preload logger.info("="*60) logger.info("✓ Configuration loaded successfully") logger.info(f" HF Stance Model : {HUGGINGFACE_STANCE_MODEL_ID}") logger.info(f" HF Label Model : {HUGGINGFACE_LABEL_MODEL_ID}") logger.info(f" GROQ STT Model : {GROQ_STT_MODEL}") logger.info(f" GROQ TTS Model : {GROQ_TTS_MODEL}") logger.info(f" GROQ Chat Model : {GROQ_CHAT_MODEL}") logger.info(f" GROQ Topic Model: {GROQ_TOPIC_MODEL}") logger.info(f" Google API Key : {'✓ Configured' if GOOGLE_API_KEY else '✗ Not configured'}") logger.info(f" Supabase URL : {'✓ Configured' if SUPABASE_URL else '✗ Not configured'}") logger.info("="*60)