fix(frontend): 完善Markdown与Chat事件渲染
This commit is contained in:
@@ -78,6 +78,38 @@ export const useChatStore = defineStore('chat', () => {
|
||||
}, {
|
||||
onEvent(event) {
|
||||
if (event.event === 'TextDelta') aiMsg.content += String(event.data.text ?? '')
|
||||
if (event.event === 'ThinkingDelta') aiMsg.thinking = `${aiMsg.thinking ?? ''}${String(event.data.text ?? '')}`
|
||||
if (event.event === 'ToolCallStart') {
|
||||
aiMsg.tool_calls?.push({
|
||||
tool_call_id: String(event.data.tool_call_id ?? ''),
|
||||
name: String(event.data.name ?? 'unknown'),
|
||||
parameters: (event.data.arguments ?? {}) as Record<string, unknown>,
|
||||
status: 'running',
|
||||
})
|
||||
}
|
||||
if (event.event === 'ToolCallDelta') {
|
||||
const call = aiMsg.tool_calls?.find((item) => item.tool_call_id === event.data.tool_call_id)
|
||||
if (call && event.data.arguments && typeof event.data.arguments === 'object') {
|
||||
Object.assign(call.parameters, event.data.arguments)
|
||||
}
|
||||
}
|
||||
if (event.event === 'ToolCallEnd') {
|
||||
const call = aiMsg.tool_calls?.find((item) => item.tool_call_id === event.data.tool_call_id)
|
||||
if (call) call.status = 'completed'
|
||||
}
|
||||
if (event.event === 'Usage') {
|
||||
const input = Number(event.data.input_tokens ?? 0)
|
||||
const output = Number(event.data.output_tokens ?? 0)
|
||||
aiMsg.usage = { input_tokens: input, output_tokens: output, total_tokens: input + output }
|
||||
}
|
||||
if (event.event === 'Citation') {
|
||||
aiMsg.citations?.push({
|
||||
note_id: String(event.data.note_id ?? ''), block_id: String(event.data.block_id ?? ''),
|
||||
file_path: String(event.data.file_path ?? ''),
|
||||
heading_path: Array.isArray(event.data.heading_path) ? event.data.heading_path.join(' / ') : String(event.data.heading_path ?? ''),
|
||||
content: String(event.data.content ?? event.data.snippet ?? ''),
|
||||
})
|
||||
}
|
||||
if (event.event === 'Error') aiMsg.content += `\n\n生成失败:${String(event.data.message ?? '未知错误')}`
|
||||
},
|
||||
onError(error) {
|
||||
@@ -86,6 +118,11 @@ export const useChatStore = defineStore('chat', () => {
|
||||
sseClient = null
|
||||
},
|
||||
onDone() {
|
||||
const conversation = conversations.value.find((item) => item.conversation_id === conversationId)
|
||||
if (conversation) {
|
||||
conversation.message_count = messages.value.length
|
||||
conversation.updated_at = new Date().toISOString()
|
||||
}
|
||||
isStreaming.value = false
|
||||
sseClient = null
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user