チャットは、ユーザーとモデルをつなぐ部分をすべて担います。respond 関数を指定して NuiChatSession を作成すれば、残りは <nui-chat> が引き受けます。応答を Markdown としてストリーミング表示し、ユーザーが上にスクロールするまでは末尾に追従し、受信中は送信ボタンを停止ボタンに切り替えます。

respond はテキスト、Promise、async function*、Observable のいずれかを返せるので、どんな API にも対応できます。応答にはテキストのほか、モデルの推論、ツール呼び出し(描画は独自のテンプレートで)、参照した出典を含められます。nuiEventStream は、多くのモデル API がストリーミングする Server-Sent Events を読み取ります。

何も失われません。再試行した応答や編集した質問は、元のものと並ぶ新しいバージョンになり、会話はすべての分岐を保持します。スクリーンリーダーは各応答を、1語ずつではなく完了してから読み上げます。

アシスタント

提案から会話を始められます。応答は Markdown でストリーミング表示され、停止、再試行、評価ができるほか、質問を編集することもできます。attach は、選択、貼り付け、ドロップしたファイルを受け取ります。

推論、ツール、出典

デルタが、モデルの推論、ツール呼び出し、出典を応答に追加します。nuiChatTool は天気ツールをカードとして描画し、ほかのツールは入力と出力とともに折りたたまれます。

サーバーからのストリーミング

nuiEventStream は OpenAI 形式のイベントストリームを読み取り、NuiChatError はそのメッセージを表示します。all() は会話をバージョンごとすべて保存します。