Skip to content

Commit 372cb38

Browse files
committed
Switch to JSpecify annotations for the model module
Signed-off-by: Eric Bottard <[email protected]>
1 parent a7c37b4 commit 372cb38

File tree

134 files changed

+749
-566
lines changed

Some content is hidden

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

134 files changed

+749
-566
lines changed

auto-configurations/models/spring-ai-autoconfigure-model-ollama/src/test/kotlin/org/springframework/ai/model/ollama/autoconfigure/tool/FunctionCallbackContextKotlinIT.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class FunctionCallbackResolverKotlinIT : BaseOllamaIT() {
7272

7373
logger.info("Response: $response")
7474

75-
assertThat(response.getResult().output.text).contains("30", "10", "15")
75+
assertThat(response.getResult()!!.output.text).contains("30", "10", "15")
7676
}
7777
}
7878

@@ -91,7 +91,7 @@ class FunctionCallbackResolverKotlinIT : BaseOllamaIT() {
9191
.build()
9292

9393
val response = chatModel.call(Prompt(listOf(userMessage), functionOptions));
94-
val output = response.getResult().output.text
94+
val output = response.getResult()!!.output.text
9595

9696
logger.info("Response: $output");
9797

auto-configurations/models/spring-ai-autoconfigure-model-ollama/src/test/kotlin/org/springframework/ai/model/ollama/autoconfigure/tool/ToolCallbackKotlinIT.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class ToolCallbackKotlinIT : BaseOllamaIT() {
7474

7575
logger.info("Response: $response")
7676

77-
assertThat(response.getResult().output.text).contains("30", "10", "15")
77+
assertThat(response.getResult()!!.output.text).contains("30", "10", "15")
7878
}
7979
}
8080

@@ -92,7 +92,7 @@ class ToolCallbackKotlinIT : BaseOllamaIT() {
9292
val functionOptions = ToolCallingChatOptions.builder().toolNames("weatherInfo").build()
9393

9494
val response = chatModel.call(Prompt(listOf(userMessage), functionOptions));
95-
val output = response.getResult().output.text
95+
val output = response.getResult()!!.output.text
9696
logger.info("Response: $output");
9797

9898
assertThat(output).contains("30", "10", "15");

models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/moderation/MistralAiModerationModel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ private ModerationResponse convertResponse(ResponseEntity<MistralAiModerationRes
9797
var moderationApiResponse = moderationResponseEntity.getBody();
9898
if (moderationApiResponse == null) {
9999
logger.warn("No moderation response returned for request: {}", mistralAiModerationRequest);
100-
return new ModerationResponse(new Generation());
100+
return new ModerationResponse(null);
101101
}
102102

103103
List<ModerationResult> moderationResults = new ArrayList<>();

models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiAudioTranscriptionModel.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public AudioTranscriptionResponse call(AudioTranscriptionPrompt transcriptionPro
125125

126126
if (transcription == null) {
127127
logger.warn("No transcription returned for request: {}", audioResource);
128-
return new AudioTranscriptionResponse(null);
128+
return new AudioTranscriptionResponse(new AudioTranscription(""));
129129
}
130130

131131
AudioTranscription transcript = new AudioTranscription(transcription.text());
@@ -152,7 +152,7 @@ public AudioTranscriptionResponse call(AudioTranscriptionPrompt transcriptionPro
152152

153153
if (transcription == null) {
154154
logger.warn("No transcription returned for request: {}", audioResource);
155-
return new AudioTranscriptionResponse(null);
155+
return new AudioTranscriptionResponse(new AudioTranscription(""));
156156
}
157157

158158
AudioTranscription transcript = new AudioTranscription(transcription);

models/spring-ai-openai/src/main/java/org/springframework/ai/openai/OpenAiModerationModel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ private ModerationResponse convertResponse(
107107
OpenAiModerationApi.OpenAiModerationResponse moderationApiResponse = moderationResponseEntity.getBody();
108108
if (moderationApiResponse == null) {
109109
logger.warn("No moderation response returned for request: {}", openAiModerationRequest);
110-
return new ModerationResponse(new Generation());
110+
return new ModerationResponse(null);
111111
}
112112

113113
List<ModerationResult> moderationResults = new ArrayList<>();

spring-ai-commons/src/main/java/org/springframework/ai/template/NoOpTemplateRenderer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import java.util.Map;
2020

21+
import org.jspecify.annotations.Nullable;
22+
2123
import org.springframework.util.Assert;
2224

2325
/**
@@ -29,7 +31,7 @@
2931
public class NoOpTemplateRenderer implements TemplateRenderer {
3032

3133
@Override
32-
public String apply(String template, Map<String, Object> variables) {
34+
public String apply(String template, Map<String, @Nullable Object> variables) {
3335
Assert.hasText(template, "template cannot be null or empty");
3436
Assert.notNull(variables, "variables cannot be null");
3537
Assert.noNullElements(variables.keySet(), "variables keys cannot be null");

spring-ai-commons/src/main/java/org/springframework/ai/template/TemplateRenderer.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,17 @@
1919
import java.util.Map;
2020
import java.util.function.BiFunction;
2121

22+
import org.jspecify.annotations.Nullable;
23+
2224
/**
2325
* Renders a template using a given strategy.
2426
*
2527
* @author Thomas Vitale
2628
* @since 1.0.0
2729
*/
28-
public interface TemplateRenderer extends BiFunction<String, Map<String, Object>, String> {
30+
public interface TemplateRenderer extends BiFunction<String, Map<String, @Nullable Object>, String> {
2931

3032
@Override
31-
String apply(String template, Map<String, Object> variables);
33+
String apply(String template, Map<String, @Nullable Object> variables);
3234

3335
}

spring-ai-model/src/main/java/org/springframework/ai/aot/KnuddelsRuntimeHints.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@
1616

1717
package org.springframework.ai.aot;
1818

19+
import org.jspecify.annotations.Nullable;
20+
1921
import org.springframework.aot.hint.RuntimeHints;
2022
import org.springframework.aot.hint.RuntimeHintsRegistrar;
2123
import org.springframework.core.io.ClassPathResource;
2224

2325
public class KnuddelsRuntimeHints implements RuntimeHintsRegistrar {
2426

2527
@Override
26-
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
28+
public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) {
2729
hints.resources().registerResource(new ClassPathResource("/com/knuddels/jtokkit/cl100k_base.tiktoken"));
2830
}
2931

spring-ai-model/src/main/java/org/springframework/ai/aot/SpringAiCoreRuntimeHints.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.util.Set;
2020

21+
import org.jspecify.annotations.Nullable;
2122
import org.slf4j.LoggerFactory;
2223
import org.slf4j.helpers.NOP_FallbackServiceProvider;
2324
import org.slf4j.helpers.SubstituteServiceProvider;
@@ -38,13 +39,11 @@
3839
import org.springframework.aot.hint.RuntimeHintsRegistrar;
3940
import org.springframework.aot.hint.TypeReference;
4041
import org.springframework.core.io.ClassPathResource;
41-
import org.springframework.lang.NonNull;
42-
import org.springframework.lang.Nullable;
4342

4443
public class SpringAiCoreRuntimeHints implements RuntimeHintsRegistrar {
4544

4645
@Override
47-
public void registerHints(@NonNull RuntimeHints hints, @Nullable ClassLoader classLoader) {
46+
public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) {
4847

4948
var chatTypes = Set.of(AbstractMessage.class, AssistantMessage.class, ToolResponseMessage.class, Message.class,
5049
ToolCallback.class, ToolDefinition.class, AssistantMessage.ToolCall.class, MessageType.class,

spring-ai-model/src/main/java/org/springframework/ai/aot/ToolBeanRegistrationAotProcessor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import java.util.stream.Stream;
2020

21+
import org.jspecify.annotations.Nullable;
22+
2123
import org.springframework.ai.tool.annotation.Tool;
2224
import org.springframework.aot.generate.GenerationContext;
2325
import org.springframework.aot.hint.MemberCategory;
@@ -27,7 +29,6 @@
2729
import org.springframework.beans.factory.aot.BeanRegistrationCode;
2830
import org.springframework.beans.factory.support.RegisteredBean;
2931
import org.springframework.core.annotation.MergedAnnotations;
30-
import org.springframework.lang.Nullable;
3132
import org.springframework.util.ReflectionUtils;
3233

3334
/**
@@ -40,8 +41,7 @@
4041
class ToolBeanRegistrationAotProcessor implements BeanRegistrationAotProcessor {
4142

4243
@Override
43-
@Nullable
44-
public BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) {
44+
@Nullable public BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) {
4545
Class<?> beanClass = registeredBean.getBeanClass();
4646
MergedAnnotations.Search search = MergedAnnotations
4747
.search(org.springframework.core.annotation.MergedAnnotations.SearchStrategy.TYPE_HIERARCHY);

0 commit comments

Comments
 (0)