Skip to content

useChat ​

Chat multiturno reactivo y con 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' })

Enviar mensajes ​

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

Estado ​

status es 'ready' | 'submitted' | 'streaming' | 'error'. isLoading es true mientras está en submitted o streaming. Si algo falla, error contiene el Error y status pasa a 'error'; llama a clearError() para restablecerlo.

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

Renderizar las 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>

Opciones ​

OpciónTipoDescripción
providerLLMProviderInstancia del proveedor (obligatoria)
modelstringID del modelo (obligatorio)
idstringID del chat; también es la clave de almacenamiento
systemMaybeRefOrGetter<string>Prompt de sistema, se vuelve a leer en cada petición
initialMessagesUIMessage[]Historial inicial
bodyMaybeRef<Record<string, unknown>>Opciones extra del proveedor que se fusionan en cada petición
providerOptionsRecord<string, unknown>Opciones estáticas del proveedor (p. ej., maxTokens)
toolsToolDefinition[]Herramientas disponibles
onToolCall(call) => unknownEjecuta las llamadas a herramientas
maxToolRoundtripsnumberMáximo de rondas de herramientas por mensaje (por defecto 5)
storageChatStorageGuarda y restaura los mensajes
onFinish(message, { finishReason, usage }) => voidSe llama tras cada respuesta
onError(error) => voidErrores del stream y del almacenamiento

Valores devueltos ​

PropiedadTipoDescripción
messagesRef<UIMessage[]>Historial del chat
inputRef<string>Vincúlalo con v-model
statusRef<ChatStatus>Estado de la petición
errorRef<Error | undefined>Último error
isLoadingRef<boolean>Hay una petición en curso
isRestoredRef<boolean>false mientras carga el almacenamiento asíncrono
sendMessage(input?) => Promise<void>Envía texto y/o archivos
handleSubmit(event?) => voidEnvía input.value
regenerate() => Promise<void>Descarta el último mensaje del asistente y vuelve a ejecutar
stop() => voidCancela el stream actual
setMessages(msgs | fn) => voidReemplaza el historial ([] vacía el almacenamiento)
addToolResult({ toolCallId, result }) => voidProporciona manualmente el resultado de una herramienta
clearError() => voidRestablece el estado de error

Publicado bajo la licencia MIT.