Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion docs/demos/examples/Assistant.vue
Original file line number Diff line number Diff line change
Expand Up @@ -448,10 +448,20 @@ const { messageManager, state, createConversation, updateTitle, switchConversati
// preventDefault()
console.log(data)
},
onLoaded: (conversations) => {
console.log(conversations)
},
},
})

const { messages, messageState, inputMessage, sendMessage, abortRequest } = messageManager
const { messages, messageState, inputMessage, sendMessage: _sendMessage, abortRequest } = messageManager

const sendMessage = (...args: Parameters<typeof _sendMessage>) => {
if (!state.currentId) {
createConversation()
}
_sendMessage(...args)
}

const handlePromptItemClick = (ev: unknown, item: { description?: string }) => {
sendMessage(item.description)
Expand Down
17 changes: 13 additions & 4 deletions docs/src/tools/conversation.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,19 @@ interface UseConversationOptions {
useStreamByDefault?: boolean
/** 错误消息模板 */
errorMessage?: string
events?: UseMessageOptions['events']
/** 事件回调 */
events?: UseConversationEvents
}
```

### 事件类型

```typescript
type UseConversationEvents = UseMessageOptions['events'] & {
/** 会话加载完成回调 */
onLoaded?: (conversations: Conversation[]) => void
}
```

### 返回值

Expand All @@ -41,15 +50,15 @@ interface UseConversationReturn {
/** 消息管理 */
messageManager: UseMessageReturn;
/** 创建新会话 */
createConversation: (title?: string, metadata?: Record<string, any>) => string;
createConversation: (title?: string, metadata?: Record<string, unknown>) => string;
/** 切换会话 */
switchConversation: (id: string) => void;
/** 删除会话 */
deleteConversation: (id: string) => void;
/** 更新会话标题 */
updateTitle: (id: string, title: string) => void;
/** 更新会话元数据 */
updateMetadata: (id: string, metadata: Record<string, any>) => void;
updateMetadata: (id: string, metadata: Record<string, unknown>) => void;
/** 保存会话 */
saveConversations: () => Promise<void>;
/** 加载会话 */
Expand Down Expand Up @@ -88,7 +97,7 @@ interface Conversation {
/** 更新时间 */
updatedAt: number;
/** 自定义元数据 */
metadata?: Record<string, any>;
metadata?: Record<string, unknown>;
/** 消息 */
messages: ChatMessage[];
}
Expand Down
22 changes: 20 additions & 2 deletions packages/kit/src/vue/conversation/useConversation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ export interface ConversationState {
loading: boolean
}

export type UseConversationEvents = UseMessageOptions['events'] & {
onLoaded?: (conversations: Conversation[]) => void
}

/**
* useConversation选项接口
*/
Expand All @@ -93,7 +97,8 @@ export interface UseConversationOptions {
useStreamByDefault?: boolean
/** 错误消息模板 */
errorMessage?: string
events?: UseMessageOptions['events']
/** 事件回调 */
events?: UseConversationEvents
}

/**
Expand Down Expand Up @@ -146,6 +151,7 @@ export function useConversation(options: UseConversationOptions): UseConversatio
allowEmpty = false,
useStreamByDefault = true,
errorMessage = '请求失败,请稍后重试',
events,
} = options

// 会话状态
Expand All @@ -155,13 +161,19 @@ export function useConversation(options: UseConversationOptions): UseConversatio
loading: false,
})

// 标记是否已经触发过 onLoaded 回调
let hasTriggeredOnLoaded = false

// 消息管理
const messageManager = useMessage({
client,
useStreamByDefault,
errorMessage,
initialMessages: [],
events: options.events,
events: {
onReceiveData: events?.onReceiveData,
onFinish: events?.onFinish,
},
})

// 监听消息变化,自动更新会话
Expand Down Expand Up @@ -303,6 +315,12 @@ export function useConversation(options: UseConversationOptions): UseConversatio
if (conversations.length > 0 && !state.currentId) {
switchConversation(conversations[0].id)
}

// 仅在第一次加载完成后触发 onLoaded 回调
if (!hasTriggeredOnLoaded && events?.onLoaded) {
hasTriggeredOnLoaded = true
events.onLoaded(conversations)
}
} catch (error) {
console.error('加载会话失败:', error)
} finally {
Expand Down