feat: 按模型上下文自动配置智能体压缩阈值
- 从 llm.json 解析上下文与输出上限,并增强短模型 ID 匹配 - 切换模型、保存和试运行时按预算公式重算,目录缺失时回退 30K - 修复模型列表接口未返回能力元数据
This commit is contained in:
@@ -9,7 +9,6 @@ import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import tech.easyflow.ai.dto.ModelInvokeConfigDtos;
|
||||
import tech.easyflow.ai.entity.Model;
|
||||
import tech.easyflow.ai.entity.ModelProvider;
|
||||
import tech.easyflow.ai.entity.table.ModelTableDef;
|
||||
import tech.easyflow.ai.mapper.ModelMapper;
|
||||
import tech.easyflow.ai.service.ModelService;
|
||||
@@ -27,7 +26,6 @@ import java.math.BigInteger;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -53,16 +51,7 @@ public class ModelController extends BaseCurdController<ModelService, Model> {
|
||||
@GetMapping("list")
|
||||
@SaCheckPermission("/api/v1/model/query")
|
||||
public Result<List<Model>> list(Model entity, Boolean asTree, String sortKey, String sortType) {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create(entity, buildOperators(entity));
|
||||
queryWrapper.orderBy(buildOrderBy(sortKey, sortType, getDefaultOrderBy()));
|
||||
List<Model> list = Tree.tryToTree(modelMapper.selectListWithRelationsByQuery(queryWrapper), asTree);
|
||||
list.forEach(item -> {
|
||||
String providerName = Optional.ofNullable(item.getModelProvider())
|
||||
.map(ModelProvider::getProviderName)
|
||||
.orElse("-");
|
||||
item.setTitle(providerName + "/" + item.getTitle());
|
||||
});
|
||||
return Result.ok(list);
|
||||
return Result.ok(service.listSelectableModels(entity, asTree, sortKey, sortType));
|
||||
}
|
||||
|
||||
@GetMapping("getList")
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package tech.easyflow.admin.controller.ai;
|
||||
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Test;
|
||||
import tech.easyflow.ai.entity.Model;
|
||||
import tech.easyflow.ai.service.ModelService;
|
||||
import tech.easyflow.common.domain.Result;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
/**
|
||||
* 模型列表控制器测试。
|
||||
*/
|
||||
public class ModelControllerTest {
|
||||
|
||||
/**
|
||||
* 验证模型列表使用包含目录能力元数据的服务查询。
|
||||
*/
|
||||
@Test
|
||||
public void listShouldReturnCapabilityDecoratedModels() {
|
||||
ModelService service = mock(ModelService.class);
|
||||
Model query = new Model();
|
||||
Model decoratedModel = new Model();
|
||||
decoratedModel.setContextWindowTokens(1_000_000L);
|
||||
decoratedModel.setMaxOutputTokens(64_000L);
|
||||
when(service.listSelectableModels(query, false, "id", "desc"))
|
||||
.thenReturn(List.of(decoratedModel));
|
||||
ModelController controller = new ModelController(service);
|
||||
|
||||
Result<List<Model>> result = controller.list(query, false, "id", "desc");
|
||||
|
||||
Assert.assertSame(decoratedModel, result.getData().get(0));
|
||||
Assert.assertEquals(Long.valueOf(1_000_000L),
|
||||
result.getData().get(0).getContextWindowTokens());
|
||||
verify(service).listSelectableModels(query, false, "id", "desc");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user