diff --git a/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-anthropic/src/main/java/io/agentscope/extensions/model/anthropic/formatter/AnthropicResponseParser.java b/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-anthropic/src/main/java/io/agentscope/extensions/model/anthropic/formatter/AnthropicResponseParser.java index cc943d020..e223d0d64 100644 --- a/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-anthropic/src/main/java/io/agentscope/extensions/model/anthropic/formatter/AnthropicResponseParser.java +++ b/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-anthropic/src/main/java/io/agentscope/extensions/model/anthropic/formatter/AnthropicResponseParser.java @@ -140,6 +140,16 @@ private static ChatResponse parseStreamEvent(RawMessageStreamEvent event, Instan contentBlocks.add( TextBlock.builder().text(textDelta.text()).build())); + deltaEvent + .delta() + .thinking() + .ifPresent( + thinkingDelta -> + contentBlocks.add( + ThinkingBlock.builder() + .thinking(thinkingDelta.thinking()) + .build())); + // Input JSON delta (tool calling) deltaEvent .delta() diff --git a/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-anthropic/src/test/java/io/agentscope/extensions/model/anthropic/formatter/AnthropicResponseParserTest.java b/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-anthropic/src/test/java/io/agentscope/extensions/model/anthropic/formatter/AnthropicResponseParserTest.java index 789a2d49e..d2f7317cb 100644 --- a/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-anthropic/src/test/java/io/agentscope/extensions/model/anthropic/formatter/AnthropicResponseParserTest.java +++ b/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-anthropic/src/test/java/io/agentscope/extensions/model/anthropic/formatter/AnthropicResponseParserTest.java @@ -26,6 +26,7 @@ import com.anthropic.models.messages.ContentBlock; import com.anthropic.models.messages.Message; +import com.anthropic.models.messages.RawContentBlockDeltaEvent; import com.anthropic.models.messages.RawMessageStartEvent; import com.anthropic.models.messages.RawMessageStreamEvent; import com.anthropic.models.messages.Usage; @@ -316,6 +317,26 @@ void testParseStreamEventMessageStart() throws Exception { assertTrue(response.getContent().isEmpty()); // MessageStart has no content } + @Test + void testParseStreamEventThinkingDelta() throws Exception { + RawContentBlockDeltaEvent deltaEvent = + RawContentBlockDeltaEvent.builder() + .index(0) + .thinkingDelta("Let me reason through this.") + .build(); + RawMessageStreamEvent event = RawMessageStreamEvent.ofContentBlockDelta(deltaEvent); + + Instant startTime = Instant.now(); + ChatResponse response = invokeParseStreamEvent(event, startTime); + + assertNotNull(response); + assertEquals(1, response.getContent().size()); + ThinkingBlock parsedThinking = + assertInstanceOf(ThinkingBlock.class, response.getContent().get(0)); + assertEquals("Let me reason through this.", parsedThinking.getThinking()); + assertNull(response.getUsage()); + } + @Test void testParseStreamEventUnknownType() throws Exception { // Test unknown event type - should return empty response