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
commit 658d6366628029bcc846f2e2540e014f8cd085b5 Author: James Netherton <[email protected]> AuthorDate: Thu Oct 9 12:59:54 2025 +0100 Add LangChain4j EmbeddingStore support Fixes #7766 --- catalog/pom.xml | 13 ++ docs/modules/ROOT/nav.adoc | 1 + .../extensions/langchain4j-embeddingstore.adoc | 61 +++++++ .../langchain4j-embeddingstore/deployment/pom.xml | 67 +++++++ .../Langchain4jEmbeddingstoreProcessor.java | 29 +++ extensions/langchain4j-embeddingstore/pom.xml | 39 ++++ .../langchain4j-embeddingstore/runtime/pom.xml | 106 +++++++++++ .../main/resources/META-INF/quarkus-extension.yaml | 33 ++++ extensions/pom.xml | 1 + .../langchain4j-embeddingstore/pom.xml | 199 +++++++++++++++++++++ .../it/Langchain4jEmbeddingstoreProducers.java | 72 ++++++++ .../it/Langchain4jEmbeddingstoreResource.java | 98 ++++++++++ .../it/Langchain4jEmbeddingstoreRoutes.java | 31 ++++ .../it/Langchain4JQdrantEmbeddingstoreIT.java | 24 +++ .../it/Langchain4jQdrantEmbeddingstoreTest.java | 102 +++++++++++ .../embeddingstore/it/QdrantTestResource.java | 70 ++++++++ integration-tests/pom.xml | 1 + poms/bom-test/pom.xml | 5 + poms/bom/pom.xml | 20 +++ poms/bom/src/main/generated/flattened-full-pom.xml | 20 +++ .../src/main/generated/flattened-reduced-pom.xml | 20 +++ .../generated/flattened-reduced-verbose-pom.xml | 20 +++ tooling/scripts/test-categories.yaml | 1 + 23 files changed, 1033 insertions(+) diff --git a/catalog/pom.xml b/catalog/pom.xml index 6aeefee7f8..adb5c453d0 100644 --- a/catalog/pom.xml +++ b/catalog/pom.xml @@ -2463,6 +2463,19 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-langchain4j-embeddingstore</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-tokenizer</artifactId> diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc index 445eb398e8..e7ad06f75e 100644 --- a/docs/modules/ROOT/nav.adoc +++ b/docs/modules/ROOT/nav.adoc @@ -204,6 +204,7 @@ *** xref:reference/extensions/lra.adoc[LRA] *** xref:reference/extensions/lzf.adoc[LZF Deflate Compression] *** xref:reference/extensions/langchain4j-agent.adoc[LangChain4j Agent] +*** xref:reference/extensions/langchain4j-embeddingstore.adoc[LangChain4j Embedding Store] *** xref:reference/extensions/langchain4j-embeddings.adoc[LangChain4j Embeddings] *** xref:reference/extensions/langchain4j-tokenizer.adoc[LangChain4j Tokenizer] *** xref:reference/extensions/langchain4j-tools.adoc[LangChain4j Tools] diff --git a/docs/modules/ROOT/pages/reference/extensions/langchain4j-embeddingstore.adoc b/docs/modules/ROOT/pages/reference/extensions/langchain4j-embeddingstore.adoc new file mode 100644 index 0000000000..81d7dfb6a3 --- /dev/null +++ b/docs/modules/ROOT/pages/reference/extensions/langchain4j-embeddingstore.adoc @@ -0,0 +1,61 @@ +// Do not edit directly! +// This file was generated by camel-quarkus-maven-plugin:update-extension-doc-page +[id="extensions-langchain4j-embeddingstore"] += LangChain4j Embedding Store +:linkattrs: +:cq-artifact-id: camel-quarkus-langchain4j-embeddingstore +:cq-native-supported: true +:cq-status: Preview +:cq-status-deprecation: Preview +:cq-description: Perform operations on the Langchain4jEmbeddingStores. +:cq-deprecated: false +:cq-jvm-since: 3.29.0 +:cq-native-since: 3.29.0 + +ifeval::[{doc-show-badges} == true] +[.badges] +[.badge-key]##JVM since##[.badge-supported]##3.29.0## [.badge-key]##Native since##[.badge-supported]##3.29.0## +endif::[] + +Perform operations on the Langchain4jEmbeddingStores. + +[id="extensions-langchain4j-embeddingstore-maven-coordinates"] +== Maven coordinates + +https://{link-quarkus-code-generator}/?extension-search=camel-quarkus-langchain4j-embeddingstore[Create a new project with this extension on {link-quarkus-code-generator}, window="_blank"] + +Or add the coordinates to your existing project: + +[source,xml] +---- +<dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-langchain4j-embeddingstore</artifactId> +</dependency> +---- +ifeval::[{doc-show-user-guide-link} == true] +Check the xref:user-guide/index.adoc[User guide] for more information about writing Camel Quarkus applications. +endif::[] + +[id="extensions-langchain4j-embeddingstore-quarkus-langchain4j-bom"] +== LangChain4j dependency management + +In order to ensure alignment across all Quarkus and LangChain4j related dependencies, it is recommended to import the LangChain4j BOM as below: +[source,xml] +---- +<dependencyManagement> + <dependencies> + <dependency> + <groupId>dev.langchain4j</groupId> + <artifactId>langchain4j-bom</artifactId> + <version>1.5.0</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + ... +</dependencyManagement> +---- + +Note that the import order is paramount when using maven `dependencyManagement`. +As such, one might need to import the `langchain4j-bom` before other related Camel and Quarkus BOMs. diff --git a/extensions/langchain4j-embeddingstore/deployment/pom.xml b/extensions/langchain4j-embeddingstore/deployment/pom.xml new file mode 100644 index 0000000000..f481ad09d4 --- /dev/null +++ b/extensions/langchain4j-embeddingstore/deployment/pom.xml @@ -0,0 +1,67 @@ +<?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-langchain4j-embeddingstore-parent</artifactId> + <version>3.29.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + + <artifactId>camel-quarkus-langchain4j-embeddingstore-deployment</artifactId> + <name>Camel Quarkus :: LangChain4j Embedding Store :: Deployment</name> + + <dependencies> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-core-deployment</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-langchain4j-embeddings-deployment</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-langchain4j-embeddingstore</artifactId> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <annotationProcessorPaths> + <path> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-extension-processor</artifactId> + <version>${quarkus.version}</version> + </path> + </annotationProcessorPaths> + </configuration> + </plugin> + </plugins> + </build> + +</project> diff --git a/extensions/langchain4j-embeddingstore/deployment/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/deployment/Langchain4jEmbeddingstoreProcessor.java b/extensions/langchain4j-embeddingstore/deployment/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/deployment/Langchain4jEmbeddingstoreProcessor.java new file mode 100644 index 0000000000..5dead2ed28 --- /dev/null +++ b/extensions/langchain4j-embeddingstore/deployment/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/deployment/Langchain4jEmbeddingstoreProcessor.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.embeddingstore.deployment; + +import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.builditem.FeatureBuildItem; + +class Langchain4jEmbeddingstoreProcessor { + private static final String FEATURE = "camel-langchain4j-embeddingstore"; + + @BuildStep + FeatureBuildItem feature() { + return new FeatureBuildItem(FEATURE); + } +} diff --git a/extensions/langchain4j-embeddingstore/pom.xml b/extensions/langchain4j-embeddingstore/pom.xml new file mode 100644 index 0000000000..7c931c443f --- /dev/null +++ b/extensions/langchain4j-embeddingstore/pom.xml @@ -0,0 +1,39 @@ +<?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-extensions</artifactId> + <version>3.29.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + + <artifactId>camel-quarkus-langchain4j-embeddingstore-parent</artifactId> + <name>Camel Quarkus :: LangChain4j Embedding Store</name> + <packaging>pom</packaging> + + <modules> + <module>deployment</module> + <module>runtime</module> + </modules> +</project> diff --git a/extensions/langchain4j-embeddingstore/runtime/pom.xml b/extensions/langchain4j-embeddingstore/runtime/pom.xml new file mode 100644 index 0000000000..b6d547b4da --- /dev/null +++ b/extensions/langchain4j-embeddingstore/runtime/pom.xml @@ -0,0 +1,106 @@ +<?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-langchain4j-embeddingstore-parent</artifactId> + <version>3.29.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + + <artifactId>camel-quarkus-langchain4j-embeddingstore</artifactId> + <name>Camel Quarkus :: LangChain4j Embedding Store :: Runtime</name> + <description>Perform operations on the Langchain4jEmbeddingStores.</description> + + <properties> + <camel.quarkus.jvmSince>3.29.0</camel.quarkus.jvmSince> + <camel.quarkus.nativeSince>3.29.0</camel.quarkus.nativeSince> + <quarkus.metadata.status>preview</quarkus.metadata.status> + </properties> + + <dependencies> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-core</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-langchain4j-embeddings</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-langchain4j-embeddingstore</artifactId> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-extension-maven-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <annotationProcessorPaths> + <path> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-extension-processor</artifactId> + <version>${quarkus.version}</version> + </path> + </annotationProcessorPaths> + </configuration> + </plugin> + </plugins> + </build> + + + <profiles> + <profile> + <id>full</id> + <activation> + <property> + <name>!quickly</name> + </property> + </activation> + <build> + <plugins> + <plugin> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-maven-plugin</artifactId> + <executions> + <execution> + <id>update-extension-doc-page</id> + <goals> + <goal>update-extension-doc-page</goal> + </goals> + <phase>process-classes</phase> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> +</project> diff --git a/extensions/langchain4j-embeddingstore/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/extensions/langchain4j-embeddingstore/runtime/src/main/resources/META-INF/quarkus-extension.yaml new file mode 100644 index 0000000000..ec8e469ff6 --- /dev/null +++ b/extensions/langchain4j-embeddingstore/runtime/src/main/resources/META-INF/quarkus-extension.yaml @@ -0,0 +1,33 @@ +# +# 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. +# + +# This is a generated file. Do not edit directly! +# To re-generate, run the following command from the top level directory: +# +# mvn -N cq:update-quarkus-metadata +# +--- +name: "Camel LangChain4j Embedding Store" +description: "Perform operations on the Langchain4jEmbeddingStores" +metadata: + icon-url: "https://raw.githubusercontent.com/apache/camel-website/main/antora-ui-camel/src/img/logo-d.svg" + sponsor: "Apache Software Foundation" + guide: "https://camel.apache.org/camel-quarkus/latest/reference/extensions/langchain4j-embeddingstore.html" + categories: + - "integration" + status: + - "preview" diff --git a/extensions/pom.xml b/extensions/pom.xml index 0d8d52d8c6..3c2337508f 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -176,6 +176,7 @@ <module>langchain4j-agent</module> <module>langchain4j-chat</module> <module>langchain4j-embeddings</module> + <module>langchain4j-embeddingstore</module> <module>langchain4j-tokenizer</module> <module>langchain4j-tools</module> <module>langchain4j-web-search</module> diff --git a/integration-tests/langchain4j-embeddingstore/pom.xml b/integration-tests/langchain4j-embeddingstore/pom.xml new file mode 100644 index 0000000000..05cdcafdd0 --- /dev/null +++ b/integration-tests/langchain4j-embeddingstore/pom.xml @@ -0,0 +1,199 @@ +<?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.29.0-SNAPSHOT</version> + <relativePath>../../poms/build-parent-it/pom.xml</relativePath> + </parent> + + <artifactId>camel-quarkus-integration-test-langchain4j-embeddingstore</artifactId> + <name>Camel Quarkus :: Integration Tests :: LangChain4j Embedding Store</name> + <description>Integration tests for Camel Quarkus LangChain4j Embedding Store extension</description> + + <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-embeddingstore</artifactId> + </dependency> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-grpc-common</artifactId> + </dependency> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-resteasy</artifactId> + </dependency> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-resteasy-jackson</artifactId> + </dependency> + <dependency> + <groupId>dev.langchain4j</groupId> + <artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId> + </dependency> + <dependency> + <groupId>dev.langchain4j</groupId> + <artifactId>langchain4j-qdrant</artifactId> + <exclusions> + <exclusion> + <groupId>com.google.android</groupId> + <artifactId>annotations</artifactId> + </exclusion> + <exclusion> + <groupId>com.google.code.findbugs</groupId> + <artifactId>jsr305</artifactId> + </exclusion> + <exclusion> + <groupId>io.grpc</groupId> + <artifactId>grpc-netty-shaded</artifactId> + </exclusion> + <exclusion> + <groupId>org.checkerframework</groupId> + <artifactId>checker-qual</artifactId> + </exclusion> + <exclusion> + <groupId>org.codehaus.mojo</groupId> + <artifactId>animal-sniffer-annotations</artifactId> + </exclusion> + </exclusions> + </dependency> + + <!-- test dependencies --> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-junit5</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>io.rest-assured</groupId> + <artifactId>rest-assured</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>qdrant</artifactId> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-junit4-mock</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.awaitility</groupId> + <artifactId>awaitility</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + + <profiles> + <profile> + <id>native</id> + <activation> + <property> + <name>native</name> + </property> + </activation> + <properties> + <quarkus.native.enabled>true</quarkus.native.enabled> + </properties> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>integration-test</goal> + <goal>verify</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + <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-embeddingstore-deployment</artifactId> + <version>${project.version}</version> + <type>pom</type> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>*</groupId> + <artifactId>*</artifactId> + </exclusion> + </exclusions> + </dependency> + </dependencies> + </profile> + <profile> + <id>skip-testcontainers-tests</id> + <activation> + <property> + <name>skip-testcontainers-tests</name> + </property> + </activation> + <properties> + <skipTests>true</skipTests> + </properties> + </profile> + </profiles> + +</project> diff --git a/integration-tests/langchain4j-embeddingstore/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4jEmbeddingstoreProducers.java b/integration-tests/langchain4j-embeddingstore/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4jEmbeddingstoreProducers.java new file mode 100644 index 0000000000..f853c152d1 --- /dev/null +++ b/integration-tests/langchain4j-embeddingstore/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4jEmbeddingstoreProducers.java @@ -0,0 +1,72 @@ +/* + * 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.it; + +import dev.langchain4j.data.segment.TextSegment; +import dev.langchain4j.model.embedding.EmbeddingModel; +import dev.langchain4j.model.embedding.onnx.allminilml6v2.AllMiniLmL6V2EmbeddingModel; +import dev.langchain4j.store.embedding.EmbeddingStore; +import dev.langchain4j.store.embedding.qdrant.QdrantEmbeddingStore; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Produces; +import jakarta.inject.Singleton; +import org.apache.camel.CamelContext; +import org.apache.camel.component.langchain4j.embeddingstore.EmbeddingStoreFactory; +import org.eclipse.microprofile.config.inject.ConfigProperty; + +@ApplicationScoped +public class Langchain4jEmbeddingstoreProducers { + @ConfigProperty(name = "qdrant.host") + String qdrantHost; + + @ConfigProperty(name = "qdrant.port") + Integer qdrantPort; + + @ConfigProperty(name = "qdrant.collection") + String qdrantCollection; + + @Produces + EmbeddingModel embeddingModel() { + return new AllMiniLmL6V2EmbeddingModel(); + } + + @Singleton + EmbeddingStoreFactory embeddingStoreFactory() { + return new EmbeddingStoreFactory() { + CamelContext camelContext; + + @Override + public EmbeddingStore<TextSegment> createEmbeddingStore() { + return QdrantEmbeddingStore.builder() + .host(qdrantHost) + .port(qdrantPort) + .collectionName(qdrantCollection) + .build(); + } + + @Override + public void setCamelContext(CamelContext camelContext) { + this.camelContext = camelContext; + } + + @Override + public CamelContext getCamelContext() { + return this.camelContext; + } + }; + } +} diff --git a/integration-tests/langchain4j-embeddingstore/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4jEmbeddingstoreResource.java b/integration-tests/langchain4j-embeddingstore/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4jEmbeddingstoreResource.java new file mode 100644 index 0000000000..0c92dee257 --- /dev/null +++ b/integration-tests/langchain4j-embeddingstore/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4jEmbeddingstoreResource.java @@ -0,0 +1,98 @@ +/* + * 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.it; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import dev.langchain4j.data.segment.TextSegment; +import dev.langchain4j.store.embedding.EmbeddingMatch; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import org.apache.camel.FluentProducerTemplate; +import org.apache.camel.component.langchain4j.embeddingstore.LangChain4jEmbeddingStoreAction; +import org.apache.camel.component.langchain4j.embeddingstore.LangChain4jEmbeddingStoreHeaders; + +@Path("/langchain4j-embeddingstore") +@ApplicationScoped +public class Langchain4jEmbeddingstoreResource { + @Inject + FluentProducerTemplate fluentProducerTemplate; + + @Path("/{embeddingStoreType}/add") + @POST + @Consumes(MediaType.TEXT_PLAIN) + @Produces(MediaType.TEXT_PLAIN) + public String embeddingStoreAdd( + @PathParam("embeddingStoreType") String embeddingStoreType, + String content) { + + return fluentProducerTemplate.to("direct:start") + .withHeader("embeddingStoreType", embeddingStoreType) + .withHeader(LangChain4jEmbeddingStoreHeaders.ACTION, LangChain4jEmbeddingStoreAction.ADD) + .withBody(content) + .request(String.class); + } + + @SuppressWarnings("unchecked") + @Path("/{embeddingStoreType}/search") + @POST + @Consumes(MediaType.TEXT_PLAIN) + @Produces(MediaType.APPLICATION_JSON) + public List<Map<String, String>> embeddingStoreSearch( + @PathParam("embeddingStoreType") String embeddingStoreType, + String content) { + + List<EmbeddingMatch<TextSegment>> matches = fluentProducerTemplate.to("direct:start") + .withHeader("embeddingStoreType", embeddingStoreType) + .withHeader(LangChain4jEmbeddingStoreHeaders.ACTION, LangChain4jEmbeddingStoreAction.SEARCH) + .withBody(content) + .request(List.class); + + List<Map<String, String>> results = new ArrayList<>(); + matches.forEach(match -> { + Map<String, String> embeddingInfo = new HashMap<>(); + embeddingInfo.put("embeddingId", match.embeddingId()); + embeddingInfo.put("text", match.embedded().text()); + results.add(embeddingInfo); + }); + + return results; + } + + @Path("/{embeddingStoreType}/remove") + @DELETE + public void embeddingStoreDelete( + @PathParam("embeddingStoreType") String embeddingStoreType, + @QueryParam("embeddingId") String embeddingId) { + fluentProducerTemplate.to("direct:start") + .withHeader("embeddingStoreType", embeddingStoreType) + .withHeader(LangChain4jEmbeddingStoreHeaders.ACTION, LangChain4jEmbeddingStoreAction.REMOVE) + .withBody(embeddingId) + .request(); + } +} diff --git a/integration-tests/langchain4j-embeddingstore/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4jEmbeddingstoreRoutes.java b/integration-tests/langchain4j-embeddingstore/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4jEmbeddingstoreRoutes.java new file mode 100644 index 0000000000..0aa6978fbf --- /dev/null +++ b/integration-tests/langchain4j-embeddingstore/src/main/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4jEmbeddingstoreRoutes.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.langchain4j.embeddingstore.it; + +import org.apache.camel.builder.RouteBuilder; + +public class Langchain4jEmbeddingstoreRoutes extends RouteBuilder { + @Override + public void configure() throws Exception { + from("direct:start") + .choice().when().simple("${header.CamelLangchain4jEmbeddingStoreAction} != 'REMOVE'") + .toD("langchain4j-embeddings:${header.embeddingStoreType}") + .endChoice() + .end() + .toD("langchain4j-embeddingstore:${header.embeddingStoreType}"); + } +} diff --git a/integration-tests/langchain4j-embeddingstore/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4JQdrantEmbeddingstoreIT.java b/integration-tests/langchain4j-embeddingstore/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4JQdrantEmbeddingstoreIT.java new file mode 100644 index 0000000000..fe08301735 --- /dev/null +++ b/integration-tests/langchain4j-embeddingstore/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4JQdrantEmbeddingstoreIT.java @@ -0,0 +1,24 @@ +/* + * 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.it; + +import io.quarkus.test.junit.QuarkusIntegrationTest; + +@QuarkusIntegrationTest +class Langchain4JQdrantEmbeddingstoreIT extends Langchain4jQdrantEmbeddingstoreTest { + +} diff --git a/integration-tests/langchain4j-embeddingstore/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4jQdrantEmbeddingstoreTest.java b/integration-tests/langchain4j-embeddingstore/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4jQdrantEmbeddingstoreTest.java new file mode 100644 index 0000000000..876d721e87 --- /dev/null +++ b/integration-tests/langchain4j-embeddingstore/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/Langchain4jQdrantEmbeddingstoreTest.java @@ -0,0 +1,102 @@ +/* + * 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.it; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import io.qdrant.client.QdrantClient; +import io.qdrant.client.QdrantGrpcClient; +import io.qdrant.client.grpc.Collections; +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.junit.QuarkusTest; +import io.restassured.RestAssured; +import org.awaitility.Awaitility; +import org.eclipse.microprofile.config.Config; +import org.eclipse.microprofile.config.ConfigProvider; +import org.junit.jupiter.api.Test; + +import static org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@QuarkusTestResource(QdrantTestResource.class) +@QuarkusTest +class Langchain4jQdrantEmbeddingstoreTest { + static final String MESSAGE = "Hello Camel Quarkus LangChain4j Embedding Store"; + + @Test + void qdrantEmbeddingStoreCrud() throws Exception { + Config config = ConfigProvider.getConfig(); + try (QdrantClient client = new QdrantClient( + QdrantGrpcClient.newBuilder( + config.getValue("qdrant.host", String.class), + config.getValue("qdrant.port", Integer.class), + false) + .build())) { + + // Create collection + client.createCollectionAsync(config.getValue("qdrant.collection", String.class), + Collections.VectorParams.newBuilder() + .setDistance(Collections.Distance.Cosine) + .setSize(384) + .build()) + .get(10, TimeUnit.SECONDS); + + // Store embedding + String id = RestAssured.given() + .body(MESSAGE) + .post("/langchain4j-embeddingstore/qdrant/add") + .then() + .statusCode(200) + .extract() + .body() + .asString(); + + // Verify Qdrant returned the id of new item + assertNotNull(UUID.fromString(id)); + + // Search embedding + RestAssured.given() + .body(MESSAGE) + .post("/langchain4j-embeddingstore/qdrant/search") + .then() + .statusCode(200) + .body( + "size()", is(1), + "[0].embeddingId", is(id), + "[0].text", is(MESSAGE)); + + // Remove embedding + RestAssured.given() + .queryParam("embeddingId", id) + .delete("/langchain4j-embeddingstore/qdrant/remove") + .then() + .statusCode(204); + + // Confirm removal + Awaitility.await().pollInterval(250, TimeUnit.MILLISECONDS).atMost(10, TimeUnit.SECONDS).untilAsserted(() -> { + RestAssured.given() + .body(MESSAGE) + .post("/langchain4j-embeddingstore/qdrant/search") + .then() + .statusCode(200) + .body( + "size()", is(0)); + }); + } + } +} diff --git a/integration-tests/langchain4j-embeddingstore/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/QdrantTestResource.java b/integration-tests/langchain4j-embeddingstore/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/QdrantTestResource.java new file mode 100644 index 0000000000..5b27250f28 --- /dev/null +++ b/integration-tests/langchain4j-embeddingstore/src/test/java/org/apache/camel/quarkus/component/langchain4j/embeddingstore/it/QdrantTestResource.java @@ -0,0 +1,70 @@ +/* + * 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.it; + +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_GRPC_PORT = 6334; + + 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 grpcHost = qdrantContainer.getHost(); + Integer grpcPort = qdrantContainer.getMappedPort(QDRANT_GRPC_PORT); + + properties.put("qdrant.host", grpcHost); + properties.put("qdrant.port", grpcPort.toString()); + properties.put("qdrant.collection", "camel-quarkus-collection"); + + LOG.info("Properties: {}", properties); + + return properties; + } + + @Override + public void stop() { + try { + if (qdrantContainer != null) { + qdrantContainer.stop(); + } + } catch (Exception ex) { + LOG.error("An issue occurred while stopping Qdrant container", ex); + } + } + +} diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 702986fca6..b1e217664b 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -152,6 +152,7 @@ <module>langchain4j-agent</module> <module>langchain4j-chat</module> <module>langchain4j-embeddings</module> + <module>langchain4j-embeddingstore</module> <module>langchain4j-tokenizer</module> <module>langchain4j-tools</module> <module>langchain4j-web-search</module> diff --git a/poms/bom-test/pom.xml b/poms/bom-test/pom.xml index 19fd770cf5..aa16f9b560 100644 --- a/poms/bom-test/pom.xml +++ b/poms/bom-test/pom.xml @@ -78,6 +78,11 @@ <artifactId>langchain4j-openai</artifactId> <version>${langchain4j.version}</version> </dependency> + <dependency> + <groupId>dev.langchain4j</groupId> + <artifactId>langchain4j-qdrant</artifactId> + <version>${langchain4j-beta.version}</version> + </dependency> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-web-search-engine-tavily</artifactId> diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml index d9b55a2604..fa7051b47f 100644 --- a/poms/bom/pom.xml +++ b/poms/bom/pom.xml @@ -1976,6 +1976,16 @@ <artifactId>camel-langchain4j-embeddings</artifactId> <version>${camel.version}</version> </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-langchain4j-embeddingstore</artifactId> + <version>${camel.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-langchain4j-embeddingstore-api</artifactId> + <version>${camel.version}</version> + </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-langchain4j-tokenizer</artifactId> @@ -5080,6 +5090,16 @@ <artifactId>camel-quarkus-langchain4j-embeddings-deployment</artifactId> <version>${camel-quarkus.version}</version> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-langchain4j-embeddingstore</artifactId> + <version>${camel-quarkus.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-langchain4j-embeddingstore-deployment</artifactId> + <version>${camel-quarkus.version}</version> + </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-langchain4j-tokenizer</artifactId> diff --git a/poms/bom/src/main/generated/flattened-full-pom.xml b/poms/bom/src/main/generated/flattened-full-pom.xml index e97efef894..7316746040 100644 --- a/poms/bom/src/main/generated/flattened-full-pom.xml +++ b/poms/bom/src/main/generated/flattened-full-pom.xml @@ -1892,6 +1892,16 @@ <artifactId>camel-langchain4j-embeddings</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> <version>4.15.0</version><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> </dependency> + <dependency> + <groupId>org.apache.camel</groupId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <artifactId>camel-langchain4j-embeddingstore</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <version>4.15.0</version><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <artifactId>camel-langchain4j-embeddingstore-api</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <version>4.15.0</version><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + </dependency> <dependency> <groupId>org.apache.camel</groupId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> <artifactId>camel-langchain4j-tokenizer</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> @@ -4968,6 +4978,16 @@ <artifactId>camel-quarkus-langchain4j-embeddings-deployment</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> <version>3.29.0-SNAPSHOT</version><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <artifactId>camel-quarkus-langchain4j-embeddingstore</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <version>3.29.0-SNAPSHOT</version><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <artifactId>camel-quarkus-langchain4j-embeddingstore-deployment</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <version>3.29.0-SNAPSHOT</version><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> <artifactId>camel-quarkus-langchain4j-tokenizer</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> diff --git a/poms/bom/src/main/generated/flattened-reduced-pom.xml b/poms/bom/src/main/generated/flattened-reduced-pom.xml index f8c77897bb..a6a0825407 100644 --- a/poms/bom/src/main/generated/flattened-reduced-pom.xml +++ b/poms/bom/src/main/generated/flattened-reduced-pom.xml @@ -1887,6 +1887,16 @@ <artifactId>camel-langchain4j-embeddings</artifactId> <version>4.15.0</version> </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-langchain4j-embeddingstore</artifactId> + <version>4.15.0</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-langchain4j-embeddingstore-api</artifactId> + <version>4.15.0</version> + </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-langchain4j-tokenizer</artifactId> @@ -4958,6 +4968,16 @@ <artifactId>camel-quarkus-langchain4j-embeddings-deployment</artifactId> <version>3.29.0-SNAPSHOT</version> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-langchain4j-embeddingstore</artifactId> + <version>3.29.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-langchain4j-embeddingstore-deployment</artifactId> + <version>3.29.0-SNAPSHOT</version> + </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-langchain4j-tokenizer</artifactId> diff --git a/poms/bom/src/main/generated/flattened-reduced-verbose-pom.xml b/poms/bom/src/main/generated/flattened-reduced-verbose-pom.xml index dd11f91988..93be0d5720 100644 --- a/poms/bom/src/main/generated/flattened-reduced-verbose-pom.xml +++ b/poms/bom/src/main/generated/flattened-reduced-verbose-pom.xml @@ -1887,6 +1887,16 @@ <artifactId>camel-langchain4j-embeddings</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> <version>4.15.0</version><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> </dependency> + <dependency> + <groupId>org.apache.camel</groupId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <artifactId>camel-langchain4j-embeddingstore</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <version>4.15.0</version><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <artifactId>camel-langchain4j-embeddingstore-api</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <version>4.15.0</version><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + </dependency> <dependency> <groupId>org.apache.camel</groupId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> <artifactId>camel-langchain4j-tokenizer</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> @@ -4958,6 +4968,16 @@ <artifactId>camel-quarkus-langchain4j-embeddings-deployment</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> <version>3.29.0-SNAPSHOT</version><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <artifactId>camel-quarkus-langchain4j-embeddingstore</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <version>3.29.0-SNAPSHOT</version><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <artifactId>camel-quarkus-langchain4j-embeddingstore-deployment</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + <version>3.29.0-SNAPSHOT</version><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> + </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> <artifactId>camel-quarkus-langchain4j-tokenizer</artifactId><!-- org.apache.camel.quarkus:camel-quarkus-bom:${project.version} --> diff --git a/tooling/scripts/test-categories.yaml b/tooling/scripts/test-categories.yaml index 2a4e41bdaa..48445a2215 100644 --- a/tooling/scripts/test-categories.yaml +++ b/tooling/scripts/test-categories.yaml @@ -233,6 +233,7 @@ group-13: - java-joor-dsl - jdbc-grouped - kubernetes + - langchain4j-embeddingstore - salesforce - sap-netweaver - servicenow
