diff --git a/spring-ai-model/src/main/java/org/springframework/ai/tool/execution/DefaultToolCallResultConverter.java b/spring-ai-model/src/main/java/org/springframework/ai/tool/execution/DefaultToolCallResultConverter.java index dcbc5fcab97..c8e7cc15f72 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/tool/execution/DefaultToolCallResultConverter.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/tool/execution/DefaultToolCallResultConverter.java @@ -35,6 +35,7 @@ * A default implementation of {@link ToolCallResultConverter}. * * @author Thomas Vitale + * @author Jemin Huh * @since 1.0.0 */ public final class DefaultToolCallResultConverter implements ToolCallResultConverter { @@ -45,7 +46,11 @@ public final class DefaultToolCallResultConverter implements ToolCallResultConve public String convert(@Nullable Object result, @Nullable Type returnType) { if (returnType == Void.TYPE) { logger.debug("The tool has no return type. Converting to conventional response."); - return JsonParser.toJson("Done"); + return "Done"; + } + if (returnType instanceof Class cls && cls.equals(String.class)) { + logger.debug("Tool return type is String. Returning result as is."); + return String.valueOf(result); } if (result instanceof RenderedImage) { final var buf = new ByteArrayOutputStream(1024 * 4); diff --git a/spring-ai-model/src/test/java/org/springframework/ai/tool/execution/DefaultToolCallResultConverterTests.java b/spring-ai-model/src/test/java/org/springframework/ai/tool/execution/DefaultToolCallResultConverterTests.java index 5b1e908fe48..4ba7c20c9e0 100644 --- a/spring-ai-model/src/test/java/org/springframework/ai/tool/execution/DefaultToolCallResultConverterTests.java +++ b/spring-ai-model/src/test/java/org/springframework/ai/tool/execution/DefaultToolCallResultConverterTests.java @@ -38,6 +38,7 @@ * Unit tests for {@link DefaultToolCallResultConverter}. * * @author Thomas Vitale + * @author Jemin Huh */ class DefaultToolCallResultConverterTests { @@ -52,13 +53,13 @@ void convertWithNullReturnTypeShouldReturn() { @Test void convertVoidReturnTypeShouldReturnDoneJson() { String result = this.converter.convert(null, void.class); - assertThat(result).isEqualTo("\"Done\""); + assertThat(result).isEqualTo("Done"); } @Test void convertStringReturnTypeShouldReturnJson() { String result = this.converter.convert("test", String.class); - assertThat(result).isEqualTo("\"test\""); + assertThat(result).isEqualTo("test"); } @Test