Skip to content

useChat ​

Chat multi-turn reativo e com streaming.

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' })

Enviando mensagens ​

ts
await sendMessage('Hello!')                       // explicit text
await sendMessage()                               // uses input.value and clears it
await sendMessage({ text: 'What is this?', files }) // with attachments
handleSubmit(event)                               // form submit helper

Status ​

status é 'ready' | 'submitted' | 'streaming' | 'error'. isLoading fica true enquanto o status é submitted ou streaming. Em caso de falha, error guarda o Error e status vira 'error'; chame clearError() para resetar.

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

Renderizando as partes ​

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>

Opções ​

OpçãoTipoDescrição
providerLLMProviderInstância do provedor (obrigatório)
modelstringID do modelo (obrigatório)
idstringID do chat — também é a chave no storage
systemMaybeRefOrGetter<string>System prompt, relido a cada requisição
initialMessagesUIMessage[]Histórico inicial
bodyMaybeRef<Record<string, unknown>>Opções extras do provedor mescladas em cada requisição
providerOptionsRecord<string, unknown>Opções estáticas do provedor (por exemplo, maxTokens)
toolsToolDefinition[]Ferramentas disponíveis
onToolCall(call) => unknownExecuta as chamadas de ferramentas
maxToolRoundtripsnumberMáximo de rodadas de ferramentas por mensagem (padrão 5)
storageChatStorageSalva e restaura as mensagens
onFinish(message, { finishReason, usage }) => voidChamado após cada resposta
onError(error) => voidErros de stream e de storage

Retorno ​

PropriedadeTipoDescrição
messagesRef<UIMessage[]>Histórico do chat
inputRef<string>Use com v-model
statusRef<ChatStatus>Status da requisição
errorRef<Error | undefined>Último erro
isLoadingRef<boolean>Requisição em andamento
isRestoredRef<boolean>false enquanto o storage assíncrono carrega
sendMessage(input?) => Promise<void>Envia texto e/ou arquivos
handleSubmit(event?) => voidEnvia input.value
regenerate() => Promise<void>Descarta a última mensagem do assistente e roda de novo
stop() => voidAborta o stream atual
setMessages(msgs | fn) => voidSubstitui o histórico ([] limpa o storage)
addToolResult({ toolCallId, result }) => voidFornece o resultado de uma ferramenta manualmente
clearError() => voidReseta o estado de erro

Distribuído sob a licença MIT.