Skip to content

Commit d058c3d

Browse files
committed
Polish MistralAiOcrAutoConfiguration
- Add OCR model constant in SpringAIModelProperties - Use OCR model constant in MistralAiOcrAutoConfiguration - Add spring.ai.model.ocr property in additional-spring-configuration-metadata.json file - Add a unit test verify OCR model activation feature Signed-off-by: Nicolas Krier <[email protected]>
1 parent 95bf79a commit d058c3d

File tree

4 files changed

+48
-11
lines changed

4 files changed

+48
-11
lines changed

auto-configurations/models/chat/client/spring-ai-autoconfigure-model-chat-client/src/main/resources/META-INF/additional-spring-configuration-metadata.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@
4747
"type": "java.lang.String",
4848
"description": "The primary ModerationModel to autoconfigure. If not set, each ModerationModel auto-configuration is enabled by default.",
4949
"defaultValue": ""
50+
},
51+
{
52+
"name": "spring.ai.model.ocr",
53+
"type": "java.lang.String",
54+
"description": "The primary OcrModel to autoconfigure. If not set, each OcrModel auto-configuration is enabled by default.",
55+
"defaultValue": ""
5056
}
5157
]
5258
}

auto-configurations/models/spring-ai-autoconfigure-model-mistral-ai/src/main/java/org/springframework/ai/model/mistralai/autoconfigure/MistralAiOcrAutoConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.ai.model.mistralai.autoconfigure;
1818

1919
import org.springframework.ai.mistralai.ocr.MistralOcrApi;
20+
import org.springframework.ai.model.SpringAIModelProperties;
2021
import org.springframework.ai.model.SpringAIModels;
2122
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
2223
import org.springframework.beans.factory.ObjectProvider;
@@ -40,7 +41,7 @@
4041
*/
4142
@AutoConfiguration(after = { RestClientAutoConfiguration.class, SpringAiRetryAutoConfiguration.class })
4243
@ConditionalOnClass(MistralOcrApi.class)
43-
@ConditionalOnProperty(name = "spring.ai.model.ocr", havingValue = SpringAIModels.MISTRAL, matchIfMissing = true)
44+
@ConditionalOnProperty(name = SpringAIModelProperties.OCR_MODEL, havingValue = SpringAIModels.MISTRAL, matchIfMissing = true)
4445
@EnableConfigurationProperties({ MistralAiCommonProperties.class, MistralAiOcrProperties.class })
4546
public class MistralAiOcrAutoConfiguration {
4647

auto-configurations/models/spring-ai-autoconfigure-model-mistral-ai/src/test/java/org/springframework/ai/model/mistralai/autoconfigure/MistralModelConfigurationTests.java

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.springframework.ai.mistralai.MistralAiChatModel;
2222
import org.springframework.ai.mistralai.MistralAiEmbeddingModel;
2323
import org.springframework.ai.mistralai.moderation.MistralAiModerationModel;
24+
import org.springframework.ai.mistralai.ocr.MistralOcrApi;
2425
import org.springframework.ai.utils.SpringAiTestAutoConfigurations;
2526
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
2627

@@ -32,20 +33,27 @@
3233
* @author Ilayaperumal Gopinathan
3334
* @author Ricken Bazolo
3435
* @author Issam El-atif
36+
* @author Nicolas Krier
3537
*/
36-
public class MistralModelConfigurationTests {
38+
class MistralModelConfigurationTests {
3739

38-
private final ApplicationContextRunner chatContextRunner = new ApplicationContextRunner()
39-
.withPropertyValues("spring.ai.mistralai.apiKey=" + System.getenv("MISTRAL_AI_API_KEY"))
40-
.withConfiguration(SpringAiTestAutoConfigurations.of(MistralAiChatAutoConfiguration.class));
40+
private final ApplicationContextRunner chatContextRunner =
41+
createApplicationContextRunner(MistralAiChatAutoConfiguration.class);
4142

42-
private final ApplicationContextRunner embeddingContextRunner = new ApplicationContextRunner()
43-
.withPropertyValues("spring.ai.mistralai.apiKey=" + System.getenv("MISTRAL_AI_API_KEY"))
44-
.withConfiguration(SpringAiTestAutoConfigurations.of(MistralAiEmbeddingAutoConfiguration.class));
43+
private final ApplicationContextRunner embeddingContextRunner =
44+
createApplicationContextRunner(MistralAiEmbeddingAutoConfiguration.class);
4545

46-
private final ApplicationContextRunner moderationContextRunner = new ApplicationContextRunner()
47-
.withPropertyValues("spring.ai.mistralai.apiKey=" + System.getenv("MISTRAL_AI_API_KEY"))
48-
.withConfiguration(SpringAiTestAutoConfigurations.of(MistralAiModerationAutoConfiguration.class));
46+
private final ApplicationContextRunner moderationContextRunner =
47+
createApplicationContextRunner(MistralAiModerationAutoConfiguration.class);
48+
49+
private final ApplicationContextRunner ocrContextRunner =
50+
createApplicationContextRunner(MistralAiOcrAutoConfiguration.class);
51+
52+
private static ApplicationContextRunner createApplicationContextRunner(Class<?> autoConfigurationClass) {
53+
return new ApplicationContextRunner()
54+
.withPropertyValues("spring.ai.mistralai.apiKey=" + System.getenv("MISTRAL_AI_API_KEY"))
55+
.withConfiguration(SpringAiTestAutoConfigurations.of(autoConfigurationClass));
56+
}
4957

5058
@Test
5159
void chatModelActivation() {
@@ -122,4 +130,24 @@ void moderationModelActivation() {
122130
});
123131
}
124132

133+
@Test
134+
void ocrModelActivation() {
135+
this.ocrContextRunner.run(context -> {
136+
assertThat(context).hasNotFailed();
137+
assertThat(context).hasSingleBean(MistralOcrApi.class);
138+
});
139+
140+
this.ocrContextRunner.withPropertyValues("spring.ai.model.ocr=mistral")
141+
.run(context -> {
142+
assertThat(context).hasNotFailed();
143+
assertThat(context).hasSingleBean(MistralOcrApi.class);
144+
});
145+
146+
this.ocrContextRunner.withPropertyValues("spring.ai.model.ocr=none")
147+
.run(context -> {
148+
assertThat(context).hasNotFailed();
149+
assertThat(context).doesNotHaveBean(MistralOcrApi.class);
150+
});
151+
}
152+
125153
}

spring-ai-model/src/main/java/org/springframework/ai/model/SpringAIModelProperties.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,6 @@ private SpringAIModelProperties() {
4040

4141
public static final String MODERATION_MODEL = MODEL_PREFIX + ".moderation";
4242

43+
public static final String OCR_MODEL = MODEL_PREFIX + ".ocr";
44+
4345
}

0 commit comments

Comments
 (0)