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

Zineb Bendhiba updated CAMEL-23695:
-----------------------------------
    Description: 
I've implemented the {{{{}}{}}}chatRequestTransformer in Apache Camel's 
camel-langchain4j-agent component and hit a snag. The one-liner transformer 
doesn't work against DefaultAiServices:
{code:java}
// This throws: IllegalArgumentException: Cannot set both 'parameters' and 
'responseFormat' on ChatRequest 

.chatRequestTransformer(chatRequest -> 
chatRequest.toBuilder().responseFormat(responseFormat).build())   {code}
 
DefaultAiServices always sets a ChatRequestParameters object on the ChatRequest 
(even with no tools), and ChatRequest.validate() rejects having both parameters 
and a standalone responseFormat at the same time.

I had to merge responseFormat into the existing ChatRequestParameters instead:
 
{code:java}
.chatRequestTransformer(req -> {
      ChatRequestParameters existing = req.parameters();
      ChatRequestParameters withFormat = existing != null
              ? existing.overrideWith(
                      
DefaultChatRequestParameters.builder().responseFormat(responseFormat).build())
              : 
DefaultChatRequestParameters.builder().responseFormat(responseFormat).build();
      return 
ChatRequest.builder().messages(req.messages()).parameters(withFormat).build();
  }){code}
This was fixe in this [Langchain4j 
PR|https://github.com/langchain4j/langchain4j/pull/5325], and the fix will be 
available in LangChain4j 1.16.0.

 

  was:
I've implemented the {{{{}}{}}}chatRequestTransformer in Apache Camel's 
camel-langchain4j-agent component and hit a snag. The one-liner transformer 
doesn't work against DefaultAiServices:
{code:java}
// This throws: IllegalArgumentException: Cannot set both 'parameters' and 
'responseFormat' on ChatRequest .chatRequestTransformer(chatRequest -> 
chatRequest.toBuilder().responseFormat(responseFormat).build())   {code}
 
DefaultAiServices always sets a ChatRequestParameters object on the ChatRequest 
(even with no tools), and ChatRequest.validate() rejects having both parameters 
and a standalone responseFormat at the same time.

I had to merge responseFormat into the existing ChatRequestParameters instead:
 
{code:java}
.chatRequestTransformer(req -> {
      ChatRequestParameters existing = req.parameters();
      ChatRequestParameters withFormat = existing != null
              ? existing.overrideWith(
                      
DefaultChatRequestParameters.builder().responseFormat(responseFormat).build())
              : 
DefaultChatRequestParameters.builder().responseFormat(responseFormat).build();
      return 
ChatRequest.builder().messages(req.messages()).parameters(withFormat).build();
  }){code}
This was fixe in this [Langchain4j 
PR|https://github.com/langchain4j/langchain4j/pull/5325], and the fix will be 
available in LangChain4j 1.16.0.

 


> Langchain4j-agent: improve structured output when Langchain4j 1.16.0 is out
> ---------------------------------------------------------------------------
>
>                 Key: CAMEL-23695
>                 URL: https://issues.apache.org/jira/browse/CAMEL-23695
>             Project: Camel
>          Issue Type: Improvement
>            Reporter: Zineb Bendhiba
>            Priority: Major
>
> I've implemented the {{{{}}{}}}chatRequestTransformer in Apache Camel's 
> camel-langchain4j-agent component and hit a snag. The one-liner transformer 
> doesn't work against DefaultAiServices:
> {code:java}
> // This throws: IllegalArgumentException: Cannot set both 'parameters' and 
> 'responseFormat' on ChatRequest 
> .chatRequestTransformer(chatRequest -> 
> chatRequest.toBuilder().responseFormat(responseFormat).build())   {code}
>  
> DefaultAiServices always sets a ChatRequestParameters object on the 
> ChatRequest (even with no tools), and ChatRequest.validate() rejects having 
> both parameters and a standalone responseFormat at the same time.
> I had to merge responseFormat into the existing ChatRequestParameters instead:
>  
> {code:java}
> .chatRequestTransformer(req -> {
>       ChatRequestParameters existing = req.parameters();
>       ChatRequestParameters withFormat = existing != null
>               ? existing.overrideWith(
>                       
> DefaultChatRequestParameters.builder().responseFormat(responseFormat).build())
>               : 
> DefaultChatRequestParameters.builder().responseFormat(responseFormat).build();
>       return 
> ChatRequest.builder().messages(req.messages()).parameters(withFormat).build();
>   }){code}
> This was fixe in this [Langchain4j 
> PR|https://github.com/langchain4j/langchain4j/pull/5325], and the fix will be 
> available in LangChain4j 1.16.0.
>  



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

Reply via email to