O chat é tudo o que fica entre os seus usuários e um modelo. Crie uma NuiChatSession com uma função respond, e o <nui-chat> faz o resto: transmite a resposta em Markdown, acompanha o texto página abaixo até o usuário rolar para cima e, enquanto ela chega, transforma o botão de enviar em um botão de parar.

respond retorna texto, uma promise, uma async function* ou um Observable, então qualquer API serve. Além do texto, uma resposta pode trazer o raciocínio do modelo, as chamadas de ferramentas (desenhadas por templates seus) e as fontes usadas. nuiEventStream lê os server-sent events que a maioria das APIs de modelos transmite.

Nada se perde: uma resposta refeita ou uma pergunta editada vira uma nova versão ao lado da antiga, e a conversa guarda todos os ramos. Os leitores de tela anunciam cada resposta quando ela fica completa, não palavra por palavra.

Um assistente

Sugestões iniciam a conversa. As respostas chegam em streaming como Markdown; interrompa, refaça ou avalie cada uma, ou edite sua pergunta. attach aceita arquivos escolhidos, colados ou arrastados.

Raciocínio, ferramentas e fontes

Deltas adicionam à resposta o raciocínio do modelo, as chamadas de ferramentas e as fontes. nuiChatTool desenha a ferramenta de clima como um card; as outras ficam recolhidas, com a entrada e a saída.

Streaming de um servidor

nuiEventStream lê um stream de eventos no estilo da OpenAI, e um NuiChatError mostra a mensagem dele. all() salva a conversa, com versões e tudo.