Импорт

import-chat.ts
import { NuiChat, NuiChatSession, nuiEventStream } from '@needless-ui/angular/chat';

NuiChat

Диалог и поле ввода вместе.

Селектор
nui-chat
NuiChat: Свойства
ИмяТипПо умолчаниюОписание
sessionInputNuiChatSessionОтображаемый диалог.
assistantInputstring'Assistant'Имя ассистента в заголовках для скринридеров.
headingLevelInputnumber3Уровень заголовка сообщения (его видят только скринридеры). Заголовки в ответах — на уровень глубже.
announceInput'reply' | 'notice' | 'off''reply'Что озвучат скринридеры, когда ответ готов: весь ответ, короткое уведомление или ничего.
imagesInputbooleanfalseПоказывает изображения в ответах. Иначе — ссылки с их текстом.
valueДвустороннийstring''Набираемый текст.
placeholderInputstringТекст в пустом поле.
suggestionsInputstring[][]Промпты для отправки одним кликом — до первого сообщения.
sendOnInput'enter' | 'mod+enter''enter'Отправка по Enter или по Ctrl либо ⌘ + Enter.
disabledInputbooleanfalseЗапрещает отправку.
attachInputbooleanfalseПринимает файлы: выбранные, вставленные или перетащенные.
acceptInputstring''Допустимые типы файлов, как у <input type="file">.
maxFilesInputnumber10Сколько файлов можно приложить к сообщению.
maxSizeInputnumber20_000_000Максимальный размер файла в байтах.
labelsInputNuiChatLabelsInputВсе показываемые и озвучиваемые тексты — для перевода.
ratedOutput{ message, rating }Передаёт оценённый ответ с оценкой или null, если оценку отменили.
focusМетод() => voidПереводит фокус на текстовое поле.
scrollToEndМетод(behavior?) => voidПрокручивает к последнему сообщению и следует за ним.

NuiChatSession

Диалог без DOM. Создайте его в компоненте с параметрами respond, messages и id.

NuiChatSession: Свойства
ИмяТипПо умолчаниюОписание
respondСвойство(request) => NuiChatReplyВаша функция: пишет ответ на request.messages и останавливается при отмене request.signal.
messagesСвойствоSignal<NuiChatMessage[]>Диалог на экране.
allСвойствоSignal<NuiChatMessage[]>Все сообщения всех версий — чтобы сохранить и передать обратно в messages.
busyСвойствоSignal<boolean>Идёт ли ответ.
sendМетод(text, files?) => Promise<void>Отправляет сообщение и запрашивает ответ.
stopМетод() => voidОстанавливает ответ, сохраняя уже написанное.
retryМетод(message?) => Promise<void>Запрашивает ответ заново. Новый ответ — версия рядом со старым.
editМетод(message, text) => Promise<void>Отправляет новую версию одного из сообщений пользователя.
versionsМетод(message) => NuiChatMessage[]Все версии сообщения, начиная с самой старой.
showМетод(message) => voidПереключает диалог на эту версию.
rateМетод(message, 'up' | 'down' | null) => voidСохраняет оценку ответа.
remove, load, clearМетод(…) => voidУдаляет сообщение и всё после него, заменяет диалог или начинает заново.

NuiChatMessage

Одно сообщение. Сообщения с одинаковым parent — версии друг друга.

NuiChatMessage: Свойства
ИмяТипПо умолчаниюОписание
id, parentСвойствоstring, string | nullКлюч сообщения и того, за которым оно идёт.
roleСвойство'user' | 'assistant'Кто его написал.
textСвойствоstringMarkdown от ассистента, обычный текст от пользователя.
statusСвойство'pending' | 'streaming' | 'done' | 'stopped' | 'error'Стадия ответа: от ожидания до готовности.
reasoningСвойствоstringРассуждения модели перед ответом.
toolsСвойствоNuiChatTool[]Вызванные инструменты с состоянием, входными и выходными данными.
sourcesСвойство{ url, title? }[]Использованные страницы.
attachmentsСвойствоNuiChatAttachment[]Отправленные с ним файлы.
ratingСвойство'up' | 'down' | nullОценка пользователя.
dataСвойствоunknownЛюбые другие данные, например название модели.

NuiChatToolTemplate

Рисует вызов инструмента, например карточку погоды. В контексте — вызов и его сообщение.

Селектор
ng-template[nuiChatTool]
NuiChatToolTemplate: Свойства
ИмяТипПо умолчаниюОписание
nuiChatToolInputstringИмя инструмента. Без него шаблон рисует все вызовы, не указанные в других шаблонах.

NuiChatThread

Только диалог — для своей раскладки. Принимает входные свойства nui-chat, относящиеся к диалогу.

Селектор
nui-chat-thread

NuiChatComposer

Только поле ввода. Принимает входные свойства nui-chat, относящиеся к вводу.

Селектор
nui-chat-composer

NuiServerEvent

Что nuiEventStream выдаёт на каждое событие. nuiTextStream читает обычный текст, а nuiJsonStream — строки JSON; все три принимают ответ fetch.

NuiServerEvent: Свойства
ИмяТипПо умолчаниюОписание
eventСвойствоstring'message'Имя события.
dataСвойствоstringСклеенные строки данных.
idСвойствоstringПоследний id, присланный потоком.

NuiChatError

Выбросьте её в respond, чтобы показать её сообщение. При других ошибках сообщение общее: внутренние детали не утекают.