Yassine Mhirsi
refactor: Update file path handling in TopicSimilarityService for improved error reporting and ensure absolute paths for topic and embeddings cache files
e97ac87
| """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" | |
| # ============ 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" 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) | |