fix(model-catalog): refine summary capability filters

This commit is contained in:
2026-05-24 23:38:31 +08:00
parent 355d8cad74
commit 3d23918542
4 changed files with 251 additions and 55 deletions
@@ -106,8 +106,8 @@ func TestBuildModelCatalogAggregatesSources(t *testing.T) {
if !hasFilterCount(response.Filters.Providers, "volces", 1) || !hasFilterCount(response.Filters.Providers, "gemini", 1) {
t.Fatalf("expected provider filters to count merged model for each provider: %+v", response.Filters.Providers)
}
if !hasFilterCount(response.Filters.Capabilities, "image", 1) {
t.Fatalf("expected image capability filter: %+v", response.Filters.Capabilities)
if !hasFilterCount(response.Filters.Capabilities, "image_generate", 1) {
t.Fatalf("expected image generation capability filter: %+v", response.Filters.Capabilities)
}
if got := item.Pricing.Lines[0]; got != "图像:1K 10 / 2K 20" {
t.Fatalf("unexpected pricing line %q", got)
@@ -168,6 +168,58 @@ func TestBuildModelCatalogUsesBaseModelProviderForProviderFilters(t *testing.T)
}
}
func TestBuildModelCatalogIncludes3DModelCapabilityFilter(t *testing.T) {
models := []store.PlatformModel{
{
ID: "tripo-image-to-model",
PlatformID: "platform-tripo",
ModelName: "tripo-3d",
ModelAlias: "Tripo 3D",
ModelType: store.StringList{"image_to_model"},
DisplayName: "Tripo 3D",
Enabled: true,
},
}
platforms := []store.Platform{
{ID: "platform-tripo", Provider: "tripo3d", Name: "Tripo3D", Status: "enabled"},
}
response := buildModelCatalog(models, platforms, nil, nil, nil, nil, nil)
if !hasFilterCount(response.Filters.Capabilities, "image_to_model", 1) {
t.Fatalf("expected 3D model capability filter, got %+v", response.Filters.Capabilities)
}
if hasFilterCount(response.Filters.Capabilities, "image_generate", 1) {
t.Fatalf("did not expect image_to_model to be classified as image: %+v", response.Filters.Capabilities)
}
if len(response.Items) != 1 || len(response.Items[0].CapabilityTags) != 1 || response.Items[0].CapabilityTags[0] != "图生 3D" {
t.Fatalf("expected image-to-model capability tag, got %+v", response.Items)
}
}
func TestBuildModelCatalogKeepsDistinctCapabilityFilters(t *testing.T) {
models := []store.PlatformModel{
{ID: "image-generate", PlatformID: "platform-a", ModelName: "image-generate", ModelAlias: "Image Generate", ModelType: store.StringList{"image_generate"}, DisplayName: "Image Generate", Enabled: true},
{ID: "image-analysis", PlatformID: "platform-a", ModelName: "image-analysis", ModelAlias: "Image Analysis", ModelType: store.StringList{"image_analysis"}, DisplayName: "Image Analysis", Enabled: true},
{ID: "video-generate", PlatformID: "platform-a", ModelName: "video-generate", ModelAlias: "Video Generate", ModelType: store.StringList{"video_generate"}, DisplayName: "Video Generate", Enabled: true},
{ID: "video-understanding", PlatformID: "platform-a", ModelName: "video-understanding", ModelAlias: "Video Understanding", ModelType: store.StringList{"video_understanding"}, DisplayName: "Video Understanding", Enabled: true},
{ID: "omni", PlatformID: "platform-a", ModelName: "omni", ModelAlias: "Omni", ModelType: store.StringList{"omni"}, DisplayName: "Omni", Enabled: true},
{ID: "omni-video", PlatformID: "platform-a", ModelName: "omni-video", ModelAlias: "Omni Video", ModelType: store.StringList{"omni_video"}, DisplayName: "Omni Video", Enabled: true},
}
platforms := []store.Platform{
{ID: "platform-a", Provider: "test", Name: "测试平台", Status: "enabled"},
}
response := buildModelCatalog(models, platforms, nil, nil, nil, nil, nil)
for _, value := range []string{"image_generate", "image_analysis", "video_generate", "video_understanding", "omni", "omni_video"} {
if !hasFilterCount(response.Filters.Capabilities, value, 1) {
t.Fatalf("expected distinct capability filter %s, got %+v", value, response.Filters.Capabilities)
}
}
if hasFilterCount(response.Filters.Capabilities, "image", 2) || hasFilterCount(response.Filters.Capabilities, "video", 2) {
t.Fatalf("did not expect broad image/video filters: %+v", response.Filters.Capabilities)
}
}
func TestBuildModelCatalogOnlyUsesEnabledPlatformModels(t *testing.T) {
models := []store.PlatformModel{
{