Der Chat ist alles zwischen deinen Nutzern und einem Modell. Erstelle eine NuiChatSession mit einer respond-Funktion, und <nui-chat> erledigt den Rest: Es streamt die Antwort als Markdown, folgt ihr nach unten, bis man nach oben scrollt, und macht aus dem Senden-Button einen Stopp-Button, solange sie eintrifft.

respond gibt Text, ein Promise, eine async function* oder ein Observable zurück, also passt jede API. Neben Text kann eine Antwort das Reasoning des Modells, seine Tool-Aufrufe (gezeichnet von deinen Templates) und die genutzten Quellen enthalten. nuiEventStream liest die Server-Sent Events, die die meisten Modell-APIs streamen.

Nichts geht verloren: Eine wiederholte Antwort oder eine bearbeitete Frage wird zu einer neuen Version neben der alten, und die Unterhaltung behält jeden Zweig. Screenreader sagen jede Antwort erst an, wenn sie vollständig ist, nicht Wort für Wort.

Ein Assistent

Vorschläge eröffnen die Unterhaltung. Antworten werden als Markdown gestreamt; du kannst sie stoppen, wiederholen, bewerten oder deine Frage bearbeiten. attach nimmt ausgewählte, eingefügte oder hineingezogene Dateien an.

Reasoning, Tools und Quellen

Deltas ergänzen die Antwort um Reasoning, Tool-Aufrufe und Quellen des Modells. nuiChatTool zeichnet das Wetter-Tool als Karte; andere Tools werden mit Ein- und Ausgabe eingeklappt.

Streaming vom Server

nuiEventStream liest einen Event-Stream im OpenAI-Stil, und ein NuiChatError zeigt seine Meldung an. all() speichert die Unterhaltung samt aller Versionen.