diff --git a/spring-ai-model/src/main/java/org/springframework/ai/util/json/schema/JsonSchemaGenerator.java b/spring-ai-model/src/main/java/org/springframework/ai/util/json/schema/JsonSchemaGenerator.java index 27fae0fcc55..c66b9af2733 100644 --- a/spring-ai-model/src/main/java/org/springframework/ai/util/json/schema/JsonSchemaGenerator.java +++ b/spring-ai-model/src/main/java/org/springframework/ai/util/json/schema/JsonSchemaGenerator.java @@ -129,7 +129,7 @@ public static String generateForMethodInput(Method method, SchemaOption... schem String parameterName = method.getParameters()[i].getName(); Type parameterType = method.getGenericParameterTypes()[i]; if (parameterType instanceof Class parameterClass - && ClassUtils.isAssignable(parameterClass, ToolContext.class)) { + && ClassUtils.isAssignable(ToolContext.class, parameterClass)) { // A ToolContext method parameter is not included in the JSON Schema // generation. // It's a special type used by Spring AI to pass contextual data to tools diff --git a/spring-ai-model/src/test/java/org/springframework/ai/util/json/JsonSchemaGeneratorTests.java b/spring-ai-model/src/test/java/org/springframework/ai/util/json/JsonSchemaGeneratorTests.java index c0c61f7eab6..243ec73bbfb 100644 --- a/spring-ai-model/src/test/java/org/springframework/ai/util/json/JsonSchemaGeneratorTests.java +++ b/spring-ai-model/src/test/java/org/springframework/ai/util/json/JsonSchemaGeneratorTests.java @@ -161,6 +161,29 @@ void generateSchemaForMethodWithOpenApiSchemaAnnotations() throws Exception { assertThat(schema).isEqualToIgnoringWhitespace(expectedJsonSchema); } + @Test + void generateSchemaForMethodWithObjectParam() throws Exception { + Method method = TestMethods.class.getDeclaredMethod("objectParamMethod", Object.class); + + String schema = JsonSchemaGenerator.generateForMethodInput(method); + String expectedJsonSchema = """ + { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", + "properties": { + "object": { + } + }, + "required": [ + "object" + ], + "additionalProperties": false + } + """; + + assertThat(schema).isEqualToIgnoringWhitespace(expectedJsonSchema); + } + @Test void generateSchemaForMethodWithJacksonAnnotations() throws Exception { Method method = TestMethods.class.getDeclaredMethod("jacksonMethod", String.class, String.class); @@ -662,6 +685,9 @@ static class TestMethods { public void simpleMethod(String name, int age) { } + public void objectParamMethod(Object object) { + } + public void annotatedMethod( @ToolParam(required = false, description = "The username of the customer") String username, @ToolParam(required = true) String password) {