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
Files changed (1) hide show
  1. main.py +39 -3
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",