Skip to content

Commit 14812e5

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

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.lang.reflect.Type;
2323
import java.util.Base64;
2424
import java.util.Map;
25+
import java.util.Optional;
2526

2627
import javax.imageio.ImageIO;
2728

@@ -35,6 +36,7 @@
3536
* A default implementation of {@link ToolCallResultConverter}.
3637
*
3738
* @author Thomas Vitale
39+
* @author Jemin Huh
3840
* @since 1.0.0
3941
*/
4042
public final class DefaultToolCallResultConverter implements ToolCallResultConverter {
@@ -45,7 +47,11 @@ public final class DefaultToolCallResultConverter implements ToolCallResultConve
4547
public String convert(@Nullable Object result, @Nullable Type returnType) {
4648
if (returnType == Void.TYPE) {
4749
logger.debug("The tool has no return type. Converting to conventional response.");
48-
return JsonParser.toJson("Done");
50+
return "Done";
51+
}
52+
if (returnType instanceof Class<?> cls && cls.equals(String.class)) {
53+
logger.debug("Tool return type is String. Returning result as is.");
54+
return Optional.ofNullable((String) result).orElse("null");
4955
}
5056
if (result instanceof RenderedImage) {
5157
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)