diff --git a/web-app/src/lib/__tests__/messages.test.ts b/web-app/src/lib/__tests__/messages.test.ts index d3051f1a70..d097133bc0 100644 --- a/web-app/src/lib/__tests__/messages.test.ts +++ b/web-app/src/lib/__tests__/messages.test.ts @@ -407,6 +407,50 @@ describe('CompletionMessagesBuilder', () => { const result = builder.getMessages() expect(result[0].content).toBe('Clean answer') }) + + it('should remove analysis channel reasoning content', () => { + const builder = new CompletionMessagesBuilder([]) + + builder.addAssistantMessage( + '<|channel|>analysis<|message|>Let me analyze this step by step...<|start|>assistant<|channel|>final<|message|>The final answer is 42.' + ) + + const result = builder.getMessages() + expect(result[0].content).toBe('The final answer is 42.') + }) + + it('should handle analysis channel without final message', () => { + const builder = new CompletionMessagesBuilder([]) + + builder.addAssistantMessage( + '<|channel|>analysis<|message|>Only analysis content here...' + ) + + const result = builder.getMessages() + expect(result[0].content).toBe('<|channel|>analysis<|message|>Only analysis content here...') + }) + + it('should handle analysis channel with multiline content', () => { + const builder = new CompletionMessagesBuilder([]) + + builder.addAssistantMessage( + '<|channel|>analysis<|message|>Step 1: First analysis\nStep 2: Second analysis\nStep 3: Final analysis<|start|>assistant<|channel|>final<|message|>Based on my analysis, here is the result.' + ) + + const result = builder.getMessages() + expect(result[0].content).toBe('Based on my analysis, here is the result.') + }) + + it('should handle both think and analysis channel tags', () => { + const builder = new CompletionMessagesBuilder([]) + + builder.addAssistantMessage( + 'Initial thought<|channel|>analysis<|message|>Detailed analysis<|start|>assistant<|channel|>final<|message|>Final response' + ) + + const result = builder.getMessages() + expect(result[0].content).toBe('Final response') + }) }) describe('integration tests', () => { diff --git a/web-app/src/lib/messages.ts b/web-app/src/lib/messages.ts index 05dc0164d3..b187fb5142 100644 --- a/web-app/src/lib/messages.ts +++ b/web-app/src/lib/messages.ts @@ -102,6 +102,15 @@ export class CompletionMessagesBuilder { content = content.slice(splitIndex).trim() } } + if (content.includes('<|channel|>analysis<|message|>')) { + const match = content.match( + /<\|channel\|>analysis<\|message\|>([\s\S]*?)<\|start\|>assistant<\|channel\|>final<\|message\|>/ + ) + if (match?.index !== undefined) { + const splitIndex = match.index + match[0].length + content = content.slice(splitIndex).trim() + } + } return content } }