package org.ruoyi.chat.config;
|
|
import lombok.Getter;
|
import lombok.RequiredArgsConstructor;
|
import okhttp3.OkHttpClient;
|
import okhttp3.logging.HttpLoggingInterceptor;
|
import org.ruoyi.common.chat.openai.OpenAiStreamClient;
|
import org.ruoyi.common.chat.openai.function.KeyRandomStrategy;
|
import org.ruoyi.common.chat.openai.interceptor.OpenAILogger;
|
import org.ruoyi.common.core.service.ConfigService;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
|
import java.util.Collections;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* Chat配置类
|
*
|
* @date: 2023/5/16
|
*/
|
@Configuration
|
@RequiredArgsConstructor
|
public class ChatConfig {
|
|
@Getter
|
private OpenAiStreamClient openAiStreamClient;
|
|
private final ConfigService configService;
|
|
@Bean
|
public OpenAiStreamClient openAiStreamClient() {
|
String apiHost = configService.getConfigValue("chat", "apiHost");
|
String apiKey = configService.getConfigValue("chat", "apiKey");
|
openAiStreamClient = createOpenAiStreamClient(apiHost,apiKey);
|
return openAiStreamClient;
|
}
|
|
public static OpenAiStreamClient createOpenAiStreamClient(String apiHost, String apiKey) {
|
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger());
|
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
|
OkHttpClient okHttpClient = new OkHttpClient.Builder()
|
.addInterceptor(httpLoggingInterceptor)
|
.connectTimeout(30, TimeUnit.SECONDS)
|
.writeTimeout(600, TimeUnit.SECONDS)
|
.readTimeout(600, TimeUnit.SECONDS)
|
.build();
|
return OpenAiStreamClient.builder()
|
.apiHost(apiHost)
|
.apiKey(Collections.singletonList(apiKey))
|
.keyStrategy(new KeyRandomStrategy())
|
.okHttpClient(okHttpClient)
|
.build();
|
}
|
}
|