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 65d98c7e74 Use Infinispan as the embedding store for 
langchain4j-embeddingstore-ql4j tests
65d98c7e74 is described below

commit 65d98c7e74bbbe6b5597ca6644b86169683cc2cd
Author: James Netherton <[email protected]>
AuthorDate: Mon Oct 5 13:53:07 2026 +0100

    Use Infinispan as the embedding store for langchain4j-embeddingstore-ql4j 
tests
---
 .../langchain4j-embeddingstore-ql4j/pom.xml        |  16 ++--
 .../it/Langchain4jEmbeddingstoreQl4jResource.java  |   4 +-
 .../src/main/resources/application.properties      |   6 +-
 ...Langchain4jInfinispanEmbeddingstoreQl4jIT.java} |   2 +-
 ...ngchain4jInfinispanEmbeddingstoreQl4jTest.java} |  21 ++---
 .../embeddingstore/ql4j/it/QdrantTestResource.java | 105 ---------------------
 6 files changed, 27 insertions(+), 127 deletions(-)

diff --git a/integration-tests/langchain4j-embeddingstore-ql4j/pom.xml 
b/integration-tests/langchain4j-embeddingstore-ql4j/pom.xml
index ca5cfd25ee..e92d14a4e9 100644
--- a/integration-tests/langchain4j-embeddingstore-ql4j/pom.xml
+++ b/integration-tests/langchain4j-embeddingstore-ql4j/pom.xml
@@ -30,6 +30,15 @@
     <name>Camel Quarkus :: Integration Tests :: LangChain4j Embedding Store 
QL4J</name>
     <description>Integration tests for Camel Quarkus LangChain4j Embedding 
Store extension with Quarkus LangChain4j on the classpath</description>
 
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+    </build>
+
     <dependencyManagement>
         <dependencies>
             <dependency>
@@ -57,7 +66,7 @@
         </dependency>
         <dependency>
             <groupId>io.quarkiverse.langchain4j</groupId>
-            <artifactId>quarkus-langchain4j-qdrant</artifactId>
+            <artifactId>quarkus-langchain4j-infinispan</artifactId>
         </dependency>
         <dependency>
             <groupId>io.quarkus</groupId>
@@ -79,11 +88,6 @@
             <artifactId>rest-assured</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.testcontainers</groupId>
-            <artifactId>testcontainers-qdrant</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>org.awaitility</groupId>
             <artifactId>awaitility</artifactId>
diff --git 
a/integration-tests/langchain4j-embeddingstore-ql4j/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jEmbeddingstoreQl4jResource.java
 
b/integration-tests/langchain4j-embeddingstore-ql4j/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jEmbeddingstoreQl4jResource.java
index b14e04459d..4f146c9e70 100644
--- 
a/integration-tests/langchain4j-embeddingstore-ql4j/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jEmbeddingstoreQl4jResource.java
+++ 
b/integration-tests/langchain4j-embeddingstore-ql4j/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jEmbeddingstoreQl4jResource.java
@@ -110,7 +110,7 @@ public class Langchain4jEmbeddingstoreQl4jResource {
                 .request();
     }
 
-    @Path("/qdrant/retrieve")
+    @Path("/infinispan/retrieve")
     @POST
     @Consumes(MediaType.TEXT_PLAIN)
     @Produces(MediaType.APPLICATION_JSON)
@@ -119,7 +119,7 @@ public class Langchain4jEmbeddingstoreQl4jResource {
         return results.stream().map(c -> c.textSegment().text()).toList();
     }
 
-    @Path("/qdrant/ingest")
+    @Path("/infinispan/ingest")
     @POST
     @Consumes(MediaType.TEXT_PLAIN)
     @Produces(MediaType.TEXT_PLAIN)
diff --git 
a/integration-tests/langchain4j-embeddingstore-ql4j/src/main/resources/application.properties
 
b/integration-tests/langchain4j-embeddingstore-ql4j/src/main/resources/application.properties
index a23f7fddc8..7342849e04 100644
--- 
a/integration-tests/langchain4j-embeddingstore-ql4j/src/main/resources/application.properties
+++ 
b/integration-tests/langchain4j-embeddingstore-ql4j/src/main/resources/application.properties
@@ -15,9 +15,11 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 
-quarkus.devservices.enabled=false
 quarkus.langchain4j.devservices.enabled=false
 quarkus.langchain4j.ollama.base-url=http://localhost:11434
 quarkus.langchain4j.ollama.embedding-model.model-id=nomic-embed-text
 quarkus.langchain4j.embedding-model.provider=ollama
-quarkus.langchain4j.qdrant.collection-name=camel-quarkus-ql4j-collection
+quarkus.infinispan-client.devservices.image-name=${infinispan.container.image}
+quarkus.langchain4j.infinispan.cache-name=camel-quarkus-ql4j-embeddings
+# Must match the embedding dimension in the WireMock stubs under 
mappings/embeddings/
+quarkus.langchain4j.infinispan.dimension=5
diff --git 
a/integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jQdrantEmbeddingstoreQl4jIT.java
 
b/integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jInfinispanEmbeddingstoreQl4jIT.java
similarity index 90%
rename from 
integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jQdrantEmbeddingstoreQl4jIT.java
rename to 
integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jInfinispanEmbeddingstoreQl4jIT.java
index 068f893cb5..2a8fb153f0 100644
--- 
a/integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jQdrantEmbeddingstoreQl4jIT.java
+++ 
b/integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jInfinispanEmbeddingstoreQl4jIT.java
@@ -19,5 +19,5 @@ package 
org.apache.camel.quarkus.component.langchain4j.embeddingstore.ql4j.it;
 import io.quarkus.test.junit.QuarkusIntegrationTest;
 
 @QuarkusIntegrationTest
-class Langchain4jQdrantEmbeddingstoreQl4jIT extends 
Langchain4jQdrantEmbeddingstoreQl4jTest {
+class Langchain4jInfinispanEmbeddingstoreQl4jIT extends 
Langchain4jInfinispanEmbeddingstoreQl4jTest {
 }
diff --git 
a/integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jQdrantEmbeddingstoreQl4jTest.java
 
b/integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jInfinispanEmbeddingstoreQl4jTest.java
similarity index 85%
rename from 
integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jQdrantEmbeddingstoreQl4jTest.java
rename to 
integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jInfinispanEmbeddingstoreQl4jTest.java
index a7609ad8e6..5357edb861 100644
--- 
a/integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jQdrantEmbeddingstoreQl4jTest.java
+++ 
b/integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/Langchain4jInfinispanEmbeddingstoreQl4jTest.java
@@ -31,18 +31,17 @@ import static org.hamcrest.Matchers.is;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 @QuarkusTestResource(OllamaWireMockTestResource.class)
-@QuarkusTestResource(QdrantTestResource.class)
 @QuarkusTest
-class Langchain4jQdrantEmbeddingstoreQl4jTest {
+class Langchain4jInfinispanEmbeddingstoreQl4jTest {
     static final String CAMEL_MESSAGE = "Hello Camel Quarkus LangChain4j 
Embedding Store";
     static final String QL4J_MESSAGE = "Hello from Quarkus LangChain4j direct 
ingest";
 
     @Test
-    void qdrantEmbeddingstoreQl4jInterop() {
+    void infinispanEmbeddingstoreQl4jInterop() {
         // 1. Camel ADD
         String id = RestAssured.given()
                 .body(CAMEL_MESSAGE)
-                .post("/langchain4j-embeddingstore/qdrant/add")
+                .post("/langchain4j-embeddingstore/infinispan/add")
                 .then()
                 .statusCode(200)
                 .extract()
@@ -53,7 +52,7 @@ class Langchain4jQdrantEmbeddingstoreQl4jTest {
         // 2. Camel SEARCH
         RestAssured.given()
                 .body(CAMEL_MESSAGE)
-                .post("/langchain4j-embeddingstore/qdrant/search")
+                .post("/langchain4j-embeddingstore/infinispan/search")
                 .then()
                 .statusCode(200)
                 .body(
@@ -64,7 +63,7 @@ class Langchain4jQdrantEmbeddingstoreQl4jTest {
         // 3. QL4J retrieves Camel-written data
         RestAssured.given()
                 .body(CAMEL_MESSAGE)
-                .post("/langchain4j-embeddingstore/qdrant/retrieve")
+                .post("/langchain4j-embeddingstore/infinispan/retrieve")
                 .then()
                 .statusCode(200)
                 .body(
@@ -74,7 +73,7 @@ class Langchain4jQdrantEmbeddingstoreQl4jTest {
         // 4. QL4J ingests directly (bypassing Camel)
         String ql4jId = RestAssured.given()
                 .body(QL4J_MESSAGE)
-                .post("/langchain4j-embeddingstore/qdrant/ingest")
+                .post("/langchain4j-embeddingstore/infinispan/ingest")
                 .then()
                 .statusCode(200)
                 .extract()
@@ -86,7 +85,7 @@ class Langchain4jQdrantEmbeddingstoreQl4jTest {
         Awaitility.await().pollInterval(250, TimeUnit.MILLISECONDS).atMost(10, 
TimeUnit.SECONDS).untilAsserted(() -> {
             RestAssured.given()
                     .body(QL4J_MESSAGE)
-                    .post("/langchain4j-embeddingstore/qdrant/search")
+                    .post("/langchain4j-embeddingstore/infinispan/search")
                     .then()
                     .statusCode(200)
                     .body(
@@ -97,20 +96,20 @@ class Langchain4jQdrantEmbeddingstoreQl4jTest {
         // 6. Camel REMOVE both embeddings with confirmation
         RestAssured.given()
                 .queryParam("embeddingId", id)
-                .delete("/langchain4j-embeddingstore/qdrant/remove")
+                .delete("/langchain4j-embeddingstore/infinispan/remove")
                 .then()
                 .statusCode(204);
 
         RestAssured.given()
                 .queryParam("embeddingId", ql4jId)
-                .delete("/langchain4j-embeddingstore/qdrant/remove")
+                .delete("/langchain4j-embeddingstore/infinispan/remove")
                 .then()
                 .statusCode(204);
 
         Awaitility.await().pollInterval(250, TimeUnit.MILLISECONDS).atMost(10, 
TimeUnit.SECONDS).untilAsserted(() -> {
             RestAssured.given()
                     .body(CAMEL_MESSAGE)
-                    .post("/langchain4j-embeddingstore/qdrant/search")
+                    .post("/langchain4j-embeddingstore/infinispan/search")
                     .then()
                     .statusCode(200)
                     .body(
diff --git 
a/integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/QdrantTestResource.java
 
b/integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/QdrantTestResource.java
deleted file mode 100644
index fd21a4f68e..0000000000
--- 
a/integration-tests/langchain4j-embeddingstore-ql4j/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/ql4j/it/QdrantTestResource.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * 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.embeddingstore.ql4j.it;
-
-import java.io.IOException;
-import java.net.URI;
-import java.net.http.HttpClient;
-import java.net.http.HttpRequest;
-import java.net.http.HttpResponse;
-import java.util.HashMap;
-import java.util.Map;
-
-import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
-import org.eclipse.microprofile.config.ConfigProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.qdrant.QdrantContainer;
-import org.testcontainers.utility.DockerImageName;
-
-public class QdrantTestResource implements QuarkusTestResourceLifecycleManager 
{
-    private static final Logger LOG = 
LoggerFactory.getLogger(QdrantTestResource.class);
-    private static final String QDRANT_IMAGE = 
ConfigProvider.getConfig().getValue("qdrant.container.image", String.class);
-    private static final int QDRANT_HTTP_PORT = 6333;
-    private static final String COLLECTION_NAME = 
"camel-quarkus-ql4j-collection";
-
-    private GenericContainer<?> qdrantContainer;
-
-    @Override
-    public Map<String, String> start() {
-        Map<String, String> properties = new HashMap<>();
-
-        DockerImageName qdrantImageName = 
DockerImageName.parse(QDRANT_IMAGE).asCompatibleSubstituteFor("qdrant/qdrant");
-        qdrantContainer = new QdrantContainer(qdrantImageName)
-                .withLogConsumer(new Slf4jLogConsumer(LOG));
-        qdrantContainer.start();
-
-        String host = qdrantContainer.getHost();
-        Integer httpPort = qdrantContainer.getMappedPort(QDRANT_HTTP_PORT);
-
-        createCollection(host, httpPort);
-
-        properties.put("quarkus.qdrant.host", host);
-        properties.put("quarkus.qdrant.port", httpPort.toString());
-
-        LOG.info("Properties: {}", properties);
-
-        return properties;
-    }
-
-    private void createCollection(String host, int port) {
-        try {
-            HttpClient httpClient = HttpClient.newHttpClient();
-            String url = String.format("http://%s:%d/collections/%s";, host, 
port, COLLECTION_NAME);
-            // Vector size must match the embedding dimension in the WireMock 
stubs under mappings/embeddings/
-            String body = """
-                    {
-                      "vectors": {
-                        "size": 5,
-                        "distance": "Cosine"
-                      }
-                    }
-                    """;
-            HttpRequest request = HttpRequest.newBuilder()
-                    .uri(URI.create(url))
-                    .PUT(HttpRequest.BodyPublishers.ofString(body))
-                    .header("Content-Type", "application/json")
-                    .build();
-            HttpResponse<String> response = httpClient.send(request, 
HttpResponse.BodyHandlers.ofString());
-            if (response.statusCode() != 200) {
-                throw new RuntimeException("Failed to create Qdrant 
collection: " + response.body());
-            }
-            LOG.info("Created Qdrant collection '{}': {}", COLLECTION_NAME, 
response.body());
-        } catch (IOException | InterruptedException e) {
-            throw new RuntimeException("Failed to create Qdrant collection", 
e);
-        }
-    }
-
-    @Override
-    public void stop() {
-        try {
-            if (qdrantContainer != null) {
-                qdrantContainer.stop();
-            }
-        } catch (Exception ex) {
-            LOG.error("An issue occurred while stopping Qdrant container", ex);
-        }
-    }
-
-}

Reply via email to