ryanxely's picture
KPI extraction
9b0ce22
Raw
History Blame Contribute Delete
1.84 kB
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()
@router.post("/", response_model=ChatResponse)
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