66 lines
3.0 KiB
Go
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)
|
|
}
|
|
}
|