Federico Mariani created CAMEL-23944:
----------------------------------------
Summary: 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
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)