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

feature: 缓存model

parent e51a2e6c
......@@ -2,6 +2,7 @@ package cn.breeze.elleai.facade;
import cn.breeze.elleai.application.dto.langchain.EmbeddingRequest;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;
......@@ -11,7 +12,10 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.time.Duration;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* @author yangyw
......@@ -30,17 +34,25 @@ public class OpenAIEmbeddingFacade implements EmbeddingService {
@Value("${embedding.model-name:bge-m3}")
private String modelName;
private final ConcurrentMap<String, OpenAiEmbeddingModel> modelMap = new ConcurrentHashMap<>();
/**
* 获取OpenAiEmbeddingModel
* @param request
* @return
*/
private OpenAiEmbeddingModel getModel(EmbeddingRequest request) {
return OpenAiEmbeddingModel.builder()
.modelName(StrUtil.blankToDefault(request.getModel(), modelName))
.baseUrl(StrUtil.blankToDefault(request.getApiBaseUrl(), apiBaseUrl))
.apiKey(StrUtil.blankToDefault(request.getApiKey(), apiKey))
.build();
return modelMap.compute(request.getApiBaseUrl() + request.getModel(), (k, v) -> {
if (ObjectUtil.isNull(v)) {
v = OpenAiEmbeddingModel.builder()
.modelName(StrUtil.blankToDefault(request.getModel(), modelName))
.baseUrl(StrUtil.blankToDefault(request.getApiBaseUrl(), apiBaseUrl))
.apiKey(StrUtil.blankToDefault(request.getApiKey(), apiKey))
.timeout(Duration.ofSeconds(30))
.build();
}
return v;
});
}
@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