Lorsqu'on intègre des API d'intelligence artificielle comme ChatGPT ou Gemini dans une application WinDev, il est parfois nécessaire de lire la réponse au fur et à mesure de sa réception (mode streaming). Cette approche améliore l'expérience utilisateur en affichant progressivement la réponse, sans attendre la fin de la génération.
La méthode consiste à utiliser la propriété ProcédureTrace de l'objet httpRequête. Cette propriété permet d'appeler une procédure personnalisée à chaque réception de donnée depuis le serveur.
Cette procédure analyse les données reçues en streaming :
PROCÉDURE TraceHttp(TypeInfo est entier, Data est un Buffer)
SELON TypeInfo
CAS httpTraceDonnéeRecue:
SI Data <> "" ALORS
d est JSON = ChaîneVersJSON(Remplace(Data, "data: ", ""))
SI PAS ErreurDétectée ALORS
SAI_Chat += d.candidates[1].content.parts[1].text
Multitâche(-1) // Pour rafraîchir l'affichage
SINON
STOP
FIN
FIN
AUTRE CAS:
// Autres informations de trace non traitées ici
FIN
Dans votre traitement principal :
Request est chaîne = `
{
"contents": [{
"parts": [{
"text": "écris moi une longue histoire sur la magie."
}]
}]
}
`
HttpR est un httpRequête
HttpR.URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=VOTRE_CLE_API"
HttpR.Entête["Content-Type"] = "application/json"
HttpR.Méthode = httpPost
HttpR.Contenu = Request
HttpR.ProcédureTrace = "TraceHttp"
cMaRéponse est un httpRéponse = HTTPEnvoie(HttpR)
SI ErreurDétectée ALORS
Erreur(ErreurInfo(errComplet))
SINON
// La réponse est déjà traitée au fur et à mesure
FIN
L'utilisation de la propriété ProcédureTrace dans WinDev est une méthode puissante pour lire les réponses des API en mode streaming. Cette technique peut être facilement adaptée à d'autres API proposant des flux SSE (Server-Sent Events) et améliorera significativement l'interactivité de vos applications.