3535import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
3636import org .springframework .boot .autoconfigure .condition .ConditionalOnProperty ;
3737import org .springframework .boot .context .properties .EnableConfigurationProperties ;
38- import org .springframework .boot .restclient .RestClientCustomizer ;
38+ import org .springframework .boot .http .client .ClientHttpRequestFactoryBuilder ;
39+ import org .springframework .boot .http .client .HttpClientSettings ;
40+ import org .springframework .boot .http .client .autoconfigure .HttpClientSettingsPropertyMapper ;
41+ import org .springframework .boot .http .client .reactive .ClientHttpConnectorBuilder ;
3942import org .springframework .boot .restclient .autoconfigure .RestClientAutoConfiguration ;
4043import org .springframework .boot .ssl .SslBundles ;
4144import org .springframework .boot .webclient .autoconfigure .WebClientAutoConfiguration ;
4245import org .springframework .context .annotation .Bean ;
4346import org .springframework .core .retry .RetryTemplate ;
47+ import org .springframework .http .client .ClientHttpRequestFactory ;
48+ import org .springframework .http .client .reactive .ClientHttpConnector ;
4449import org .springframework .util .Assert ;
4550import org .springframework .util .StringUtils ;
4651import org .springframework .web .client .ResponseErrorHandler ;
6166 matchIfMissing = true )
6267public class DeepSeekChatAutoConfiguration {
6368
64- @ Bean
65- @ ConditionalOnMissingBean (name = "deepSeekRestClientCustomizer" )
66- @ ConditionalOnProperty (prefix = "spring.ai.deepseek.http-client" , name = "enabled" , havingValue = "true" ,
67- matchIfMissing = true )
68- public RestClientCustomizer deepSeekRestClientCustomizer (DeepSeekConnectionProperties connectionProperties ,
69- ObjectProvider <SslBundles > sslBundles ) {
70- return new DeepSeekRestClientCustomizer (connectionProperties .getHttpClient (), sslBundles .getIfAvailable ());
71- }
72-
7369 @ Bean
7470 @ ConditionalOnMissingBean
7571 public DeepSeekChatModel deepSeekChatModel (DeepSeekConnectionProperties commonProperties ,
@@ -78,10 +74,24 @@ public DeepSeekChatModel deepSeekChatModel(DeepSeekConnectionProperties commonPr
7874 RetryTemplate retryTemplate , ResponseErrorHandler responseErrorHandler ,
7975 ObjectProvider <ObservationRegistry > observationRegistry ,
8076 ObjectProvider <ChatModelObservationConvention > observationConvention ,
81- ObjectProvider <ToolExecutionEligibilityPredicate > deepseekToolExecutionEligibilityPredicate ) {
77+ ObjectProvider <ToolExecutionEligibilityPredicate > deepseekToolExecutionEligibilityPredicate ,
78+ ObjectProvider <SslBundles > sslBundles , ObjectProvider <HttpClientSettings > globalHttpClientSettings ,
79+ ObjectProvider <ClientHttpRequestFactoryBuilder <?>> factoryBuilder ,
80+ ObjectProvider <ClientHttpConnectorBuilder <?>> webConnectorBuilderProvider ) {
81+
82+ HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper (sslBundles .getIfAvailable (),
83+ globalHttpClientSettings .getIfAvailable ());
84+ HttpClientSettings httpClientSettings = mapper .map (commonProperties );
85+
86+ RestClient .Builder restClientBuilder = restClientBuilderProvider .getIfAvailable (RestClient ::builder );
87+ applyRestClientSettings (restClientBuilder , httpClientSettings ,
88+ factoryBuilder .getIfAvailable (ClientHttpRequestFactoryBuilder ::detect ));
8289
83- var deepSeekApi = deepSeekApi (chatProperties , commonProperties ,
84- restClientBuilderProvider .getIfAvailable (RestClient ::builder ),
90+ WebClient .Builder webClientBuilder = webClientBuilderProvider .getIfAvailable (WebClient ::builder );
91+ applyWebClientSettings (webClientBuilder , httpClientSettings ,
92+ webConnectorBuilderProvider .getIfAvailable (ClientHttpConnectorBuilder ::detect ));
93+
94+ var deepSeekApi = deepSeekApi (chatProperties , commonProperties , restClientBuilder ,
8595 webClientBuilderProvider .getIfAvailable (WebClient ::builder ), responseErrorHandler );
8696
8797 var chatModel = DeepSeekChatModel .builder ()
@@ -122,4 +132,16 @@ private DeepSeekApi deepSeekApi(DeepSeekChatProperties chatProperties,
122132 .build ();
123133 }
124134
135+ private void applyRestClientSettings (RestClient .Builder builder , HttpClientSettings httpClientSettings ,
136+ ClientHttpRequestFactoryBuilder <?> factoryBuilder ) {
137+ ClientHttpRequestFactory requestFactory = factoryBuilder .build (httpClientSettings );
138+ builder .requestFactory (requestFactory );
139+ }
140+
141+ private void applyWebClientSettings (WebClient .Builder builder , HttpClientSettings httpClientSettings ,
142+ ClientHttpConnectorBuilder <?> connectorBuilder ) {
143+ ClientHttpConnector connector = connectorBuilder .build (httpClientSettings );
144+ builder .clientConnector (connector );
145+ }
146+
125147}
0 commit comments