Skip to content

Commit dd931ed

Browse files
committed
Make model names configuration runtime fixed in Jlama
This is needed so we can now at build time what the values are and therefore download the models at build
1 parent d21b911 commit dd931ed

File tree

7 files changed

+114
-39
lines changed

7 files changed

+114
-39
lines changed

model-providers/jlama/deployment/src/main/java/io/quarkiverse/langchain4j/jlama/deployment/JlamaAiProcessor.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
import io.quarkiverse.langchain4j.deployment.items.SelectedChatModelProviderBuildItem;
1919
import io.quarkiverse.langchain4j.deployment.items.SelectedEmbeddingModelCandidateBuildItem;
2020
import io.quarkiverse.langchain4j.jlama.runtime.JlamaAiRecorder;
21-
import io.quarkiverse.langchain4j.jlama.runtime.config.LangChain4jJlamaAiConfig;
21+
import io.quarkiverse.langchain4j.jlama.runtime.config.LangChain4jJlamaConfig;
22+
import io.quarkiverse.langchain4j.jlama.runtime.config.LangChain4jJlamaFixedRuntimeConfig;
2223
import io.quarkiverse.langchain4j.runtime.NamedConfigUtil;
2324
import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
2425
import io.quarkus.deployment.annotations.BuildProducer;
@@ -60,20 +61,23 @@ public void providerCandidates(BuildProducer<ChatModelProviderCandidateBuildItem
6061
@BuildStep
6162
@Record(ExecutionTime.RUNTIME_INIT)
6263
void generateBeans(JlamaAiRecorder recorder, List<SelectedChatModelProviderBuildItem> selectedChatItem,
63-
List<SelectedEmbeddingModelCandidateBuildItem> selectedEmbedding, LangChain4jJlamaAiConfig config,
64+
List<SelectedEmbeddingModelCandidateBuildItem> selectedEmbedding,
65+
LangChain4jJlamaConfig runtimeConfig,
66+
LangChain4jJlamaFixedRuntimeConfig fixedRuntimeConfig,
6467
BuildProducer<SyntheticBeanBuildItem> beanProducer) {
6568

6669
for (var selected : selectedChatItem) {
6770
if (PROVIDER.equals(selected.getProvider())) {
6871
String configName = selected.getConfigName();
6972
var builder = SyntheticBeanBuildItem.configure(CHAT_MODEL).setRuntimeInit().defaultBean()
70-
.scope(ApplicationScoped.class).supplier(recorder.chatModel(config, configName));
73+
.scope(ApplicationScoped.class)
74+
.supplier(recorder.chatModel(runtimeConfig, fixedRuntimeConfig, configName));
7175
addQualifierIfNecessary(builder, configName);
7276
beanProducer.produce(builder.done());
7377

7478
var streamingBuilder = SyntheticBeanBuildItem.configure(STREAMING_CHAT_MODEL).setRuntimeInit()
7579
.defaultBean().scope(ApplicationScoped.class)
76-
.supplier(recorder.streamingChatModel(config, configName));
80+
.supplier(recorder.streamingChatModel(runtimeConfig, fixedRuntimeConfig, configName));
7781
addQualifierIfNecessary(streamingBuilder, configName);
7882
beanProducer.produce(streamingBuilder.done());
7983
}
@@ -84,7 +88,7 @@ void generateBeans(JlamaAiRecorder recorder, List<SelectedChatModelProviderBuild
8488
String configName = selected.getConfigName();
8589
var builder = SyntheticBeanBuildItem.configure(EMBEDDING_MODEL).setRuntimeInit().defaultBean()
8690
.unremovable().scope(ApplicationScoped.class)
87-
.supplier(recorder.embeddingModel(config, configName));
91+
.supplier(recorder.embeddingModel(runtimeConfig, fixedRuntimeConfig, configName));
8892
addQualifierIfNecessary(builder, configName);
8993
beanProducer.produce(builder.done());
9094
}

model-providers/jlama/runtime/src/main/java/io/quarkiverse/langchain4j/jlama/runtime/JlamaAiRecorder.java

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,25 @@
1212
import io.quarkiverse.langchain4j.jlama.JlamaEmbeddingModel;
1313
import io.quarkiverse.langchain4j.jlama.JlamaStreamingChatModel;
1414
import io.quarkiverse.langchain4j.jlama.runtime.config.ChatModelConfig;
15-
import io.quarkiverse.langchain4j.jlama.runtime.config.EmbeddingModelConfig;
16-
import io.quarkiverse.langchain4j.jlama.runtime.config.LangChain4jJlamaAiConfig;
15+
import io.quarkiverse.langchain4j.jlama.runtime.config.LangChain4jJlamaConfig;
16+
import io.quarkiverse.langchain4j.jlama.runtime.config.LangChain4jJlamaFixedRuntimeConfig;
1717
import io.quarkiverse.langchain4j.runtime.NamedConfigUtil;
1818
import io.quarkus.runtime.annotations.Recorder;
1919

2020
@Recorder
2121
public class JlamaAiRecorder {
2222

23-
public Supplier<ChatLanguageModel> chatModel(LangChain4jJlamaAiConfig runtimeConfig, String configName) {
24-
LangChain4jJlamaAiConfig.JlamaAiConfig jlamaConfig = correspondingJlamaConfig(runtimeConfig, configName);
23+
public Supplier<ChatLanguageModel> chatModel(LangChain4jJlamaConfig runtimeConfig,
24+
LangChain4jJlamaFixedRuntimeConfig fixedRuntimeConfig,
25+
String configName) {
26+
LangChain4jJlamaConfig.JlamaConfig jlamaConfig = correspondingJlamaConfig(runtimeConfig, configName);
27+
LangChain4jJlamaFixedRuntimeConfig.JlamaConfig jlamaFixedRuntimeConfig = correspondingJlamaFixedRuntimeConfig(
28+
fixedRuntimeConfig, configName);
2529

2630
if (jlamaConfig.enableIntegration()) {
2731
ChatModelConfig chatModelConfig = jlamaConfig.chatModel();
2832

29-
var builder = JlamaChatModel.builder().modelName(chatModelConfig.modelName());
33+
var builder = JlamaChatModel.builder().modelName(jlamaFixedRuntimeConfig.chatModel().modelName());
3034

3135
if (chatModelConfig.temperature().isPresent()) {
3236
builder.temperature((float) chatModelConfig.temperature().getAsDouble());
@@ -51,14 +55,17 @@ public ChatLanguageModel get() {
5155
}
5256
}
5357

54-
public Supplier<StreamingChatLanguageModel> streamingChatModel(LangChain4jJlamaAiConfig runtimeConfig,
58+
public Supplier<StreamingChatLanguageModel> streamingChatModel(LangChain4jJlamaConfig runtimeConfig,
59+
LangChain4jJlamaFixedRuntimeConfig fixedRuntimeConfig,
5560
String configName) {
56-
LangChain4jJlamaAiConfig.JlamaAiConfig jlamaConfig = correspondingJlamaConfig(runtimeConfig, configName);
61+
LangChain4jJlamaConfig.JlamaConfig jlamaConfig = correspondingJlamaConfig(runtimeConfig, configName);
62+
LangChain4jJlamaFixedRuntimeConfig.JlamaConfig jlamaFixedRuntimeConfig = correspondingJlamaFixedRuntimeConfig(
63+
fixedRuntimeConfig, configName);
5764

5865
if (jlamaConfig.enableIntegration()) {
5966
ChatModelConfig chatModelConfig = jlamaConfig.chatModel();
6067

61-
var builder = JlamaStreamingChatModel.builder().modelName(chatModelConfig.modelName());
68+
var builder = JlamaStreamingChatModel.builder().modelName(jlamaFixedRuntimeConfig.chatModel().modelName());
6269

6370
if (chatModelConfig.temperature().isPresent()) {
6471
builder.temperature((float) chatModelConfig.temperature().getAsDouble());
@@ -79,12 +86,15 @@ public StreamingChatLanguageModel get() {
7986
}
8087
}
8188

82-
public Supplier<EmbeddingModel> embeddingModel(LangChain4jJlamaAiConfig runtimeConfig, String configName) {
83-
LangChain4jJlamaAiConfig.JlamaAiConfig jlamaConfig = correspondingJlamaConfig(runtimeConfig, configName);
89+
public Supplier<EmbeddingModel> embeddingModel(LangChain4jJlamaConfig runtimeConfig,
90+
LangChain4jJlamaFixedRuntimeConfig fixedRuntimeConfig,
91+
String configName) {
92+
LangChain4jJlamaConfig.JlamaConfig jlamaConfig = correspondingJlamaConfig(runtimeConfig, configName);
93+
LangChain4jJlamaFixedRuntimeConfig.JlamaConfig jlamaFixedRuntimeConfig = correspondingJlamaFixedRuntimeConfig(
94+
fixedRuntimeConfig, configName);
8495

8596
if (jlamaConfig.enableIntegration()) {
86-
EmbeddingModelConfig embeddingModelConfig = jlamaConfig.embeddingModel();
87-
var builder = JlamaEmbeddingModel.builder().modelName(embeddingModelConfig.modelName());
97+
var builder = JlamaEmbeddingModel.builder().modelName(jlamaFixedRuntimeConfig.embeddingModel().modelName());
8898

8999
return new Supplier<>() {
90100
@Override
@@ -102,15 +112,27 @@ public EmbeddingModel get() {
102112
}
103113
}
104114

105-
private LangChain4jJlamaAiConfig.JlamaAiConfig correspondingJlamaConfig(LangChain4jJlamaAiConfig runtimeConfig,
115+
private LangChain4jJlamaConfig.JlamaConfig correspondingJlamaConfig(LangChain4jJlamaConfig runtimeConfig,
116+
String configName) {
117+
LangChain4jJlamaConfig.JlamaConfig jlamaConfig;
118+
if (NamedConfigUtil.isDefault(configName)) {
119+
jlamaConfig = runtimeConfig.defaultConfig();
120+
} else {
121+
jlamaConfig = runtimeConfig.namedConfig().get(configName);
122+
}
123+
return jlamaConfig;
124+
}
125+
126+
private LangChain4jJlamaFixedRuntimeConfig.JlamaConfig correspondingJlamaFixedRuntimeConfig(
127+
LangChain4jJlamaFixedRuntimeConfig runtimeConfig,
106128
String configName) {
107-
LangChain4jJlamaAiConfig.JlamaAiConfig huggingFaceConfig;
129+
LangChain4jJlamaFixedRuntimeConfig.JlamaConfig jlamaConfig;
108130
if (NamedConfigUtil.isDefault(configName)) {
109-
huggingFaceConfig = runtimeConfig.defaultConfig();
131+
jlamaConfig = runtimeConfig.defaultConfig();
110132
} else {
111-
huggingFaceConfig = runtimeConfig.namedConfig().get(configName);
133+
jlamaConfig = runtimeConfig.namedConfig().get(configName);
112134
}
113-
return huggingFaceConfig;
135+
return jlamaConfig;
114136
}
115137

116138
}

model-providers/jlama/runtime/src/main/java/io/quarkiverse/langchain4j/jlama/runtime/config/ChatModelConfig.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,10 @@
55

66
import io.quarkus.runtime.annotations.ConfigDocDefault;
77
import io.quarkus.runtime.annotations.ConfigGroup;
8-
import io.smallrye.config.WithDefault;
98

109
@ConfigGroup
1110
public interface ChatModelConfig {
1211

13-
/**
14-
* Model name to use
15-
*/
16-
@WithDefault("tjake/TinyLlama-1.1B-Chat-v1.0-Jlama-Q4")
17-
String modelName();
18-
1912
/**
2013
* What sampling temperature to use, between 0.0 and 1.0. Higher values like 0.8
2114
* will make the output more random, while lower values like 0.2 will make it
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.quarkiverse.langchain4j.jlama.runtime.config;
2+
3+
import io.quarkus.runtime.annotations.ConfigGroup;
4+
import io.smallrye.config.WithDefault;
5+
6+
@ConfigGroup
7+
public interface ChatModelFixedRuntimeConfig {
8+
9+
/**
10+
* Model name to use
11+
*/
12+
@WithDefault("tjake/TinyLlama-1.1B-Chat-v1.0-Jlama-Q4")
13+
String modelName();
14+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import io.smallrye.config.WithDefault;
55

66
@ConfigGroup
7-
public interface EmbeddingModelConfig {
7+
public interface EmbeddingModelFixedRuntimeConfig {
88

99
/**
1010
* Model name to use
Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@
1515

1616
@ConfigRoot(phase = RUN_TIME)
1717
@ConfigMapping(prefix = "quarkus.langchain4j.jlama")
18-
public interface LangChain4jJlamaAiConfig {
18+
public interface LangChain4jJlamaConfig {
1919

2020
/**
2121
* Default model config.
2222
*/
2323
@WithParentName
24-
JlamaAiConfig defaultConfig();
24+
JlamaConfig defaultConfig();
2525

2626
/**
2727
* Named model config.
@@ -30,21 +30,16 @@ public interface LangChain4jJlamaAiConfig {
3030
@ConfigDocMapKey("model-name")
3131
@WithParentName
3232
@WithDefaults
33-
Map<String, JlamaAiConfig> namedConfig();
33+
Map<String, JlamaConfig> namedConfig();
3434

3535
@ConfigGroup
36-
interface JlamaAiConfig {
36+
interface JlamaConfig {
3737

3838
/**
3939
* Chat model related settings
4040
*/
4141
ChatModelConfig chatModel();
4242

43-
/**
44-
* Embedding model related settings
45-
*/
46-
EmbeddingModelConfig embeddingModel();
47-
4843
/**
4944
* Whether to enable the integration. Set to {@code false} to disable
5045
* all requests.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package io.quarkiverse.langchain4j.jlama.runtime.config;
2+
3+
import static io.quarkus.runtime.annotations.ConfigPhase.BUILD_AND_RUN_TIME_FIXED;
4+
5+
import java.util.Map;
6+
7+
import io.quarkus.runtime.annotations.ConfigDocMapKey;
8+
import io.quarkus.runtime.annotations.ConfigDocSection;
9+
import io.quarkus.runtime.annotations.ConfigGroup;
10+
import io.quarkus.runtime.annotations.ConfigRoot;
11+
import io.smallrye.config.ConfigMapping;
12+
import io.smallrye.config.WithDefaults;
13+
import io.smallrye.config.WithParentName;
14+
15+
@ConfigRoot(phase = BUILD_AND_RUN_TIME_FIXED)
16+
@ConfigMapping(prefix = "quarkus.langchain4j.jlama")
17+
public interface LangChain4jJlamaFixedRuntimeConfig {
18+
19+
/**
20+
* Default model config.
21+
*/
22+
@WithParentName
23+
JlamaConfig defaultConfig();
24+
25+
/**
26+
* Named model config.
27+
*/
28+
@ConfigDocSection
29+
@ConfigDocMapKey("model-name")
30+
@WithParentName
31+
@WithDefaults
32+
Map<String, JlamaConfig> namedConfig();
33+
34+
@ConfigGroup
35+
interface JlamaConfig {
36+
37+
/**
38+
* Chat model related settings
39+
*/
40+
ChatModelFixedRuntimeConfig chatModel();
41+
42+
/**
43+
* Embedding model related settings
44+
*/
45+
EmbeddingModelFixedRuntimeConfig embeddingModel();
46+
}
47+
}

0 commit comments

Comments
 (0)