[
https://issues.apache.org/jira/browse/CAMEL-23944?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Federico Mariani updated CAMEL-23944:
-------------------------------------
Attachment: LangChain4jAgentToolExecutionErrorHandlerTest.java
> camel-langchain4j-agent: ToolExecutionErrorHandler and compensateOnToolErrors
> never invoked for Camel route tools
> -----------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-23944
> URL: https://issues.apache.org/jira/browse/CAMEL-23944
> Project: Camel
> Issue Type: Bug
> Components: camel-langchain4j-agent
> Affects Versions: 4.21.0
> Reporter: Federico Mariani
> Priority: Major
> Attachments: LangChain4jAgentToolExecutionErrorHandlerTest.java
>
>
> CAMEL-23928 added {{toolExecutionErrorHandler}},
> {{toolArgumentsErrorHandler}} and {{compensateOnToolErrors}} to
> {{AgentConfiguration}}, correctly wired into the {{AiServices}} builder.
> However these handlers can *never fire for Camel route tools*:
> The {{ToolExecutor}} created in
> {{LangChain4jAgentProducer.createCamelToolProvider}} executes the tool route
> on the *shared live exchange*
> ({{camelToolSpec.getConsumer().getProcessor().process(exchange)}}, line 302).
> When the tool route throws:
> * the route pipeline stores the exception on the exchange instead of
> throwing, so the executor's catch block (lines 309-312, which would at least
> return an "Error executing tool ..." string) never even engages;
> * LangChain4j never sees a failure, so the configured
> {{ToolExecutionErrorHandler}} is never invoked and {{compensateOnToolErrors}}
> is unreachable;
> * the raw tool exception fails the whole exchange.
> Attached reproducer {{LangChain4jAgentToolExecutionErrorHandlerTest}}
> configures a handler via
> {{AgentConfiguration.withToolExecutionErrorHandler(...)}} and a tool route
> that throws {{IllegalStateException}}: the handler is never invoked and the
> exchange fails with the raw exception.
> *Suggested fix*: execute Camel route tools on a copy of the exchange (as
> camel-langchain4j-tools does via {{ExchangeHelper.createCopy}}), and rethrow
> tool failures so LangChain4j's error-handling machinery
> ({{toolExecutionErrorHandler}} / {{compensateOnToolErrors}}) engages. Keep
> the current stringify behavior as the default handler for backward
> compatibility.
> Note: making the tool executor exchange-safe here is also the prerequisite
> for exposing {{executeToolsConcurrently}} (tracked in a separate improvement,
> "support executeToolsConcurrently").
> Related: CAMEL-23928.
> _This issue was drafted by Claude Code on behalf of Federico Mariani._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)