Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 063cd61

Browse files
authored
🐛 fix: fix claude first message can not be assistant (#5001)
1 parent bd083fa commit 063cd61

File tree

2 files changed

+23
-17
lines changed

2 files changed

+23
-17
lines changed

src/libs/agent-runtime/utils/anthropicHelpers.test.ts

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,21 @@ describe('anthropicHelpers', () => {
228228
]);
229229
});
230230

231+
it('messages should start with user', async () => {
232+
const messages: OpenAIChatMessage[] = [
233+
{ content: 'Hi', role: 'assistant' },
234+
{ content: 'Hello', role: 'user' },
235+
];
236+
237+
const contents = await buildAnthropicMessages(messages);
238+
239+
expect(contents).toHaveLength(2);
240+
expect(contents).toEqual([
241+
{ content: 'Hi', role: 'user' },
242+
{ content: 'Hello', role: 'user' },
243+
]);
244+
});
245+
231246
it('messages should end with user', async () => {
232247
const messages: OpenAIChatMessage[] = [
233248
{ content: 'Hello', role: 'user' },
@@ -237,10 +252,9 @@ describe('anthropicHelpers', () => {
237252

238253
const contents = await buildAnthropicMessages(messages);
239254

240-
expect(contents).toHaveLength(4);
255+
expect(contents).toHaveLength(3);
241256
expect(contents).toEqual([
242257
{ content: 'Hello', role: 'user' },
243-
{ content: '_', role: 'assistant' },
244258
{ content: 'Hello', role: 'user' },
245259
{ content: 'Hi', role: 'assistant' },
246260
]);
@@ -257,15 +271,11 @@ describe('anthropicHelpers', () => {
257271

258272
const contents = await buildAnthropicMessages(messages);
259273

260-
expect(contents).toHaveLength(9);
274+
expect(contents).toHaveLength(5);
261275
expect(contents).toEqual([
262-
{ content: '_', role: 'user' },
263-
{ content: 'a', role: 'assistant' },
264-
{ content: '_', role: 'user' },
276+
{ content: 'a', role: 'user' },
265277
{ content: 'b', role: 'assistant' },
266-
{ content: '_', role: 'user' },
267278
{ content: 'c', role: 'assistant' },
268-
{ content: '_', role: 'user' },
269279
{ content: 'd', role: 'assistant' },
270280
{ content: '你好', role: 'user' },
271281
]);
@@ -370,7 +380,6 @@ describe('anthropicHelpers', () => {
370380
],
371381
role: 'user',
372382
},
373-
{ content: '_', role: 'assistant' },
374383
{ content: '继续', role: 'user' },
375384
]);
376385
});

src/libs/agent-runtime/utils/anthropicHelpers.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,11 @@ export const buildAnthropicMessages = async (
114114
oaiMessages: OpenAIChatMessage[],
115115
): Promise<Anthropic.Messages.MessageParam[]> => {
116116
const messages: Anthropic.Messages.MessageParam[] = [];
117-
let lastRole = 'assistant';
118117
let pendingToolResults: Anthropic.ToolResultBlockParam[] = [];
119118

120119
for (const message of oaiMessages) {
121120
const index = oaiMessages.indexOf(message);
121+
122122
// refs: https://docs.anthropic.com/claude/docs/tool-use#tool-use-and-tool-result-content-blocks
123123
if (message.role === 'tool') {
124124
pendingToolResults.push({
@@ -135,17 +135,14 @@ export const buildAnthropicMessages = async (
135135
role: 'user',
136136
});
137137
pendingToolResults = [];
138-
lastRole = 'user';
139138
}
140139
} else {
141140
const anthropicMessage = await buildAnthropicMessage(message);
142141

143-
if (lastRole === anthropicMessage.role) {
144-
messages.push({ content: '_', role: lastRole === 'user' ? 'assistant' : 'user' });
145-
}
146-
147-
lastRole = anthropicMessage.role;
148-
messages.push(anthropicMessage);
142+
messages.push({
143+
...anthropicMessage,
144+
role: index === 0 && anthropicMessage.role === 'assistant' ? 'user' : anthropicMessage.role,
145+
});
149146
}
150147
}
151148

0 commit comments

Comments
 (0)