Comment lire la réponse d’une API IA en streaming avec WinDev ?

Lire une réponse ChatGPT ou Gemini en streaming avec WinDev

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.

📈 Comment procéder ?

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.

🔍 Fonctionnement global

  1. Configurer la requête HTTP avec l'API cible.
  2. Définir la procédure de trace pour traiter les données reçues.
  3. Afficher les données reçues au fur et à mesure.

📝 Exemple d'implémentation

1. Création de la procédure de trace

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

2. Configuration et envoi de la requête

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

📊 Avantages de cette approche

  • Expérience utilisateur fluide : la réponse s'affiche progressivement.
  • Optimisation des performances : aucune attente de la réponse complète.
  • Contrôle précis sur le flux des données.

🔍 Conclusion

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.