Le chat, c’est tout ce qui se trouve entre vos utilisateurs et un modèle. Créez une NuiChatSession avec une fonction respond, et <nui-chat> fait le reste : il affiche la réponse en Markdown au fil du streaming, la suit vers le bas jusqu’à ce que l’utilisateur remonte, et transforme le bouton d’envoi en bouton d’arrêt pendant qu’elle arrive.

respond renvoie du texte, une promesse, une async function* ou un Observable : toute API convient. Au-delà du texte, une réponse peut porter le raisonnement du modèle, ses appels d’outils (dessinés par vos templates) et les sources utilisées. nuiEventStream lit les server-sent events que diffusent la plupart des API de modèles.

Rien ne se perd : une réponse relancée ou une question modifiée devient une nouvelle version à côté de l’ancienne, et la conversation garde chaque branche. Les lecteurs d’écran annoncent chaque réponse une fois complète, pas mot à mot.

Un assistant

Des suggestions lancent la conversation. Les réponses arrivent en Markdown au fil du streaming ; arrêtez-les, relancez-les, notez-les ou modifiez votre question. attach accepte les fichiers choisis, collés ou déposés.

Raisonnement, outils et sources

Des deltas ajoutent à la réponse le raisonnement du modèle, les appels d’outils et les sources. nuiChatTool dessine l’outil météo sous forme de carte ; les autres outils se replient avec leur entrée et leur sortie.

Streaming depuis un serveur

nuiEventStream lit un flux d’événements façon OpenAI, et une NuiChatError affiche son message. all() enregistre la conversation, versions comprises.