Skip to content

Commit be6f36c

Browse files
committed
Use methods from HttpHeaders which are available both from Spring 6 and Spring 7
Signed-off-by: Filip Hrisafov <filip.hrisafov@gmail.com>
1 parent e157775 commit be6f36c

File tree

11 files changed

+28
-29
lines changed

11 files changed

+28
-29
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ public ResponseEntity<ChatCompletionResponse> chatCompletionEntity(ChatCompletio
176176
return this.restClient.post()
177177
.uri(this.completionsPath)
178178
.headers(headers -> {
179-
headers.addAll(additionalHttpHeader);
179+
additionalHttpHeader.forEach(headers::addAll);
180180
addDefaultHeadersIfMissing(headers);
181181
})
182182
.body(chatRequest)
@@ -217,7 +217,7 @@ public Flux<ChatCompletionResponse> chatCompletionStream(ChatCompletionRequest c
217217
return this.webClient.post()
218218
.uri(this.completionsPath)
219219
.headers(headers -> {
220-
headers.addAll(additionalHttpHeader);
220+
additionalHttpHeader.forEach(headers::addAll);
221221
addDefaultHeadersIfMissing(headers);
222222
}) // @formatter:off
223223
.body(Mono.just(chatRequest), ChatCompletionRequest.class)
@@ -256,7 +256,8 @@ public Flux<ChatCompletionResponse> chatCompletionStream(ChatCompletionRequest c
256256
}
257257

258258
private void addDefaultHeadersIfMissing(HttpHeaders headers) {
259-
if (!headers.containsKey(HEADER_X_API_KEY)) {
259+
List<String> apiKeyHeaders = headers.get(HEADER_X_API_KEY);
260+
if (apiKeyHeaders == null) {
260261
String apiKeyValue = this.apiKey.getValue();
261262
if (StringUtils.hasText(apiKeyValue)) {
262263
headers.add(HEADER_X_API_KEY, apiKeyValue);

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+
headers.forEach(h::addAll);
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 -> additionalHttpHeader.forEach(headers::addAll))
157157
.body(Mono.just(chatRequest), ChatCompletionRequest.class)
158158
.retrieve()
159159
.bodyToFlux(String.class)

models/spring-ai-elevenlabs/src/main/java/org/springframework/ai/elevenlabs/api/ElevenLabsApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ private ElevenLabsApi(String baseUrl, ApiKey apiKey, MultiValueMap<String, Strin
7070
if (!(apiKey instanceof NoopApiKey)) {
7171
h.set("xi-api-key", apiKey.getValue());
7272
}
73-
h.addAll(headers);
73+
headers.forEach(h::addAll);
7474
h.setContentType(MediaType.APPLICATION_JSON);
7575
};
7676

models/spring-ai-elevenlabs/src/main/java/org/springframework/ai/elevenlabs/api/ElevenLabsVoicesApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public ElevenLabsVoicesApi(String baseUrl, ApiKey apiKey, MultiValueMap<String,
6262
if (!(apiKey instanceof NoopApiKey)) {
6363
h.set("xi-api-key", apiKey.getValue());
6464
}
65-
h.addAll(headers);
65+
headers.forEach(h::addAll);
6666
h.setContentType(MediaType.APPLICATION_JSON);
6767
};
6868

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public OpenAiApi(String baseUrl, ApiKey apiKey, MultiValueMap<String, String> he
145145
Consumer<HttpHeaders> finalHeaders = h -> {
146146
h.setContentType(MediaType.APPLICATION_JSON);
147147
h.set(HTTP_USER_AGENT_HEADER, SPRING_AI_USER_AGENT);
148-
h.addAll(headers);
148+
headers.forEach(h::addAll);
149149
};
150150
this.restClient = restClientBuilder.clone()
151151
.baseUrl(baseUrl)
@@ -204,7 +204,7 @@ public ResponseEntity<ChatCompletion> chatCompletionEntity(ChatCompletionRequest
204204
return this.restClient.post()
205205
.uri(this.completionsPath)
206206
.headers(headers -> {
207-
headers.addAll(additionalHttpHeader);
207+
additionalHttpHeader.forEach(headers::addAll);
208208
addDefaultHeadersIfMissing(headers);
209209
})
210210
.body(chatRequest)
@@ -243,7 +243,7 @@ public Flux<ChatCompletionChunk> chatCompletionStream(ChatCompletionRequest chat
243243
return this.webClient.post()
244244
.uri(this.completionsPath)
245245
.headers(headers -> {
246-
headers.addAll(additionalHttpHeader);
246+
additionalHttpHeader.forEach(headers::addAll);
247247
addDefaultHeadersIfMissing(headers);
248248
}) // @formatter:on
249249
.body(Mono.just(chatRequest), ChatCompletionRequest.class)
@@ -328,7 +328,8 @@ public <T> ResponseEntity<EmbeddingList<Embedding>> embeddings(EmbeddingRequest<
328328
}
329329

330330
private void addDefaultHeadersIfMissing(HttpHeaders headers) {
331-
if (!headers.containsKey(HttpHeaders.AUTHORIZATION) && !(this.apiKey instanceof NoopApiKey)) {
331+
List<String> authorizationHeaders = headers.get(HttpHeaders.AUTHORIZATION);
332+
if (authorizationHeaders == null && !(this.apiKey instanceof NoopApiKey)) {
332333
headers.setBearerAuth(this.apiKey.getValue());
333334
}
334335
}

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
@@ -73,7 +73,7 @@ public OpenAiAudioApi(String baseUrl, ApiKey apiKey, MultiValueMap<String, Strin
7373
RestClient.Builder restClientBuilder, WebClient.Builder webClientBuilder,
7474
ResponseErrorHandler responseErrorHandler) {
7575

76-
Consumer<HttpHeaders> authHeaders = h -> h.addAll(headers);
76+
Consumer<HttpHeaders> authHeaders = h -> headers.forEach(h::addAll);
7777

7878
// @formatter:off
7979
this.restClient = restClientBuilder.clone()

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public class OpenAiFileApi {
5151

5252
public OpenAiFileApi(String baseUrl, ApiKey apiKey, MultiValueMap<String, String> headers,
5353
RestClient.Builder restClientBuilder, ResponseErrorHandler responseErrorHandler) {
54-
Consumer<HttpHeaders> authHeaders = h -> h.addAll(headers);
54+
Consumer<HttpHeaders> authHeaders = h -> headers.forEach(h::addAll);
5555

5656
this.restClient = restClientBuilder.clone()
5757
.baseUrl(baseUrl)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public OpenAiImageApi(String baseUrl, ApiKey apiKey, MultiValueMap<String, Strin
6868
.baseUrl(baseUrl)
6969
.defaultHeaders(h -> {
7070
h.setContentType(MediaType.APPLICATION_JSON);
71-
h.addAll(headers);
71+
headers.forEach(h::addAll);
7272
})
7373
.defaultStatusHandler(responseErrorHandler)
7474
.defaultRequest(requestHeadersSpec -> {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public OpenAiModerationApi(String baseUrl, ApiKey apiKey, MultiValueMap<String,
7171
.baseUrl(baseUrl)
7272
.defaultHeaders(h -> {
7373
h.setContentType(MediaType.APPLICATION_JSON);
74-
h.addAll(headers);
74+
headers.forEach(h::addAll);
7575
})
7676
.defaultStatusHandler(responseErrorHandler)
7777
.defaultRequest(requestHeadersSpec -> {

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

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,22 +71,18 @@ 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)) {
75-
var values = headers.get(headerName);
76-
if (!CollectionUtils.isEmpty(values)) {
77-
return DurationFormatter.TIME_UNIT.parse(values.get(0));
78-
}
74+
var values = headers.get(headerName);
75+
if (!CollectionUtils.isEmpty(values)) {
76+
return DurationFormatter.TIME_UNIT.parse(values.get(0));
7977
}
8078
return null;
8179
}
8280

8381
private static Long getHeaderAsLong(ResponseEntity<?> response, String headerName) {
8482
var headers = response.getHeaders();
85-
if (headers.containsKey(headerName)) {
86-
var values = headers.get(headerName);
87-
if (!CollectionUtils.isEmpty(values)) {
88-
return parseLong(headerName, values.get(0));
89-
}
83+
var values = headers.get(headerName);
84+
if (!CollectionUtils.isEmpty(values)) {
85+
return parseLong(headerName, values.get(0));
9086
}
9187
return null;
9288
}

0 commit comments

Comments
 (0)