package service import ( "testing" "github.com/QuantumNous/new-api/common" "github.com/QuantumNous/new-api/model" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestVisionCapabilityClassification(t *testing.T) { for _, tc := range []struct{ answer, quality string }{ {"这是音箱", "normal"}, {"这是石头,请重新上传图片", "degraded"}, {"我这边没收到可查看的图片或文件,暂时无法判断是什么。请重新上传图片", "incomplete"}, {"我这边没有收到可查看的图片或附件,所以暂时无法判断是什么", "incomplete"}, {"我无法查看图片,不能判断是不是音箱", "incomplete"}, {"我看不到你上传的图片", "incomplete"}, {"我這邊沒有收到可查看的圖片或附件", "incomplete"}, {"I didn't receive an image. Please upload it again.", "incomplete"}, {"I can't view the attached image.", "incomplete"}, {"I cannot process images.", "incomplete"}, {"I'm unable to see the image.", "incomplete"}, {"No image was attached.", "incomplete"}, {"目前无法直接查看图片,请重新上传。", "incomplete"}, {"你还没有上传任何图片。", "incomplete"}, {"本次请求中未附带图片。", "incomplete"}, {"The image shows a rock.", "degraded"}, {"我看不到图片上的品牌,但这是音箱", "normal"}, {"图片里是音箱,需要更清楚的细节可以重新上传图片", "normal"}, } { t.Run(tc.answer, func(t *testing.T) { assert.Equal(t, tc.quality, VisionQuality(tc.answer)) result, err := common.Marshal(map[string]string{"closest": tc.answer}) require.NoError(t, err) for _, status := range []string{"succeeded", "failed"} { run := NormalizeVisionRun(model.DetectionRun{Kind: "vision", Status: status, Quality: "degraded", Error: "vision_keyword_missing", Result: string(result)}) assert.Equal(t, "succeeded", run.Status) assert.Equal(t, tc.quality, run.Quality) } }) } } func TestVisionLegacyFailureClassification(t *testing.T) { for _, tc := range []struct{ reason, status, quality string }{ {"vision_keyword_missing", "succeeded", "degraded"}, {"vision_request_failed", "failed", "unknown"}, {"vision_response_invalid", "failed", "unknown"}, {"deadline_exceeded", "failed", "unknown"}, } { run := NormalizeVisionRun(model.DetectionRun{Kind: "vision", Status: "failed", Quality: "degraded", Error: tc.reason, Result: `{"closest":"石头"}`}) assert.Equal(t, tc.status, run.Status) assert.Equal(t, tc.quality, run.Quality) } empty := NormalizeVisionRun(model.DetectionRun{Kind: "vision", Status: "failed", Quality: "degraded", Error: "vision_keyword_missing", Result: `{"closest":""}`}) assert.Equal(t, "failed", empty.Status) assert.Equal(t, "unknown", empty.Quality) for _, result := range []string{"", `{}`, `{"closest":""}`} { empty := NormalizeVisionRun(model.DetectionRun{Kind: "vision", Status: "succeeded", Quality: "normal", Result: result}) assert.Equal(t, "failed", empty.Status) assert.Equal(t, "unknown", empty.Quality) } }