feat: 按模型上下文自动配置智能体压缩阈值

- 从 llm.json 解析上下文与输出上限,并增强短模型 ID 匹配

- 切换模型、保存和试运行时按预算公式重算,目录缺失时回退 30K

- 修复模型列表接口未返回能力元数据
This commit is contained in:
2026-07-30 14:20:10 +08:00
parent 5f11219226
commit c78074a969
14 changed files with 410 additions and 23 deletions

View File

@@ -34,6 +34,28 @@ public class ModelCapabilityResolverTest {
Assert.assertEquals(Boolean.TRUE, result.getSupportImage());
Assert.assertEquals(Boolean.TRUE, result.getSupportThinking());
Assert.assertEquals(Boolean.TRUE, result.getSupportTool());
Assert.assertEquals(Long.valueOf(1_000_000L), result.getContextWindowTokens());
Assert.assertEquals(Long.valueOf(64_000L), result.getMaxOutputTokens());
}
/**
* 验证目录匹配忽略厂商前缀、大小写和常见连接符。
*/
@Test
public void shouldResolveCatalogCapabilitiesByCanonicalShortId() {
String[] modelIds = {
"阿里百炼/QWEN3.7_PLUS",
"custom/qwen3.7 plus",
"qwen3.7plus"
};
for (String modelId : modelIds) {
ModelCapabilityResolution result = resolver.resolve(null, modelId);
Assert.assertEquals(ModelCapabilitySource.CATALOG, result.getSource());
Assert.assertEquals(Long.valueOf(1_000_000L), result.getContextWindowTokens());
Assert.assertEquals(Long.valueOf(64_000L), result.getMaxOutputTokens());
}
}
/**
@@ -76,5 +98,7 @@ public class ModelCapabilityResolverTest {
Assert.assertNull(result.getSupportImage());
Assert.assertNull(result.getSupportThinking());
Assert.assertNull(result.getSupportTool());
Assert.assertNull(result.getContextWindowTokens());
Assert.assertNull(result.getMaxOutputTokens());
}
}