Commit a5babef5 authored by 杨翌文's avatar 杨翌文

feature: 缓存model

parent e51a2e6c
...@@ -2,6 +2,7 @@ package cn.breeze.elleai.facade; ...@@ -2,6 +2,7 @@ package cn.breeze.elleai.facade;
import cn.breeze.elleai.application.dto.langchain.EmbeddingRequest; import cn.breeze.elleai.application.dto.langchain.EmbeddingRequest;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment; import dev.langchain4j.data.segment.TextSegment;
...@@ -11,7 +12,10 @@ import lombok.extern.slf4j.Slf4j; ...@@ -11,7 +12,10 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.Duration;
import java.util.List; import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/** /**
* @author yangyw * @author yangyw
...@@ -30,17 +34,25 @@ public class OpenAIEmbeddingFacade implements EmbeddingService { ...@@ -30,17 +34,25 @@ public class OpenAIEmbeddingFacade implements EmbeddingService {
@Value("${embedding.model-name:bge-m3}") @Value("${embedding.model-name:bge-m3}")
private String modelName; private String modelName;
private final ConcurrentMap<String, OpenAiEmbeddingModel> modelMap = new ConcurrentHashMap<>();
/** /**
* 获取OpenAiEmbeddingModel * 获取OpenAiEmbeddingModel
* @param request * @param request
* @return * @return
*/ */
private OpenAiEmbeddingModel getModel(EmbeddingRequest request) { private OpenAiEmbeddingModel getModel(EmbeddingRequest request) {
return OpenAiEmbeddingModel.builder() return modelMap.compute(request.getApiBaseUrl() + request.getModel(), (k, v) -> {
.modelName(StrUtil.blankToDefault(request.getModel(), modelName)) if (ObjectUtil.isNull(v)) {
.baseUrl(StrUtil.blankToDefault(request.getApiBaseUrl(), apiBaseUrl)) v = OpenAiEmbeddingModel.builder()
.apiKey(StrUtil.blankToDefault(request.getApiKey(), apiKey)) .modelName(StrUtil.blankToDefault(request.getModel(), modelName))
.build(); .baseUrl(StrUtil.blankToDefault(request.getApiBaseUrl(), apiBaseUrl))
.apiKey(StrUtil.blankToDefault(request.getApiKey(), apiKey))
.timeout(Duration.ofSeconds(30))
.build();
}
return v;
});
} }
@Override @Override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment