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!')                       // 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 は 'ready' | 'submitted' | 'streaming' | 'error' のいずれかです。isLoading は submitted または streaming の間 true になります。失敗すると 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プロバイダーのインスタンス(必須)
modelstringモデル ID(必須)
idstringチャット ID。ストレージのキーにもなる
systemMaybeRefOrGetter<string>システムプロンプト。リクエストのたびに読み直される
initialMessagesUIMessage[]初期の履歴
bodyMaybeRef<Record<string, unknown>>リクエストごとにマージされる追加のプロバイダーオプション
providerOptionsRecord<string, unknown>固定のプロバイダーオプション(maxTokens など)
toolsToolDefinition[]利用可能なツール
onToolCall(call) => unknownツール呼び出しを実行する
maxToolRoundtripsnumber1 メッセージあたりのツールのラウンド数の上限(デフォルト 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?) => voidinput.value を送信する
regenerate() => Promise<void>最後のアシスタントメッセージを破棄して再実行する
stop() => void現在のストリームを中断する
setMessages(msgs | fn) => void履歴を置き換える([] でストレージをクリア)
addToolResult({ toolCallId, result }) => voidツールの結果を手動で渡す
clearError() => voidエラー状態をリセットする

MIT ライセンスの下で公開されています。