Skip to content

Commit c9ed10c

Browse files
committed
Do not use Runtime configuration during deployment
1 parent c465356 commit c9ed10c

File tree

59 files changed

+573
-474
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+573
-474
lines changed

core/deployment/src/main/java/io/quarkiverse/langchain4j/deployment/ChatMemoryProcessor.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import dev.langchain4j.model.TokenCountEstimator;
1111
import dev.langchain4j.store.memory.chat.ChatMemoryStore;
1212
import io.quarkiverse.langchain4j.runtime.ChatMemoryRecorder;
13-
import io.quarkiverse.langchain4j.runtime.aiservice.ChatMemoryConfig;
1413
import io.quarkus.arc.SyntheticCreationalContext;
1514
import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
1615
import io.quarkus.arc.deployment.UnremovableBeanBuildItem;
@@ -23,7 +22,7 @@ public class ChatMemoryProcessor {
2322

2423
@BuildStep
2524
@Record(ExecutionTime.RUNTIME_INIT)
26-
void setupBeans(ChatMemoryBuildConfig buildConfig, ChatMemoryConfig runtimeConfig,
25+
void setupBeans(ChatMemoryBuildConfig buildConfig,
2726
ChatMemoryRecorder recorder,
2827
BuildProducer<UnremovableBeanBuildItem> unremovableProducer,
2928
BuildProducer<SyntheticBeanBuildItem> syntheticBeanProducer) {
@@ -38,10 +37,10 @@ void setupBeans(ChatMemoryBuildConfig buildConfig, ChatMemoryConfig runtimeConfi
3837
.defaultBean();
3938

4039
if (buildConfig.type() == ChatMemoryBuildConfig.Type.MESSAGE_WINDOW) {
41-
fun = recorder.messageWindow(runtimeConfig);
40+
fun = recorder.messageWindow();
4241
} else if (buildConfig.type() == ChatMemoryBuildConfig.Type.TOKEN_WINDOW) {
4342
configurator.addInjectionPoint(ClassType.create(TokenCountEstimator.class));
44-
fun = recorder.tokenWindow(runtimeConfig);
43+
fun = recorder.tokenWindow();
4544
} else {
4645
throw new IllegalStateException(
4746
"Invalid configuration '" + buildConfig.type() + "' used in 'quarkus.langchain4j.chat-memory.type'");

core/runtime/src/main/java/io/quarkiverse/langchain4j/runtime/ChatMemoryRecorder.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,23 @@
1010
import dev.langchain4j.store.memory.chat.ChatMemoryStore;
1111
import io.quarkiverse.langchain4j.runtime.aiservice.ChatMemoryConfig;
1212
import io.quarkus.arc.SyntheticCreationalContext;
13+
import io.quarkus.runtime.RuntimeValue;
1314
import io.quarkus.runtime.annotations.Recorder;
1415

1516
@Recorder
1617
public class ChatMemoryRecorder {
18+
private final RuntimeValue<ChatMemoryConfig> config;
1719

18-
public Function<SyntheticCreationalContext<ChatMemoryProvider>, ChatMemoryProvider> messageWindow(ChatMemoryConfig config) {
20+
public ChatMemoryRecorder(RuntimeValue<ChatMemoryConfig> config) {
21+
this.config = config;
22+
}
23+
24+
public Function<SyntheticCreationalContext<ChatMemoryProvider>, ChatMemoryProvider> messageWindow() {
1925
return new Function<>() {
2026
@Override
2127
public ChatMemoryProvider apply(SyntheticCreationalContext<ChatMemoryProvider> context) {
2228
ChatMemoryStore chatMemoryStore = context.getInjectedReference(ChatMemoryStore.class);
23-
int maxMessages = config.memoryWindow().maxMessages();
29+
int maxMessages = config.getValue().memoryWindow().maxMessages();
2430
return new ChatMemoryProvider() {
2531
@Override
2632
public ChatMemory get(Object memoryId) {
@@ -35,13 +41,13 @@ public ChatMemory get(Object memoryId) {
3541
};
3642
}
3743

38-
public Function<SyntheticCreationalContext<ChatMemoryProvider>, ChatMemoryProvider> tokenWindow(ChatMemoryConfig config) {
44+
public Function<SyntheticCreationalContext<ChatMemoryProvider>, ChatMemoryProvider> tokenWindow() {
3945
return new Function<>() {
4046
@Override
4147
public ChatMemoryProvider apply(SyntheticCreationalContext<ChatMemoryProvider> context) {
4248
ChatMemoryStore chatMemoryStore = context.getInjectedReference(ChatMemoryStore.class);
4349
TokenCountEstimator tokenizer = context.getInjectedReference(TokenCountEstimator.class);
44-
int maxTokens = config.tokenWindow().maxTokens();
50+
int maxTokens = config.getValue().tokenWindow().maxTokens();
4551
return new ChatMemoryProvider() {
4652
@Override
4753
public ChatMemory get(Object memoryId) {

embedding-stores/chroma/deployment/src/main/java/io/quarkiverse/langchain4j/chroma/deployment/ChromaProcessor.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import dev.langchain4j.data.segment.TextSegment;
1010
import dev.langchain4j.store.embedding.EmbeddingStore;
1111
import io.quarkiverse.langchain4j.chroma.ChromaEmbeddingStore;
12-
import io.quarkiverse.langchain4j.chroma.runtime.ChromaConfig;
1312
import io.quarkiverse.langchain4j.chroma.runtime.ChromaRecorder;
1413
import io.quarkiverse.langchain4j.deployment.EmbeddingStoreBuildItem;
1514
import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
@@ -40,7 +39,6 @@ FeatureBuildItem feature() {
4039
public void createBean(
4140
BuildProducer<SyntheticBeanBuildItem> beanProducer,
4241
ChromaRecorder recorder,
43-
ChromaConfig config,
4442
BuildProducer<EmbeddingStoreBuildItem> embeddingStoreProducer) {
4543
beanProducer.produce(SyntheticBeanBuildItem
4644
.configure(CHROMA_EMBEDDING_STORE)
@@ -50,7 +48,7 @@ public void createBean(
5048
.setRuntimeInit()
5149
.unremovable()
5250
.scope(ApplicationScoped.class)
53-
.supplier(recorder.chromaStoreSupplier(config))
51+
.supplier(recorder.chromaStoreSupplier())
5452
.done());
5553
embeddingStoreProducer.produce(new EmbeddingStoreBuildItem());
5654
}

embedding-stores/chroma/runtime/src/main/java/io/quarkiverse/langchain4j/chroma/runtime/ChromaRecorder.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,26 @@
44
import java.util.function.Supplier;
55

66
import io.quarkiverse.langchain4j.chroma.ChromaEmbeddingStore;
7+
import io.quarkus.runtime.RuntimeValue;
78
import io.quarkus.runtime.annotations.Recorder;
89

910
@Recorder
1011
public class ChromaRecorder {
11-
public Supplier<ChromaEmbeddingStore> chromaStoreSupplier(ChromaConfig config) {
12+
private final RuntimeValue<ChromaConfig> runtimeConfig;
13+
14+
public ChromaRecorder(RuntimeValue<ChromaConfig> runtimeConfig) {
15+
this.runtimeConfig = runtimeConfig;
16+
}
17+
18+
public Supplier<ChromaEmbeddingStore> chromaStoreSupplier() {
1219
return new Supplier<>() {
1320
@Override
1421
public ChromaEmbeddingStore get() {
15-
return new ChromaEmbeddingStore(config.url(),
16-
config.collectionName(),
17-
config.timeout().orElse(Duration.ofSeconds(5)),
18-
config.logRequests().orElse(false),
19-
config.logResponses().orElse(false));
22+
return new ChromaEmbeddingStore(runtimeConfig.getValue().url(),
23+
runtimeConfig.getValue().collectionName(),
24+
runtimeConfig.getValue().timeout().orElse(Duration.ofSeconds(5)),
25+
runtimeConfig.getValue().logRequests().orElse(false),
26+
runtimeConfig.getValue().logResponses().orElse(false));
2027
}
2128
};
2229
}

embedding-stores/infinispan/deployment/src/main/java/io/quarkiverse/langchain4j/infinispan/InfinispanEmbeddingStoreProcessor.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import dev.langchain4j.data.segment.TextSegment;
1313
import dev.langchain4j.store.embedding.EmbeddingStore;
1414
import io.quarkiverse.langchain4j.deployment.EmbeddingStoreBuildItem;
15-
import io.quarkiverse.langchain4j.infinispan.runtime.InfinispanEmbeddingStoreConfig;
1615
import io.quarkiverse.langchain4j.infinispan.runtime.InfinispanEmbeddingStoreRecorder;
1716
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
1817
import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
@@ -48,7 +47,6 @@ public InfinispanClientNameBuildItem requestInfinispanClient(
4847
public void createBean(
4948
BuildProducer<SyntheticBeanBuildItem> beanProducer,
5049
InfinispanEmbeddingStoreRecorder recorder,
51-
InfinispanEmbeddingStoreConfig config,
5250
BuildProducer<EmbeddingStoreBuildItem> embeddingStoreProducer,
5351
InfinispanEmbeddingStoreBuildTimeConfig buildTimeConfig) {
5452
String clientName = buildTimeConfig.clientName().orElse(null);
@@ -71,7 +69,7 @@ public void createBean(
7169
.scope(ApplicationScoped.class)
7270
.addInjectionPoint(ClassType.create(DotName.createSimple(RemoteCacheManager.class)),
7371
infinispanClientQualifier)
74-
.createWith(recorder.embeddingStoreFunction(config, clientName))
72+
.createWith(recorder.embeddingStoreFunction(clientName))
7573
.done());
7674
embeddingStoreProducer.produce(new EmbeddingStoreBuildItem());
7775
}

embedding-stores/infinispan/runtime/src/main/java/io/quarkiverse/langchain4j/infinispan/runtime/InfinispanEmbeddingStoreRecorder.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,19 @@
77
import io.quarkiverse.langchain4j.infinispan.InfinispanEmbeddingStore;
88
import io.quarkus.arc.SyntheticCreationalContext;
99
import io.quarkus.infinispan.client.InfinispanClientName;
10+
import io.quarkus.runtime.RuntimeValue;
1011
import io.quarkus.runtime.annotations.Recorder;
1112

1213
@Recorder
1314
public class InfinispanEmbeddingStoreRecorder {
15+
private final RuntimeValue<InfinispanEmbeddingStoreConfig> runtimeConfig;
16+
17+
public InfinispanEmbeddingStoreRecorder(RuntimeValue<InfinispanEmbeddingStoreConfig> runtimeConfig) {
18+
this.runtimeConfig = runtimeConfig;
19+
}
1420

1521
public Function<SyntheticCreationalContext<InfinispanEmbeddingStore>, InfinispanEmbeddingStore> embeddingStoreFunction(
16-
InfinispanEmbeddingStoreConfig config, String clientName) {
22+
String clientName) {
1723
return new Function<>() {
1824
@Override
1925
public InfinispanEmbeddingStore apply(SyntheticCreationalContext<InfinispanEmbeddingStore> context) {
@@ -26,7 +32,8 @@ public InfinispanEmbeddingStore apply(SyntheticCreationalContext<InfinispanEmbed
2632
new InfinispanClientName.Literal(clientName));
2733
}
2834
builder.cacheManager(cacheManager);
29-
builder.schema(new InfinispanSchema(config.cacheName(), config.dimension(), config.distance()));
35+
builder.schema(new InfinispanSchema(runtimeConfig.getValue().cacheName(), runtimeConfig.getValue().dimension(),
36+
runtimeConfig.getValue().distance()));
3037
return builder.build();
3138
}
3239
};

embedding-stores/milvus/deployment/src/main/java/io/quarkiverse/langchain4j/milvus/MilvusProcessor.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStore;
1212
import io.quarkiverse.langchain4j.deployment.EmbeddingStoreBuildItem;
1313
import io.quarkiverse.langchain4j.milvus.runtime.MilvusRecorder;
14-
import io.quarkiverse.langchain4j.milvus.runtime.MilvusRuntimeConfig;
1514
import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
1615
import io.quarkus.deployment.annotations.BuildProducer;
1716
import io.quarkus.deployment.annotations.BuildStep;
@@ -34,7 +33,6 @@ FeatureBuildItem feature() {
3433
public void createBean(
3534
BuildProducer<SyntheticBeanBuildItem> beanProducer,
3635
MilvusRecorder recorder,
37-
MilvusRuntimeConfig config,
3836
BuildProducer<EmbeddingStoreBuildItem> embeddingStoreProducer) {
3937
beanProducer.produce(SyntheticBeanBuildItem
4038
.configure(MILVUS_EMBEDDING_STORE)
@@ -44,7 +42,7 @@ public void createBean(
4442
.setRuntimeInit()
4543
.unremovable()
4644
.scope(ApplicationScoped.class)
47-
.supplier(recorder.milvusStoreSupplier(config))
45+
.supplier(recorder.milvusStoreSupplier())
4846
.done());
4947
embeddingStoreProducer.produce(new EmbeddingStoreBuildItem());
5048
}

embedding-stores/milvus/runtime/src/main/java/io/quarkiverse/langchain4j/milvus/runtime/MilvusRecorder.java

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,38 @@
33
import java.util.function.Supplier;
44

55
import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStore;
6+
import io.quarkus.runtime.RuntimeValue;
67
import io.quarkus.runtime.annotations.Recorder;
78

89
@Recorder
910
public class MilvusRecorder {
11+
private final RuntimeValue<MilvusRuntimeConfig> runtimeConfig;
1012

11-
public Supplier<MilvusEmbeddingStore> milvusStoreSupplier(MilvusRuntimeConfig config) {
13+
public MilvusRecorder(RuntimeValue<MilvusRuntimeConfig> runtimeConfig) {
14+
this.runtimeConfig = runtimeConfig;
15+
}
16+
17+
public Supplier<MilvusEmbeddingStore> milvusStoreSupplier() {
1218
return new Supplier<>() {
1319
@Override
1420
public MilvusEmbeddingStore get() {
1521
return new MilvusEmbeddingStore.Builder()
16-
.host(config.host())
17-
.port(config.port())
18-
.collectionName(config.collectionName())
19-
.idFieldName(config.primaryField())
20-
.textFieldName(config.textField())
21-
.metadataFieldName(config.metadataField())
22-
.vectorFieldName(config.vectorField())
23-
.dimension(config.dimension().orElse(null))
24-
.indexType(config.indexType())
25-
.metricType(config.metricType())
26-
.token(config.token().orElse(null))
27-
.username(config.username().orElse(null))
28-
.password(config.password().orElse(null))
29-
.consistencyLevel(config.consistencyLevel())
22+
.host(runtimeConfig.getValue().host())
23+
.port(runtimeConfig.getValue().port())
24+
.collectionName(runtimeConfig.getValue().collectionName())
25+
.idFieldName(runtimeConfig.getValue().primaryField())
26+
.textFieldName(runtimeConfig.getValue().textField())
27+
.metadataFieldName(runtimeConfig.getValue().metadataField())
28+
.vectorFieldName(runtimeConfig.getValue().vectorField())
29+
.dimension(runtimeConfig.getValue().dimension().orElse(null))
30+
.indexType(runtimeConfig.getValue().indexType())
31+
.metricType(runtimeConfig.getValue().metricType())
32+
.token(runtimeConfig.getValue().token().orElse(null))
33+
.username(runtimeConfig.getValue().username().orElse(null))
34+
.password(runtimeConfig.getValue().password().orElse(null))
35+
.consistencyLevel(runtimeConfig.getValue().consistencyLevel())
3036
.retrieveEmbeddingsOnSearch(true)
31-
.databaseName(config.dbName())
37+
.databaseName(runtimeConfig.getValue().dbName())
3238
.build();
3339
}
3440
};

embedding-stores/neo4j/deployment/src/main/java/io/quarkiverse/langchain4j/neo4j/Neo4jEmbeddingStoreProcessor.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import dev.langchain4j.store.embedding.EmbeddingStore;
1313
import io.quarkiverse.langchain4j.deployment.EmbeddingStoreBuildItem;
1414
import io.quarkiverse.langchain4j.neo4j.runtime.Neo4jEmbeddingStoreRecorder;
15-
import io.quarkiverse.langchain4j.neo4j.runtime.Neo4jRuntimeConfig;
1615
import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
1716
import io.quarkus.arc.deployment.UnremovableBeanBuildItem;
1817
import io.quarkus.deployment.annotations.BuildProducer;
@@ -36,7 +35,6 @@ FeatureBuildItem feature() {
3635
public void createBean(
3736
BuildProducer<SyntheticBeanBuildItem> beanProducer,
3837
Neo4jEmbeddingStoreRecorder recorder,
39-
Neo4jRuntimeConfig config,
4038
BuildProducer<UnremovableBeanBuildItem> unremovableProducer,
4139
BuildProducer<EmbeddingStoreBuildItem> embeddingStoreProducer) {
4240
unremovableProducer.produce(UnremovableBeanBuildItem.beanTypes(Driver.class));
@@ -51,7 +49,7 @@ public void createBean(
5149
.unremovable()
5250
.scope(ApplicationScoped.class)
5351
.addInjectionPoint(ClassType.create(DotName.createSimple(Driver.class)))
54-
.createWith(recorder.embeddingStoreFunction(config))
52+
.createWith(recorder.embeddingStoreFunction())
5553
.done());
5654
embeddingStoreProducer.produce(new EmbeddingStoreBuildItem());
5755
}

embedding-stores/neo4j/runtime/src/main/java/io/quarkiverse/langchain4j/neo4j/runtime/Neo4jEmbeddingStoreRecorder.java

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,34 @@
99

1010
import dev.langchain4j.community.store.embedding.neo4j.Neo4jEmbeddingStore;
1111
import io.quarkus.arc.SyntheticCreationalContext;
12+
import io.quarkus.runtime.RuntimeValue;
1213
import io.quarkus.runtime.annotations.Recorder;
1314

1415
@Recorder
1516
public class Neo4jEmbeddingStoreRecorder {
17+
private final RuntimeValue<Neo4jRuntimeConfig> runtimeConfig;
1618

17-
public Function<SyntheticCreationalContext<Neo4jEmbeddingStore>, Neo4jEmbeddingStore> embeddingStoreFunction(
18-
Neo4jRuntimeConfig config) {
19+
public Neo4jEmbeddingStoreRecorder(RuntimeValue<Neo4jRuntimeConfig> runtimeConfig) {
20+
this.runtimeConfig = runtimeConfig;
21+
}
22+
23+
public Function<SyntheticCreationalContext<Neo4jEmbeddingStore>, Neo4jEmbeddingStore> embeddingStoreFunction() {
1924
return new Function<>() {
2025
@Override
2126
public Neo4jEmbeddingStore apply(SyntheticCreationalContext<Neo4jEmbeddingStore> context) {
2227
var builder = Neo4jEmbeddingStore.builder();
2328
Driver driver = context.getInjectedReference(Driver.class, new Default.Literal());
2429
builder.driver(driver);
25-
builder.dimension(config.dimension());
26-
builder.label(config.label());
27-
builder.embeddingProperty(config.embeddingProperty());
28-
builder.idProperty(config.idProperty());
29-
builder.metadataPrefix(config.metadataPrefix().orElse(""));
30-
builder.textProperty(config.textProperty());
31-
builder.indexName(config.indexName());
32-
builder.databaseName(config.databaseName());
33-
builder.retrievalQuery(config.retrievalQuery());
34-
builder.config(SessionConfig.forDatabase(config.databaseName()));
30+
builder.dimension(runtimeConfig.getValue().dimension());
31+
builder.label(runtimeConfig.getValue().label());
32+
builder.embeddingProperty(runtimeConfig.getValue().embeddingProperty());
33+
builder.idProperty(runtimeConfig.getValue().idProperty());
34+
builder.metadataPrefix(runtimeConfig.getValue().metadataPrefix().orElse(""));
35+
builder.textProperty(runtimeConfig.getValue().textProperty());
36+
builder.indexName(runtimeConfig.getValue().indexName());
37+
builder.databaseName(runtimeConfig.getValue().databaseName());
38+
builder.retrievalQuery(runtimeConfig.getValue().retrievalQuery());
39+
builder.config(SessionConfig.forDatabase(runtimeConfig.getValue().databaseName()));
3540
return builder.build();
3641
}
3742
};

0 commit comments

Comments
 (0)