This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-website.git
The following commit(s) were added to refs/heads/main by this push:
new b350d1b0 Blog: Round 4: making Camel work for any AI model, now with
intermediate examples (#1826)
b350d1b0 is described below
commit b350d1b0df7816afe5be809c58b9273e8115fc69
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Oct 21 20:33:31 2026 +0200
Blog: Round 4: making Camel work for any AI model, now with intermediate
examples (#1826)
Claude-Session: https://claude.ai/code/session_01STT6whBgK1AqsSsUKrnE8m
Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
---
.../featured.jpg | Bin 0 -> 120664 bytes
.../camel-local-model-benchmark-round-4/index.md | 78 +++++++++++++++++++++
2 files changed, 78 insertions(+)
diff --git
a/content/blog/2026/10/camel-local-model-benchmark-round-4/featured.jpg
b/content/blog/2026/10/camel-local-model-benchmark-round-4/featured.jpg
new file mode 100644
index 00000000..18ac7674
Binary files /dev/null and
b/content/blog/2026/10/camel-local-model-benchmark-round-4/featured.jpg differ
diff --git a/content/blog/2026/10/camel-local-model-benchmark-round-4/index.md
b/content/blog/2026/10/camel-local-model-benchmark-round-4/index.md
new file mode 100644
index 00000000..75dd3669
--- /dev/null
+++ b/content/blog/2026/10/camel-local-model-benchmark-round-4/index.md
@@ -0,0 +1,78 @@
+---
+title: "Round 4: making Camel work for any AI model, now with intermediate
examples"
+date: 2026-10-21
+draft: false
+authors: [davsclaus]
+categories: ["AI", "Tooling"]
+keywords: ["apache camel", "AI", "local model", "ollama", "coding agent",
"MCP", "camel cli", "kafka", "jms", "body type", "camel 4.24"]
+preview: "The fourth round of our work to make Camel easy to use for any AI
model, and especially for models small enough to run on a laptop or a mini PC.
We moved on to intermediate examples with Kafka, a JMS broker, enrich, REST and
an LLM in a route. A local model went from 37 to 64 percent in three nights as
we fixed what it failed on, and that found real bugs in Camel. Also: a Camel
CLI that any agent can rely on, and what comes next."
+---
+
+This is the fourth post in a series about making Camel easy to use for any AI
model: the frontier models in the cloud, and especially the models that are
small enough to run on your own laptop or a mini PC. The
[first](/blog/2026/09/camel-local-model-benchmark/),
[second](/blog/2026/09/camel-local-model-benchmark-round-2/) and
[third](/blog/2026/10/camel-local-model-benchmark-round-3/) posts show how it
works. A local model builds and changes Camel routes, with the [camel-jbang-mcp
serve [...]
+
+The setup has not changed: a Mac mini with 64 GB of memory, the local model
`qwen3.6:35b-mlx` in Ollama, and Camel on the main branch. Since round 3, the
runs have led to more than 50 Jira issues, most of them fixed for Camel 4.24.
Here are the highlights.
+
+## On to intermediate examples
+
+The 21 examples from round 2 have stayed at about 92 percent since round 3.
When the score stops moving, the examples have stopped finding problems, so we
moved on to intermediate ones. Six new examples use the parts of Camel the
first ones never touched:
+
+- Kafka orders, with a multicast and record keys
+- JMS request-reply on an ActiveMQ Artemis broker, with a dead letter queue
+- enrich and dedupe, with pollEnrich, an idempotent consumer and a wire tap
+- dynamic routing, with a recipient list, a failover load balancer and a
throttle
+- code-first REST, with a Java record, 404 and 400 answers, and the generated
API description
+- an AI ticket classifier, with an LLM inside the route
+
+Kafka and the broker run in containers that `camel infra run` starts. Each
example starts from a working route, and the model gets three or four requests,
one at a time.
+
+On the first night the model passed 37 percent of the steps. Then the loop did
its work: fix in the day, measure at night. The second night it passed 57
percent, the third night 64 percent.
+
+The JMS example shows how the loop works. On the first night, the first
request failed in all eight runs: connect to the broker and put each order on a
queue. The model used all 25 of its tool calls looking for how to do that, and
the jms page had no example of it. The next day the page got one
([CAMEL-25783](https://issues.apache.org/jira/browse/CAMEL-25783)). Dev mode
learned to apply new component options and beans from `application.properties`
([CAMEL-25767](https://issues.apache.org [...]
+
+## Bugs that people hit too
+
+The intermediate examples went deeper, into the runtime that every Camel user
runs, and found plain bugs.
+
+The one that stood out: after a pollEnrich times out, the result should be
empty. Instead, the message of a file consumer brought its own file back,
because it creates its body on demand. So a route that looked up a customer got
the order file, and failed later with an error that pointed somewhere else. The
messages of JMS, mail, HTTP and other consumers did the same. It is fixed in
Camel 4.24, and in the coming LTS releases 4.22.3 and 4.18.6
([CAMEL-25860](https://issues.apache.org/jira [...]
+
+Some others:
+
+- pollEnrich with a file name such as `${body[customer]}.json` read the wrong
message, since Camel 4.11
([CAMEL-25792](https://issues.apache.org/jira/browse/CAMEL-25792)).
+- A reload in dev mode did not apply component options, and once that was
fixed, it kept only the last one
([CAMEL-25767](https://issues.apache.org/jira/browse/CAMEL-25767),
[CAMEL-25858](https://issues.apache.org/jira/browse/CAMEL-25858)).
+- The tokenizer EIP did not work in XML and YAML routes
([CAMEL-25777](https://issues.apache.org/jira/browse/CAMEL-25777)).
+- The REST binding answered 500 to a GET with `Content-Type: text/plain`
([CAMEL-25769](https://issues.apache.org/jira/browse/CAMEL-25769)).
+
+## The docs are what the model knows
+
+Camel's tools give a model the documentation and its examples. A missing
example is missing knowledge, for a model and for a person. Since round 3, 64
more component pages got a YAML example, every data format has one, and every
example on the EIP pages is shown in Java, XML and YAML
([CAMEL-25736](https://issues.apache.org/jira/browse/CAMEL-25736),
[CAMEL-25774](https://issues.apache.org/jira/browse/CAMEL-25774)). One lesson
for anyone who writes docs: the tools return the first two exa [...]
+
+## A Camel CLI that any agent can rely on
+
+Coding agents work in a shell. They run a command, read what comes back, and
decide what to do next. In Camel 4.24 the Camel CLI says clearly how each
command went
([CAMEL-25388](https://issues.apache.org/jira/browse/CAMEL-25388)). So any
agent works better with it: a frontier coding agent in the cloud, or a local
model on your laptop, with or without the MCP server.
+
+- Each exit code has one meaning: 0 success, 1 failed, 2 usage error, 3 not
found, 70 internal error, 124 timed out ([Exit Codes and
Output](/manual/camel-jbang-exit-codes.html)).
+- Errors go to stderr and data to stdout. With `--json`, stdout is exactly one
JSON document, also when a command fails, and more commands have `--json` now,
such as `camel validate` and `camel doc`.
+- No command waits for a terminal that is not there. A command that follows a
log or watches a status shows it once, or for as long as `--duration=30s` says,
and then exits.
+- `camel stop` and `camel restart` wait, and check that it happened. `camel
log <name> --previous` prints the log of an app that stopped, such as one that
failed at startup, like `kubectl logs --previous`.
+
+Around this came many fixes in the CLI itself, and some were bugs that people
hit too. `camel stop 1234 --kill` killed whatever process had that number; now
it only stops a Camel integration. `camel debug` without a terminal waited at
full CPU. The docs got a page on exit codes and output, and the upgrade guide
for 4.24 already has 50 sections on the CLI. The module with the CLI commands
now has more than 2,300 tests, three times as many as in Camel 4.22.
+
+Together with the bug fixes and the docs above, this is what makes Camel work
better with any agent, not only with the model in our benchmark. It helps every
script and CI pipeline as well. Next, we want to measure it: the model with a
shell and the `camel` command, and nothing else.
+
+## Also new
+
+- **Lenient input.** The write tools repair YAML shapes that have only one
reading, such as steps written next to a split instead of under it
([CAMEL-25532](https://issues.apache.org/jira/browse/CAMEL-25532)). The model
gets fewer refused writes and needs fewer calls.
+- **Honest numbers.** We found false passes in our own benchmark: a check that
saw log lines from before the step. We fixed it, and the scores went down. If
you run a benchmark of your own, read the passes too.
+- **A newer model is not always better at Camel.** Qwen3.8 27B, which its
makers rate better at agent work, scored 88 percent against 93 percent for our
model. It looked up every option before it used it, and ran out of calls.
+
+## Next: knowing what the body is, everywhere
+
+Look at what still fails, and one question keeps coming back: what is the
message body at this step? The file as it was read, where the model expected
the customer. A Map, where text was needed. A list, where one order was wanted.
The LLM's answer, which replaced the ticket. People ask the same question, and
often find the answer in a stack trace.
+
+Camel has started to answer it from the runtime, because only the running
route knows for certain. An error about the body now says what the body is,
which step made it so, and what to write instead
([CAMEL-25749](https://issues.apache.org/jira/browse/CAMEL-25749)). An app in
dev mode records the body types at each step, and the validator uses them
([CAMEL-25750](https://issues.apache.org/jira/browse/CAMEL-25750)).
+
+The next step is to make this knowledge part of Camel itself: every component,
EIP, data format and language says what body it takes and what body it gives
([CAMEL-24961](https://issues.apache.org/jira/browse/CAMEL-24961)). Then every
tool that reads the catalog knows it: the docs, the validator, the MCP tools,
IDEs and visual designers. This was asked for in 2008
([CAMEL-330](https://issues.apache.org/jira/browse/CAMEL-330)) and again in
2017 ([CAMEL-11132](https://issues.apache.org/jir [...]
+
+## The person steers
+
+The benchmark is a stress test: a model alone, which is harder than a normal
working day. In daily work a person steers, and a local model makes that person
fast. The models get better every few months, and the fixes stay in Camel, for
people and for every AI model. They ship in Camel 4.24.