malek-messaoudii
commited on
Commit
·
0e19c41
1
Parent(s):
1ce17ff
feat: Integrate Topic Extraction service into API lifecycle, enhancing initialization and health check reporting. Update routes and logging for improved visibility of topic extraction functionality.
Browse files
main.py
CHANGED
|
@@ -55,10 +55,12 @@ def cleanup_on_exit():
|
|
| 55 |
stance_model_manager = None
|
| 56 |
kpa_model_manager = None
|
| 57 |
generate_model_manager = None
|
|
|
|
| 58 |
try:
|
| 59 |
from services.stance_model_manager import stance_model_manager
|
| 60 |
from services.label_model_manager import kpa_model_manager
|
| 61 |
from services.generate_model_manager import generate_model_manager
|
|
|
|
| 62 |
logger.info("✓ Gestionnaires de modèles importés")
|
| 63 |
except ImportError as e:
|
| 64 |
logger.warning(f"⚠ Impossible d'importer les gestionnaires de modèles: {e}")
|
|
@@ -103,6 +105,18 @@ async def lifespan(app: FastAPI):
|
|
| 103 |
logger.error(f"✗ Failed to load Generation model: {str(e)}")
|
| 104 |
logger.error("⚠️ Generation endpoints will not work!")
|
| 105 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 106 |
logger.info("✓ API startup complete")
|
| 107 |
logger.info("https://nlp-debater-project-fastapi-backend-models.hf.space/docs")
|
| 108 |
|
|
@@ -149,7 +163,11 @@ async def lifespan(app: FastAPI):
|
|
| 149 |
logger.info(f" STT Model: {GROQ_STT_MODEL}")
|
| 150 |
logger.info(f" TTS Model: {GROQ_TTS_MODEL}")
|
| 151 |
logger.info(f" Chat Model: {GROQ_CHAT_MODEL}")
|
|
|
|
|
|
|
| 152 |
logger.info(f" MCP: {'Activé' if MCP_ENABLED else 'Désactivé'}")
|
|
|
|
|
|
|
| 153 |
logger.info("="*60)
|
| 154 |
|
| 155 |
yield
|
|
@@ -262,12 +280,21 @@ async def health():
|
|
| 262 |
"stt": GROQ_STT_MODEL if GROQ_API_KEY else "disabled",
|
| 263 |
"tts": GROQ_TTS_MODEL if GROQ_API_KEY else "disabled",
|
| 264 |
"chat": GROQ_CHAT_MODEL if GROQ_API_KEY else "disabled",
|
|
|
|
|
|
|
| 265 |
"stance_model": "loaded" if (stance_model_manager and hasattr(stance_model_manager, 'model_loaded') and stance_model_manager.model_loaded) else "not loaded",
|
| 266 |
"kpa_model": "loaded" if (kpa_model_manager and hasattr(kpa_model_manager, 'model_loaded') and kpa_model_manager.model_loaded) else "not loaded",
|
|
|
|
| 267 |
"mcp": "enabled" if MCP_ENABLED else "disabled"
|
| 268 |
},
|
| 269 |
"endpoints": {
|
| 270 |
-
"mcp": "/api/v1/mcp" if MCP_ENABLED else "disabled"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 271 |
}
|
| 272 |
}
|
| 273 |
return health_status
|
|
@@ -285,13 +312,22 @@ async def not_found_handler(request, exc):
|
|
| 285 |
"GET /health": "Health check",
|
| 286 |
"POST /api/v1/stt/": "Speech to text",
|
| 287 |
"POST /api/v1/tts/": "Text to speech",
|
| 288 |
-
"POST /voice-chat/voice": "Voice chat"
|
|
|
|
|
|
|
| 289 |
}
|
| 290 |
if MCP_ENABLED:
|
| 291 |
endpoints.update({
|
| 292 |
"GET /api/v1/mcp/health": "Health check MCP",
|
| 293 |
"GET /api/v1/mcp/tools": "Liste outils MCP",
|
| 294 |
-
"POST /api/v1/mcp/tools/call": "Appel d'outil MCP"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 295 |
})
|
| 296 |
return {
|
| 297 |
"error": "Not Found",
|
|
|
|
| 55 |
stance_model_manager = None
|
| 56 |
kpa_model_manager = None
|
| 57 |
generate_model_manager = None
|
| 58 |
+
topic_service = None
|
| 59 |
try:
|
| 60 |
from services.stance_model_manager import stance_model_manager
|
| 61 |
from services.label_model_manager import kpa_model_manager
|
| 62 |
from services.generate_model_manager import generate_model_manager
|
| 63 |
+
from services.topic_service import topic_service
|
| 64 |
logger.info("✓ Gestionnaires de modèles importés")
|
| 65 |
except ImportError as e:
|
| 66 |
logger.warning(f"⚠ Impossible d'importer les gestionnaires de modèles: {e}")
|
|
|
|
| 105 |
logger.error(f"✗ Failed to load Generation model: {str(e)}")
|
| 106 |
logger.error("⚠️ Generation endpoints will not work!")
|
| 107 |
|
| 108 |
+
# Initialize Topic Extraction service (uses Groq LLM)
|
| 109 |
+
if topic_service and GROQ_API_KEY:
|
| 110 |
+
try:
|
| 111 |
+
logger.info("Initializing Topic Extraction service (Groq LLM)...")
|
| 112 |
+
topic_service.initialize()
|
| 113 |
+
logger.info("✓ Topic Extraction service initialized")
|
| 114 |
+
except Exception as e:
|
| 115 |
+
logger.error(f"✗ Failed to initialize Topic Extraction service: {str(e)}")
|
| 116 |
+
logger.error("⚠️ Topic extraction endpoints will not work!")
|
| 117 |
+
elif not GROQ_API_KEY:
|
| 118 |
+
logger.warning("⚠ GROQ_API_KEY not configured. Topic extraction service will not be available.")
|
| 119 |
+
|
| 120 |
logger.info("✓ API startup complete")
|
| 121 |
logger.info("https://nlp-debater-project-fastapi-backend-models.hf.space/docs")
|
| 122 |
|
|
|
|
| 163 |
logger.info(f" STT Model: {GROQ_STT_MODEL}")
|
| 164 |
logger.info(f" TTS Model: {GROQ_TTS_MODEL}")
|
| 165 |
logger.info(f" Chat Model: {GROQ_CHAT_MODEL}")
|
| 166 |
+
logger.info(f" Topic Extraction: {'Initialized' if (topic_service and topic_service.initialized) else 'Not initialized'}")
|
| 167 |
+
logger.info(f" Voice Chat: {'Available' if GROQ_API_KEY else 'Disabled (no GROQ_API_KEY)'}")
|
| 168 |
logger.info(f" MCP: {'Activé' if MCP_ENABLED else 'Désactivé'}")
|
| 169 |
+
if MCP_ENABLED:
|
| 170 |
+
logger.info(f" - Tools: detect_stance, match_keypoint_argument, transcribe_audio, generate_speech, generate_argument, extract_topic, voice_chat, health_check")
|
| 171 |
logger.info("="*60)
|
| 172 |
|
| 173 |
yield
|
|
|
|
| 280 |
"stt": GROQ_STT_MODEL if GROQ_API_KEY else "disabled",
|
| 281 |
"tts": GROQ_TTS_MODEL if GROQ_API_KEY else "disabled",
|
| 282 |
"chat": GROQ_CHAT_MODEL if GROQ_API_KEY else "disabled",
|
| 283 |
+
"topic_extraction": "initialized" if (topic_service and hasattr(topic_service, 'initialized') and topic_service.initialized) else "not initialized",
|
| 284 |
+
"voice_chat": "available" if GROQ_API_KEY else "disabled",
|
| 285 |
"stance_model": "loaded" if (stance_model_manager and hasattr(stance_model_manager, 'model_loaded') and stance_model_manager.model_loaded) else "not loaded",
|
| 286 |
"kpa_model": "loaded" if (kpa_model_manager and hasattr(kpa_model_manager, 'model_loaded') and kpa_model_manager.model_loaded) else "not loaded",
|
| 287 |
+
"generate_model": "loaded" if (generate_model_manager and hasattr(generate_model_manager, 'model_loaded') and generate_model_manager.model_loaded) else "not loaded",
|
| 288 |
"mcp": "enabled" if MCP_ENABLED else "disabled"
|
| 289 |
},
|
| 290 |
"endpoints": {
|
| 291 |
+
"mcp": "/api/v1/mcp" if MCP_ENABLED else "disabled",
|
| 292 |
+
"topic_extraction": "/api/v1/topic/extract",
|
| 293 |
+
"voice_chat": "/voice-chat/voice or /voice-chat/text",
|
| 294 |
+
"mcp_tools": {
|
| 295 |
+
"extract_topic": "/api/v1/mcp/tools/extract-topic",
|
| 296 |
+
"voice_chat": "/api/v1/mcp/tools/voice-chat"
|
| 297 |
+
} if MCP_ENABLED else "disabled"
|
| 298 |
}
|
| 299 |
}
|
| 300 |
return health_status
|
|
|
|
| 312 |
"GET /health": "Health check",
|
| 313 |
"POST /api/v1/stt/": "Speech to text",
|
| 314 |
"POST /api/v1/tts/": "Text to speech",
|
| 315 |
+
"POST /voice-chat/voice": "Voice chat (audio input)",
|
| 316 |
+
"POST /voice-chat/text": "Voice chat (text input)",
|
| 317 |
+
"POST /api/v1/topic/extract": "Extract topic from text"
|
| 318 |
}
|
| 319 |
if MCP_ENABLED:
|
| 320 |
endpoints.update({
|
| 321 |
"GET /api/v1/mcp/health": "Health check MCP",
|
| 322 |
"GET /api/v1/mcp/tools": "Liste outils MCP",
|
| 323 |
+
"POST /api/v1/mcp/tools/call": "Appel d'outil MCP",
|
| 324 |
+
"POST /api/v1/mcp/tools/extract-topic": "Extract topic (MCP tool)",
|
| 325 |
+
"POST /api/v1/mcp/tools/voice-chat": "Voice chat (MCP tool)",
|
| 326 |
+
"POST /api/v1/mcp/tools/detect-stance": "Detect stance (MCP tool)",
|
| 327 |
+
"POST /api/v1/mcp/tools/match-keypoint": "Match keypoint (MCP tool)",
|
| 328 |
+
"POST /api/v1/mcp/tools/transcribe-audio": "Transcribe audio (MCP tool)",
|
| 329 |
+
"POST /api/v1/mcp/tools/generate-speech": "Generate speech (MCP tool)",
|
| 330 |
+
"POST /api/v1/mcp/tools/generate-argument": "Generate argument (MCP tool)"
|
| 331 |
})
|
| 332 |
return {
|
| 333 |
"error": "Not Found",
|