[ 
https://issues.apache.org/jira/browse/CAMEL-24820?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen updated CAMEL-24820:
--------------------------------
    Fix Version/s: 4.23.0

> Make LangChain4j models easy to declare in YAML and properties: builder 
> inference, component-level model, validator hints
> -------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24820
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24820
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-jbang, camel-jbang-mcp, camel-langchain4j-chat, 
> camel-yaml-dsl
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.23.0
>
>
> Using camel-langchain4j-chat from the YAML DSL is harder than it should be. A 
> LangChain4j model has no public constructor; it is built through a nested 
> builder, so the only way to declare one today without Java is:
> {code:yaml}
> - beans:
>     - name: chatModel
>       type: dev.langchain4j.model.ollama.OllamaChatModel
>       builderClass: 
> dev.langchain4j.model.ollama.OllamaChatModel$OllamaChatModelBuilder
>       builderMethod: build
>       properties:
>         baseUrl: "{{ollama.base.url}}"
>         modelName: "{{ollama.model}}"
> {code}
> A user has to know that LangChain4j models come from builders, the exact name 
> of a nested builder class with a $ in it, and that the method is called 
> build. None of that is Camel knowledge, and when they get it wrong the error 
> is a reflection exception rather than a hint. This came up while writing the 
> langchain4j-chat example for camel-jbang-examples (CAMEL-24808).
> Proposal, cheapest first:
> # *Builder inference in bean declarations.* When a bean type has no usable 
> public constructor but a public static builder() method, call it and use 
> build() as the default builder method. Then the declaration is type plus 
> properties; builderClass and builderMethod stay as overrides for the odd 
> cases. This is generic and helps every builder-style library, not only 
> LangChain4j.
> # *Validator hint.* The source validator (camel validate, the MCP server 
> validate tool) should recognise a bean type without a public constructor and 
> say: this class is built through a builder, add builderClass and 
> builderMethod (or, once 1 exists, that the builder is inferred and which 
> properties the builder accepts).
> # *Component-level model.* Let camel.component.langchain4j-chat.chat-model 
> accept the #class: syntax like any other bean property, with the builder 
> inference behind it, so application.properties alone configures the model and 
> the route is just langchain4j-chat:chatId. Same for langchain4j-embeddings, 
> langchain4j-agent and the other langchain4j components that take a model bean.
> # *Provider shortcuts.* camel.langchain4j.chat.provider=ollama with base-url 
> and model keys, mapping to the right builder for the common providers 
> (ollama, openai, anthropic, ...). This also gives Camel JBang a way to add 
> the right langchain4j-* dependency from the provider name instead of from a 
> class name.
> 1 and 2 remove most of the pain without new configuration surface; 3 and 4 
> are the follow-ups.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to