diff --git a/packages/core/src/ai-model/models/auto-glm/parser.ts b/packages/core/src/ai-model/models/auto-glm/parser.ts index 86875f0f23..6f5ce14de1 100644 --- a/packages/core/src/ai-model/models/auto-glm/parser.ts +++ b/packages/core/src/ai-model/models/auto-glm/parser.ts @@ -41,7 +41,9 @@ export function parseAutoGLMPlanningAction(response: { if (trimmedResponse.startsWith('finish(message=')) { let message = extractValueAfter(trimmedResponse, 'finish(message="'); - if (message.endsWith(')')) message = message.slice(0, -1); + if (!trimmedResponse.endsWith('")') && message.endsWith(')')) { + message = message.slice(0, -1); + } return { _metadata: 'finish', message, diff --git a/packages/core/tests/unit-test/model-adapter/auto-glm/planning-action-parser.test.ts b/packages/core/tests/unit-test/model-adapter/auto-glm/planning-action-parser.test.ts index b6e779c703..1c9a6fd1ad 100644 --- a/packages/core/tests/unit-test/model-adapter/auto-glm/planning-action-parser.test.ts +++ b/packages/core/tests/unit-test/model-adapter/auto-glm/planning-action-parser.test.ts @@ -114,6 +114,14 @@ describe('parseAutoGLMPlanningAction', () => { expect(finishAction.message).toBe('Task completed'); }); + it('should keep a closing parenthesis at the end of the Finish message', () => { + const action = parseAutoGLMPlanningAction({ + think: 'All done', + content: 'finish(message="Deleted 3 items (all done)")', + }); + expect((action as FinishAction).message).toBe('Deleted 3 items (all done)'); + }); + it('should parse Interact action', () => { const action = parseAutoGLMPlanningAction({ think: 'Need interaction',