Skip to content

useChat ​

Реактивный стриминговый многоходовый чат.

ts
import { useChat } from 'vue-llm'

const {
  messages, input, status, error, isLoading,
  sendMessage, handleSubmit, regenerate, stop, setMessages, addToolResult, clearError, isRestored,
} = useChat({ provider: ai, model: 'gpt-4o' })

Отправка сообщений ​

ts
await sendMessage('Hello!')                       // явно заданный текст
await sendMessage()                               // берёт input.value и очищает его
await sendMessage({ text: 'What is this?', files }) // с вложениями
handleSubmit(event)                               // хелпер для отправки формы

Статус ​

status принимает значения 'ready' | 'submitted' | 'streaming' | 'error'. isLoading равен true в состояниях submitted и streaming. При сбое в error оказывается Error, а status становится 'error'; вызовите clearError(), чтобы сбросить состояние.

vue
<p v-if="status === 'submitted'">Thinking…</p>
<p v-if="error">{{ error.message }} <button @click="regenerate">Retry</button></p>

Рендеринг частей ​

vue
<template v-for="(part, i) in msg.parts" :key="i">
  <p v-if="part.type === 'text'">{{ part.text }}</p>
  <details v-else-if="part.type === 'reasoning'"><summary>Reasoning</summary>{{ part.text }}</details>
  <img v-else-if="part.type === 'file' && part.mediaType.startsWith('image/')" :src="part.url">
  <code v-else-if="part.type === 'tool-call'">{{ part.toolName }} → {{ part.state }}</code>
</template>

Опции ​

ОпцияТипОписание
providerLLMProviderЭкземпляр провайдера (обязательна)
modelstringID модели (обязательна)
idstringID чата — он же ключ в хранилище
systemMaybeRefOrGetter<string>Системный промпт, перечитывается при каждом запросе
initialMessagesUIMessage[]Начальная история
bodyMaybeRef<Record<string, unknown>>Дополнительные опции провайдера, подмешиваются в каждый запрос
providerOptionsRecord<string, unknown>Статические опции провайдера (например, maxTokens)
toolsToolDefinition[]Доступные инструменты
onToolCall(call) => unknownВыполняет вызовы инструментов
maxToolRoundtripsnumberМаксимум раундов инструментов на сообщение (по умолчанию 5)
storageChatStorageСохранение и восстановление сообщений
onFinish(message, { finishReason, usage }) => voidВызывается после каждого ответа
onError(error) => voidОшибки потока и хранилища

Возвращаемые значения ​

СвойствоТипОписание
messagesRef<UIMessage[]>История чата
inputRef<string>Привязывается через v-model
statusRef<ChatStatus>Статус запроса
errorRef<Error | undefined>Последняя ошибка
isLoadingRef<boolean>Идёт запрос
isRestoredRef<boolean>false, пока загружается асинхронное хранилище
sendMessage(input?) => Promise<void>Отправляет текст и/или файлы
handleSubmit(event?) => voidОтправляет input.value
regenerate() => Promise<void>Удаляет последнее сообщение ассистента и запускает генерацию заново
stop() => voidПрерывает текущий поток
setMessages(msgs | fn) => voidЗаменяет историю ([] очищает хранилище)
addToolResult({ toolCallId, result }) => voidПередаёт результат инструмента вручную
clearError() => voidСбрасывает состояние ошибки

Распространяется по лицензии MIT.