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 += "

" + formatted_diagnosis.get("reply", "") response.diseases_info = formatted_diagnosis.get("diseases_info", []) response.recommendations = formatted_diagnosis.get("recommendations", "") return response