|
@@ -4,10 +4,14 @@ import cn.hutool.core.lang.Pair;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.tycoding.langchat.biz.component.ProviderEnum;
|
|
|
import cn.tycoding.langchat.biz.entity.AigcModel;
|
|
|
+import cn.tycoding.langchat.common.enums.ChatErrorEnum;
|
|
|
+import cn.tycoding.langchat.common.exception.ServiceException;
|
|
|
import cn.tycoding.langchat.core.consts.EmbedConst;
|
|
|
+import dev.langchain4j.model.azure.AzureOpenAiChatModel;
|
|
|
import dev.langchain4j.model.azure.AzureOpenAiEmbeddingModel;
|
|
|
import dev.langchain4j.model.azure.AzureOpenAiImageModel;
|
|
|
import dev.langchain4j.model.azure.AzureOpenAiStreamingChatModel;
|
|
|
+import dev.langchain4j.model.chat.ChatLanguageModel;
|
|
|
import dev.langchain4j.model.chat.StreamingChatLanguageModel;
|
|
|
import dev.langchain4j.model.embedding.DimensionAwareEmbeddingModel;
|
|
|
import dev.langchain4j.model.image.ImageModel;
|
|
@@ -17,11 +21,11 @@ import org.springframework.stereotype.Component;
|
|
|
/**
|
|
|
* @author GB
|
|
|
* @desc
|
|
|
- * @since 2024-08-19 10:08
|
|
|
+ * @since 2024-08-19 10:08
|
|
|
*/
|
|
|
@Slf4j
|
|
|
@Component
|
|
|
-public class AzureOenAIModelConfigHandler implements ModelConfigHandler{
|
|
|
+public class AzureOenAIModelConfigHandler implements ModelConfigHandler {
|
|
|
@Override
|
|
|
public boolean whetherCurrentModel(AigcModel model) {
|
|
|
return ProviderEnum.AZURE_OPENAI.name().equals(model.getProvider());
|
|
@@ -33,14 +37,14 @@ public class AzureOenAIModelConfigHandler implements ModelConfigHandler{
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public StreamingChatLanguageModel chatConfig(AigcModel model) {
|
|
|
- try{
|
|
|
- if(!whetherCurrentModel(model)){
|
|
|
+ public StreamingChatLanguageModel buildStreamingChat(AigcModel model) {
|
|
|
+ try {
|
|
|
+ if (!whetherCurrentModel(model)) {
|
|
|
return null;
|
|
|
}
|
|
|
- if(!basicCheck(model)){
|
|
|
- log.info("Azure OpenAi 配置信息有误");
|
|
|
- return null;
|
|
|
+ if (!basicCheck(model)) {
|
|
|
+ throw new ServiceException(ChatErrorEnum.API_KEY_IS_NULL.getErrorCode(),
|
|
|
+ ChatErrorEnum.API_KEY_IS_NULL.getErrorDesc(ProviderEnum.AZURE_OPENAI.name(), model.getType()));
|
|
|
}
|
|
|
return AzureOpenAiStreamingChatModel
|
|
|
.builder()
|
|
@@ -52,21 +56,52 @@ public class AzureOenAIModelConfigHandler implements ModelConfigHandler{
|
|
|
.logRequestsAndResponses(true)
|
|
|
.topP(model.getTopP())
|
|
|
.build();
|
|
|
- }catch (Exception e){
|
|
|
- log.error("AzureOenAI chat 配置报错",e);
|
|
|
- return null;
|
|
|
+ } catch (ServiceException e) {
|
|
|
+ log.error(e.getMessage());
|
|
|
+ throw e;
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("AzureOenAI chat 配置报错", e);
|
|
|
+ return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Pair<String, DimensionAwareEmbeddingModel> embeddingConfig(AigcModel model) {
|
|
|
- try{
|
|
|
- if(!whetherCurrentModel(model)){
|
|
|
+ public ChatLanguageModel buildChatLanguageModel(AigcModel model) {
|
|
|
+ if (!whetherCurrentModel(model)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ if (!basicCheck(model)) {
|
|
|
+ throw new ServiceException(ChatErrorEnum.API_KEY_IS_NULL.getErrorCode(),
|
|
|
+ ChatErrorEnum.API_KEY_IS_NULL.getErrorDesc(ProviderEnum.AZURE_OPENAI.name(), model.getType()));
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ return AzureOpenAiChatModel.builder()
|
|
|
+ .apiKey(model.getApiKey())
|
|
|
+ .endpoint(model.getEndpoint())
|
|
|
+ .deploymentName(model.getAzureDeploymentName())
|
|
|
+ .maxTokens(model.getResponseLimit())
|
|
|
+ .temperature(model.getTemperature())
|
|
|
+ .logRequestsAndResponses(true)
|
|
|
+ .topP(model.getTopP()).build();
|
|
|
+ } catch (ServiceException e) {
|
|
|
+ log.error(e.getMessage());
|
|
|
+ throw e;
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("AzureOenAI chat 配置报错", e);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Pair<String, DimensionAwareEmbeddingModel> buildEmbedding(AigcModel model) {
|
|
|
+ try {
|
|
|
+ if (!whetherCurrentModel(model)) {
|
|
|
return null;
|
|
|
}
|
|
|
- if(!basicCheck(model)){
|
|
|
- log.info("Azure OpenAi 配置信息有误");
|
|
|
- return null;
|
|
|
+ if (!basicCheck(model)) {
|
|
|
+ throw new ServiceException(ChatErrorEnum.API_KEY_IS_NULL.getErrorCode(),
|
|
|
+ ChatErrorEnum.API_KEY_IS_NULL.getErrorDesc(ProviderEnum.AZURE_OPENAI.name(), model.getType()));
|
|
|
}
|
|
|
AzureOpenAiEmbeddingModel openAiEmbeddingModel = AzureOpenAiEmbeddingModel
|
|
|
.builder()
|
|
@@ -74,22 +109,25 @@ public class AzureOenAIModelConfigHandler implements ModelConfigHandler{
|
|
|
.deploymentName(model.getBaseUrl())
|
|
|
.logRequestsAndResponses(true)
|
|
|
.build();
|
|
|
- return Pair.of(EmbedConst.CLAZZ_NAME_AZURE_OPENAI,openAiEmbeddingModel);
|
|
|
- }catch (Exception e){
|
|
|
+ return Pair.of(EmbedConst.CLAZZ_NAME_AZURE_OPENAI, openAiEmbeddingModel);
|
|
|
+ } catch (ServiceException e) {
|
|
|
+ log.error(e.getMessage());
|
|
|
+ throw e;
|
|
|
+ } catch (Exception e) {
|
|
|
log.error("AzureOenAI embedding 配置报错", e);
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public ImageModel imageConfig(AigcModel model) {
|
|
|
+ public ImageModel buildImage(AigcModel model) {
|
|
|
try {
|
|
|
- if(!whetherCurrentModel(model)){
|
|
|
+ if (!whetherCurrentModel(model)) {
|
|
|
return null;
|
|
|
}
|
|
|
- if(!basicCheck(model)){
|
|
|
- log.info("Azure OpenAi 配置信息有误");
|
|
|
- return null;
|
|
|
+ if (!basicCheck(model)) {
|
|
|
+ throw new ServiceException(ChatErrorEnum.API_KEY_IS_NULL.getErrorCode(),
|
|
|
+ ChatErrorEnum.API_KEY_IS_NULL.getErrorDesc(ProviderEnum.AZURE_OPENAI.name(), model.getType()));
|
|
|
}
|
|
|
return AzureOpenAiImageModel
|
|
|
.builder()
|