Skip to content

Commit c2e1c3b

Browse files
Fix tool result processing in Claude model
Previously, Claude model only processed tool results if they contained a 'result' key, ignoring other valid responses. Changes: - Serialize entire response Map to JSON instead of extracting only 'result' key - Use static final ObjectMapper for better performance - Catch specific JsonProcessingException instead of generic Exception - Extract repeated expression to local variable for readability Fixes #566
1 parent cf5be25 commit c2e1c3b

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

core/src/main/java/com/google/adk/models/Claude.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@
6060
public class Claude extends BaseLlm {
6161

6262
private static final Logger logger = LoggerFactory.getLogger(Claude.class);
63+
private static final ObjectMapper OBJECT_MAPPER =
64+
new ObjectMapper().registerModule(new Jdk8Module());
6365
private int maxTokens = 8192;
6466
private final AnthropicClient anthropicClient;
6567

@@ -170,9 +172,14 @@ private ContentBlockParam partToAnthropicMessageBlock(Part part) {
170172
.build());
171173
} else if (part.functionResponse().isPresent()) {
172174
String content = "";
173-
if (part.functionResponse().get().response().isPresent()
174-
&& part.functionResponse().get().response().get().getOrDefault("result", null) != null) {
175-
content = part.functionResponse().get().response().get().get("result").toString();
175+
if (part.functionResponse().get().response().isPresent()) {
176+
Map<String, Object> response = part.functionResponse().get().response().get();
177+
try {
178+
content = OBJECT_MAPPER.writeValueAsString(response);
179+
} catch (com.fasterxml.jackson.core.JsonProcessingException e) {
180+
logger.error("Failed to serialize tool response", e);
181+
content = response.toString();
182+
}
176183
}
177184
return ContentBlockParam.ofToolResult(
178185
ToolResultBlockParam.builder()

0 commit comments

Comments
 (0)