Skip to content

Commit 19e7496

Browse files
committed
add tool result errors to message history
1 parent d411f34 commit 19e7496

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

backend/src/run-agent-step.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ export const runAgentStep = async (
338338
// Use the updated agent state from tool execution
339339
agentState = state.agentState as AgentState
340340

341-
let finalMessageHistoryWithToolResults = expireMessages(
341+
let finalMessageHistoryWithToolResults: Message[] = expireMessages(
342342
state.messages,
343343
'agentStep',
344344
)

backend/src/tools/stream-parser.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
} from '@codebuff/common/tools/constants'
77
import { buildArray } from '@codebuff/common/util/array'
88
import { generateCompactId } from '@codebuff/common/util/string'
9+
import { cloneDeep } from 'lodash'
910

1011
import { expireMessages } from '../util/messages'
1112
import { sendAction } from '../websockets/websocket-action'
@@ -17,7 +18,10 @@ import type { StreamChunk } from '../llm-apis/vercel-ai-sdk/ai-sdk'
1718
import type { AgentTemplate } from '../templates/types'
1819
import type { ToolName } from '@codebuff/common/tools/constants'
1920
import type { CodebuffToolCall } from '@codebuff/common/tools/list'
20-
import type { Message } from '@codebuff/common/types/messages/codebuff-message'
21+
import type {
22+
Message,
23+
ToolMessage,
24+
} from '@codebuff/common/types/messages/codebuff-message'
2125
import type { ToolResultPart } from '@codebuff/common/types/messages/content-part'
2226
import type { PrintModeEvent } from '@codebuff/common/types/print-mode'
2327
import type { AgentState, Subgoal } from '@codebuff/common/types/session-state'
@@ -70,6 +74,7 @@ export async function processStreamWithTools(options: {
7074
const messages = [...options.messages]
7175

7276
const toolResults: ToolResultPart[] = []
77+
const toolResultsToAddAfterStream: ToolResultPart[] = []
7378
const toolCalls: (CodebuffToolCall | CustomToolCall)[] = []
7479
const { promise: streamDonePromise, resolve: resolveStreamDonePromise } =
7580
Promise.withResolvers<void>()
@@ -160,12 +165,14 @@ export async function processStreamWithTools(options: {
160165
]),
161166
]),
162167
(toolName, error) => {
163-
toolResults.push({
168+
const toolResult: ToolResultPart = {
164169
type: 'tool-result',
165170
toolName,
166171
toolCallId: generateCompactId(),
167172
output: [{ type: 'json', value: { errorMessage: error } }],
168-
})
173+
}
174+
toolResults.push(cloneDeep(toolResult))
175+
toolResultsToAddAfterStream.push(cloneDeep(toolResult))
169176
},
170177
onResponseChunk,
171178
{
@@ -212,6 +219,12 @@ export async function processStreamWithTools(options: {
212219
role: 'assistant' as const,
213220
content: fullResponseChunks.join(''),
214221
},
222+
...toolResultsToAddAfterStream.map((toolResult) => {
223+
return {
224+
role: 'tool',
225+
content: toolResult,
226+
} satisfies ToolMessage
227+
}),
215228
])
216229

217230
resolveStreamDonePromise()

0 commit comments

Comments
 (0)