Spaces:
Sleeping
Sleeping
| from fastapi import APIRouter | |
| from api.services import model_interface | |
| from api.services import llm_service | |
| from api.models.schemas import ChatRequest, ChatResponse | |
| router = APIRouter() | |
| async def reply(request: ChatRequest): | |
| """ | |
| Endpoint de chat principal. Workflow: | |
| 1. Envoie l'historique + nouveau message à Zephyr (via llm_service) et récupère la réponse, les quick_replies et les symptômes extraits | |
| 2. Si Zephyr a identifié des symptômes, on les envoie a notre modèle entrainé (via model_interface) pour obtenir une liste de diagnostics probables | |
| 3. On retourne la réponse de Zephyr + diagnostics au frontend pour affichage | |
| """ | |
| history = [m.model_dump() for m in request.history] | |
| llm_result = await llm_service.chat(history, request.message) | |
| print(f"LLM result: {llm_result}") # Debug: voir la reponse brute de Zephyr | |
| response = ChatResponse( | |
| lang=llm_result["lang"], | |
| reply=llm_result["reply"] or "Désolé, je n'ai pas compris. Pouvez-vous reformuler ?", | |
| quick_replies=llm_result["quick_replies"] or [], | |
| symptoms=llm_result["symptoms"] or [] | |
| ) | |
| if llm_result["symptoms"]: | |
| diagnosis = model_interface.get_mock_diagnosis(llm_result["symptoms"], request.patient_info.age, request.patient_info.sex, request.patient_info.medical_history, request.patient_info.geolocation) | |
| response.diagnosis = diagnosis.model_dump() | |
| formatted_diagnosis = await llm_service.format_diagnosis(response.diagnosis, llm_result["lang"]) | |
| response.reply += "<br><br>" + formatted_diagnosis.get("reply", "") | |
| response.diseases_info = formatted_diagnosis.get("diseases_info", []) | |
| response.recommendations = formatted_diagnosis.get("recommendations", "") | |
| return response | |