File size: 1,836 Bytes
7ddb64a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b0ce22
7ddb64a
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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