- 在菜单系统中新增 RenderType、FormDefinitionId 和 RuntimeViewMode 字段 - 实现自定义表单菜单类型的组件映射和验证逻辑 - 为分片上传相关端点添加 file:upload 权限控制 - 为桶和文件夹操作添加 bucket:write 和 file:write 权限控制 - 为文件共享功能添加 file-share:write 权限控制 - 为文件读取操作添加 file:read 权限控制 - 扩展 AI 模型提供商枚举,支持更多模型供应商 - 在 AI 模型创建和更新时添加枚举值验证 - 重构工作流按钮权限检查逻辑,使用统一的权限码查询方式 - 为 JSON 格式文档添加提取器支持 - 增强表单数据派生服务,支持自定义表单关联解析 - 为表单数据添加按表单定义 ID 的索引优化 - 添加聊天消息搜索和上下文获取的集成测试 - 修正删除菜单端点的 ID 类型从 Guid 改为 long
72 lines
2.7 KiB
C#
72 lines
2.7 KiB
C#
using BuildFlow.Application.AiModel.Services;
|
|
using Xunit;
|
|
|
|
namespace BuildFlow.Rag.Tests;
|
|
|
|
/// <summary>
|
|
/// AI 模型目录测试。覆盖主流渠道预设、本地模型类型识别和 Models.dev 目录解析。
|
|
/// </summary>
|
|
public class AiModelCatalogTests
|
|
{
|
|
[Fact]
|
|
public void GetProviderPresetsShouldIncludeMainstreamProvidersAndDeepSeek()
|
|
{
|
|
var providers = AiModelCatalogNormalizer.GetProviderPresets();
|
|
|
|
Assert.Contains(providers, p => p.Provider == 3 && p.Key == "deepseek" && p.BaseUrl == "https://api.deepseek.com/v1");
|
|
Assert.Contains(providers, p => p.Provider == 4 && p.Key == "anthropic");
|
|
Assert.Contains(providers, p => p.Provider == 5 && p.Key == "google");
|
|
Assert.Contains(providers, p => p.Provider == 6 && p.Key == "openrouter");
|
|
Assert.Contains(providers, p => p.Provider == 1 && p.Key == "lmstudio" && p.BaseUrl == "http://localhost:1234/v1");
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("text-embedding-3-large", 1)]
|
|
[InlineData("nomic-embed-text-v1.5", 1)]
|
|
[InlineData("bge-m3", 1)]
|
|
[InlineData("qwen2.5-7b-instruct", 0)]
|
|
[InlineData("deepseek-chat", 0)]
|
|
public void GuessModelTypeShouldDetectEmbeddingModels(string modelId, int expectedType)
|
|
{
|
|
Assert.Equal(expectedType, AiModelCatalogNormalizer.GuessModelType(modelId));
|
|
}
|
|
|
|
[Fact]
|
|
public void ParseModelsDevApiShouldNormalizeProviderModels()
|
|
{
|
|
const string json = """
|
|
{
|
|
"deepseek": {
|
|
"id": "deepseek",
|
|
"name": "DeepSeek",
|
|
"api": "https://api.deepseek.com/v1",
|
|
"models": {
|
|
"deepseek-chat": {
|
|
"id": "deepseek-chat",
|
|
"name": "DeepSeek Chat",
|
|
"description": "General chat model",
|
|
"release_date": "2025-01-15",
|
|
"limit": { "context": 64000, "output": 8000 }
|
|
},
|
|
"deepseek-embedding": {
|
|
"id": "deepseek-embedding",
|
|
"name": "DeepSeek Embedding"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
""";
|
|
|
|
var result = AiModelCatalogNormalizer.ParseModelsDevApi(json);
|
|
|
|
Assert.Single(result.Providers);
|
|
Assert.Equal("deepseek", result.Providers[0].Key);
|
|
Assert.Equal("DeepSeek", result.Providers[0].Label);
|
|
Assert.Equal("https://api.deepseek.com/v1", result.Providers[0].BaseUrl);
|
|
Assert.Contains("OpenCode", result.Source);
|
|
Assert.Equal(2, result.Models.Count);
|
|
Assert.Contains(result.Models, m => m.ProviderKey == "deepseek" && m.ModelId == "deepseek-chat" && m.ModelType == 0);
|
|
Assert.Contains(result.Models, m => m.ProviderKey == "deepseek" && m.ModelId == "deepseek-embedding" && m.ModelType == 1);
|
|
}
|
|
}
|