mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 02:16:05 +01:00 
			
		
		
		
	Fix Anthropic responses when tools are called
This commit is contained in:
		| @@ -319,11 +319,34 @@ export async function setupStreamingResponse( | |||||||
|  |  | ||||||
|             // Handle completion |             // Handle completion | ||||||
|             if (message.done) { |             if (message.done) { | ||||||
|                 console.log(`[${responseId}] Stream completed for session ${sessionId}, has content: ${!!message.content}, content length: ${message.content?.length || 0}, current response: ${assistantResponse.length} chars, post-tool response: ${postToolResponse.length} chars`); |                 console.log(`[${responseId}] Stream completed for session ${sessionId}, has content: ${!!message.content}, content length: ${message.content?.length || 0}, current response: ${assistantResponse.length} chars`); | ||||||
|  |  | ||||||
|                 // Dump message content to console for debugging |                 // Dump message content to console for debugging | ||||||
|                 if (message.content) { |                 if (message.content) { | ||||||
|                     console.log(`[${responseId}] CONTENT IN DONE MESSAGE (first 200 chars): "${message.content.substring(0, 200)}..."`); |                     console.log(`[${responseId}] CONTENT IN DONE MESSAGE (first 200 chars): "${message.content.substring(0, 200)}..."`); | ||||||
|  |  | ||||||
|  |                     // Check if the done message contains the exact same content as our accumulated response | ||||||
|  |                     // We normalize by removing whitespace to avoid false negatives due to spacing differences | ||||||
|  |                     const normalizedMessage = message.content.trim(); | ||||||
|  |                     const normalizedResponse = assistantResponse.trim(); | ||||||
|  |  | ||||||
|  |                     if (normalizedMessage === normalizedResponse) { | ||||||
|  |                         console.log(`[${responseId}] Final message is identical to accumulated response, no need to update`); | ||||||
|  |                     } | ||||||
|  |                     // If the done message is longer but contains our accumulated response, use the done message | ||||||
|  |                     else if (normalizedMessage.includes(normalizedResponse) && normalizedMessage.length > normalizedResponse.length) { | ||||||
|  |                         console.log(`[${responseId}] Final message is more complete than accumulated response, using it`); | ||||||
|  |                         assistantResponse = message.content; | ||||||
|  |                     } | ||||||
|  |                     // If the done message is different and not already included, append it to avoid duplication | ||||||
|  |                     else if (!normalizedResponse.includes(normalizedMessage) && normalizedMessage.length > 0) { | ||||||
|  |                         console.log(`[${responseId}] Final message has unique content, using it`); | ||||||
|  |                         assistantResponse = message.content; | ||||||
|  |                     } | ||||||
|  |                     // Otherwise, we already have the content accumulated, so no need to update | ||||||
|  |                     else { | ||||||
|  |                         console.log(`[${responseId}] Already have this content accumulated, not updating`); | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 // Clear timeout if set |                 // Clear timeout if set | ||||||
| @@ -332,24 +355,6 @@ export async function setupStreamingResponse( | |||||||
|                     timeoutId = null; |                     timeoutId = null; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 // Make sure the final message is displayed |  | ||||||
|                 if (message.content) { |  | ||||||
|                     // If we've been collecting post-tool content, add this content to it |  | ||||||
|                     if (receivedPostToolContent) { |  | ||||||
|                         // Only add if it's not already included (avoid duplication) |  | ||||||
|                         if (!postToolResponse.includes(message.content)) { |  | ||||||
|                             postToolResponse += message.content; |  | ||||||
|                             console.log(`[${responseId}] Added final chunk to post-tool response`); |  | ||||||
|                         } |  | ||||||
|                         // Use the post-tool response as our final response |  | ||||||
|                         assistantResponse = postToolResponse; |  | ||||||
|                     } else if (!assistantResponse.includes(message.content)) { |  | ||||||
|                         // For standard responses, add any new content in the final message |  | ||||||
|                         console.log(`[${responseId}] Final message has unique content, using it`); |  | ||||||
|                         assistantResponse = message.content; |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|  |  | ||||||
|                 // Always mark as done when we receive the done flag |                 // Always mark as done when we receive the done flag | ||||||
|                 onContentUpdate(assistantResponse, true); |                 onContentUpdate(assistantResponse, true); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user