Files

66 lines
3.0 KiB
Go

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)
}
}