2323import org .springframework .boot .autoconfigure .condition .ConditionalOnClass ;
2424import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
2525import org .springframework .boot .context .properties .EnableConfigurationProperties ;
26+ import org .springframework .boot .http .client .ClientHttpRequestFactoryBuilder ;
27+ import org .springframework .boot .http .client .HttpClientSettings ;
28+ import org .springframework .boot .http .client .autoconfigure .HttpClientSettingsPropertyMapper ;
29+ import org .springframework .boot .http .client .reactive .ClientHttpConnectorBuilder ;
2630import org .springframework .boot .restclient .autoconfigure .RestClientAutoConfiguration ;
31+ import org .springframework .boot .ssl .SslBundles ;
2732import org .springframework .boot .webclient .autoconfigure .WebClientAutoConfiguration ;
2833import org .springframework .context .annotation .Bean ;
34+ import org .springframework .http .client .ClientHttpRequestFactory ;
35+ import org .springframework .http .client .reactive .ClientHttpConnector ;
2936import org .springframework .web .client .ResponseErrorHandler ;
3037import org .springframework .web .client .RestClient ;
3138import org .springframework .web .reactive .function .client .WebClient ;
3744 * @author Eddú Meléndez
3845 * @author Thomas Vitale
3946 * @author Ilayaperumal Gopinathan
47+ * @author yinh
4048 * @since 0.8.0
4149 */
4250@ AutoConfiguration (after = { RestClientAutoConfiguration .class , WebClientAutoConfiguration .class ,
@@ -54,12 +62,29 @@ PropertiesOllamaConnectionDetails ollamaConnectionDetails(OllamaConnectionProper
5462 @ Bean
5563 @ ConditionalOnMissingBean
5664 public OllamaApi ollamaApi (OllamaConnectionDetails connectionDetails ,
65+ OllamaConnectionProperties connectionProperties ,
5766 ObjectProvider <RestClient .Builder > restClientBuilderProvider ,
58- ObjectProvider <WebClient .Builder > webClientBuilderProvider , ResponseErrorHandler responseErrorHandler ) {
67+ ObjectProvider <WebClient .Builder > webClientBuilderProvider , ResponseErrorHandler responseErrorHandler ,
68+ ObjectProvider <SslBundles > sslBundles , ObjectProvider <HttpClientSettings > globalHttpClientSettings ,
69+ ObjectProvider <ClientHttpRequestFactoryBuilder <?>> factoryBuilder ,
70+ ObjectProvider <ClientHttpConnectorBuilder <?>> webConnectorBuilderProvider ) {
71+
72+ HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper (sslBundles .getIfAvailable (),
73+ globalHttpClientSettings .getIfAvailable ());
74+ HttpClientSettings httpClientSettings = mapper .map (connectionProperties );
75+
76+ RestClient .Builder restClientBuilder = restClientBuilderProvider .getIfAvailable (RestClient ::builder );
77+ applyRestClientSettings (restClientBuilder , httpClientSettings ,
78+ factoryBuilder .getIfAvailable (ClientHttpRequestFactoryBuilder ::detect ));
79+
80+ WebClient .Builder webClientBuilder = webClientBuilderProvider .getIfAvailable (WebClient ::builder );
81+ applyWebClientSettings (webClientBuilder , httpClientSettings ,
82+ webConnectorBuilderProvider .getIfAvailable (ClientHttpConnectorBuilder ::detect ));
83+
5984 return OllamaApi .builder ()
6085 .baseUrl (connectionDetails .getBaseUrl ())
61- .restClientBuilder (restClientBuilderProvider . getIfAvailable ( RestClient :: builder ) )
62- .webClientBuilder (webClientBuilderProvider . getIfAvailable ( WebClient :: builder ) )
86+ .restClientBuilder (restClientBuilder )
87+ .webClientBuilder (webClientBuilder )
6388 .responseErrorHandler (responseErrorHandler )
6489 .build ();
6590 }
@@ -79,4 +104,16 @@ public String getBaseUrl() {
79104
80105 }
81106
107+ private void applyRestClientSettings (RestClient .Builder builder , HttpClientSettings httpClientSettings ,
108+ ClientHttpRequestFactoryBuilder <?> factoryBuilder ) {
109+ ClientHttpRequestFactory requestFactory = factoryBuilder .build (httpClientSettings );
110+ builder .requestFactory (requestFactory );
111+ }
112+
113+ private void applyWebClientSettings (WebClient .Builder builder , HttpClientSettings httpClientSettings ,
114+ ClientHttpConnectorBuilder <?> connectorBuilder ) {
115+ ClientHttpConnector connector = connectorBuilder .build (httpClientSettings );
116+ builder .clientConnector (connector );
117+ }
118+
82119}
0 commit comments