[
https://issues.apache.org/jira/browse/CAMEL-23697?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-23697 started by Zineb Bendhiba.
----------------------------------------------
> camel-langchain4j-agent - support Java class as response format for
> structured outputs
> --------------------------------------------------------------------------------------
>
> Key: CAMEL-23697
> URL: https://issues.apache.org/jira/browse/CAMEL-23697
> Project: Camel
> Issue Type: Improvement
> Reporter: Zineb Bendhiba
> Assignee: Zineb Bendhiba
> Priority: Major
>
> Following [CAMEL-23642|https://issues.apache.org/jira/browse/CAMEL-23642]
> which introduced the jsonSchema endpoint property for structured outputs,
> this issue proposes adding a complementary responseType property that accepts
> a Java class directly.
> +*Motivation*+
> jsonSchema requires users to write and maintain a JSON schema file or inline
> string. When the structured output maps directly to an existing Java class,
> it is more ergonomic to point to that class and let Camel derive the schema
> automatically.
> +*Proposed API*+
> A new responseType URI parameter on camel-langchain4j-agent:
> {code:java}
> from("direct:extract")
> .to("langchain4j-agent:myAgent"
> + "?agentConfiguration=#myAgentConfig"
> + "&responseType=#Person"); // registry reference to
> Class<Person>{code}
> When responseType is set:
> - Camel uses JsonSchemaElementUtils.jsonSchemaElementFrom(Class<?>)
> (LangChain4j internal utility) to derive the JSON schema from the class
> fields and any @Description annotations.
> - The derived schema is injected into the model request via
> chatRequestTransformer (same mechanism as jsonSchema).
> - The JSON response from the model is automatically unmarshalled to the
> target class; the exchange body is the Java object, not a raw JSON string.
> +*Constraints*+
> - Only works in agentConfiguration mode (same restriction as jsonSchema).
> - jsonSchema and responseType are mutually exclusive; setting both throws
> an exception at endpoint startup.
> +*Implementation notes*+
> - JsonSchemaElementUtils is in dev.langchain4j.internal — not a public API
> contract, but stable and already used by LangChain4j's own AiServices. Worth
> noting in the PR.
> - The String return type on
> AiAgentWithoutMemoryService/AiAgentWithMemoryService is not a problem: the
> schema is applied at the model request level, LangChain4j passes the JSON
> through as a String, and Camel unmarshals it with Jackson in the producer.
> - No new dependencies required.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)