Skip to content

Commit 94e787a

Browse files
committed
If no tool result content, insert an empty json content
1 parent cd0f3b5 commit 94e787a

File tree

2 files changed

+57
-12
lines changed

2 files changed

+57
-12
lines changed

common/src/util/__tests__/messages.test.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,36 @@ describe('convertCbToModelMessages', () => {
252252
])
253253
})
254254

255+
it('should convert tool messages with empty content', () => {
256+
const messages: Message[] = [
257+
{
258+
role: 'tool',
259+
toolName: 'scraper_page_to_markdown',
260+
toolCallId: 'call_empty',
261+
content: [],
262+
},
263+
]
264+
265+
const result = convertCbToModelMessages({
266+
messages,
267+
includeCacheControl: false,
268+
})
269+
270+
expect(result).toEqual([
271+
expect.objectContaining({
272+
role: 'tool',
273+
content: [
274+
expect.objectContaining({
275+
type: 'tool-result',
276+
toolCallId: 'call_empty',
277+
toolName: 'scraper_page_to_markdown',
278+
output: { type: 'json', value: '(empty result)' },
279+
} satisfies ToolResultPart),
280+
],
281+
}),
282+
])
283+
})
284+
255285
it('should handle multiple tool outputs', () => {
256286
const messages: Message[] = [
257287
{

common/src/util/messages.ts

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,21 @@ function assistantToCodebuffMessage(
126126
function convertToolResultMessage(
127127
message: ToolMessage,
128128
): ModelMessageWithAuxiliaryData[] {
129+
if (message.content.length === 0) {
130+
return [
131+
cloneDeep<ToolModelMessage>({
132+
...message,
133+
role: 'tool',
134+
content: [
135+
{
136+
...message,
137+
output: { type: 'json', value: '' },
138+
type: 'tool-result',
139+
},
140+
],
141+
}),
142+
]
143+
}
129144
return message.content.map((c) => {
130145
if (c.type === 'json') {
131146
return cloneDeep<ToolModelMessage>({
@@ -326,8 +341,8 @@ export function convertCbToModelMessages({
326341
}
327342
throw new Error(
328343
`convertCbToModelMessages: Message at index ${i} failed schema validation.\n` +
329-
`Role: ${message.role}\n` +
330-
`Message:\n${result.error.message}`,
344+
`Role: ${message.role}\n` +
345+
`Message:\n${result.error.message}`,
331346
)
332347
}
333348
}
@@ -356,8 +371,8 @@ export function systemMessage(
356371
params:
357372
| SystemContent
358373
| ({
359-
content: SystemContent
360-
} & Omit<SystemMessage, 'role' | 'content'>),
374+
content: SystemContent
375+
} & Omit<SystemMessage, 'role' | 'content'>),
361376
): SystemMessage {
362377
if (typeof params === 'object' && 'content' in params) {
363378
return {
@@ -390,8 +405,8 @@ export function userMessage(
390405
params:
391406
| UserContent
392407
| ({
393-
content: UserContent
394-
} & Omit<UserMessage, 'role' | 'content'>),
408+
content: UserContent
409+
} & Omit<UserMessage, 'role' | 'content'>),
395410
): UserMessage {
396411
if (typeof params === 'object' && 'content' in params) {
397412
return {
@@ -428,8 +443,8 @@ export function assistantMessage(
428443
params:
429444
| AssistantContent
430445
| ({
431-
content: AssistantContent
432-
} & Omit<AssistantMessage, 'role' | 'content'>),
446+
content: AssistantContent
447+
} & Omit<AssistantMessage, 'role' | 'content'>),
433448
): AssistantMessage {
434449
if (typeof params === 'object' && 'content' in params) {
435450
return {
@@ -449,10 +464,10 @@ export function assistantMessage(
449464
export function jsonToolResult<T extends JSONValue>(
450465
value: T,
451466
): [
452-
Extract<ToolResultOutput, { type: 'json' }> & {
453-
value: T
454-
},
455-
] {
467+
Extract<ToolResultOutput, { type: 'json' }> & {
468+
value: T
469+
},
470+
] {
456471
return [
457472
{
458473
type: 'json',

0 commit comments

Comments
 (0)