Skip to content

Commit 4b1b566

Browse files
committed
perf(openai): Support HTTP client timeout configuration and nested way using HttpClientSettingsProperties don't adjust XxxConnectionProperties inheritance relationships
Signed-off-by: yinh <fottas@163.com>
1 parent 719c239 commit 4b1b566

File tree

25 files changed

+564
-75
lines changed

25 files changed

+564
-75
lines changed

auto-configurations/models/spring-ai-autoconfigure-model-anthropic/src/main/java/org/springframework/ai/model/anthropic/autoconfigure/AnthropicChatAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public AnthropicApi anthropicApi(AnthropicConnectionProperties connectionPropert
7979

8080
HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(sslBundles.getIfAvailable(),
8181
globalHttpClientSettings.getIfAvailable());
82-
HttpClientSettings httpClientSettings = mapper.map(connectionProperties);
82+
HttpClientSettings httpClientSettings = mapper.map(connectionProperties.getHttp());
8383

8484
RestClient.Builder restClientBuilder = restClientBuilderProvider.getIfAvailable(RestClient::builder);
8585
applyRestClientSettings(restClientBuilder, httpClientSettings,

auto-configurations/models/spring-ai-autoconfigure-model-anthropic/src/main/java/org/springframework/ai/model/anthropic/autoconfigure/AnthropicConnectionProperties.java

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

1717
package org.springframework.ai.model.anthropic.autoconfigure;
1818

19+
import java.time.Duration;
20+
21+
import jakarta.annotation.Nullable;
22+
1923
import org.springframework.ai.anthropic.api.AnthropicApi;
2024
import org.springframework.boot.context.properties.ConfigurationProperties;
25+
import org.springframework.boot.context.properties.NestedConfigurationProperty;
26+
import org.springframework.boot.http.client.HttpRedirects;
2127
import org.springframework.boot.http.client.autoconfigure.HttpClientSettingsProperties;
2228

2329
/**
@@ -27,7 +33,7 @@
2733
* @since 1.0.0
2834
*/
2935
@ConfigurationProperties(AnthropicConnectionProperties.CONFIG_PREFIX)
30-
public class AnthropicConnectionProperties extends HttpClientSettingsProperties {
36+
public class AnthropicConnectionProperties {
3137

3238
public static final String CONFIG_PREFIX = "spring.ai.anthropic";
3339

@@ -57,6 +63,10 @@ public class AnthropicConnectionProperties extends HttpClientSettingsProperties
5763
*/
5864
private String betaVersion = AnthropicApi.DEFAULT_ANTHROPIC_BETA_VERSION;
5965

66+
@NestedConfigurationProperty
67+
private final HttpClientSettingsProperties http = new HttpClientSettingsProperties() {
68+
};
69+
6070
public String getApiKey() {
6171
return this.apiKey;
6272
}
@@ -97,4 +107,39 @@ public void setBetaVersion(String betaVersion) {
97107
this.betaVersion = betaVersion;
98108
}
99109

110+
@Nullable
111+
public HttpRedirects getRedirects() {
112+
return this.http.getRedirects();
113+
}
114+
115+
public void setRedirects(HttpRedirects redirects) {
116+
this.http.setRedirects(redirects);
117+
}
118+
119+
@Nullable
120+
public Duration getConnectTimeout() {
121+
return this.http.getConnectTimeout();
122+
}
123+
124+
public void setConnectTimeout(Duration connectTimeout) {
125+
this.http.setConnectTimeout(connectTimeout);
126+
}
127+
128+
@Nullable
129+
public Duration getReadTimeout() {
130+
return this.http.getReadTimeout();
131+
}
132+
133+
public void setReadTimeout(Duration readTimeout) {
134+
this.http.setReadTimeout(readTimeout);
135+
}
136+
137+
public HttpClientSettingsProperties.Ssl getSsl() {
138+
return this.http.getSsl();
139+
}
140+
141+
public HttpClientSettingsProperties getHttp() {
142+
return this.http;
143+
}
144+
100145
}

auto-configurations/models/spring-ai-autoconfigure-model-deepseek/src/main/java/org/springframework/ai/model/deepseek/autoconfigure/DeepSeekChatAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public DeepSeekChatModel deepSeekChatModel(DeepSeekConnectionProperties commonPr
8181

8282
HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(sslBundles.getIfAvailable(),
8383
globalHttpClientSettings.getIfAvailable());
84-
HttpClientSettings httpClientSettings = mapper.map(commonProperties);
84+
HttpClientSettings httpClientSettings = mapper.map(commonProperties.getHttp());
8585

8686
RestClient.Builder restClientBuilder = restClientBuilderProvider.getIfAvailable(RestClient::builder);
8787
applyRestClientSettings(restClientBuilder, httpClientSettings,

auto-configurations/models/spring-ai-autoconfigure-model-deepseek/src/main/java/org/springframework/ai/model/deepseek/autoconfigure/DeepSeekConnectionProperties.java

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@
1616

1717
package org.springframework.ai.model.deepseek.autoconfigure;
1818

19+
import java.time.Duration;
20+
21+
import jakarta.annotation.Nullable;
22+
1923
import org.springframework.boot.context.properties.ConfigurationProperties;
24+
import org.springframework.boot.context.properties.NestedConfigurationProperty;
25+
import org.springframework.boot.http.client.HttpRedirects;
2026
import org.springframework.boot.http.client.autoconfigure.HttpClientSettingsProperties;
2127

2228
/**
@@ -25,28 +31,53 @@
2531
* @author Geng Rong
2632
*/
2733
@ConfigurationProperties(DeepSeekConnectionProperties.CONFIG_PREFIX)
28-
public class DeepSeekConnectionProperties extends HttpClientSettingsProperties {
34+
public class DeepSeekConnectionProperties extends DeepSeekParentProperties {
2935

3036
public static final String CONFIG_PREFIX = "spring.ai.deepseek";
3137

32-
private String apiKey;
38+
public static final String DEFAULT_BASE_URL = "https://api.deepseek.com";
39+
40+
@NestedConfigurationProperty
41+
private final HttpClientSettingsProperties http = new HttpClientSettingsProperties() {
42+
};
43+
44+
public DeepSeekConnectionProperties() {
45+
super.setBaseUrl(DEFAULT_BASE_URL);
46+
}
47+
48+
@Nullable
49+
public HttpRedirects getRedirects() {
50+
return this.http.getRedirects();
51+
}
52+
53+
public void setRedirects(HttpRedirects redirects) {
54+
this.http.setRedirects(redirects);
55+
}
3356

34-
private String baseUrl = "https://api.deepseek.com";
57+
@Nullable
58+
public Duration getConnectTimeout() {
59+
return this.http.getConnectTimeout();
60+
}
61+
62+
public void setConnectTimeout(Duration connectTimeout) {
63+
this.http.setConnectTimeout(connectTimeout);
64+
}
3565

36-
public String getApiKey() {
37-
return this.apiKey;
66+
@Nullable
67+
public Duration getReadTimeout() {
68+
return this.http.getReadTimeout();
3869
}
3970

40-
public void setApiKey(String apiKey) {
41-
this.apiKey = apiKey;
71+
public void setReadTimeout(Duration readTimeout) {
72+
this.http.setReadTimeout(readTimeout);
4273
}
4374

44-
public String getBaseUrl() {
45-
return this.baseUrl;
75+
public HttpClientSettingsProperties.Ssl getSsl() {
76+
return this.http.getSsl();
4677
}
4778

48-
public void setBaseUrl(String baseUrl) {
49-
this.baseUrl = baseUrl;
79+
public HttpClientSettingsProperties getHttp() {
80+
return this.http;
5081
}
5182

5283
}

auto-configurations/models/spring-ai-autoconfigure-model-elevenlabs/src/main/java/org/springframework/ai/model/elevenlabs/autoconfigure/ElevenLabsAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public ElevenLabsApi elevenLabsApi(ElevenLabsConnectionProperties connectionProp
6666

6767
HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(sslBundles.getIfAvailable(),
6868
globalHttpClientSettings.getIfAvailable());
69-
HttpClientSettings httpClientSettings = mapper.map(connectionProperties);
69+
HttpClientSettings httpClientSettings = mapper.map(connectionProperties.getHttp());
7070

7171
RestClient.Builder restClientBuilder = restClientBuilderProvider.getIfAvailable(RestClient::builder);
7272
applyRestClientSettings(restClientBuilder, httpClientSettings,

auto-configurations/models/spring-ai-autoconfigure-model-elevenlabs/src/main/java/org/springframework/ai/model/elevenlabs/autoconfigure/ElevenLabsConnectionProperties.java

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

1717
package org.springframework.ai.model.elevenlabs.autoconfigure;
1818

19+
import java.time.Duration;
20+
21+
import jakarta.annotation.Nullable;
22+
1923
import org.springframework.ai.elevenlabs.api.ElevenLabsApi;
2024
import org.springframework.boot.context.properties.ConfigurationProperties;
25+
import org.springframework.boot.context.properties.NestedConfigurationProperty;
26+
import org.springframework.boot.http.client.HttpRedirects;
2127
import org.springframework.boot.http.client.autoconfigure.HttpClientSettingsProperties;
2228

2329
/**
@@ -26,7 +32,7 @@
2632
* @author Alexandros Pappas
2733
*/
2834
@ConfigurationProperties(ElevenLabsConnectionProperties.CONFIG_PREFIX)
29-
public class ElevenLabsConnectionProperties extends HttpClientSettingsProperties {
35+
public class ElevenLabsConnectionProperties {
3036

3137
public static final String CONFIG_PREFIX = "spring.ai.elevenlabs";
3238

@@ -40,6 +46,10 @@ public class ElevenLabsConnectionProperties extends HttpClientSettingsProperties
4046
*/
4147
private String baseUrl = ElevenLabsApi.DEFAULT_BASE_URL;
4248

49+
@NestedConfigurationProperty
50+
private final HttpClientSettingsProperties http = new HttpClientSettingsProperties() {
51+
};
52+
4353
public String getApiKey() {
4454
return this.apiKey;
4555
}
@@ -56,4 +66,39 @@ public void setBaseUrl(String baseUrl) {
5666
this.baseUrl = baseUrl;
5767
}
5868

69+
@Nullable
70+
public HttpRedirects getRedirects() {
71+
return this.http.getRedirects();
72+
}
73+
74+
public void setRedirects(HttpRedirects redirects) {
75+
this.http.setRedirects(redirects);
76+
}
77+
78+
@Nullable
79+
public Duration getConnectTimeout() {
80+
return this.http.getConnectTimeout();
81+
}
82+
83+
public void setConnectTimeout(Duration connectTimeout) {
84+
this.http.setConnectTimeout(connectTimeout);
85+
}
86+
87+
@Nullable
88+
public Duration getReadTimeout() {
89+
return this.http.getReadTimeout();
90+
}
91+
92+
public void setReadTimeout(Duration readTimeout) {
93+
this.http.setReadTimeout(readTimeout);
94+
}
95+
96+
public HttpClientSettingsProperties.Ssl getSsl() {
97+
return this.http.getSsl();
98+
}
99+
100+
public HttpClientSettingsProperties getHttp() {
101+
return this.http;
102+
}
103+
59104
}

auto-configurations/models/spring-ai-autoconfigure-model-minimax/src/main/java/org/springframework/ai/model/minimax/autoconfigure/MiniMaxChatAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public MiniMaxChatModel miniMaxChatModel(MiniMaxConnectionProperties commonPrope
7676

7777
HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(sslBundles.getIfAvailable(),
7878
globalHttpClientSettings.getIfAvailable());
79-
HttpClientSettings httpClientSettings = mapper.map(commonProperties);
79+
HttpClientSettings httpClientSettings = mapper.map(commonProperties.getHttp());
8080

8181
RestClient.Builder restClientBuilder = restClientBuilderProvider.getIfAvailable(RestClient::builder);
8282
applyRestClientSettings(restClientBuilder, httpClientSettings,

auto-configurations/models/spring-ai-autoconfigure-model-minimax/src/main/java/org/springframework/ai/model/minimax/autoconfigure/MiniMaxConnectionProperties.java

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,32 +16,63 @@
1616

1717
package org.springframework.ai.model.minimax.autoconfigure;
1818

19+
import java.time.Duration;
20+
21+
import jakarta.annotation.Nullable;
22+
1923
import org.springframework.boot.context.properties.ConfigurationProperties;
24+
import org.springframework.boot.context.properties.NestedConfigurationProperty;
25+
import org.springframework.boot.http.client.HttpRedirects;
2026
import org.springframework.boot.http.client.autoconfigure.HttpClientSettingsProperties;
2127

2228
@ConfigurationProperties(MiniMaxConnectionProperties.CONFIG_PREFIX)
23-
public class MiniMaxConnectionProperties extends HttpClientSettingsProperties {
29+
public class MiniMaxConnectionProperties extends MiniMaxParentProperties {
2430

2531
public static final String CONFIG_PREFIX = "spring.ai.minimax";
2632

27-
private String apiKey;
33+
public static final String DEFAULT_BASE_URL = "https://api.minimax.chat";
34+
35+
@NestedConfigurationProperty
36+
private final HttpClientSettingsProperties http = new HttpClientSettingsProperties() {
37+
};
38+
39+
public MiniMaxConnectionProperties() {
40+
super.setBaseUrl(DEFAULT_BASE_URL);
41+
}
42+
43+
@Nullable
44+
public HttpRedirects getRedirects() {
45+
return this.http.getRedirects();
46+
}
47+
48+
public void setRedirects(HttpRedirects redirects) {
49+
this.http.setRedirects(redirects);
50+
}
2851

29-
private String baseUrl = "https://api.minimax.chat";
52+
@Nullable
53+
public Duration getConnectTimeout() {
54+
return this.http.getConnectTimeout();
55+
}
56+
57+
public void setConnectTimeout(Duration connectTimeout) {
58+
this.http.setConnectTimeout(connectTimeout);
59+
}
3060

31-
public String getApiKey() {
32-
return this.apiKey;
61+
@Nullable
62+
public Duration getReadTimeout() {
63+
return this.http.getReadTimeout();
3364
}
3465

35-
public void setApiKey(String apiKey) {
36-
this.apiKey = apiKey;
66+
public void setReadTimeout(Duration readTimeout) {
67+
this.http.setReadTimeout(readTimeout);
3768
}
3869

39-
public String getBaseUrl() {
40-
return this.baseUrl;
70+
public HttpClientSettingsProperties.Ssl getSsl() {
71+
return this.http.getSsl();
4172
}
4273

43-
public void setBaseUrl(String baseUrl) {
44-
this.baseUrl = baseUrl;
74+
public HttpClientSettingsProperties getHttp() {
75+
return this.http;
4576
}
4677

4778
}

auto-configurations/models/spring-ai-autoconfigure-model-minimax/src/main/java/org/springframework/ai/model/minimax/autoconfigure/MiniMaxEmbeddingAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public MiniMaxEmbeddingModel miniMaxEmbeddingModel(MiniMaxConnectionProperties c
6868

6969
HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(sslBundles.getIfAvailable(),
7070
globalHttpClientSettings.getIfAvailable());
71-
HttpClientSettings httpClientSettings = mapper.map(commonProperties);
71+
HttpClientSettings httpClientSettings = mapper.map(commonProperties.getHttp());
7272

7373
RestClient.Builder restClientBuilder = restClientBuilderProvider.getIfAvailable(RestClient::builder);
7474
applyRestClientSettings(restClientBuilder, httpClientSettings,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public MistralAiChatModel mistralAiChatModel(MistralAiCommonProperties commonPro
8484

8585
HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(sslBundles.getIfAvailable(),
8686
globalHttpClientSettings.getIfAvailable());
87-
HttpClientSettings httpClientSettings = mapper.map(commonProperties);
87+
HttpClientSettings httpClientSettings = mapper.map(commonProperties.getHttp());
8888

8989
RestClient.Builder restClientBuilder = restClientBuilderProvider.getIfAvailable(RestClient::builder);
9090
applyRestClientSettings(restClientBuilder, httpClientSettings,

0 commit comments

Comments
 (0)