mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 12:07:42 +00:00
(feat)Support for managing large models with Dify #1830;2、add user access token; #1829; 3、support change password #1824 (#1839)
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
package dev.langchain4j.model.dify;
|
||||
|
||||
import com.tencent.supersonic.common.util.AESEncryptionUtil;
|
||||
import com.tencent.supersonic.common.util.DifyClient;
|
||||
import com.tencent.supersonic.common.util.DifyResult;
|
||||
import dev.langchain4j.agent.tool.ToolSpecification;
|
||||
import dev.langchain4j.data.message.AiMessage;
|
||||
import dev.langchain4j.data.message.ChatMessage;
|
||||
import dev.langchain4j.model.chat.ChatLanguageModel;
|
||||
import dev.langchain4j.model.output.Response;
|
||||
import lombok.Builder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static dev.langchain4j.internal.Utils.getOrDefault;
|
||||
import static dev.langchain4j.internal.Utils.isNullOrEmpty;
|
||||
import static dev.langchain4j.internal.ValidationUtils.ensureNotEmpty;
|
||||
import static java.util.Collections.singletonList;
|
||||
|
||||
public class DifyAiChatModel implements ChatLanguageModel {
|
||||
|
||||
private static final String CONTENT_TYPE_JSON = "application/json";
|
||||
|
||||
private final String baseUrl;
|
||||
private final String apiKey;
|
||||
|
||||
private final DifyClient difyClient;
|
||||
private final Integer maxRetries;
|
||||
private final Integer maxToken;
|
||||
|
||||
private final String appName;
|
||||
private final Double temperature;
|
||||
private final Long timeOut;
|
||||
|
||||
private String userName;
|
||||
|
||||
@Builder
|
||||
public DifyAiChatModel(String baseUrl, String apiKey, Integer maxRetries, Integer maxToken,
|
||||
String modelName, Double temperature, Long timeOut) {
|
||||
this.baseUrl = baseUrl;
|
||||
this.maxRetries = getOrDefault(maxRetries, 3);
|
||||
this.maxToken = getOrDefault(maxToken, 512);
|
||||
try {
|
||||
this.apiKey = AESEncryptionUtil.aesDecryptECB(apiKey);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
this.appName = modelName;
|
||||
this.temperature = temperature;
|
||||
this.timeOut = timeOut;
|
||||
this.difyClient = new DifyClient(this.baseUrl, this.apiKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generate(String message) {
|
||||
DifyResult difyResult = this.difyClient.generate(message, this.getUserName());
|
||||
return difyResult.getAnswer().toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<AiMessage> generate(List<ChatMessage> messages) {
|
||||
return generate(messages, (ToolSpecification) null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<AiMessage> generate(List<ChatMessage> messages,
|
||||
List<ToolSpecification> toolSpecifications) {
|
||||
ensureNotEmpty(messages, "messages");
|
||||
DifyResult difyResult =
|
||||
this.difyClient.generate(messages.get(0).text(), this.getUserName());
|
||||
System.out.println(difyResult.toString());
|
||||
|
||||
if (!isNullOrEmpty(toolSpecifications)) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
return Response.from(AiMessage.from(difyResult.getAnswer()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response<AiMessage> generate(List<ChatMessage> messages,
|
||||
ToolSpecification toolSpecification) {
|
||||
return generate(messages,
|
||||
toolSpecification != null ? singletonList(toolSpecification) : null);
|
||||
}
|
||||
|
||||
public void setUserName(String userName) {
|
||||
this.userName = userName;
|
||||
}
|
||||
|
||||
public String getUserName() {
|
||||
return null == userName ? "zhaodongsheng" : userName;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package dev.langchain4j.provider;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.ChatModelConfig;
|
||||
import com.tencent.supersonic.common.pojo.EmbeddingModelConfig;
|
||||
import com.tencent.supersonic.common.util.AESEncryptionUtil;
|
||||
import dev.langchain4j.model.chat.ChatLanguageModel;
|
||||
import dev.langchain4j.model.dify.DifyAiChatModel;
|
||||
import dev.langchain4j.model.embedding.EmbeddingModel;
|
||||
import dev.langchain4j.model.zhipu.ZhipuAiEmbeddingModel;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class DifyModelFactory implements ModelFactory, InitializingBean {
|
||||
public static final String PROVIDER = "DIFY";
|
||||
|
||||
public static final String DEFAULT_BASE_URL = "https://dify.com/v1/chat-messages";
|
||||
public static final String DEFAULT_MODEL_NAME = "demo-预留-可不填写";
|
||||
public static final String DEFAULT_EMBEDDING_MODEL_NAME = "all-minilm";
|
||||
|
||||
@Override
|
||||
public ChatLanguageModel createChatModel(ChatModelConfig modelConfig) {
|
||||
return DifyAiChatModel.builder().baseUrl(modelConfig.getBaseUrl())
|
||||
.apiKey(AESEncryptionUtil.aesDecryptECB(modelConfig.getApiKey()))
|
||||
.modelName(modelConfig.getModelName()).timeOut(modelConfig.getTimeOut()).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EmbeddingModel createEmbeddingModel(EmbeddingModelConfig embeddingModelConfig) {
|
||||
return ZhipuAiEmbeddingModel.builder().baseUrl(embeddingModelConfig.getBaseUrl())
|
||||
.apiKey(embeddingModelConfig.getApiKey()).model(embeddingModelConfig.getModelName())
|
||||
.maxRetries(embeddingModelConfig.getMaxRetries())
|
||||
.logRequests(embeddingModelConfig.getLogRequests())
|
||||
.logResponses(embeddingModelConfig.getLogResponses()).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() {
|
||||
ModelProvider.add(PROVIDER, this);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user