11package learn_mate_it.dev.common.config
22
3+ import org.springframework.ai.autoconfigure.openai.OpenAiChatProperties
4+ import org.springframework.ai.openai.OpenAiChatModel
5+ import org.springframework.ai.openai.api.OpenAiApi
36import org.springframework.beans.factory.annotation.Value
7+ import org.springframework.boot.context.properties.EnableConfigurationProperties
8+ import org.springframework.context.annotation.Bean
49import org.springframework.context.annotation.Configuration
10+ import org.springframework.context.annotation.Primary
11+ import org.springframework.http.client.SimpleClientHttpRequestFactory
12+ import org.springframework.web.client.RestClient
13+ import org.springframework.web.reactive.function.client.WebClient
14+ import java.time.Duration
515
616@Configuration
7- class OpenAiConfig (
8-
17+ @EnableConfigurationProperties( OpenAiChatProperties :: class )
18+ class OpenAiConfig (
919 @Value(" \$ {spring.ai.openai.api-key}" )
1020 val apiKey : String ,
1121
12- @Value(" \$ {spring.ai.openai.chat.options.model}" )
13- val model : String
22+ @Value(" \$ {spring.ai.openai.base-url}" )
23+ val baseUrl : String
24+ ) {
25+
26+ @Bean
27+ @Primary
28+ fun openAiChatModel (
29+ properties : OpenAiChatProperties ,
30+ restClientBuilder : RestClient .Builder ,
31+ webClientBuilder : WebClient .Builder
32+ ): OpenAiChatModel {
33+
34+ val requestFactory = SimpleClientHttpRequestFactory ().apply {
35+ setConnectTimeout(Duration .ofSeconds(30 ))
36+ setReadTimeout(Duration .ofSeconds(120 ))
37+ }
1438
15- )
39+ val configuredRestClientBuilder = restClientBuilder.requestFactory(requestFactory)
40+ val openAiApi = OpenAiApi (baseUrl, apiKey, configuredRestClientBuilder, webClientBuilder)
41+ return OpenAiChatModel (openAiApi, properties.options)
42+ }
43+ }
0 commit comments