Skip to content

Commit

Permalink
Merge pull request #488 from humcqc/main-475-2
Browse files Browse the repository at this point in the history
Add qualifier to InProcessEmbeddingStore when needed 2
  • Loading branch information
jmartisk authored Apr 23, 2024
2 parents 98bb594 + e1de894 commit b5c6695
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
package io.quarkiverse.langchain4j.deployment;

import java.util.List;
import java.util.Optional;

import jakarta.enterprise.context.ApplicationScoped;

import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.DotName;

import dev.langchain4j.model.embedding.EmbeddingModel;
import io.quarkiverse.langchain4j.ModelName;
import io.quarkiverse.langchain4j.deployment.items.InProcessEmbeddingBuildItem;
import io.quarkiverse.langchain4j.deployment.items.SelectedEmbeddingModelCandidateBuildItem;
import io.quarkiverse.langchain4j.runtime.InProcessEmbeddingRecorder;
import io.quarkiverse.langchain4j.runtime.NamedModelUtil;
import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
import io.quarkus.bootstrap.classloading.QuarkusClassLoader;
import io.quarkus.deployment.annotations.BuildProducer;
Expand Down Expand Up @@ -120,20 +125,30 @@ InProcessEmbeddingBuildItem e5_small_v2() {
@Record(ExecutionTime.RUNTIME_INIT)
void exposeInProcessEmbeddingBeans(InProcessEmbeddingRecorder recorder,
List<InProcessEmbeddingBuildItem> embeddings,
List<SelectedEmbeddingModelCandidateBuildItem> selectedEmbedding,
BuildProducer<SyntheticBeanBuildItem> beanProducer) {

for (InProcessEmbeddingBuildItem embedding : embeddings) {
beanProducer.produce(SyntheticBeanBuildItem
Optional<String> modelName = selectedEmbedding.stream()
.filter(se -> se.getProvider().equals(embedding.getProvider()))
.map(SelectedEmbeddingModelCandidateBuildItem::getModelName)
.findFirst();
var builder = SyntheticBeanBuildItem
.configure(DotName.createSimple(embedding.className()))
.types(EmbeddingModel.class)
.defaultBean()
.setRuntimeInit()
.unremovable()
.scope(ApplicationScoped.class)
.supplier(recorder.instantiate(embedding.className()))
.done());
.supplier(recorder.instantiate(embedding.className()));
modelName.ifPresent(m -> addQualifierIfNecessary(builder, m));
beanProducer.produce(builder.done());
}

}

private void addQualifierIfNecessary(SyntheticBeanBuildItem.ExtendedBeanConfigurator builder, String modelName) {
if (!NamedModelUtil.isDefault(modelName)) {
builder.addQualifier(AnnotationInstance.builder(ModelName.class).add("value", modelName).build());
}
}
}
5 changes: 5 additions & 0 deletions integration-tests/multiple-providers/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@
<artifactId>quarkus-langchain4j-ollama</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId>
<version>${langchain4j-embeddings.version}</version>
</dependency>
<dependency>
<groupId>io.quarkiverse.langchain4j</groupId>
<artifactId>quarkus-langchain4j-openshift-ai</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,4 @@ quarkus.langchain4j.watsonx.c7.project-id=proj
quarkus.langchain4j.e1.embedding-model.provider=openai
quarkus.langchain4j.openai.e1.api-key=test5
quarkus.langchain4j.e2.embedding-model.provider=ollama

quarkus.langchain4j.e3.embedding-model.provider=dev.langchain4j.model.embedding.AllMiniLmL6V2EmbeddingModel
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import org.junit.jupiter.api.Test;

import dev.langchain4j.model.embedding.AllMiniLmL6V2EmbeddingModel;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.openai.OpenAiEmbeddingModel;
import io.quarkiverse.langchain4j.ModelName;
Expand All @@ -25,6 +26,10 @@ public class MultipleEmbeddingModelsTest {
@ModelName("e2")
EmbeddingModel secondNamedModel;

@Inject
@ModelName("e3")
EmbeddingModel fifthNamedModel;

@Inject
@ModelName("c1")
EmbeddingModel thirdNamedModel;
Expand Down Expand Up @@ -52,4 +57,9 @@ void thirdNamedModel() {
void fourthNamedModel() {
assertThat(ClientProxy.unwrap(fourthNamedModel)).isInstanceOf(AzureOpenAiEmbeddingModel.class);
}

@Test
void fifthNamedModel() {
assertThat(ClientProxy.unwrap(fifthNamedModel)).isInstanceOf(AllMiniLmL6V2EmbeddingModel.class);
}
}

0 comments on commit b5c6695

Please sign in to comment.