spring-projects / spring-ai

An Application Framework for AI Engineering
https://docs.spring.io/spring-ai/reference/index.html
Apache License 2.0
3.32k stars 850 forks source link

Add Kotlin reflection support to `ModelOptionsUtils` #1667

Open sdeleuze opened 2 weeks ago

sdeleuze commented 2 weeks ago

As documented via #1666, schema generation from Kotlin classes currently requires using non idiomatic code like data class Foo(@get:JsonProperty(required = true, value = "output") val bar: String) while the required information can be inferred from Kotlin null-safety and the value inferred from Kotlin reflection.

A related com.github.victools.jsonschema.generator.Module instance could be implemented and created when KotlinDetector.isKotlinReflectPresent() == true to provide those information automatically here.

That would allow to perform schema generation with just data class Foo(val bar: String).

devcrocod commented 2 weeks ago

Hi,

I have some question regarding this issue, please clarify follow points:

sdeleuze commented 2 weeks ago

Hi, thanks for your feedback.

I think conceptually the goal is to infer if a property is required or not, so I think I would consider both nullable properties and properties with default value as non required, and the other ones as required. So for your 2 examples, only bar is required.

For functions, I think that's outside of the scope of this issue. It could make sense to use Kotlin reflection instead of Java one to support more advanced Kotlin constructs, but so far I don't think there is advanced need for optional parameters with default values as only Function1 and Function2 are supported. Could be useful for suspending functions potentially, but that's a different need so I would suggest to focus on schema generation initially, and explore more advanced function invocation later.