Skip to content

useAutopilotConversation

A thin composable over useAutopilotStore that exposes message-focused refs and filtered lists. Use it when you are building UI that only cares about the conversation, not the connection status or bar UI.

ts
import { useAutopilotConversation } from '@llmor/autopilot-vue';

const {
  messages,
  visibleMessages,
  userMessages,
  assistantMessages,
  systemMessages,
  streamingMessage,
  isStreaming,
  hasMessages,
  lastUserMessage,
  lastAssistantMessage,
  conversationSummary,
  // methods
  addMessage,
  updateMessage,
  clearMessages,
  refreshConversation,
  getMessagesByRole,
  getMessagesByCreator,
} = useAutopilotConversation();

Reactive properties

NameTypeWhat it gives you
messagesRef<ConversationMessage[]>the raw store list
visibleMessagesComputedRef<ConversationMessage[]>filtered + merged list — what you render
userMessagesComputedRef<ConversationMessage[]>only role === 'user'
assistantMessagesComputedRef<ConversationMessage[]>only role === 'assistant'
systemMessagesComputedRef<ConversationMessage[]>only role === 'system'
streamingMessageRef<ConversationMessage | null>currently-streaming partial message
isStreamingRef<boolean>
hasMessagesComputedRef<boolean>
hasStreamingMessageComputedRef<boolean>
lastUserMessageComputedRef<ConversationMessage | null>
lastAssistantMessageComputedRef<ConversationMessage | null>
conversationRef<Conversation | null>
hasConversationComputedRef<boolean>
messageCountComputedRef<number>
conversationSummaryComputedRef<{ messageCount, userCount, assistantCount, lastUpdate }>quick stats

Methods

All passthroughs to the store:

ts
addMessage(message: ConversationMessage): void;
updateMessage(index: number, message: ConversationMessage): void;
updateMessageByRole(role: string, creator: string, message: ConversationMessage): void;
clearMessages(): void;
refreshConversation(): Promise<void>;
getMessagesByRole(role: string): ConversationMessage[];
getMessagesByCreator(creator: string): ConversationMessage[];

Example

vue
<script setup lang="ts">
import { useAutopilotConversation } from '@llmor/autopilot-vue';

const { visibleMessages, isStreaming, lastUserMessage } = useAutopilotConversation();
</script>

<template>
  <header>
    <em v-if="isStreaming">Assistant is replying…</em>
    <em v-else-if="lastUserMessage">Last asked: {{ lastUserMessage.message }}</em>
  </header>
  <ul>
    <li v-for="(msg, i) in visibleMessages" :key="i">{{ msg.message }}</li>
  </ul>
</template>