El chat es todo lo que hay entre tus usuarios y un modelo. Crea una NuiChatSession con una función respond y <nui-chat> hace el resto: transmite la respuesta en Markdown, la sigue página abajo hasta que el usuario se desplaza hacia arriba y, mientras llega, convierte el botón de enviar en uno de detener.
respond devuelve texto, una promesa, una async function* o un Observable, así que sirve cualquier API. Además de texto, una respuesta puede llevar el razonamiento del modelo, sus llamadas a herramientas (dibujadas con tus plantillas) y las fuentes que usó. nuiEventStream lee los server-sent events que emiten la mayoría de las API de modelos.
No se pierde nada: una respuesta reintentada o una pregunta editada pasa a ser una nueva versión junto a la anterior, y la conversación conserva todas las ramas. Los lectores de pantalla anuncian cada respuesta cuando está completa, no palabra por palabra.
Un asistente
Las sugerencias inician la conversación. Las respuestas llegan en streaming como Markdown; detenlas, reinténtalas, valóralas o edita tu pregunta. attach acepta archivos elegidos, pegados o arrastrados.
Razonamiento, herramientas y fuentes
Los deltas añaden a la respuesta el razonamiento del modelo, las llamadas a herramientas y las fuentes. nuiChatTool dibuja la herramienta del clima como una tarjeta; las demás se pliegan con su entrada y su salida.
Streaming desde un servidor
nuiEventStream lee un flujo de eventos al estilo de OpenAI, y un NuiChatError muestra su mensaje. all() guarda la conversación, versiones incluidas.