Federico Mariani created CAMEL-23956:
----------------------------------------
Summary: camel-openai: malformed tool-call arguments crash the
agentic loop instead of being returned to the model
Key: CAMEL-23956
URL: https://issues.apache.org/jira/browse/CAMEL-23956
Project: Camel
Issue Type: Bug
Components: camel-openai
Affects Versions: 4.21.0
Reporter: Federico Mariani
Attachments: OpenAIAgenticLoopMalformedToolArgumentsTest.java
Models occasionally emit syntactically invalid JSON in
{{tool_calls[].function.arguments}} — a hallucination class every agentic
runtime must handle. The documented error contract of the agentic loop
({{openai-mcp.adoc}}, "Error Handling in the Agentic Loop") is that tool
execution problems are caught, logged and sent back to the model as tool result
text so it can recover.
However, in {{OpenAIProducer.processNonStreamingAgentic}} the argument parsing
happens *outside* the try/catch that implements that contract:
{code:java}
Map<String, Object> argsMap = OBJECT_MAPPER.readValue(argsJson, Map.class); //
line ~523, not guarded
String resultContent;
try {
McpSchema.CallToolResult toolResult = getEndpoint().callTool(mcpClient,
toolName, argsMap);
...
} catch (Exception e) {
resultContent = "Error: Tool execution failed: " + e.getMessage();
}
{code}
A malformed arguments string therefore fails the whole exchange with a raw
Jackson exception:
{noformat}
com.fasterxml.jackson.core.io.JsonEOFException: Unexpected end-of-input:
expected close marker for Object
{noformat}
{{OpenAIToolExecutionProducer.process}} (line ~145) has the identical unguarded
{{readValue}}.
h3. Suggested fix
Move the parse inside the guarded section (or its own try/catch) and feed a
corrective tool result back to the model, e.g. {{"Error: invalid tool
arguments: " + e.getMessage()}} — mirroring how MCP execution failures are
already handled. The attached route-based reproducer
({{OpenAIAgenticLoopMalformedToolArgumentsTest}}, using
{{camel-test-infra-openai-mock}}) asserts the recovery behavior and fails on
current main.
Related: CAMEL-23943 documents the same defect family in
camel-langchain4j-tools. The fix should stay compatible with the error-policy
model of the unified AI tool abstraction (CAMEL-23382,
{{AiToolResult.ArgumentError}}), which camel-openai will adopt in roadmap step
6.
_This issue was drafted by Claude Code on behalf of Federico Mariani_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)