Skip to content

Commit 3de5c3f

Browse files
committed
Spring Boot 4.0 changes
Signed-off-by: Ilayaperumal Gopinathan <[email protected]>
1 parent 925f176 commit 3de5c3f

File tree

14 files changed

+32
-23
lines changed

14 files changed

+32
-23
lines changed

auto-configurations/common/spring-ai-autoconfigure-retry/src/main/java/org/springframework/ai/retry/autoconfigure/SpringAiRetryAutoConfiguration.java

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

1919
import java.io.IOException;
20+
import java.net.URI;
2021
import java.nio.charset.StandardCharsets;
2122

2223
import org.slf4j.Logger;
@@ -30,6 +31,7 @@
3031
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3132
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3233
import org.springframework.context.annotation.Bean;
34+
import org.springframework.http.HttpMethod;
3335
import org.springframework.http.client.ClientHttpResponse;
3436
import org.springframework.lang.NonNull;
3537
import org.springframework.retry.RetryCallback;
@@ -87,7 +89,8 @@ public boolean hasError(@NonNull ClientHttpResponse response) throws IOException
8789
}
8890

8991
@Override
90-
public void handleError(@NonNull ClientHttpResponse response) throws IOException {
92+
public void handleError(URI uri, HttpMethod httpMethod, @NonNull ClientHttpResponse response)
93+
throws IOException {
9194
if (!response.getStatusCode().isError()) {
9295
return;
9396
}

models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/api/AnthropicApi.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ public ResponseEntity<ChatCompletionResponse> chatCompletionEntity(ChatCompletio
162162

163163
return this.restClient.post()
164164
.uri(this.completionsPath)
165-
.headers(headers -> headers.addAll(additionalHttpHeader))
165+
.headers(headers -> headers.addAll(HttpHeaders.readOnlyHttpHeaders(additionalHttpHeader)))
166166
.body(chatRequest)
167167
.retrieve()
168168
.toEntity(ChatCompletionResponse.class);
@@ -198,7 +198,7 @@ public Flux<ChatCompletionResponse> chatCompletionStream(ChatCompletionRequest c
198198

199199
return this.webClient.post()
200200
.uri(this.completionsPath)
201-
.headers(headers -> headers.addAll(additionalHttpHeader))
201+
.headers(headers -> headers.addAll(HttpHeaders.readOnlyHttpHeaders(additionalHttpHeader)))
202202
.body(Mono.just(chatRequest), ChatCompletionRequest.class)
203203
.retrieve()
204204
.bodyToFlux(String.class)

models/spring-ai-deepseek/src/main/java/org/springframework/ai/deepseek/api/DeepSeekApi.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public DeepSeekApi(String baseUrl, ApiKey apiKey, MultiValueMap<String, String>
9494
Consumer<HttpHeaders> finalHeaders = h -> {
9595
h.setBearerAuth(apiKey.getValue());
9696
h.setContentType(MediaType.APPLICATION_JSON);
97-
h.addAll(headers);
97+
h.addAll(HttpHeaders.readOnlyHttpHeaders(headers));
9898
};
9999
this.restClient = restClientBuilder.baseUrl(baseUrl)
100100
.defaultHeaders(finalHeaders)
@@ -153,7 +153,7 @@ public Flux<ChatCompletionChunk> chatCompletionStream(ChatCompletionRequest chat
153153

154154
return this.webClient.post()
155155
.uri(this.getEndpoint(chatRequest))
156-
.headers(headers -> headers.addAll(additionalHttpHeader))
156+
.headers(headers -> headers.addAll(HttpHeaders.readOnlyHttpHeaders(additionalHttpHeader)))
157157
.body(Mono.just(chatRequest), ChatCompletionRequest.class)
158158
.retrieve()
159159
.bodyToFlux(String.class)

models/spring-ai-huggingface/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
<dependency>
5252
<groupId>io.swagger.core.v3</groupId>
5353
<artifactId>swagger-annotations</artifactId>
54-
<version>2.2.15</version>
54+
<version>2.2.32</version>
5555
</dependency>
5656

5757
<dependency>

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public OpenAiApi(String baseUrl, ApiKey apiKey, MultiValueMap<String, String> he
133133
}
134134

135135
h.setContentType(MediaType.APPLICATION_JSON);
136-
h.addAll(headers);
136+
h.addAll(HttpHeaders.readOnlyHttpHeaders(headers));
137137
};
138138
this.restClient = restClientBuilder.clone()
139139
.baseUrl(baseUrl)
@@ -181,7 +181,7 @@ public ResponseEntity<ChatCompletion> chatCompletionEntity(ChatCompletionRequest
181181

182182
return this.restClient.post()
183183
.uri(this.completionsPath)
184-
.headers(headers -> headers.addAll(additionalHttpHeader))
184+
.headers(headers -> headers.addAll(HttpHeaders.readOnlyHttpHeaders(additionalHttpHeader)))
185185
.body(chatRequest)
186186
.retrieve()
187187
.toEntity(ChatCompletion.class);
@@ -215,7 +215,7 @@ public Flux<ChatCompletionChunk> chatCompletionStream(ChatCompletionRequest chat
215215

216216
return this.webClient.post()
217217
.uri(this.completionsPath)
218-
.headers(headers -> headers.addAll(additionalHttpHeader))
218+
.headers(headers -> headers.addAll(HttpHeaders.readOnlyHttpHeaders(additionalHttpHeader)))
219219
.body(Mono.just(chatRequest), ChatCompletionRequest.class)
220220
.retrieve()
221221
.bodyToFlux(String.class)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public OpenAiAudioApi(String baseUrl, ApiKey apiKey, MultiValueMap<String, Strin
7474
if (!(apiKey instanceof NoopApiKey)) {
7575
h.setBearerAuth(apiKey.getValue());
7676
}
77-
h.addAll(headers);
77+
h.addAll(HttpHeaders.readOnlyHttpHeaders(headers));
7878
// h.setContentType(MediaType.APPLICATION_JSON);
7979
};
8080

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.springframework.ai.model.SimpleApiKey;
2828
import org.springframework.ai.openai.api.common.OpenAiApiConstants;
2929
import org.springframework.ai.retry.RetryUtils;
30+
import org.springframework.http.HttpHeaders;
3031
import org.springframework.http.MediaType;
3132
import org.springframework.http.ResponseEntity;
3233
import org.springframework.util.Assert;
@@ -68,7 +69,7 @@ public OpenAiImageApi(String baseUrl, ApiKey apiKey, MultiValueMap<String, Strin
6869
h.setBearerAuth(apiKey.getValue());
6970
}
7071
h.setContentType(MediaType.APPLICATION_JSON);
71-
h.addAll(headers);
72+
h.addAll(HttpHeaders.readOnlyHttpHeaders(headers));
7273
})
7374
.defaultStatusHandler(responseErrorHandler)
7475
.build();

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.springframework.ai.model.SimpleApiKey;
2828
import org.springframework.ai.openai.api.common.OpenAiApiConstants;
2929
import org.springframework.ai.retry.RetryUtils;
30+
import org.springframework.http.HttpHeaders;
3031
import org.springframework.http.MediaType;
3132
import org.springframework.http.ResponseEntity;
3233
import org.springframework.util.Assert;
@@ -69,7 +70,7 @@ public OpenAiModerationApi(String baseUrl, ApiKey apiKey, MultiValueMap<String,
6970
h.setBearerAuth(apiKey.getValue());
7071
}
7172
h.setContentType(MediaType.APPLICATION_JSON);
72-
h.addAll(headers);
73+
h.addAll(HttpHeaders.readOnlyHttpHeaders(headers));
7374
}).defaultStatusHandler(responseErrorHandler).build();
7475
}
7576

models/spring-ai-openai/src/main/java/org/springframework/ai/openai/metadata/support/OpenAiResponseHeaderExtractor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public static RateLimit extractAiResponseHeaders(ResponseEntity<?> response) {
7171

7272
private static Duration getHeaderAsDuration(ResponseEntity<?> response, String headerName) {
7373
var headers = response.getHeaders();
74-
if (headers.containsKey(headerName)) {
74+
if (headers.containsHeader(headerName)) {
7575
var values = headers.get(headerName);
7676
if (!CollectionUtils.isEmpty(values)) {
7777
return DurationFormatter.TIME_UNIT.parse(values.get(0));
@@ -82,7 +82,7 @@ private static Duration getHeaderAsDuration(ResponseEntity<?> response, String h
8282

8383
private static Long getHeaderAsLong(ResponseEntity<?> response, String headerName) {
8484
var headers = response.getHeaders();
85-
if (headers.containsKey(headerName)) {
85+
if (headers.containsHeader(headerName)) {
8686
var values = headers.get(headerName);
8787
if (!CollectionUtils.isEmpty(values)) {
8888
return parseLong(headerName, values.get(0));

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@
162162
<module>models/spring-ai-azure-openai</module>
163163
<module>models/spring-ai-bedrock</module>
164164
<module>models/spring-ai-bedrock-converse</module>
165-
<module>models/spring-ai-huggingface</module>
165+
<!-- <module>models/spring-ai-huggingface</module>-->
166166
<module>models/spring-ai-minimax</module>
167167
<module>models/spring-ai-mistral-ai</module>
168168
<module>models/spring-ai-oci-genai</module>
@@ -253,12 +253,12 @@
253253
<kotlin.compiler.jvmTarget>${java.version}</kotlin.compiler.jvmTarget>
254254

255255
<!-- production dependencies -->
256-
<spring-boot.version>3.4.5</spring-boot.version>
256+
<spring-boot.version>4.0.0-SNAPSHOT</spring-boot.version>
257257
<ST4.version>4.3.4</ST4.version>
258258
<azure-open-ai-client.version>1.0.0-beta.16</azure-open-ai-client.version>
259259
<jtokkit.version>1.1.0</jtokkit.version>
260260
<victools.version>4.37.0</victools.version>
261-
<kotlin.version>1.9.25</kotlin.version>
261+
<kotlin.version>2.1.0</kotlin.version>
262262

263263
<!-- NOTE: keep bedrockruntime and awssdk versions aligned -->
264264
<bedrockruntime.version>2.31.26</bedrockruntime.version>

0 commit comments

Comments
 (0)