Skip to content

Commit e01be9e

Browse files
committed
Fix: return String result directly instead of JSON in DefaultToolCallResultConverter
Signed-off-by: Jemin Huh <[email protected]>
1 parent dbaa608 commit e01be9e

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

spring-ai-model/src/main/java/org/springframework/ai/tool/execution/DefaultToolCallResultConverter.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,24 @@
1616

1717
package org.springframework.ai.tool.execution;
1818

19+
import org.slf4j.Logger;
20+
import org.slf4j.LoggerFactory;
21+
import org.springframework.ai.util.json.JsonParser;
22+
import org.springframework.lang.Nullable;
23+
24+
import javax.imageio.ImageIO;
1925
import java.awt.image.RenderedImage;
2026
import java.io.ByteArrayOutputStream;
2127
import java.io.IOException;
2228
import java.lang.reflect.Type;
2329
import java.util.Base64;
2430
import java.util.Map;
2531

26-
import javax.imageio.ImageIO;
27-
28-
import org.slf4j.Logger;
29-
import org.slf4j.LoggerFactory;
30-
31-
import org.springframework.ai.util.json.JsonParser;
32-
import org.springframework.lang.Nullable;
33-
3432
/**
3533
* A default implementation of {@link ToolCallResultConverter}.
3634
*
3735
* @author Thomas Vitale
36+
* @author Jemin Huh
3837
* @since 1.0.0
3938
*/
4039
public final class DefaultToolCallResultConverter implements ToolCallResultConverter {
@@ -45,7 +44,11 @@ public final class DefaultToolCallResultConverter implements ToolCallResultConve
4544
public String convert(@Nullable Object result, @Nullable Type returnType) {
4645
if (returnType == Void.TYPE) {
4746
logger.debug("The tool has no return type. Converting to conventional response.");
48-
return JsonParser.toJson("Done");
47+
return "Done";
48+
}
49+
if (returnType instanceof Class<?> cls && cls.equals(String.class)) {
50+
logger.debug("Tool return type is String. Returning result as is.");
51+
return String.valueOf(result);
4952
}
5053
if (result instanceof RenderedImage) {
5154
final var buf = new ByteArrayOutputStream(1024 * 4);

spring-ai-model/src/test/java/org/springframework/ai/tool/execution/DefaultToolCallResultConverterTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
* Unit tests for {@link DefaultToolCallResultConverter}.
3939
*
4040
* @author Thomas Vitale
41+
* @author Jemin Huh
4142
*/
4243
class DefaultToolCallResultConverterTests {
4344

@@ -52,13 +53,13 @@ void convertWithNullReturnTypeShouldReturn() {
5253
@Test
5354
void convertVoidReturnTypeShouldReturnDoneJson() {
5455
String result = this.converter.convert(null, void.class);
55-
assertThat(result).isEqualTo("\"Done\"");
56+
assertThat(result).isEqualTo("Done");
5657
}
5758

5859
@Test
5960
void convertStringReturnTypeShouldReturnJson() {
6061
String result = this.converter.convert("test", String.class);
61-
assertThat(result).isEqualTo("\"test\"");
62+
assertThat(result).isEqualTo("test");
6263
}
6364

6465
@Test

0 commit comments

Comments
 (0)