You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2026/03/24 10:16:13 UTC
(camel-quarkus) branch main updated: Adds JVM tests for camel-quarkus-langchain4j-agent with quarkus-langchain4j
This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push:
new c3d68c49bf Adds JVM tests for camel-quarkus-langchain4j-agent with quarkus-langchain4j
c3d68c49bf is described below
commit c3d68c49bf92a2f015b3f6ba5ca5a490998bf168
Author: JiriOndrusek <on...@gmail.com>
AuthorDate: Tue Mar 24 11:16:07 2026 +0100
Adds JVM tests for camel-quarkus-langchain4j-agent with quarkus-langchain4j
Fixes #8377
Fixes #8287
Fixes #8288
Co-authored-by: Jiri Ondrusek <on...@gmail.com>
---
.../deployment/QuarkusLangchain4jPresent.java | 31 +++
.../deployment/SupportLangchain4jProcessor.java | 8 +-
.../SupportQuarkusLangchain4jProcessor.java | 88 ++++++++
.../langchain4j/QuarkusLangchain4jRecorder.java | 39 ++++
.../langchain4j-agent-ql4j/README.adoc | 34 ++++
.../langchain4j-agent-ql4j/pom.xml | 222 +++++++++++++++++++++
.../src/main/resources/application.properties | 22 ++
.../agent/it/Langchain4jAgentQl4jProfile.java | 29 +++
.../agent/it/Langchain4jAgentQl4jTest.java | 46 +++++
..._chat-07697830-e3e8-4de0-ab1a-0387d82fa1f9.json | 10 +-
..._chat-18327c5c-fa3b-4848-9c4f-6ed6098e5117.json | 10 +-
..._chat-19601aeb-7179-46eb-ad3e-f25d2c18a896.json | 8 +-
..._chat-19be9646-6a92-4cb4-a591-b8c058b5d0fa.json | 8 +-
..._chat-1cf59dd2-bee9-45f5-8e0a-7369d6656860.json | 24 +++
..._chat-2276f051-cf9a-4475-aed4-6754bac3b1f7.json | 10 +-
..._chat-2900fd1c-0ebc-42ff-b6ee-ba8caf689719.json | 24 +++
..._chat-4258d73c-c1e9-405a-8500-8e3053196ccd.json | 24 +++
..._chat-4dd7ecb9-7dbe-48f5-9b4f-481a21e1144c.json | 10 +-
..._chat-735d56ed-7b5f-476d-ae91-8c1bb851d16f.json | 10 +-
..._chat-89dc149d-8f49-42e4-b157-ca193826fb97.json | 10 +-
..._chat-a7f5dc9a-3330-441d-8824-d913baaf2515.json | 10 +-
..._chat-af34c8aa-386e-484c-b7b1-5635fc121443.json | 24 +++
..._chat-cd782b16-9b47-43d1-966d-f57f33ed5718.json | 10 +-
..._chat-d44e4f60-fcba-4b6a-b468-110c5ef3968f.json | 24 +++
..._chat-f25e934d-75c9-4136-937c-5be74d187f81.json | 24 +++
..._chat-f6c67707-2d86-4806-9a70-2e3b87f76f38.json | 10 +-
..._chat-f76fd9b1-66ac-4d0e-bbbb-795b5e05509d.json | 10 +-
integration-tests-jvm/pom.xml | 1 +
.../langchain4j/agent/it/AgentProducers.java | 5 +-
.../agent/it/Langchain4jAgentTestResource.java | 62 +++++-
...embed-1e8084ee-91b3-4095-86b7-9845fe1480d6.json | 1 -
..._chat-07483132-9cdf-4380-9dc7-98735923d83f.json | 24 +++
...chat-169fb9d1-d29b-4e95-84a4-1ab133179ce5.json} | 8 +-
...chat-19d22465-3fb9-4f32-94b0-e0abf68f0df6.json} | 8 +-
...chat-1a58e2d0-7224-4a5e-a01b-318e83a9fb29.json} | 8 +-
..._chat-2578100a-828a-4b81-bbf2-81dfd2a133b2.json | 24 +++
...chat-3397f049-5f70-40ca-ab2f-8169b147fef4.json} | 8 +-
...chat-35248f94-bc7e-471a-af71-f485e1621fb4.json} | 8 +-
...chat-3bd2313a-d8c2-45cf-98a3-1291e61dbed8.json} | 8 +-
..._chat-3d26b3c9-b392-4bb6-b3e6-622c857fc1a4.json | 24 +++
..._chat-3d941d4b-d1e9-4e58-aeaf-d52756afeef0.json | 24 +++
..._chat-4bd017da-a2a1-4206-b70e-7c0a3f9ddc11.json | 26 ---
...chat-4fb0b393-7f23-4703-8a09-a146222baf05.json} | 8 +-
...chat-5716f4c5-5f23-4975-8015-0e0026572e7c.json} | 8 +-
..._chat-65a5a977-8a4c-4c28-aff7-f4dc7500df43.json | 27 ---
..._chat-68c8507d-160c-4641-9a22-84bbe4806890.json | 24 ---
...chat-72fd4b94-5f4a-46c4-89c8-8bdec51c9229.json} | 8 +-
..._chat-84aa25c6-6069-4780-b9d4-4068a07c101a.json | 24 ---
...chat-a6509799-4ad7-4943-8292-0c40ef7a0694.json} | 8 +-
...chat-bec7f213-4af1-44b3-bd8e-3e9bcede5363.json} | 8 +-
...chat-d4d23b6e-6f85-47ec-8c60-0dafee1ea394.json} | 8 +-
...chat-d74a88a5-321f-4d42-8a5e-28ba35105e81.json} | 8 +-
..._chat-f472d5b5-8789-4bd9-8e7d-8649badd493b.json | 27 ---
...chat-ff735dd8-8cd3-4f0c-b664-7d7b54bfc7b5.json} | 13 +-
54 files changed, 928 insertions(+), 261 deletions(-)
diff --git a/extensions-support/langchain4j/deployment/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/deployment/QuarkusLangchain4jPresent.java b/extensions-support/langchain4j/deployment/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/deployment/QuarkusLangchain4jPresent.java
new file mode 100644
index 0000000000..7741e015dc
--- /dev/null
+++ b/extensions-support/langchain4j/deployment/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/deployment/QuarkusLangchain4jPresent.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.support.langchain4j.deployment;
+
+import java.util.function.BooleanSupplier;
+
+public class QuarkusLangchain4jPresent implements BooleanSupplier {
+ @Override
+ public boolean getAsBoolean() {
+ try {
+ Thread.currentThread().getContextClassLoader().loadClass("io.quarkiverse.langchain4j.RegisterAiService");
+ return true;
+ } catch (ClassNotFoundException e) {
+ return false;
+ }
+ }
+}
diff --git a/extensions-support/langchain4j/deployment/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/deployment/SupportLangchain4jProcessor.java b/extensions-support/langchain4j/deployment/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/deployment/SupportLangchain4jProcessor.java
index 6c74ee9185..850acfd807 100644
--- a/extensions-support/langchain4j/deployment/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/deployment/SupportLangchain4jProcessor.java
+++ b/extensions-support/langchain4j/deployment/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/deployment/SupportLangchain4jProcessor.java
@@ -242,7 +242,7 @@ class SupportLangchain4jProcessor {
.filter(classInfo -> classInfo.name().toString().startsWith("dev.langchain4j"));
}
- @BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
+ @BuildStep
void indexDjlDependencies(
CurateOutcomeBuildItem curateOutcome,
BuildProducer<IndexDependencyBuildItem> indexDependency) {
@@ -259,7 +259,7 @@ class SupportLangchain4jProcessor {
}
}
- @BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
+ @BuildStep
void nativeImageResources(
CurateOutcomeBuildItem curateOutcome,
BuildProducer<NativeImageResourcePatternsBuildItem> nativeImageResourcePattern,
@@ -313,7 +313,7 @@ class SupportLangchain4jProcessor {
}
}
- @BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
+ @BuildStep
void jniRuntimeSupport(
BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
BuildProducer<JniRuntimeAccessBuildItem> jniRuntimeAccess) {
@@ -348,7 +348,7 @@ class SupportLangchain4jProcessor {
reflectiveClass.produce(ReflectiveClassBuildItem.builder("opennlp.tools.sentdetect.SentenceDetectorFactory").build());
}
- @BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
+ @BuildStep
void runtimeInitializedClasses(
CombinedIndexBuildItem combinedIndex,
BuildProducer<RuntimeInitializedClassBuildItem> runtimeInitializedClass) {
diff --git a/extensions-support/langchain4j/deployment/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/deployment/SupportQuarkusLangchain4jProcessor.java b/extensions-support/langchain4j/deployment/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/deployment/SupportQuarkusLangchain4jProcessor.java
new file mode 100644
index 0000000000..22c19056de
--- /dev/null
+++ b/extensions-support/langchain4j/deployment/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/deployment/SupportQuarkusLangchain4jProcessor.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.support.langchain4j.deployment;
+
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import dev.langchain4j.guardrail.Guardrail;
+import dev.langchain4j.guardrail.InputGuardrail;
+import dev.langchain4j.guardrail.OutputGuardrail;
+import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
+import io.quarkus.deployment.annotations.BuildProducer;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.annotations.BuildSteps;
+import io.quarkus.deployment.annotations.ExecutionTime;
+import io.quarkus.deployment.annotations.Record;
+import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
+import io.quarkus.deployment.builditem.SystemPropertyBuildItem;
+import jakarta.inject.Singleton;
+import org.apache.camel.quarkus.component.support.langchain4j.QuarkusLangchain4jRecorder;
+import org.jboss.jandex.ClassInfo;
+import org.jboss.jandex.DotName;
+import org.jboss.jandex.IndexView;
+
+/**
+ * Build steps required only when Quarkus LangChain4j is detected.
+ */
+@BuildSteps(onlyIf = QuarkusLangchain4jPresent.class)
+class SupportQuarkusLangchain4jProcessor {
+ @BuildStep
+ SystemPropertyBuildItem enforceJaxRsHttpClient() {
+ return new SystemPropertyBuildItem("langchain4j.http.clientBuilderFactory",
+ "io.quarkiverse.langchain4j.jaxrsclient.JaxRsHttpClientBuilderFactory");
+ }
+
+ @SuppressWarnings("unchecked")
+ @BuildStep
+ @Record(ExecutionTime.STATIC_INIT)
+ void registerLangChain4jAiServiceTypesForReflection(
+ CombinedIndexBuildItem combinedIndex,
+ BuildProducer<SyntheticBeanBuildItem> syntheticBeans,
+ QuarkusLangchain4jRecorder recorder) {
+ IndexView index = combinedIndex.getIndex();
+ // Guardrails are instantiated dynamically
+ Set<DotName> guardrailTypes = index.getAllKnownImplementations(InputGuardrail.class)
+ .stream()
+ .map(ClassInfo::name)
+ .collect(Collectors.toSet());
+
+ index.getAllKnownImplementations(OutputGuardrail.class)
+ .stream()
+ .map(ClassInfo::name)
+ .forEach(guardrailTypes::add);
+
+ guardrailTypes.stream()
+ .filter(s -> !s.toString().equals("dev.langchain4j.guardrail.JsonExtractorOutputGuardrail"))
+ .forEach(s -> {
+ try {
+ Class<Guardrail<?, ?>> guardrailClass;
+ guardrailClass = (Class<Guardrail<?, ?>>) Thread.currentThread()
+ .getContextClassLoader()
+ .loadClass(s.toString());
+ syntheticBeans
+ .produce(SyntheticBeanBuildItem.configure(s)
+ .scope(Singleton.class)
+ .named("GuardrailSynthetic" + s.local())
+ .runtimeValue(recorder.instantiateGuardrails(guardrailClass))
+ .done());
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+}
diff --git a/extensions-support/langchain4j/runtime/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/QuarkusLangchain4jRecorder.java b/extensions-support/langchain4j/runtime/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/QuarkusLangchain4jRecorder.java
new file mode 100644
index 0000000000..af6301a6c9
--- /dev/null
+++ b/extensions-support/langchain4j/runtime/src/main/java/org/apache/camel/quarkus/component/support/langchain4j/QuarkusLangchain4jRecorder.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.support.langchain4j;
+
+import java.lang.reflect.InvocationTargetException;
+
+import dev.langchain4j.guardrail.Guardrail;
+import io.quarkus.runtime.RuntimeValue;
+import io.quarkus.runtime.annotations.Recorder;
+import org.jboss.logging.Logger;
+
+@Recorder
+public class QuarkusLangchain4jRecorder {
+
+ public RuntimeValue<Guardrail<?, ?>> instantiateGuardrails(Class<Guardrail<?, ?>> guardrailClass) {
+ try {
+ return new RuntimeValue<>(guardrailClass.getConstructor().newInstance());
+ } catch (NoSuchMethodException | InvocationTargetException | InstantiationException
+ | IllegalAccessException e) {
+ Logger.getLogger(QuarkusLangchain4jRecorder.class).debugf(e,
+ "Can not instantiate guardrail of class %s", guardrailClass.getName());
+ return null;
+ }
+ }
+}
diff --git a/integration-tests-jvm/langchain4j-agent-ql4j/README.adoc b/integration-tests-jvm/langchain4j-agent-ql4j/README.adoc
new file mode 100644
index 0000000000..2eab7e2617
--- /dev/null
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/README.adoc
@@ -0,0 +1,34 @@
+== Limitations of Quarkus LangChain4j being on the classpath
+
+ * Does not work in the native
+ * QL4J requires a different httpClient - `io.quarkiverse.langchain4j.jaxrsclient.JaxRsHttpClientBuilderFactory`. See processor and recorder for more information.
+ * Even if tests are using `AgentWithoutMemory`, QL4J creates agentWithMemory automatically
+
+[IMPORTANT]
+If a `RetrievalAugmentor` with the default scope exists, QL4J detects it and applies it to the `AiAgent` (which should not have the `RetrievalAugmentor` at all).
+The issue can be simulated on the test `simpleUserMessage` (see QL4J https://github.com/quarkiverse/quarkus-langchain4j/blob/8cae9528c12bd0dce143fe2f63daa1660bfcd018/core/runtime/src/main/java/io/quarkiverse/langchain4j/RegisterAiService.java#L136[code]).
+Fot that reason, the `RetrievalAugmentor` in `AgentProducer` is annotated via `@LookupUnlessProperty`, to disable lookup for the QL4J tests.
+Camel-langchain4j works event if lookup is disabled!
+
+== Camel Quarkus Langchain4j Agent with Quarkus LangChain4j Integration Tests
+
+By default, the langchain4j-agent-ql4j integration tests use WireMock to stub Ollama API interactions.
+
+To run the `camel-quarkus-langchain4j-agent-ql4j` integration tests against the real API, you need a Ollama instance running with the `orca-mini` & `granite4:3b` models downloaded.
+
+The MCP client tests require https://nodejs.org/[Node.js] to be installed on the test host.
+
+When Ollama is running, set the following environment variables:
+
+[source,shell]
+----
+export LANGCHAIN4J_OLLAMA_BASE_URL=your-ollama-api-url
+----
+
+If the WireMock stub recordings need updating, then remove the existing files from `src/test/resources/mappings` and run tests with either:
+
+System property `-Dwiremock.record=true`
+
+Or
+
+Set environment variable `WIREMOCK_RECORD=true`
diff --git a/integration-tests-jvm/langchain4j-agent-ql4j/pom.xml b/integration-tests-jvm/langchain4j-agent-ql4j/pom.xml
new file mode 100644
index 0000000000..9cd71d9f9e
--- /dev/null
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/pom.xml
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-build-parent-it</artifactId>
+ <version>3.35.0-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent-it/pom.xml</relativePath>
+ </parent>
+
+ <artifactId>camel-quarkus-integration-test-langchain4j-agent-ql4j</artifactId>
+ <name>Camel Quarkus :: Integration Tests :: LangChain4j Agent QL4J</name>
+ <description>Integration tests for Camel Quarkus LangChain4j Agent extension with Quarkus LangChain4j</description>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>io.quarkiverse.langchain4j</groupId>
+ <artifactId>quarkus-langchain4j-bom</artifactId>
+ <version>${quarkiverse-langchain4j.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-direct</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-langchain4j-agent</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-langchain4j-tools</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-seda</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-rest</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-rest-jackson</artifactId>
+ </dependency>
+
+ <!-- Quarkus-langchain4j dependencies-->
+ <dependency>
+ <groupId>io.quarkiverse.langchain4j</groupId>
+ <artifactId>quarkus-langchain4j-ollama</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>dev.langchain4j</groupId>
+ <artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId>
+ </dependency>
+
+ <!-- test dependencies -->
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.rest-assured</groupId>
+ <artifactId>rest-assured</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-integration-wiremock-support</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.gmavenplus</groupId>
+ <artifactId>gmavenplus-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>group-sources</id>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <phase>generate-sources</phase>
+ <configuration>
+ <scripts>
+ <script>file:${maven.multiModuleProjectDirectory}/tooling/scripts/copy-tests.groovy</script>
+ </scripts>
+ <properties>
+ <copy-tests.excludes>**/*api_chat*</copy-tests.excludes>
+ <copy-tests.source.dir>${maven.multiModuleProjectDirectory}/integration-tests/langchain4j-agent</copy-tests.source.dir>
+ <copy-tests.dest.module.dir>${project.basedir}</copy-tests.dest.module.dir>
+ </properties>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>add-sources</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>${basedir}/target/src/main/java</source>
+ </sources>
+ </configuration>
+ </execution>
+ <execution>
+ <id>add-test-sources</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-test-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>${basedir}/target/src/test/java</source>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <profiles>
+ <profile>
+ <id>virtualDependencies</id>
+ <activation>
+ <property>
+ <name>!noVirtualDependencies</name>
+ </property>
+ </activation>
+ <dependencies>
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-direct-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-langchain4j-agent-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-langchain4j-tools-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-seda-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+ </profile>
+ </profiles>
+</project>
diff --git a/integration-tests-jvm/langchain4j-agent-ql4j/src/main/resources/application.properties b/integration-tests-jvm/langchain4j-agent-ql4j/src/main/resources/application.properties
new file mode 100644
index 0000000000..6e068962d6
--- /dev/null
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/main/resources/application.properties
@@ -0,0 +1,22 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+quarkus.devservices.enabled=false
+
+# Testing with quarkus-langchain4j does not work when the RetrievalAugmentor bean produced by AgentProducers.retrievalAugmentor is present with scope <default>.
+# See README.adoc for more details.
+cq-test.retrieval.augmentor.disabled=true
diff --git a/integration-tests-jvm/langchain4j-agent-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/agent/it/Langchain4jAgentQl4jProfile.java b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/agent/it/Langchain4jAgentQl4jProfile.java
new file mode 100644
index 0000000000..3c31944f0d
--- /dev/null
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/agent/it/Langchain4jAgentQl4jProfile.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.langchain4j.agent.it;
+
+import java.util.Collections;
+import java.util.Map;
+
+import io.quarkus.test.junit.QuarkusTestProfile;
+
+public class Langchain4jAgentQl4jProfile implements QuarkusTestProfile {
+ public Map<String, String> getConfigOverrides() {
+ // Covers failure with RetrievalAugmentor with scope <default>, see README.adoc
+ return Collections.singletonMap("cq-test.retrieval.augmentor.disabled", "false");
+ }
+}
diff --git a/integration-tests-jvm/langchain4j-agent-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/agent/it/Langchain4jAgentQl4jTest.java b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/agent/it/Langchain4jAgentQl4jTest.java
new file mode 100644
index 0000000000..71653126ae
--- /dev/null
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/agent/it/Langchain4jAgentQl4jTest.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.langchain4j.agent.it;
+
+import io.quarkus.test.common.QuarkusTestResource;
+import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
+import io.restassured.RestAssured;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+
+import static org.hamcrest.Matchers.*;
+
+@ExtendWith(Langchain4jTestWatcher.class)
+@QuarkusTestResource(Langchain4jAgentTestResource.class)
+@TestProfile(Langchain4jAgentQl4jProfile.class)
+@QuarkusTest
+@Disabled("https://github.com/apache/camel-quarkus/issues/8412")
+class Langchain4jAgentQl4jTest {
+ @Test
+ void simpleUserMessage() {
+ RestAssured.given()
+ .body(Langchain4jAgentTest.TEST_USER_MESSAGE_SIMPLE)
+ .post("/langchain4j-agent/simple")
+ .then()
+ .statusCode(200)
+ .body(
+ not(Langchain4jAgentTest.TEST_USER_MESSAGE_SIMPLE),
+ containsString("Apache Camel"));
+ }
+}
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3dbd2721-ecf7-4960-a6d9-532629c974d1.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-07697830-e3e8-4de0-ab1a-0387d82fa1f9.json
similarity index 76%
copy from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3dbd2721-ecf7-4960-a6d9-532629c974d1.json
copy to integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-07697830-e3e8-4de0-ab1a-0387d82fa1f9.json
index 59a3865afa..25cfd2a638 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3dbd2721-ecf7-4960-a6d9-532629c974d1.json
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-07697830-e3e8-4de0-ab1a-0387d82fa1f9.json
@@ -1,5 +1,5 @@
{
- "id" : "3dbd2721-ecf7-4960-a6d9-532629c974d1",
+ "id" : "07697830-e3e8-4de0-ab1a-0387d82fa1f9",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:25:15.36019929Z\",\"message\":{\"role\":\"assistant\",\"content\":\"John Doe\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":873488110,\"load_duration\":53320906,\"prompt_eval_count\":248,\"prompt_eval_duration\":704054631,\"eval_count\":3,\"eval_duration\":110231366}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T09:52:36.470066243Z\",\"message\":{\"role\":\"assistant\",\"content\":\"John Doe\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":534016062,\"load_duration\":53519445,\"prompt_eval_count\":248,\"prompt_eval_duration\":373541986,\"eval_count\":3,\"eval_duration\":102695006}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:15 GMT",
+ "Date" : "Thu, 12 Mar 2026 09:52:36 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "3dbd2721-ecf7-4960-a6d9-532629c974d1",
+ "uuid" : "07697830-e3e8-4de0-ab1a-0387d82fa1f9",
"persistent" : true,
- "insertionIndex" : 19
+ "insertionIndex" : 20
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-19496598-286d-4354-8021-d0141973f657.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-18327c5c-fa3b-4848-9c4f-6ed6098e5117.json
similarity index 81%
copy from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-19496598-286d-4354-8021-d0141973f657.json
copy to integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-18327c5c-fa3b-4848-9c4f-6ed6098e5117.json
index 66426d79ea..ade89e0be7 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-19496598-286d-4354-8021-d0141973f657.json
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-18327c5c-fa3b-4848-9c4f-6ed6098e5117.json
@@ -1,5 +1,5 @@
{
- "id" : "19496598-286d-4354-8021-d0141973f657",
+ "id" : "18327c5c-fa3b-4848-9c4f-6ed6098e5117",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:25:55.26755228Z\",\"message\":{\"role\":\"assistant\",\"content\":\"[\\n \\\"longRunningOperation\\\",\\n \\\"add\\\",\\n \\\"echo\\\"\\n]\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":7199497126,\"load_duration\":44301920,\"prompt_eval_count\":326,\"prompt_eval_duration\":6246528366,\"eval_count\":17,\"eval_duration\":894557129}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T09:53:17.439073328Z\",\"message\":{\"role\":\"assistant\",\"content\":\"[\\n \\\"longRunningOperation\\\",\\n \\\"add\\\",\\n \\\"echo\\\"\\n]\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":6552718997,\"load_duration\":1604485978,\"prompt_eval_count\":326,\"prompt_eval_duration\":4118866394,\"eval_count\":17,\"eval_duration\":818722420}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:55 GMT",
+ "Date" : "Thu, 12 Mar 2026 09:53:17 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "19496598-286d-4354-8021-d0141973f657",
+ "uuid" : "18327c5c-fa3b-4848-9c4f-6ed6098e5117",
"persistent" : true,
- "insertionIndex" : 14
+ "insertionIndex" : 15
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-ea5aa343-879e-4dd0-94f5-c32886e33ec6.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-19601aeb-7179-46eb-ad3e-f25d2c18a896.json
similarity index 59%
copy from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-ea5aa343-879e-4dd0-94f5-c32886e33ec6.json
copy to integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-19601aeb-7179-46eb-ad3e-f25d2c18a896.json
index 404d65bc24..31e6d982ce 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-ea5aa343-879e-4dd0-94f5-c32886e33ec6.json
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-19601aeb-7179-46eb-ad3e-f25d2c18a896.json
@@ -1,5 +1,5 @@
{
- "id" : "ea5aa343-879e-4dd0-94f5-c32886e33ec6",
+ "id" : "19601aeb-7179-46eb-ad3e-f25d2c18a896",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:26:24.28582676Z\",\"message\":{\"role\":\"assistant\",\"content\":\"That's a lovely choice of color! Blue is often associated with tranquility, stability, and depth. If you need any information or assistance related to the color blue or anything else, feel free to ask.\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2701949220,\"load_duration\":49357826,\"prompt_eval_count\":69,\"prompt_eval_duration\":3 [...]
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T09:53:56.072101845Z\",\"message\":{\"role\":\"assistant\",\"content\":\"That's a lovely choice of color! Blue often symbolizes tranquility, stability, and intelligence. If you need any assistance with something related to the color blue or anything else, please feel free to ask.\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2362851743,\"load_duration\":53976634,\"prompt_eval_count\":69,\"prompt_eval_durat [...]
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:24 GMT",
+ "Date" : "Thu, 12 Mar 2026 09:53:56 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "ea5aa343-879e-4dd0-94f5-c32886e33ec6",
+ "uuid" : "19601aeb-7179-46eb-ad3e-f25d2c18a896",
"persistent" : true,
"insertionIndex" : 4
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-b682d927-b36f-427d-b404-b754b054ddb9.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-19be9646-6a92-4cb4-a591-b8c058b5d0fa.json
similarity index 69%
copy from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-b682d927-b36f-427d-b404-b754b054ddb9.json
copy to integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-19be9646-6a92-4cb4-a591-b8c058b5d0fa.json
index 53ad1cb5fe..2513f9e073 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-b682d927-b36f-427d-b404-b754b054ddb9.json
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-19be9646-6a92-4cb4-a591-b8c058b5d0fa.json
@@ -1,5 +1,5 @@
{
- "id" : "b682d927-b36f-427d-b404-b754b054ddb9",
+ "id" : "19be9646-6a92-4cb4-a591-b8c058b5d0fa",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:26:21.562588173Z\",\"message\":{\"role\":\"assistant\",\"content\":\"Hello Alice! It's nice to meet you. How can I assist you today?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1615998648,\"load_duration\":48578413,\"prompt_eval_count\":36,\"prompt_eval_duration\":645865891,\"eval_count\":18,\"eval_duration\":909874821}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T09:53:53.555078401Z\",\"message\":{\"role\":\"assistant\",\"content\":\"Hello Alice! It's nice to meet you. How can I assist you today?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2918023975,\"load_duration\":1621811779,\"prompt_eval_count\":36,\"prompt_eval_duration\":444829594,\"eval_count\":18,\"eval_duration\":842104365}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:21 GMT",
+ "Date" : "Thu, 12 Mar 2026 09:53:53 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "b682d927-b36f-427d-b404-b754b054ddb9",
+ "uuid" : "19be9646-6a92-4cb4-a591-b8c058b5d0fa",
"persistent" : true,
"insertionIndex" : 5
}
\ No newline at end of file
diff --git a/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-1cf59dd2-bee9-45f5-8e0a-7369d6656860.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-1cf59dd2-bee9-45f5-8e0a-7369d6656860.json
new file mode 100644
index 0000000000..ba905c5267
--- /dev/null
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-1cf59dd2-bee9-45f5-8e0a-7369d6656860.json
@@ -0,0 +1,24 @@
+{
+ "id" : "1cf59dd2-bee9-45f5-8e0a-7369d6656860",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"granite4:3b\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"Calculate the addition of 10 + 5\"\n }, {\n \"role\" : \"assistant\",\n \"tool_calls\" : [ {\n \"function\" : {\n \"name\" : \"addNumbers\",\n \"arguments\" : {\n \"a\" : 10,\n \"b\" : 5\n }\n }\n } ]\n }, {\n \"role\" : \"tool\",\n \"content\" : \"15\"\n } ],\n \"options\" : {\n \"temperature\ [...]
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : false
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T09:53:34.90049304Z\",\"message\":{\"role\":\"assistant\",\"content\":\"The result of adding 10 and 5 is **15**.\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1067473083,\"load_duration\":53592261,\"prompt_eval_count\":221,\"prompt_eval_duration\":294501968,\"eval_count\":15,\"eval_duration\":710204520}",
+ "headers" : {
+ "Date" : "Thu, 12 Mar 2026 09:53:34 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "1cf59dd2-bee9-45f5-8e0a-7369d6656860",
+ "persistent" : true,
+ "insertionIndex" : 10
+}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d366f73b-f02a-4f62-ad43-836f42226e05.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-2276f051-cf9a-4475-aed4-6754bac3b1f7.json
similarity index 83%
copy from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d366f73b-f02a-4f62-ad43-836f42226e05.json
copy to integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-2276f051-cf9a-4475-aed4-6754bac3b1f7.json
index a97b6e2bce..696f0b8702 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d366f73b-f02a-4f62-ad43-836f42226e05.json
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-2276f051-cf9a-4475-aed4-6754bac3b1f7.json
@@ -1,5 +1,5 @@
{
- "id" : "d366f73b-f02a-4f62-ad43-836f42226e05",
+ "id" : "2276f051-cf9a-4475-aed4-6754bac3b1f7",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:26:02.290064872Z\",\"message\":{\"role\":\"assistant\",\"content\":\"The long running operation was executed successfully with a total duration of 2 seconds divided into 2 steps. The process completed as expected without any issues.\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2629078989,\"load_duration\":45655974,\"prompt_eval_count\":372,\"prompt_eval_duration\":868889130,\"eval_count\":31,\"eval_du [...]
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T09:53:23.440448006Z\",\"message\":{\"role\":\"assistant\",\"content\":\"The long running operation was executed successfully with a duration of 2 seconds and divided into 2 steps. The operation completed as expected.\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1929759379,\"load_duration\":52765178,\"prompt_eval_count\":372,\"prompt_eval_duration\":468280959,\"eval_count\":28,\"eval_duration\":1393150513}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:02 GMT",
+ "Date" : "Thu, 12 Mar 2026 09:53:23 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "d366f73b-f02a-4f62-ad43-836f42226e05",
+ "uuid" : "2276f051-cf9a-4475-aed4-6754bac3b1f7",
"persistent" : true,
- "insertionIndex" : 12
+ "insertionIndex" : 13
}
\ No newline at end of file
diff --git a/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-2900fd1c-0ebc-42ff-b6ee-ba8caf689719.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-2900fd1c-0ebc-42ff-b6ee-ba8caf689719.json
new file mode 100644
index 0000000000..b427dde4c4
--- /dev/null
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-2900fd1c-0ebc-42ff-b6ee-ba8caf689719.json
@@ -0,0 +1,24 @@
+{
+ "id" : "2900fd1c-0ebc-42ff-b6ee-ba8caf689719",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"granite4:3b\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"Calculate the addition of 10 + 5\"\n } ],\n \"options\" : {\n \"temperature\" : 0.3,\n \"stop\" : [ ]\n },\n \"stream\" : false,\n \"tools\" : [ {\n \"type\" : \"function\",\n \"function\" : {\n \"name\" : \"addNumbers\",\n \"description\" : \"Adds two numbers\",\n \"parameters\" : {\n \"type\" : \"object\",\n \"proper [...]
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : false
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T09:53:33.750026429Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_ierq4t3o\",\"function\":{\"index\":0,\"name\":\"addNumbers\",\"arguments\":{\"a\":10,\"b\":5}}}]},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":5120589516,\"load_duration\":1619646660,\"prompt_eval_count\":183,\"prompt_eval_duration\":2226615831,\"eval_count\":26,\"eval_duration\":1260580895}",
+ "headers" : {
+ "Date" : "Thu, 12 Mar 2026 09:53:33 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "2900fd1c-0ebc-42ff-b6ee-ba8caf689719",
+ "persistent" : true,
+ "insertionIndex" : 11
+}
\ No newline at end of file
diff --git a/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-4258d73c-c1e9-405a-8500-8e3053196ccd.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-4258d73c-c1e9-405a-8500-8e3053196ccd.json
new file mode 100644
index 0000000000..78335e9403
--- /dev/null
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-4258d73c-c1e9-405a-8500-8e3053196ccd.json
@@ -0,0 +1,24 @@
+{
+ "id" : "4258d73c-c1e9-405a-8500-8e3053196ccd",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"orca-mini\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"Return an example JSON object about a person named 'John Doe' with the fields age and description\"\n } ],\n \"options\" : {\n \"temperature\" : 0.3,\n \"stop\" : [ ]\n },\n \"stream\" : false,\n \"tools\" : [ ]\n}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : false
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T09:53:41.641750586Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Here is an example JSON object about John Doe with the fields age and description:\\n\\n```json\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"age\\\": 30,\\n \\\"description\\\": \\\"John Doe is a professional in the field of technology. He has worked for several years and has a wealth of experience.\\\"\\n}\\n```\"},\"done\":true,\"done_reason\":\"s [...]
+ "headers" : {
+ "Date" : "Thu, 12 Mar 2026 09:53:41 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "4258d73c-c1e9-405a-8500-8e3053196ccd",
+ "persistent" : true,
+ "insertionIndex" : 8
+}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-63b71ca8-026b-471b-a34a-da7660be2631.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-4dd7ecb9-7dbe-48f5-9b4f-481a21e1144c.json
similarity index 60%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-63b71ca8-026b-471b-a34a-da7660be2631.json
rename to integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-4dd7ecb9-7dbe-48f5-9b4f-481a21e1144c.json
index d49c93a8b8..b4f56eeaa7 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-63b71ca8-026b-471b-a34a-da7660be2631.json
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-4dd7ecb9-7dbe-48f5-9b4f-481a21e1144c.json
@@ -1,5 +1,5 @@
{
- "id" : "63b71ca8-026b-471b-a34a-da7660be2631",
+ "id" : "4dd7ecb9-7dbe-48f5-9b4f-481a21e1144c",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,15 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:26:27.290839245Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Hello, Alice. How can I assist you today?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":932736372,\"load_duration\":11343198,\"prompt_eval_count\":46,\"prompt_eval_duration\":341050678,\"eval_count\":12,\"eval_duration\":576140320}",
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T09:54:00.171109276Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Hello, Alice. How can I assist you today?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2272290502,\"load_duration\":1217699940,\"prompt_eval_count\":46,\"prompt_eval_duration\":525193681,\"eval_count\":12,\"eval_duration\":526304397}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:27 GMT",
+ "Date" : "Thu, 12 Mar 2026 09:54:00 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "63b71ca8-026b-471b-a34a-da7660be2631",
+ "uuid" : "4dd7ecb9-7dbe-48f5-9b4f-481a21e1144c",
"persistent" : true,
- "scenarioName" : "scenario-2-api-chat",
- "requiredScenarioState" : "scenario-2-api-chat-3",
"insertionIndex" : 2
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-5b13dcfa-8f76-45b3-a149-6c43182869dd.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-735d56ed-7b5f-476d-ae91-8c1bb851d16f.json
similarity index 52%
copy from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-5b13dcfa-8f76-45b3-a149-6c43182869dd.json
copy to integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-735d56ed-7b5f-476d-ae91-8c1bb851d16f.json
index a2a35834f7..1e592010bb 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-5b13dcfa-8f76-45b3-a149-6c43182869dd.json
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-735d56ed-7b5f-476d-ae91-8c1bb851d16f.json
@@ -1,5 +1,5 @@
{
- "id" : "5b13dcfa-8f76-45b3-a149-6c43182869dd",
+ "id" : "735d56ed-7b5f-476d-ae91-8c1bb851d16f",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:25:47.817132698Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Sure, here's an example JSON object for John Doe:\\n\\n```json\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"description\\\": \\\"An example person with a unique name and a brief description\\\"\\n}\\n```\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":3933350526,\"load_duration\":11705957,\"prompt_eval_count\":60,\"prompt_eval_duration\ [...]
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T09:53:10.671236989Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Here is an example JSON object about John Doe with the fields name and description:\\n\\n```json\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"description\\\": \\\"An example person with the name John Doe\\\"\\n}\\n```\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":3136126679,\"load_duration\":17379924,\"prompt_eval_count\":60,\"prompt_ [...]
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:47 GMT",
+ "Date" : "Thu, 12 Mar 2026 09:53:10 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "5b13dcfa-8f76-45b3-a149-6c43182869dd",
+ "uuid" : "735d56ed-7b5f-476d-ae91-8c1bb851d16f",
"persistent" : true,
- "insertionIndex" : 15
+ "insertionIndex" : 16
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-e7f6e7af-412b-4f34-887c-d19ee0c66d8b.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-89dc149d-8f49-42e4-b157-ca193826fb97.json
similarity index 55%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-e7f6e7af-412b-4f34-887c-d19ee0c66d8b.json
rename to integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-89dc149d-8f49-42e4-b157-ca193826fb97.json
index 4e95ba3c7f..312f380d19 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-e7f6e7af-412b-4f34-887c-d19ee0c66d8b.json
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-89dc149d-8f49-42e4-b157-ca193826fb97.json
@@ -1,24 +1,24 @@
{
- "id" : "e7f6e7af-412b-4f34-887c-d19ee0c66d8b",
+ "id" : "89dc149d-8f49-42e4-b157-ca193826fb97",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
"method" : "POST",
"bodyPatterns" : [ {
- "equalToJson" : "{\n \"model\" : \"granite4:3b\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"Hello - my name is Alice\"\n }, {\n \"role\" : \"assistant\",\n \"content\" : \"Hello Alice! It's nice to meet you. How can I assist you today?\",\n \"tool_calls\" : [ ]\n }, {\n \"role\" : \"user\",\n \"content\" : \"And my favorite color is blue\"\n }, {\n \"role\" : \"assistant\",\n \"content\" : \"That's a lovely choice of color! Blue i [...]
+ "equalToJson" : "{\n \"model\" : \"granite4:3b\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"Hello - my name is Alice\"\n }, {\n \"role\" : \"assistant\",\n \"content\" : \"Hello Alice! It's nice to meet you. How can I assist you today?\",\n \"tool_calls\" : [ ]\n }, {\n \"role\" : \"user\",\n \"content\" : \"And my favorite color is blue\"\n }, {\n \"role\" : \"assistant\",\n \"content\" : \"That's a lovely choice of color! Blue o [...]
"ignoreArrayOrder" : true,
"ignoreExtraElements" : false
} ]
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:26:26.340021889Z\",\"message\":{\"role\":\"assistant\",\"content\":\"Your name is Alice and your favorite color is blue. Is there anything specific you would like to know or discuss regarding this information?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2038958858,\"load_duration\":47826093,\"prompt_eval_count\":135,\"prompt_eval_duration\":564886840,\"eval_count\":27,\"eval_duration\":1404103133}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T09:53:57.861948289Z\",\"message\":{\"role\":\"assistant\",\"content\":\"Your name is Alice and your favorite color is blue. Is there anything specific you would like to know or discuss regarding this information?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1702615652,\"load_duration\":53668184,\"prompt_eval_count\":135,\"prompt_eval_duration\":307615243,\"eval_count\":27,\"eval_duration\":1326830533}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:26 GMT",
+ "Date" : "Thu, 12 Mar 2026 09:53:57 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "e7f6e7af-412b-4f34-887c-d19ee0c66d8b",
+ "uuid" : "89dc149d-8f49-42e4-b157-ca193826fb97",
"persistent" : true,
"insertionIndex" : 3
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-4b8e8d96-42d7-4a16-87ca-c1858066e648.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-a7f5dc9a-3330-441d-8824-d913baaf2515.json
similarity index 83%
copy from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-4b8e8d96-42d7-4a16-87ca-c1858066e648.json
copy to integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-a7f5dc9a-3330-441d-8824-d913baaf2515.json
index d0a2327ca8..17efebea07 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-4b8e8d96-42d7-4a16-87ca-c1858066e648.json
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-a7f5dc9a-3330-441d-8824-d913baaf2515.json
@@ -1,5 +1,5 @@
{
- "id" : "4b8e8d96-42d7-4a16-87ca-c1858066e648",
+ "id" : "a7f5dc9a-3330-441d-8824-d913baaf2515",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:25:57.640601581Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_cjncgqra\",\"function\":{\"index\":0,\"name\":\"longRunningOperation\",\"arguments\":{\"duration\":2,\"steps\":2}}}]},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2356783183,\"load_duration\":47164721,\"prompt_eval_count\":319,\"prompt_eval_duration\":836224093,\"eval_count\":27,\"eval_duration\":1453164185}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T09:53:19.407078876Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_q8izawle\",\"function\":{\"index\":0,\"name\":\"longRunningOperation\",\"arguments\":{\"duration\":2,\"steps\":2}}}]},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1837944411,\"load_duration\":52604556,\"prompt_eval_count\":319,\"prompt_eval_duration\":434334830,\"eval_count\":27,\"eval_duration\":1336961683}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:57 GMT",
+ "Date" : "Thu, 12 Mar 2026 09:53:19 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "4b8e8d96-42d7-4a16-87ca-c1858066e648",
+ "uuid" : "a7f5dc9a-3330-441d-8824-d913baaf2515",
"persistent" : true,
- "insertionIndex" : 13
+ "insertionIndex" : 14
}
\ No newline at end of file
diff --git a/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-af34c8aa-386e-484c-b7b1-5635fc121443.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-af34c8aa-386e-484c-b7b1-5635fc121443.json
new file mode 100644
index 0000000000..9c58220217
--- /dev/null
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-af34c8aa-386e-484c-b7b1-5635fc121443.json
@@ -0,0 +1,24 @@
+{
+ "id" : "af34c8aa-386e-484c-b7b1-5635fc121443",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"orca-mini\",\n \"messages\" : [ {\n \"role\" : \"system\",\n \"content\" : \"You are a whimsical storyteller. Your responses should be imaginative, descriptive, and always include a touch of magic. Start every story with 'Once upon a starlit night...'\"\n }, {\n \"role\" : \"user\",\n \"content\" : \"Write a short story about a lost cat.\"\n } ],\n \"options\" : {\n \"temperature\" : 0.3,\n \"stop\" : [ ]\n },\n \"stream\" [...]
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : false
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T09:54:18.439524809Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Once upon a starlit night, a curious little girl named Lily wandered through the forest, searching for her beloved cat, Boots. She had been missing for days and couldn't stop thinking about him. As she walked, she heard a faint meowing sound behind her. She turned around to see a tiny kitten, shivering and alone, staring up at her with big, pleading [...]
+ "headers" : {
+ "Date" : "Thu, 12 Mar 2026 09:54:18 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "af34c8aa-386e-484c-b7b1-5635fc121443",
+ "persistent" : true,
+ "insertionIndex" : 1
+}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-50282a37-becc-455a-829b-8c95dbfeac83.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-cd782b16-9b47-43d1-966d-f57f33ed5718.json
similarity index 66%
copy from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-50282a37-becc-455a-829b-8c95dbfeac83.json
copy to integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-cd782b16-9b47-43d1-966d-f57f33ed5718.json
index a984762216..c5403a1dd3 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-50282a37-becc-455a-829b-8c95dbfeac83.json
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-cd782b16-9b47-43d1-966d-f57f33ed5718.json
@@ -1,5 +1,5 @@
{
- "id" : "50282a37-becc-455a-829b-8c95dbfeac83",
+ "id" : "cd782b16-9b47-43d1-966d-f57f33ed5718",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:25:14.47274051Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_w3upfd1y\",\"function\":{\"index\":0,\"name\":\"QueryUserDatabaseByUserID\",\"arguments\":{\"userId\":123}}}]},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":4472695102,\"load_duration\":43611230,\"prompt_eval_count\":200,\"prompt_eval_duration\":3210769739,\"eval_count\":23,\"eval_duration\":1200591755}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T09:52:35.899115346Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_11t405yl\",\"function\":{\"index\":0,\"name\":\"QueryUserDatabaseByUserID\",\"arguments\":{\"userId\":123}}}]},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":5121311754,\"load_duration\":1617003393,\"prompt_eval_count\":200,\"prompt_eval_duration\":2384739468,\"eval_count\":23,\"eval_duration\":1107102121}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:14 GMT",
+ "Date" : "Thu, 12 Mar 2026 09:52:35 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "50282a37-becc-455a-829b-8c95dbfeac83",
+ "uuid" : "cd782b16-9b47-43d1-966d-f57f33ed5718",
"persistent" : true,
- "insertionIndex" : 20
+ "insertionIndex" : 21
}
\ No newline at end of file
diff --git a/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-d44e4f60-fcba-4b6a-b468-110c5ef3968f.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-d44e4f60-fcba-4b6a-b468-110c5ef3968f.json
new file mode 100644
index 0000000000..60c103a2e1
--- /dev/null
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-d44e4f60-fcba-4b6a-b468-110c5ef3968f.json
@@ -0,0 +1,24 @@
+{
+ "id" : "d44e4f60-fcba-4b6a-b468-110c5ef3968f",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"orca-mini\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"Return an example JSON object about a person named 'John Doe' with the fields age and description\"\n }, {\n \"role\" : \"assistant\",\n \"content\" : \" Here is an example JSON object about John Doe with the fields age and description:\\n\\n```json\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"age\\\": 30,\\n \\\"description\\\": \\\"John Doe is a profession [...]
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : false
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T09:53:50.493191339Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Sure, here's an example JSON object that follows the format you specified:\\n\\n```json\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"age\\\": 30,\\n \\\"description\\\": \\\"John Doe is a professional in the field of technology. He has worked for several years and has a wealth of experience.\\\"\\n}\\n```\"},\"done\":true,\"done_reason\":\"stop\",\" [...]
+ "headers" : {
+ "Date" : "Thu, 12 Mar 2026 09:53:50 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "d44e4f60-fcba-4b6a-b468-110c5ef3968f",
+ "persistent" : true,
+ "insertionIndex" : 6
+}
\ No newline at end of file
diff --git a/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-f25e934d-75c9-4136-937c-5be74d187f81.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-f25e934d-75c9-4136-937c-5be74d187f81.json
new file mode 100644
index 0000000000..5d890c1061
--- /dev/null
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-f25e934d-75c9-4136-937c-5be74d187f81.json
@@ -0,0 +1,24 @@
+{
+ "id" : "f25e934d-75c9-4136-937c-5be74d187f81",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"orca-mini\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"What is Apache Camel?\"\n } ],\n \"options\" : {\n \"temperature\" : 0.3,\n \"stop\" : [ ]\n },\n \"stream\" : false,\n \"tools\" : [ ]\n}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : false
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T09:52:43.232164748Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Apache Camel is an open-source framework used for building and managing business processes that involve data movement, messaging, and processing. It provides a suite of modular and reusable components that can be used to create customized pipelines and workflows. These components include routes, endpoints, bindings, and serializers/deserializers. Apa [...]
+ "headers" : {
+ "Date" : "Thu, 12 Mar 2026 09:52:43 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "f25e934d-75c9-4136-937c-5be74d187f81",
+ "persistent" : true,
+ "insertionIndex" : 18
+}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-46dd74e1-aa17-497e-bad5-fc74ee8d7959.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-f6c67707-2d86-4806-9a70-2e3b87f76f38.json
similarity index 53%
copy from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-46dd74e1-aa17-497e-bad5-fc74ee8d7959.json
copy to integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-f6c67707-2d86-4806-9a70-2e3b87f76f38.json
index e58e9d79b1..760fbe5050 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-46dd74e1-aa17-497e-bad5-fc74ee8d7959.json
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-f6c67707-2d86-4806-9a70-2e3b87f76f38.json
@@ -1,5 +1,5 @@
{
- "id" : "46dd74e1-aa17-497e-bad5-fc74ee8d7959",
+ "id" : "f6c67707-2d86-4806-9a70-2e3b87f76f38",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:25:09.879393101Z\",\"message\":{\"role\":\"assistant\",\"content\":\" According to Miles of Camels Car Rental's cancellations policy, if you cancel your rental 24 hours before pickup, you will receive a full refund. If you cancel between 12 and 24 hours before pickup, you will receive a 50% refund. If you cancel less than 12 hours before pickup, there will be no refund.\\n\\nAdditionally, according to the company's veh [...]
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T09:52:30.652901631Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Miles of Camels Car Rental cancellations policy for cancelling 24 hours before pickup is as follows:\\n\\nRefund amount: Full refund\\n\\nThis policy applies to any cancellation made 24 hours or less before the pickup date and time. The cancellation must be made in writing by emailing the customer service department at [email protected] or calling (5 [...]
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:09 GMT",
+ "Date" : "Thu, 12 Mar 2026 09:52:30 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "46dd74e1-aa17-497e-bad5-fc74ee8d7959",
+ "uuid" : "f6c67707-2d86-4806-9a70-2e3b87f76f38",
"persistent" : true,
- "insertionIndex" : 21
+ "insertionIndex" : 22
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-98a9059a-eb53-4580-af3c-d32c1a30b95d.json b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-f76fd9b1-66ac-4d0e-bbbb-795b5e05509d.json
similarity index 57%
copy from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-98a9059a-eb53-4580-af3c-d32c1a30b95d.json
copy to integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-f76fd9b1-66ac-4d0e-bbbb-795b5e05509d.json
index d36d8cadba..dc539ff575 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-98a9059a-eb53-4580-af3c-d32c1a30b95d.json
+++ b/integration-tests-jvm/langchain4j-agent-ql4j/src/test/resources/mappings/api_chat-f76fd9b1-66ac-4d0e-bbbb-795b5e05509d.json
@@ -1,5 +1,5 @@
{
- "id" : "98a9059a-eb53-4580-af3c-d32c1a30b95d",
+ "id" : "f76fd9b1-66ac-4d0e-bbbb-795b5e05509d",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:26:06.209091727Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Sure, here's an example JSON object for John Doe:\\n\\n```json\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"description\\\": \\\"An example person with a unique name and a brief description.\\\"\\n}\\n```\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":3900537511,\"load_duration\":9482003,\"prompt_eval_count\":90,\"prompt_eval_duration\ [...]
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T09:53:28.559023297Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Sure, here's an example JSON object about John Doe:\\n\\n```\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"description\\\": \\\"A person with a unique name that is easy to remember and pronounce.\\\"\\n}\\n```\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":5048182535,\"load_duration\":1472020430,\"prompt_eval_count\":90,\"prompt_eval_du [...]
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:06 GMT",
+ "Date" : "Thu, 12 Mar 2026 09:53:28 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "98a9059a-eb53-4580-af3c-d32c1a30b95d",
+ "uuid" : "f76fd9b1-66ac-4d0e-bbbb-795b5e05509d",
"persistent" : true,
- "insertionIndex" : 11
+ "insertionIndex" : 12
}
\ No newline at end of file
diff --git a/integration-tests-jvm/pom.xml b/integration-tests-jvm/pom.xml
index edac507521..a1a692967a 100644
--- a/integration-tests-jvm/pom.xml
+++ b/integration-tests-jvm/pom.xml
@@ -76,6 +76,7 @@
<module>json-patch</module>
<module>jsonapi</module>
<module>junit-test-framework</module>
+ <module>langchain4j-agent-ql4j</module>
<module>ldif</module>
<module>lucene</module>
<module>main-devmode</module>
diff --git a/integration-tests/langchain4j-agent/src/main/java/org/apache/camel/quarkus/component/langchain4j/agent/it/AgentProducers.java b/integration-tests/langchain4j-agent/src/main/java/org/apache/camel/quarkus/component/langchain4j/agent/it/AgentProducers.java
index 8617d3f8c1..d686f20de4 100644
--- a/integration-tests/langchain4j-agent/src/main/java/org/apache/camel/quarkus/component/langchain4j/agent/it/AgentProducers.java
+++ b/integration-tests/langchain4j-agent/src/main/java/org/apache/camel/quarkus/component/langchain4j/agent/it/AgentProducers.java
@@ -41,6 +41,7 @@ import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import dev.langchain4j.store.memory.chat.ChatMemoryStore;
+import io.quarkus.arc.lookup.LookupUnlessProperty;
import io.smallrye.common.annotation.Identifier;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;
@@ -97,6 +98,8 @@ public class AgentProducers {
}
@Produces
+ //in special cases (used by test modules inheriting this module), lookup of this bean has to be disabled
+ @LookupUnlessProperty(name = "cq-test.retrieval.augmentor.disabled", stringValue = "true")
RetrievalAugmentor retrievalAugmentor() throws IOException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try (InputStream stream = classLoader.getResourceAsStream("rag/company-knowledge-base.txt")) {
@@ -195,7 +198,7 @@ public class AgentProducers {
@Identifier("agentWithRag")
public Agent agentWithRag(
@Identifier("ollamaOrcaMiniModel") ChatModel chatModel,
- RetrievalAugmentor retrievalAugmentor) {
+ RetrievalAugmentor retrievalAugmentor) throws IOException {
return new AgentWithoutMemory(new AgentConfiguration()
.withChatModel(chatModel)
.withRetrievalAugmentor(retrievalAugmentor));
diff --git a/integration-tests/langchain4j-agent/src/test/java/org/apache/camel/quarkus/component/langchain4j/agent/it/Langchain4jAgentTestResource.java b/integration-tests/langchain4j-agent/src/test/java/org/apache/camel/quarkus/component/langchain4j/agent/it/Langchain4jAgentTestResource.java
index e579e9c27f..7ae167b9e7 100644
--- a/integration-tests/langchain4j-agent/src/test/java/org/apache/camel/quarkus/component/langchain4j/agent/it/Langchain4jAgentTestResource.java
+++ b/integration-tests/langchain4j-agent/src/test/java/org/apache/camel/quarkus/component/langchain4j/agent/it/Langchain4jAgentTestResource.java
@@ -22,10 +22,16 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.TimeUnit;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import com.github.tomakehurst.wiremock.stubbing.StubMapping;
import org.apache.camel.quarkus.component.langchain4j.agent.it.util.ProcessUtils;
import org.apache.camel.quarkus.test.wiremock.WireMockTestResourceLifecycleManager;
@@ -55,18 +61,44 @@ public class Langchain4jAgentTestResource extends WireMockTestResourceLifecycleM
@Override
protected void processRecordedStubMappings(List<StubMapping> stubMappings) {
- stubMappings.forEach(mapping -> {
+ // Process stubs in recording order so we keep the first occurrence of each unique request body
+ List<StubMapping> sorted = new ArrayList<>(stubMappings);
+ sorted.sort(Comparator.comparingLong(StubMapping::getInsertionIndex));
+
+ Set<String> seenRequestBodies = new HashSet<>();
+ ObjectMapper mapper = new ObjectMapper();
+
+ for (StubMapping mapping : sorted) {
String fileName = mapping.getName() + "-" + mapping.getId() + ".json";
Path mappingFilePath = Paths.get("./src/test/resources/mappings/", fileName);
- // ignoreExtraElements directive can lead to WireMock getting confused about which stub to use on request matching.
- // Force disabling it manually since there's no specific WireMock config option to tune it
+ // When multiple tests send identical requests, WireMock records duplicate stubs and links them via
+ // a scenario state machine to enforce recording-time ordering. During replay this breaks when tests
+ // run in a different order. Deduplicate by keeping only the first stub per unique request body.
+ String requestBodyKey = normalizeRequestBody(mapper, mapping);
+ if (requestBodyKey != null && !seenRequestBodies.add(requestBodyKey)) {
+ try {
+ Files.deleteIfExists(mappingFilePath);
+ } catch (IOException e) {
+ LOG.warnf("Failed to delete duplicate stub %s: %s", fileName, e.getMessage());
+ }
+ continue;
+ }
+
try {
- String mappingContent = Files.readString(mappingFilePath);
- mappingContent = mappingContent.replace("\"ignoreExtraElements\" : true", "\"ignoreExtraElements\" : false");
- Files.writeString(mappingFilePath, mappingContent);
+ ObjectNode rootNode = (ObjectNode) mapper.readTree(Files.readString(mappingFilePath));
+
+ // Remove scenario state so stubs are not tied to recording-time test execution order
+ rootNode.remove("scenarioName");
+ rootNode.remove("requiredScenarioState");
+ rootNode.remove("newScenarioState");
+
+ // ignoreExtraElements can lead to WireMock matching the wrong stub; force it off
+ String content = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode);
+ content = content.replace("\"ignoreExtraElements\" : true", "\"ignoreExtraElements\" : false");
+ Files.writeString(mappingFilePath, content);
} catch (IOException e) {
- throw new RuntimeException(e);
+ throw new RuntimeException("Failed to process stub mapping " + fileName, e);
}
// RetrievalAugmentor bean setup causes /api/embed stubs to be recorded on every test run.
@@ -80,7 +112,21 @@ public class Langchain4jAgentTestResource extends WireMockTestResourceLifecycleM
// Ignored
}
}
- });
+ }
+ }
+
+ private String normalizeRequestBody(ObjectMapper mapper, StubMapping mapping) {
+ var bodyPatterns = mapping.getRequest().getBodyPatterns();
+ if (bodyPatterns == null || bodyPatterns.isEmpty()) {
+ return null;
+ }
+ try {
+ // Normalize to canonical JSON so whitespace differences don't prevent deduplication
+ String body = String.valueOf(bodyPatterns.get(0).getValue());
+ return mapper.writeValueAsString(mapper.readTree(body));
+ } catch (Exception e) {
+ return String.valueOf(bodyPatterns.get(0).getValue());
+ }
}
@Override
diff --git a/integration-tests/langchain4j-agent/src/test/resources/__files/api_embed-1e8084ee-91b3-4095-86b7-9845fe1480d6.json b/integration-tests/langchain4j-agent/src/test/resources/__files/api_embed-1e8084ee-91b3-4095-86b7-9845fe1480d6.json
deleted file mode 100644
index 73198be1ed..0000000000
--- a/integration-tests/langchain4j-agent/src/test/resources/__files/api_embed-1e8084ee-91b3-4095-86b7-9845fe1480d6.json
+++ /dev/null
@@ -1 +0,0 @@
-{"model":"nomic-embed-text","embeddings":[[-0.0009466486,0.037309933,-0.1915589,-0.023723029,0.05843722,-0.035545707,-0.0017817644,-0.015704276,-0.028122663,-0.0055035865,-0.052609082,0.04383919,0.00039316143,-0.023646308,0.069905564,-0.029778978,0.0077509126,-0.07298615,-0.06070862,0.091046594,-0.030032177,-0.0020017496,-0.0469251,-0.052244417,0.032175764,-0.011999858,-0.007285211,0.058825955,-0.051475406,-0.025669474,0.025158448,-0.008839627,0.04279815,-0.040296685,-0.07954074,-0.06699 [...]
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-07483132-9cdf-4380-9dc7-98735923d83f.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-07483132-9cdf-4380-9dc7-98735923d83f.json
new file mode 100644
index 0000000000..d5bc308da2
--- /dev/null
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-07483132-9cdf-4380-9dc7-98735923d83f.json
@@ -0,0 +1,24 @@
+{
+ "id" : "07483132-9cdf-4380-9dc7-98735923d83f",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"granite4:3b\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"Hello - my name is Alice\"\n }, {\n \"role\" : \"assistant\",\n \"content\" : \"Hello Alice! It's nice to meet you. How can I assist you today?\",\n \"tool_calls\" : [ ]\n }, {\n \"role\" : \"user\",\n \"content\" : \"And my favorite color is blue\"\n }, {\n \"role\" : \"assistant\",\n \"content\" : \"That's lovely to know, Alice! Blue is a [...]
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : false
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T08:54:39.620043426Z\",\"message\":{\"role\":\"assistant\",\"content\":\"Your name is Alice and your favorite color is blue. If you have any other details or preferences you'd like to share, feel free to let me know!\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2009959242,\"load_duration\":52837979,\"prompt_eval_count\":126,\"prompt_eval_duration\":302646671,\"eval_count\":33,\"eval_duration\":1638025929}",
+ "headers" : {
+ "Date" : "Thu, 12 Mar 2026 08:54:39 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "07483132-9cdf-4380-9dc7-98735923d83f",
+ "persistent" : true,
+ "insertionIndex" : 3
+}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-5b13dcfa-8f76-45b3-a149-6c43182869dd.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-169fb9d1-d29b-4e95-84a4-1ab133179ce5.json
similarity index 64%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-5b13dcfa-8f76-45b3-a149-6c43182869dd.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-169fb9d1-d29b-4e95-84a4-1ab133179ce5.json
index a2a35834f7..feede8f613 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-5b13dcfa-8f76-45b3-a149-6c43182869dd.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-169fb9d1-d29b-4e95-84a4-1ab133179ce5.json
@@ -1,5 +1,5 @@
{
- "id" : "5b13dcfa-8f76-45b3-a149-6c43182869dd",
+ "id" : "169fb9d1-d29b-4e95-84a4-1ab133179ce5",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:25:47.817132698Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Sure, here's an example JSON object for John Doe:\\n\\n```json\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"description\\\": \\\"An example person with a unique name and a brief description\\\"\\n}\\n```\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":3933350526,\"load_duration\":11705957,\"prompt_eval_count\":60,\"prompt_eval_duration\ [...]
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T08:53:59.397221819Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Sure, here's an example JSON object for John Doe:\\n\\n```json\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"description\\\": \\\"An example person with the field name of name.\\\"\\n}\\n```\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2991784333,\"load_duration\":18256360,\"prompt_eval_count\":60,\"prompt_eval_duration\":561792667,\" [...]
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:47 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:53:59 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "5b13dcfa-8f76-45b3-a149-6c43182869dd",
+ "uuid" : "169fb9d1-d29b-4e95-84a4-1ab133179ce5",
"persistent" : true,
"insertionIndex" : 15
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-4b8e8d96-42d7-4a16-87ca-c1858066e648.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-19d22465-3fb9-4f32-94b0-e0abf68f0df6.json
similarity index 84%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-4b8e8d96-42d7-4a16-87ca-c1858066e648.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-19d22465-3fb9-4f32-94b0-e0abf68f0df6.json
index d0a2327ca8..1932de273a 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-4b8e8d96-42d7-4a16-87ca-c1858066e648.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-19d22465-3fb9-4f32-94b0-e0abf68f0df6.json
@@ -1,5 +1,5 @@
{
- "id" : "4b8e8d96-42d7-4a16-87ca-c1858066e648",
+ "id" : "19d22465-3fb9-4f32-94b0-e0abf68f0df6",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:25:57.640601581Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_cjncgqra\",\"function\":{\"index\":0,\"name\":\"longRunningOperation\",\"arguments\":{\"duration\":2,\"steps\":2}}}]},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2356783183,\"load_duration\":47164721,\"prompt_eval_count\":319,\"prompt_eval_duration\":836224093,\"eval_count\":27,\"eval_duration\":1453164185}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T08:54:08.111007628Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_y8fompp2\",\"function\":{\"index\":0,\"name\":\"longRunningOperation\",\"arguments\":{\"duration\":2,\"steps\":2}}}]},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1827555038,\"load_duration\":54331929,\"prompt_eval_count\":319,\"prompt_eval_duration\":432577733,\"eval_count\":27,\"eval_duration\":1326824578}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:57 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:54:08 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "4b8e8d96-42d7-4a16-87ca-c1858066e648",
+ "uuid" : "19d22465-3fb9-4f32-94b0-e0abf68f0df6",
"persistent" : true,
"insertionIndex" : 13
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-b682d927-b36f-427d-b404-b754b054ddb9.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-1a58e2d0-7224-4a5e-a01b-318e83a9fb29.json
similarity index 69%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-b682d927-b36f-427d-b404-b754b054ddb9.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-1a58e2d0-7224-4a5e-a01b-318e83a9fb29.json
index 53ad1cb5fe..aa1772e3e7 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-b682d927-b36f-427d-b404-b754b054ddb9.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-1a58e2d0-7224-4a5e-a01b-318e83a9fb29.json
@@ -1,5 +1,5 @@
{
- "id" : "b682d927-b36f-427d-b404-b754b054ddb9",
+ "id" : "1a58e2d0-7224-4a5e-a01b-318e83a9fb29",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:26:21.562588173Z\",\"message\":{\"role\":\"assistant\",\"content\":\"Hello Alice! It's nice to meet you. How can I assist you today?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1615998648,\"load_duration\":48578413,\"prompt_eval_count\":36,\"prompt_eval_duration\":645865891,\"eval_count\":18,\"eval_duration\":909874821}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T08:54:35.615906218Z\",\"message\":{\"role\":\"assistant\",\"content\":\"Hello Alice! It's nice to meet you. How can I assist you today?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2900370364,\"load_duration\":1604196710,\"prompt_eval_count\":36,\"prompt_eval_duration\":441392703,\"eval_count\":18,\"eval_duration\":845433348}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:21 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:54:35 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "b682d927-b36f-427d-b404-b754b054ddb9",
+ "uuid" : "1a58e2d0-7224-4a5e-a01b-318e83a9fb29",
"persistent" : true,
"insertionIndex" : 5
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-2578100a-828a-4b81-bbf2-81dfd2a133b2.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-2578100a-828a-4b81-bbf2-81dfd2a133b2.json
new file mode 100644
index 0000000000..a6a0d764a1
--- /dev/null
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-2578100a-828a-4b81-bbf2-81dfd2a133b2.json
@@ -0,0 +1,24 @@
+{
+ "id" : "2578100a-828a-4b81-bbf2-81dfd2a133b2",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"orca-mini\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"What is Apache Camel?\"\n } ],\n \"options\" : {\n \"temperature\" : 0.3,\n \"stop\" : [ ]\n },\n \"stream\" : false,\n \"tools\" : [ ]\n}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : false
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T08:53:34.028672381Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Apache Camel is an open-source project that provides a framework for building high-performance, resilient, and fault-tolerant distributed systems. It allows you to easily build complex workflows by integrating, processing, and moving data between different systems or services. It supports a wide range of protocols and APIs, including HTTP, JMS, REST, [...]
+ "headers" : {
+ "Date" : "Thu, 12 Mar 2026 08:53:34 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "2578100a-828a-4b81-bbf2-81dfd2a133b2",
+ "persistent" : true,
+ "insertionIndex" : 17
+}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3553e0ce-5315-4adc-9cf9-7aa020d3fa0c.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3397f049-5f70-40ca-ab2f-8169b147fef4.json
similarity index 62%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3553e0ce-5315-4adc-9cf9-7aa020d3fa0c.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3397f049-5f70-40ca-ab2f-8169b147fef4.json
index 48299e2f16..afb4344326 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3553e0ce-5315-4adc-9cf9-7aa020d3fa0c.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3397f049-5f70-40ca-ab2f-8169b147fef4.json
@@ -1,5 +1,5 @@
{
- "id" : "3553e0ce-5315-4adc-9cf9-7aa020d3fa0c",
+ "id" : "3397f049-5f70-40ca-ab2f-8169b147fef4",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:26:19.916999414Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Sure, I can help with that! Can you please provide me with the specific format you want the JSON object to follow?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1770008575,\"load_duration\":17062707,\"prompt_eval_count\":52,\"prompt_eval_duration\":479905991,\"eval_count\":26,\"eval_duration\":1265578814}",
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T08:54:32.615262279Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Sure, I'd be happy to help! Can you please provide me with the specific format you want the JSON object to follow?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1554193662,\"load_duration\":17846961,\"prompt_eval_count\":52,\"prompt_eval_duration\":235272960,\"eval_count\":28,\"eval_duration\":1295301623}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:19 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:54:32 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "3553e0ce-5315-4adc-9cf9-7aa020d3fa0c",
+ "uuid" : "3397f049-5f70-40ca-ab2f-8169b147fef4",
"persistent" : true,
"insertionIndex" : 6
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-98a9059a-eb53-4580-af3c-d32c1a30b95d.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-35248f94-bc7e-471a-af71-f485e1621fb4.json
similarity index 58%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-98a9059a-eb53-4580-af3c-d32c1a30b95d.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-35248f94-bc7e-471a-af71-f485e1621fb4.json
index d36d8cadba..6a9dc6ddf4 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-98a9059a-eb53-4580-af3c-d32c1a30b95d.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-35248f94-bc7e-471a-af71-f485e1621fb4.json
@@ -1,5 +1,5 @@
{
- "id" : "98a9059a-eb53-4580-af3c-d32c1a30b95d",
+ "id" : "35248f94-bc7e-471a-af71-f485e1621fb4",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:26:06.209091727Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Sure, here's an example JSON object for John Doe:\\n\\n```json\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"description\\\": \\\"An example person with a unique name and a brief description.\\\"\\n}\\n```\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":3900537511,\"load_duration\":9482003,\"prompt_eval_count\":90,\"prompt_eval_duration\ [...]
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T08:54:17.301177168Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Sure, here's an example JSON object about John Doe:\\n\\n```\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"description\\\": \\\"A person with a unique name that is easy to remember and pronounce.\\\"\\n}\\n```\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":5075527283,\"load_duration\":1474581221,\"prompt_eval_count\":90,\"prompt_eval_du [...]
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:06 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:54:17 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "98a9059a-eb53-4580-af3c-d32c1a30b95d",
+ "uuid" : "35248f94-bc7e-471a-af71-f485e1621fb4",
"persistent" : true,
"insertionIndex" : 11
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-19496598-286d-4354-8021-d0141973f657.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3bd2313a-d8c2-45cf-98a3-1291e61dbed8.json
similarity index 82%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-19496598-286d-4354-8021-d0141973f657.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3bd2313a-d8c2-45cf-98a3-1291e61dbed8.json
index 66426d79ea..e5c1f9f59d 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-19496598-286d-4354-8021-d0141973f657.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3bd2313a-d8c2-45cf-98a3-1291e61dbed8.json
@@ -1,5 +1,5 @@
{
- "id" : "19496598-286d-4354-8021-d0141973f657",
+ "id" : "3bd2313a-d8c2-45cf-98a3-1291e61dbed8",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:25:55.26755228Z\",\"message\":{\"role\":\"assistant\",\"content\":\"[\\n \\\"longRunningOperation\\\",\\n \\\"add\\\",\\n \\\"echo\\\"\\n]\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":7199497126,\"load_duration\":44301920,\"prompt_eval_count\":326,\"prompt_eval_duration\":6246528366,\"eval_count\":17,\"eval_duration\":894557129}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T08:54:06.153461065Z\",\"message\":{\"role\":\"assistant\",\"content\":\"[\\n \\\"longRunningOperation\\\",\\n \\\"add\\\",\\n \\\"echo\\\"\\n]\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":6533832018,\"load_duration\":1614820343,\"prompt_eval_count\":326,\"prompt_eval_duration\":4090594435,\"eval_count\":17,\"eval_duration\":817664482}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:55 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:54:06 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "19496598-286d-4354-8021-d0141973f657",
+ "uuid" : "3bd2313a-d8c2-45cf-98a3-1291e61dbed8",
"persistent" : true,
"insertionIndex" : 14
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3d26b3c9-b392-4bb6-b3e6-622c857fc1a4.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3d26b3c9-b392-4bb6-b3e6-622c857fc1a4.json
new file mode 100644
index 0000000000..a4f9656d89
--- /dev/null
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3d26b3c9-b392-4bb6-b3e6-622c857fc1a4.json
@@ -0,0 +1,24 @@
+{
+ "id" : "3d26b3c9-b392-4bb6-b3e6-622c857fc1a4",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"orca-mini\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"Return an example JSON object about a person named 'John Doe' with the fields age and description\"\n } ],\n \"options\" : {\n \"temperature\" : 0.3,\n \"stop\" : [ ]\n },\n \"stream\" : false,\n \"tools\" : [ ]\n}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : false
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T08:54:31.031225222Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Sure, here is an example JSON object for John Doe with the fields age and description:\\n\\n```\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"age\\\": 30,\\n \\\"description\\\": \\\"John Doe is a professional software developer with over 5 years of experience. He enjoys working on challenging projects and collaborating with others to achieve shared [...]
+ "headers" : {
+ "Date" : "Thu, 12 Mar 2026 08:54:31 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "3d26b3c9-b392-4bb6-b3e6-622c857fc1a4",
+ "persistent" : true,
+ "insertionIndex" : 7
+}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3d941d4b-d1e9-4e58-aeaf-d52756afeef0.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3d941d4b-d1e9-4e58-aeaf-d52756afeef0.json
new file mode 100644
index 0000000000..dff87f6b5a
--- /dev/null
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3d941d4b-d1e9-4e58-aeaf-d52756afeef0.json
@@ -0,0 +1,24 @@
+{
+ "id" : "3d941d4b-d1e9-4e58-aeaf-d52756afeef0",
+ "name" : "api_chat",
+ "request" : {
+ "url" : "/api/chat",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\n \"model\" : \"orca-mini\",\n \"messages\" : [ {\n \"role\" : \"system\",\n \"content\" : \"You are a whimsical storyteller. Your responses should be imaginative, descriptive, and always include a touch of magic. Start every story with 'Once upon a starlit night...'\"\n }, {\n \"role\" : \"user\",\n \"content\" : \"Write a short story about a lost cat.\"\n } ],\n \"options\" : {\n \"temperature\" : 0.3,\n \"stop\" : [ ]\n },\n \"stream\" [...]
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : false
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T08:55:08.168700234Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Once upon a starlit night, a curious little girl named Lily wandered through the forest, searching for her beloved cat, Whiskers. She had been missing for days and couldn't shake the feeling that something was off. As she walked, the trees grew taller and the leaves rustled in the wind, until she came across a clearing where a group of animals were g [...]
+ "headers" : {
+ "Date" : "Thu, 12 Mar 2026 08:55:08 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ }
+ },
+ "uuid" : "3d941d4b-d1e9-4e58-aeaf-d52756afeef0",
+ "persistent" : true,
+ "insertionIndex" : 1
+}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-4bd017da-a2a1-4206-b70e-7c0a3f9ddc11.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-4bd017da-a2a1-4206-b70e-7c0a3f9ddc11.json
deleted file mode 100644
index ffec0f3930..0000000000
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-4bd017da-a2a1-4206-b70e-7c0a3f9ddc11.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "id" : "4bd017da-a2a1-4206-b70e-7c0a3f9ddc11",
- "name" : "api_chat",
- "request" : {
- "url" : "/api/chat",
- "method" : "POST",
- "bodyPatterns" : [ {
- "equalToJson" : "{\n \"model\" : \"orca-mini\",\n \"messages\" : [ {\n \"role\" : \"system\",\n \"content\" : \"You are a whimsical storyteller. Your responses should be imaginative, descriptive, and always include a touch of magic. Start every story with 'Once upon a starlit night...'\"\n }, {\n \"role\" : \"user\",\n \"content\" : \"Write a short story about a lost cat.\"\n } ],\n \"options\" : {\n \"temperature\" : 0.3,\n \"stop\" : [ ]\n },\n \"stream\" [...]
- "ignoreArrayOrder" : true,
- "ignoreExtraElements" : false
- } ]
- },
- "response" : {
- "status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:26:53.383242474Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Once upon a starlit night, a curious little girl named Lily wandered through the forest, searching for her missing pet cat. She had been caring for the feline for weeks, but he had disappeared without a trace. As she walked deeper into the woods, the trees grew thicker and the path became less clear. Suddenly, she heard a faint meowing sound coming f [...]
- "headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:53 GMT",
- "Content-Type" : "application/json; charset=utf-8"
- }
- },
- "uuid" : "4bd017da-a2a1-4206-b70e-7c0a3f9ddc11",
- "persistent" : true,
- "scenarioName" : "scenario-1-api-chat",
- "requiredScenarioState" : "scenario-1-api-chat-2",
- "insertionIndex" : 1
-}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-cbafc9dd-bc75-4283-aba6-e2950556ba5f.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-4fb0b393-7f23-4703-8a09-a146222baf05.json
similarity index 75%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-cbafc9dd-bc75-4283-aba6-e2950556ba5f.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-4fb0b393-7f23-4703-8a09-a146222baf05.json
index b8bcad0f1e..068b5b9196 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-cbafc9dd-bc75-4283-aba6-e2950556ba5f.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-4fb0b393-7f23-4703-8a09-a146222baf05.json
@@ -1,5 +1,5 @@
{
- "id" : "cbafc9dd-bc75-4283-aba6-e2950556ba5f",
+ "id" : "4fb0b393-7f23-4703-8a09-a146222baf05",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:26:10.940178285Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_nd08sj0v\",\"function\":{\"index\":0,\"name\":\"addNumbers\",\"arguments\":{\"arg0\":10,\"arg1\":5}}}]},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":4693362054,\"load_duration\":47542777,\"prompt_eval_count\":193,\"prompt_eval_duration\":3128994736,\"eval_count\":28,\"eval_duration\":1492960511}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T08:54:22.787558621Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_hafu094r\",\"function\":{\"index\":0,\"name\":\"addNumbers\",\"arguments\":{\"arg0\":10,\"arg1\":5}}}]},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":5324173298,\"load_duration\":1605030908,\"prompt_eval_count\":193,\"prompt_eval_duration\":2346002933,\"eval_count\":28,\"eval_duration\":1358329760}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:10 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:54:22 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "cbafc9dd-bc75-4283-aba6-e2950556ba5f",
+ "uuid" : "4fb0b393-7f23-4703-8a09-a146222baf05",
"persistent" : true,
"insertionIndex" : 10
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-46dd74e1-aa17-497e-bad5-fc74ee8d7959.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-5716f4c5-5f23-4975-8015-0e0026572e7c.json
similarity index 55%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-46dd74e1-aa17-497e-bad5-fc74ee8d7959.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-5716f4c5-5f23-4975-8015-0e0026572e7c.json
index e58e9d79b1..87642655e1 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-46dd74e1-aa17-497e-bad5-fc74ee8d7959.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-5716f4c5-5f23-4975-8015-0e0026572e7c.json
@@ -1,5 +1,5 @@
{
- "id" : "46dd74e1-aa17-497e-bad5-fc74ee8d7959",
+ "id" : "5716f4c5-5f23-4975-8015-0e0026572e7c",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:25:09.879393101Z\",\"message\":{\"role\":\"assistant\",\"content\":\" According to Miles of Camels Car Rental's cancellations policy, if you cancel your rental 24 hours before pickup, you will receive a full refund. If you cancel between 12 and 24 hours before pickup, you will receive a 50% refund. If you cancel less than 12 hours before pickup, there will be no refund.\\n\\nAdditionally, according to the company's veh [...]
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T08:53:19.65614024Z\",\"message\":{\"role\":\"assistant\",\"content\":\" According to the Miles of Camels Car Rental cancellations policy, if you cancel 24 hours before pickup, you will receive a full refund. If you cancel between 12 and 24 hours before pickup, you will receive a 50% refund. If you cancel less than 12 hours before pickup, there will be no refund.\\n\\nAdditionally, according to the company's vehicle return [...]
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:09 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:53:19 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "46dd74e1-aa17-497e-bad5-fc74ee8d7959",
+ "uuid" : "5716f4c5-5f23-4975-8015-0e0026572e7c",
"persistent" : true,
"insertionIndex" : 21
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-65a5a977-8a4c-4c28-aff7-f4dc7500df43.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-65a5a977-8a4c-4c28-aff7-f4dc7500df43.json
deleted file mode 100644
index 95eea777ae..0000000000
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-65a5a977-8a4c-4c28-aff7-f4dc7500df43.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "id" : "65a5a977-8a4c-4c28-aff7-f4dc7500df43",
- "name" : "api_chat",
- "request" : {
- "url" : "/api/chat",
- "method" : "POST",
- "bodyPatterns" : [ {
- "equalToJson" : "{\n \"model\" : \"orca-mini\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"Hello - my name is Alice\"\n } ],\n \"options\" : {\n \"temperature\" : 0.3,\n \"stop\" : [ ]\n },\n \"stream\" : false,\n \"tools\" : [ ]\n}",
- "ignoreArrayOrder" : true,
- "ignoreExtraElements" : false
- } ]
- },
- "response" : {
- "status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:26:13.220162181Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Hello, Alice. How can I assist you today?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":900089323,\"load_duration\":9450899,\"prompt_eval_count\":46,\"prompt_eval_duration\":319079740,\"eval_count\":12,\"eval_duration\":567495610}",
- "headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:13 GMT",
- "Content-Type" : "application/json; charset=utf-8"
- }
- },
- "uuid" : "65a5a977-8a4c-4c28-aff7-f4dc7500df43",
- "persistent" : true,
- "scenarioName" : "scenario-2-api-chat",
- "requiredScenarioState" : "scenario-2-api-chat-2",
- "newScenarioState" : "scenario-2-api-chat-3",
- "insertionIndex" : 8
-}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-68c8507d-160c-4641-9a22-84bbe4806890.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-68c8507d-160c-4641-9a22-84bbe4806890.json
deleted file mode 100644
index 45e1fc64eb..0000000000
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-68c8507d-160c-4641-9a22-84bbe4806890.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "id" : "68c8507d-160c-4641-9a22-84bbe4806890",
- "name" : "api_chat",
- "request" : {
- "url" : "/api/chat",
- "method" : "POST",
- "bodyPatterns" : [ {
- "equalToJson" : "{\n \"model\" : \"orca-mini\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"What is Apache Camel?\"\n } ],\n \"options\" : {\n \"temperature\" : 0.3,\n \"stop\" : [ ]\n },\n \"stream\" : false,\n \"tools\" : [ ]\n}",
- "ignoreArrayOrder" : true,
- "ignoreExtraElements" : false
- } ]
- },
- "response" : {
- "status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:25:21.603626775Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Apache Camel is an open-source framework for building and managing business processes that run on top of Camel Transport. It provides a modular, pluggable architecture that allows you to easily integrate Camel with other technologies such as Java, Spring, Hibernate, and more. Camel can be used to automate tasks such as message routing, load balancing [...]
- "headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:21 GMT",
- "Content-Type" : "application/json; charset=utf-8"
- }
- },
- "uuid" : "68c8507d-160c-4641-9a22-84bbe4806890",
- "persistent" : true,
- "insertionIndex" : 17
-}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3dbd2721-ecf7-4960-a6d9-532629c974d1.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-72fd4b94-5f4a-46c4-89c8-8bdec51c9229.json
similarity index 78%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3dbd2721-ecf7-4960-a6d9-532629c974d1.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-72fd4b94-5f4a-46c4-89c8-8bdec51c9229.json
index 59a3865afa..390c012f0e 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-3dbd2721-ecf7-4960-a6d9-532629c974d1.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-72fd4b94-5f4a-46c4-89c8-8bdec51c9229.json
@@ -1,5 +1,5 @@
{
- "id" : "3dbd2721-ecf7-4960-a6d9-532629c974d1",
+ "id" : "72fd4b94-5f4a-46c4-89c8-8bdec51c9229",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:25:15.36019929Z\",\"message\":{\"role\":\"assistant\",\"content\":\"John Doe\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":873488110,\"load_duration\":53320906,\"prompt_eval_count\":248,\"prompt_eval_duration\":704054631,\"eval_count\":3,\"eval_duration\":110231366}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T08:53:25.571476951Z\",\"message\":{\"role\":\"assistant\",\"content\":\"John Doe\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":535340580,\"load_duration\":54573052,\"prompt_eval_count\":248,\"prompt_eval_duration\":373240198,\"eval_count\":3,\"eval_duration\":103190582}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:15 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:53:25 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "3dbd2721-ecf7-4960-a6d9-532629c974d1",
+ "uuid" : "72fd4b94-5f4a-46c4-89c8-8bdec51c9229",
"persistent" : true,
"insertionIndex" : 19
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-84aa25c6-6069-4780-b9d4-4068a07c101a.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-84aa25c6-6069-4780-b9d4-4068a07c101a.json
deleted file mode 100644
index 58d548fcb3..0000000000
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-84aa25c6-6069-4780-b9d4-4068a07c101a.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "id" : "84aa25c6-6069-4780-b9d4-4068a07c101a",
- "name" : "api_chat",
- "request" : {
- "url" : "/api/chat",
- "method" : "POST",
- "bodyPatterns" : [ {
- "equalToJson" : "{\n \"model\" : \"orca-mini\",\n \"messages\" : [ {\n \"role\" : \"user\",\n \"content\" : \"Return an example JSON object about a person named 'John Doe' with the fields age and description\"\n } ],\n \"options\" : {\n \"temperature\" : 0.3,\n \"stop\" : [ ]\n },\n \"stream\" : false,\n \"tools\" : [ ]\n}",
- "ignoreArrayOrder" : true,
- "ignoreExtraElements" : false
- } ]
- },
- "response" : {
- "status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:26:18.135421673Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Sure, here's an example JSON object for John Doe with the fields age and description:\\n\\n```json\\n{\\n \\\"name\\\": \\\"John Doe\\\",\\n \\\"age\\\": 30,\\n \\\"description\\\": \\\"John Doe is a professional software developer with over 5 years of experience. He enjoys hiking and playing guitar in his free time.\\\"\\n}\\n```\"},\"done\":true,\" [...]
- "headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:18 GMT",
- "Content-Type" : "application/json; charset=utf-8"
- }
- },
- "uuid" : "84aa25c6-6069-4780-b9d4-4068a07c101a",
- "persistent" : true,
- "insertionIndex" : 7
-}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d2554971-ae78-4b13-99c0-57def81dfb2e.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-a6509799-4ad7-4943-8292-0c40ef7a0694.json
similarity index 76%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d2554971-ae78-4b13-99c0-57def81dfb2e.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-a6509799-4ad7-4943-8292-0c40ef7a0694.json
index a147648502..c0ef906f88 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d2554971-ae78-4b13-99c0-57def81dfb2e.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-a6509799-4ad7-4943-8292-0c40ef7a0694.json
@@ -1,5 +1,5 @@
{
- "id" : "d2554971-ae78-4b13-99c0-57def81dfb2e",
+ "id" : "a6509799-4ad7-4943-8292-0c40ef7a0694",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:26:12.287839617Z\",\"message\":{\"role\":\"assistant\",\"content\":\"The sum of 10 and 5 is **15**.\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1341044668,\"load_duration\":50634799,\"prompt_eval_count\":233,\"prompt_eval_duration\":573930922,\"eval_count\":14,\"eval_duration\":705548128}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T08:54:23.936571936Z\",\"message\":{\"role\":\"assistant\",\"content\":\"The result of adding 10 and 5 is **15**.\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1075459299,\"load_duration\":52346434,\"prompt_eval_count\":233,\"prompt_eval_duration\":306773744,\"eval_count\":15,\"eval_duration\":707026673}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:12 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:54:23 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "d2554971-ae78-4b13-99c0-57def81dfb2e",
+ "uuid" : "a6509799-4ad7-4943-8292-0c40ef7a0694",
"persistent" : true,
"insertionIndex" : 9
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-50282a37-becc-455a-829b-8c95dbfeac83.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-bec7f213-4af1-44b3-bd8e-3e9bcede5363.json
similarity index 75%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-50282a37-becc-455a-829b-8c95dbfeac83.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-bec7f213-4af1-44b3-bd8e-3e9bcede5363.json
index a984762216..c9caf18d5a 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-50282a37-becc-455a-829b-8c95dbfeac83.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-bec7f213-4af1-44b3-bd8e-3e9bcede5363.json
@@ -1,5 +1,5 @@
{
- "id" : "50282a37-becc-455a-829b-8c95dbfeac83",
+ "id" : "bec7f213-4af1-44b3-bd8e-3e9bcede5363",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:25:14.47274051Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_w3upfd1y\",\"function\":{\"index\":0,\"name\":\"QueryUserDatabaseByUserID\",\"arguments\":{\"userId\":123}}}]},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":4472695102,\"load_duration\":43611230,\"prompt_eval_count\":200,\"prompt_eval_duration\":3210769739,\"eval_count\":23,\"eval_duration\":1200591755}",
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T08:53:24.98599781Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"id\":\"call_6sfznvu1\",\"function\":{\"index\":0,\"name\":\"QueryUserDatabaseByUserID\",\"arguments\":{\"userId\":123}}}]},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":5105319322,\"load_duration\":1604510209,\"prompt_eval_count\":200,\"prompt_eval_duration\":2380291099,\"eval_count\":23,\"eval_duration\":1107688402}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:14 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:53:24 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "50282a37-becc-455a-829b-8c95dbfeac83",
+ "uuid" : "bec7f213-4af1-44b3-bd8e-3e9bcede5363",
"persistent" : true,
"insertionIndex" : 20
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-ea5aa343-879e-4dd0-94f5-c32886e33ec6.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d4d23b6e-6f85-47ec-8c60-0dafee1ea394.json
similarity index 59%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-ea5aa343-879e-4dd0-94f5-c32886e33ec6.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d4d23b6e-6f85-47ec-8c60-0dafee1ea394.json
index 404d65bc24..99b8177d10 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-ea5aa343-879e-4dd0-94f5-c32886e33ec6.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d4d23b6e-6f85-47ec-8c60-0dafee1ea394.json
@@ -1,5 +1,5 @@
{
- "id" : "ea5aa343-879e-4dd0-94f5-c32886e33ec6",
+ "id" : "d4d23b6e-6f85-47ec-8c60-0dafee1ea394",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:26:24.28582676Z\",\"message\":{\"role\":\"assistant\",\"content\":\"That's a lovely choice of color! Blue is often associated with tranquility, stability, and depth. If you need any information or assistance related to the color blue or anything else, feel free to ask.\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2701949220,\"load_duration\":49357826,\"prompt_eval_count\":69,\"prompt_eval_duration\":3 [...]
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T08:54:37.574204905Z\",\"message\":{\"role\":\"assistant\",\"content\":\"That's lovely to know, Alice! Blue is a beautiful color indeed. Is there anything specific about the color blue that interests you or any questions related to it?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1920130172,\"load_duration\":55515174,\"prompt_eval_count\":69,\"prompt_eval_duration\":203970911,\"eval_count\":34,\"eval_dura [...]
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:24 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:54:37 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "ea5aa343-879e-4dd0-94f5-c32886e33ec6",
+ "uuid" : "d4d23b6e-6f85-47ec-8c60-0dafee1ea394",
"persistent" : true,
"insertionIndex" : 4
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d366f73b-f02a-4f62-ad43-836f42226e05.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d74a88a5-321f-4d42-8a5e-28ba35105e81.json
similarity index 84%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d366f73b-f02a-4f62-ad43-836f42226e05.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d74a88a5-321f-4d42-8a5e-28ba35105e81.json
index a97b6e2bce..24669b7960 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d366f73b-f02a-4f62-ad43-836f42226e05.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-d74a88a5-321f-4d42-8a5e-28ba35105e81.json
@@ -1,5 +1,5 @@
{
- "id" : "d366f73b-f02a-4f62-ad43-836f42226e05",
+ "id" : "d74a88a5-321f-4d42-8a5e-28ba35105e81",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,13 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-03T15:26:02.290064872Z\",\"message\":{\"role\":\"assistant\",\"content\":\"The long running operation was executed successfully with a total duration of 2 seconds divided into 2 steps. The process completed as expected without any issues.\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2629078989,\"load_duration\":45655974,\"prompt_eval_count\":372,\"prompt_eval_duration\":868889130,\"eval_count\":31,\"eval_du [...]
+ "body" : "{\"model\":\"granite4:3b\",\"created_at\":\"2026-03-12T08:54:12.077823233Z\",\"message\":{\"role\":\"assistant\",\"content\":\"The long running operation was executed successfully with a duration of 2 seconds and divided into 2 steps. The operation completed as requested.\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":1921278975,\"load_duration\":53411409,\"prompt_eval_count\":372,\"prompt_eval_duration\":469337569,\"eval_count\":28,\"eval_duration\":1382814223}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:26:02 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:54:12 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "d366f73b-f02a-4f62-ad43-836f42226e05",
+ "uuid" : "d74a88a5-321f-4d42-8a5e-28ba35105e81",
"persistent" : true,
"insertionIndex" : 12
}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-f472d5b5-8789-4bd9-8e7d-8649badd493b.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-f472d5b5-8789-4bd9-8e7d-8649badd493b.json
deleted file mode 100644
index d716b7ca19..0000000000
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-f472d5b5-8789-4bd9-8e7d-8649badd493b.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "id" : "f472d5b5-8789-4bd9-8e7d-8649badd493b",
- "name" : "api_chat",
- "request" : {
- "url" : "/api/chat",
- "method" : "POST",
- "bodyPatterns" : [ {
- "equalToJson" : "{\n \"model\" : \"orca-mini\",\n \"messages\" : [ {\n \"role\" : \"system\",\n \"content\" : \"You are a whimsical storyteller. Your responses should be imaginative, descriptive, and always include a touch of magic. Start every story with 'Once upon a starlit night...'\"\n }, {\n \"role\" : \"user\",\n \"content\" : \"Write a short story about a lost cat.\"\n } ],\n \"options\" : {\n \"temperature\" : 0.3,\n \"stop\" : [ ]\n },\n \"stream\" [...]
- "ignoreArrayOrder" : true,
- "ignoreExtraElements" : false
- } ]
- },
- "response" : {
- "status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:25:43.847297578Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Once upon a starlit night, a curious little girl named Lily wandered through the forest, searching for her missing cat. She had been searching for hours and was about to give up when she heard a faint meowing sound. She followed the sound until she came across a small, shivering kitten.\\n\\nLily scooped up the tiny creature and took it back home wit [...]
- "headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:43 GMT",
- "Content-Type" : "application/json; charset=utf-8"
- }
- },
- "uuid" : "f472d5b5-8789-4bd9-8e7d-8649badd493b",
- "persistent" : true,
- "scenarioName" : "scenario-1-api-chat",
- "requiredScenarioState" : "Started",
- "newScenarioState" : "scenario-1-api-chat-2",
- "insertionIndex" : 16
-}
\ No newline at end of file
diff --git a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-6b1b3f2e-5aa1-4c9b-88d3-f24a10590c6f.json b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-ff735dd8-8cd3-4f0c-b664-7d7b54bfc7b5.json
similarity index 57%
rename from integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-6b1b3f2e-5aa1-4c9b-88d3-f24a10590c6f.json
rename to integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-ff735dd8-8cd3-4f0c-b664-7d7b54bfc7b5.json
index d4eef112b8..904353b89a 100644
--- a/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-6b1b3f2e-5aa1-4c9b-88d3-f24a10590c6f.json
+++ b/integration-tests/langchain4j-agent/src/test/resources/mappings/api_chat-ff735dd8-8cd3-4f0c-b664-7d7b54bfc7b5.json
@@ -1,5 +1,5 @@
{
- "id" : "6b1b3f2e-5aa1-4c9b-88d3-f24a10590c6f",
+ "id" : "ff735dd8-8cd3-4f0c-b664-7d7b54bfc7b5",
"name" : "api_chat",
"request" : {
"url" : "/api/chat",
@@ -12,16 +12,13 @@
},
"response" : {
"status" : 200,
- "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-03T15:25:16.303883793Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Hello, Alice. How can I assist you today?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":920820435,\"load_duration\":10510752,\"prompt_eval_count\":46,\"prompt_eval_duration\":343358491,\"eval_count\":12,\"eval_duration\":563204651}",
+ "body" : "{\"model\":\"orca-mini\",\"created_at\":\"2026-03-12T08:54:42.177426867Z\",\"message\":{\"role\":\"assistant\",\"content\":\" Hello, Alice. How can I assist you today?\"},\"done\":true,\"done_reason\":\"stop\",\"total_duration\":2518065294,\"load_duration\":1470823432,\"prompt_eval_count\":46,\"prompt_eval_duration\":520854693,\"eval_count\":12,\"eval_duration\":522806793}",
"headers" : {
- "Date" : "Tue, 03 Mar 2026 15:25:16 GMT",
+ "Date" : "Thu, 12 Mar 2026 08:54:42 GMT",
"Content-Type" : "application/json; charset=utf-8"
}
},
- "uuid" : "6b1b3f2e-5aa1-4c9b-88d3-f24a10590c6f",
+ "uuid" : "ff735dd8-8cd3-4f0c-b664-7d7b54bfc7b5",
"persistent" : true,
- "scenarioName" : "scenario-2-api-chat",
- "requiredScenarioState" : "Started",
- "newScenarioState" : "scenario-2-api-chat-2",
- "insertionIndex" : 18
+ "insertionIndex" : 2
}
\ No newline at end of file