show chat run errors as agent messages (#887)
This commit is contained in:
@@ -567,6 +567,10 @@ export const useChatStore = defineStore('chat', () => {
|
||||
setPendingApproval({ ...e, session_id: sessionId } as RunEvent)
|
||||
} else if (e.event === 'approval.resolved') {
|
||||
clearPendingApproval({ ...e, session_id: sessionId } as RunEvent)
|
||||
} else if (e.event === 'run.failed') {
|
||||
addAgentErrorMessage(sessionId, e.error)
|
||||
serverWorking.value.delete(sessionId)
|
||||
queueLengths.value.delete(sessionId)
|
||||
} else if (e.event === 'tool.started') {
|
||||
const msgs = getSessionMsgs(sessionId)
|
||||
const toolCallId = e.tool_call_id as string | undefined
|
||||
@@ -692,6 +696,29 @@ export const useChatStore = defineStore('chat', () => {
|
||||
}
|
||||
}
|
||||
|
||||
function addAgentErrorMessage(sessionId: string, error?: string | null) {
|
||||
const content = error ? `Error: ${error}` : 'Run failed'
|
||||
const msgs = getSessionMsgs(sessionId)
|
||||
const last = msgs[msgs.length - 1]
|
||||
if (last?.isStreaming) {
|
||||
updateMessage(sessionId, last.id, {
|
||||
role: 'assistant',
|
||||
content,
|
||||
isStreaming: false,
|
||||
systemType: 'error',
|
||||
})
|
||||
return
|
||||
}
|
||||
if (last?.role === 'assistant' && last.systemType === 'error' && last.content === content) return
|
||||
addMessage(sessionId, {
|
||||
id: uid(),
|
||||
role: 'assistant',
|
||||
content,
|
||||
timestamp: Date.now(),
|
||||
systemType: 'error',
|
||||
})
|
||||
}
|
||||
|
||||
function handleSessionCommandEvent(evt: RunEvent) {
|
||||
const sid = evt.session_id
|
||||
if (!sid) return
|
||||
@@ -1319,22 +1346,8 @@ export const useChatStore = defineStore('chat', () => {
|
||||
}
|
||||
|
||||
case 'run.failed': {
|
||||
addAgentErrorMessage(sid, evt.error)
|
||||
const msgs = getSessionMsgs(sid)
|
||||
const lastErr = msgs[msgs.length - 1]
|
||||
if (lastErr?.isStreaming) {
|
||||
updateMessage(sid, lastErr.id, {
|
||||
isStreaming: false,
|
||||
content: evt.error ? `Error: ${evt.error}` : 'Run failed',
|
||||
role: 'system',
|
||||
})
|
||||
} else {
|
||||
addMessage(sid, {
|
||||
id: uid(),
|
||||
role: 'system',
|
||||
content: evt.error ? `Error: ${evt.error}` : 'Run failed',
|
||||
timestamp: Date.now(),
|
||||
})
|
||||
}
|
||||
msgs.forEach((m, i) => {
|
||||
if (m.role === 'tool' && m.toolStatus === 'running') {
|
||||
msgs[i] = { ...m, toolStatus: 'error' }
|
||||
@@ -1371,20 +1384,14 @@ export const useChatStore = defineStore('chat', () => {
|
||||
// onError
|
||||
(err) => {
|
||||
console.warn('Socket.IO run stream error:', err.message)
|
||||
addAgentErrorMessage(sid, err.message)
|
||||
const msgs = getSessionMsgs(sid)
|
||||
const last = msgs[msgs.length - 1]
|
||||
if (last?.isStreaming) {
|
||||
updateMessage(sid, last.id, { isStreaming: false })
|
||||
}
|
||||
msgs.forEach((m, i) => {
|
||||
if (m.role === 'tool' && m.toolStatus === 'running') {
|
||||
msgs[i] = { ...m, toolStatus: 'done' }
|
||||
msgs[i] = { ...m, toolStatus: 'error' }
|
||||
}
|
||||
})
|
||||
cleanup()
|
||||
if (sid === activeSessionId.value) {
|
||||
void refreshActiveSession()
|
||||
}
|
||||
},
|
||||
undefined,
|
||||
)
|
||||
@@ -1756,22 +1763,8 @@ export const useChatStore = defineStore('chat', () => {
|
||||
} else {
|
||||
queueLengths.value.delete(sid)
|
||||
}
|
||||
addAgentErrorMessage(sid, evt.error)
|
||||
const msgs = getSessionMsgs(sid)
|
||||
const lastErr = msgs[msgs.length - 1]
|
||||
if (lastErr?.isStreaming) {
|
||||
updateMessage(sid, lastErr.id, {
|
||||
isStreaming: false,
|
||||
content: evt.error ? `Error: ${evt.error}` : 'Run failed',
|
||||
role: 'system',
|
||||
})
|
||||
} else {
|
||||
addMessage(sid, {
|
||||
id: uid(),
|
||||
role: 'system',
|
||||
content: evt.error ? `Error: ${evt.error}` : 'Run failed',
|
||||
timestamp: Date.now(),
|
||||
})
|
||||
}
|
||||
msgs.forEach((m, i) => {
|
||||
if (m.role === 'tool' && m.toolStatus === 'running') {
|
||||
msgs[i] = { ...m, toolStatus: 'error' }
|
||||
|
||||
Reference in New Issue
Block a user