From 36dc3b995e68df08b0ccd8d8a3aa91dc8ac2b6b6 Mon Sep 17 00:00:00 2001 From: Sun Yuhan Date: Mon, 9 Jun 2025 11:21:34 +0800 Subject: [PATCH] fix: Fixed GH-3355, fixed the judgment error in the method of Signed-off-by: Sun Yuhan --- .../method/MethodToolCallbackProvider.java | 6 +++--- .../MethodToolCallbackProviderTests.java | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/spring-ai-model/src/main/java/org/springframework/ai/tool/method/MethodToolCallbackProvider.java b/spring-ai-model/src/main/java/org/springframework/ai/tool/method/MethodToolCallbackProvider.java index 666aa6f97f3..65a42dfea87 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/tool/method/MethodToolCallbackProvider.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/tool/method/MethodToolCallbackProvider.java @@ -103,9 +103,9 @@ public ToolCallback[] getToolCallbacks() { } private boolean isFunctionalType(Method toolMethod) { - var isFunction = ClassUtils.isAssignable(toolMethod.getReturnType(), Function.class) - || ClassUtils.isAssignable(toolMethod.getReturnType(), Supplier.class) - || ClassUtils.isAssignable(toolMethod.getReturnType(), Consumer.class); + var isFunction = ClassUtils.isAssignable(Function.class, toolMethod.getReturnType()) + || ClassUtils.isAssignable(Supplier.class, toolMethod.getReturnType()) + || ClassUtils.isAssignable(Consumer.class, toolMethod.getReturnType()); if (isFunction) { logger.warn("Method {} is annotated with @Tool but returns a functional type. " diff --git a/spring-ai-model/src/test/java/org/springframework/ai/tool/method/MethodToolCallbackProviderTests.java b/spring-ai-model/src/test/java/org/springframework/ai/tool/method/MethodToolCallbackProviderTests.java index cdc9fccedfb..df52c92a6fc 100644 --- a/spring-ai-model/src/test/java/org/springframework/ai/tool/method/MethodToolCallbackProviderTests.java +++ b/spring-ai-model/src/test/java/org/springframework/ai/tool/method/MethodToolCallbackProviderTests.java @@ -78,6 +78,15 @@ void whenMultipleToolObjectsWithSameToolNameThenThrow() { .hasMessageContaining("Multiple tools with the same name (validTool) found in sources"); } + @Test + void whenToolObjectHasObjectTypeMethodThenSuccess() { + MethodToolCallbackProvider provider = MethodToolCallbackProvider.builder() + .toolObjects(new ObjectTypeToolMethodsObject()) + .build(); + assertThat(provider.getToolCallbacks()).hasSize(1); + assertThat(provider.getToolCallbacks()[0].getToolDefinition().name()).isEqualTo("objectTool"); + } + static class ValidToolObject { @Tool @@ -137,4 +146,13 @@ public String validTool() { } + static class ObjectTypeToolMethodsObject { + + @Tool + public Object objectTool() { + return "Object tool result"; + } + + } + }