Skip to content

Commit 009104f

Browse files
committed
fix: don't require api key when using custom base url for mistralai
1 parent fe4865d commit 009104f

File tree

2 files changed

+23
-14
lines changed

2 files changed

+23
-14
lines changed

model-providers/mistral/runtime/src/main/java/io/quarkiverse/langchain4j/mistralai/runtime/MistralAiRecorder.java

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.quarkiverse.langchain4j.mistralai.runtime;
22

3+
import static io.quarkiverse.langchain4j.mistralai.runtime.config.LangChain4jMistralAiConfig.MistralAiConfig.DEFAULT_API_KEY;
4+
import static io.quarkiverse.langchain4j.mistralai.runtime.config.LangChain4jMistralAiConfig.MistralAiConfig.DEFAULT_BASE_URL;
35
import static io.quarkiverse.langchain4j.runtime.OptionalUtil.firstOrDefault;
46

57
import java.time.Duration;
@@ -27,22 +29,22 @@
2729

2830
@Recorder
2931
public class MistralAiRecorder {
30-
private static final String DUMMY_KEY = "dummy";
3132

3233
public Supplier<ChatLanguageModel> chatModel(LangChain4jMistralAiConfig runtimeConfig, String configName) {
3334
LangChain4jMistralAiConfig.MistralAiConfig mistralAiConfig = correspondingMistralAiConfig(runtimeConfig,
3435
configName);
3536

3637
if (mistralAiConfig.enableIntegration()) {
37-
String apiKey = mistralAiConfig.apiKey();
3838
ChatModelConfig chatModelConfig = mistralAiConfig.chatModel();
3939

40-
if (DUMMY_KEY.equals(apiKey)) {
40+
String apiKey = mistralAiConfig.apiKey();
41+
String baseUrl = mistralAiConfig.baseUrl();
42+
if (DEFAULT_API_KEY.equals(apiKey) && DEFAULT_BASE_URL.equals(baseUrl)) {
4143
throw new ConfigValidationException(createApiKeyConfigProblem(configName));
4244
}
4345

4446
var builder = MistralAiChatModel.builder()
45-
.baseUrl(mistralAiConfig.baseUrl())
47+
.baseUrl(baseUrl)
4648
.apiKey(apiKey)
4749
.modelName(chatModelConfig.modelName())
4850
.logRequests(firstOrDefault(false, chatModelConfig.logRequests(), mistralAiConfig.logRequests()))
@@ -87,15 +89,16 @@ public Supplier<StreamingChatLanguageModel> streamingChatModel(LangChain4jMistra
8789
configName);
8890

8991
if (mistralAiConfig.enableIntegration()) {
90-
String apiKey = mistralAiConfig.apiKey();
9192
ChatModelConfig chatModelConfig = mistralAiConfig.chatModel();
9293

93-
if (DUMMY_KEY.equals(apiKey)) {
94+
String apiKey = mistralAiConfig.apiKey();
95+
String baseUrl = mistralAiConfig.baseUrl();
96+
if (DEFAULT_API_KEY.equals(apiKey) && DEFAULT_BASE_URL.equals(baseUrl)) {
9497
throw new ConfigValidationException(createApiKeyConfigProblem(configName));
9598
}
9699

97100
var builder = MistralAiStreamingChatModel.builder()
98-
.baseUrl(mistralAiConfig.baseUrl())
101+
.baseUrl(baseUrl)
99102
.apiKey(apiKey)
100103
.modelName(chatModelConfig.modelName())
101104
.logRequests(firstOrDefault(false, chatModelConfig.logRequests(), mistralAiConfig.logRequests()))
@@ -139,10 +142,11 @@ public Supplier<EmbeddingModel> embeddingModel(LangChain4jMistralAiConfig runtim
139142
configName);
140143

141144
if (mistralAiConfig.enableIntegration()) {
142-
String apiKey = mistralAiConfig.apiKey();
143145
EmbeddingModelConfig embeddingModelConfig = mistralAiConfig.embeddingModel();
144146

145-
if (DUMMY_KEY.equals(apiKey)) {
147+
String apiKey = mistralAiConfig.apiKey();
148+
String baseUrl = mistralAiConfig.baseUrl();
149+
if (DEFAULT_API_KEY.equals(apiKey) && DEFAULT_BASE_URL.equals(baseUrl)) {
146150
throw new ConfigValidationException(createApiKeyConfigProblem(configName));
147151
}
148152

@@ -175,15 +179,16 @@ public Supplier<ModerationModel> moderationModel(LangChain4jMistralAiConfig runt
175179
configName);
176180

177181
if (mistralAiConfig.enableIntegration()) {
178-
String apiKey = mistralAiConfig.apiKey();
179182
ModerationModelConfig moderationModelConfig = mistralAiConfig.moderationModel();
180183

181-
if (DUMMY_KEY.equals(apiKey)) {
184+
String apiKey = mistralAiConfig.apiKey();
185+
String baseUrl = mistralAiConfig.baseUrl();
186+
if (DEFAULT_API_KEY.equals(apiKey) && DEFAULT_BASE_URL.equals(baseUrl)) {
182187
throw new ConfigValidationException(createApiKeyConfigProblem(configName));
183188
}
184189

185190
var builder = new MistralAiModerationModel.Builder()
186-
.baseUrl(mistralAiConfig.baseUrl())
191+
.baseUrl(baseUrl)
187192
.apiKey(apiKey)
188193
.modelName(moderationModelConfig.modelName())
189194
.logRequests(firstOrDefault(false, moderationModelConfig.logRequests(), mistralAiConfig.logRequests()))

model-providers/mistral/runtime/src/main/java/io/quarkiverse/langchain4j/mistralai/runtime/config/LangChain4jMistralAiConfig.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,20 @@ public interface LangChain4jMistralAiConfig {
3737

3838
@ConfigGroup
3939
interface MistralAiConfig {
40+
41+
String DEFAULT_BASE_URL = "https://api.mistral.ai/v1/";
42+
String DEFAULT_API_KEY = "dummy";
43+
4044
/**
4145
* Base URL of Mistral API
4246
*/
43-
@WithDefault("https://api.mistral.ai/v1/")
47+
@WithDefault(DEFAULT_BASE_URL)
4448
String baseUrl();
4549

4650
/**
4751
* Mistral API key
4852
*/
49-
@WithDefault("dummy") // TODO: this should be optional but Smallrye Config doesn't like it
53+
@WithDefault(DEFAULT_API_KEY)
5054
String apiKey();
5155

5256
/**

0 commit comments

Comments
 (0)