mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-09-08 10:46:58 +00:00
feat(task): replace built-in task adaptors with a sandboxed JS plugin system (#7076)
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package task_pricing_setting
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/QuantumNous/new-api/setting/config"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
type TaskPricingSetting struct {
|
||||
SoraSizeRatio map[string]float64 `json:"sora_size_ratio"`
|
||||
VertexResolution4K map[string]float64 `json:"vertex_resolution_4k_ratio"`
|
||||
}
|
||||
|
||||
var taskPricingSetting = TaskPricingSetting{
|
||||
SoraSizeRatio: map[string]float64{
|
||||
"1792x1024": 1.666667,
|
||||
"1024x1792": 1.666667,
|
||||
},
|
||||
VertexResolution4K: map[string]float64{
|
||||
"veo-3.1-fast-generate": 2.333333,
|
||||
"veo-3.1-generate": 1.5,
|
||||
"veo-3.1": 1.5,
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
config.GlobalConfig.Register("task_pricing_setting", &taskPricingSetting)
|
||||
}
|
||||
|
||||
func SoraSizeRatio(size string) float64 {
|
||||
if ratio, ok := taskPricingSetting.SoraSizeRatio[size]; ok && ratio > 0 {
|
||||
return ratio
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
func VertexResolutionRatio(model, resolution string) float64 {
|
||||
if !strings.EqualFold(resolution, "4k") {
|
||||
return 1
|
||||
}
|
||||
matchedPattern := ""
|
||||
matchedRatio := 1.0
|
||||
for pattern, ratio := range taskPricingSetting.VertexResolution4K {
|
||||
if !strings.Contains(model, pattern) || ratio <= 0 {
|
||||
continue
|
||||
}
|
||||
if len(pattern) > len(matchedPattern) || (len(pattern) == len(matchedPattern) && pattern < matchedPattern) {
|
||||
matchedPattern = pattern
|
||||
matchedRatio = ratio
|
||||
}
|
||||
}
|
||||
return matchedRatio
|
||||
}
|
||||
|
||||
func GetCopy() TaskPricingSetting {
|
||||
return TaskPricingSetting{
|
||||
SoraSizeRatio: lo.Assign(taskPricingSetting.SoraSizeRatio),
|
||||
VertexResolution4K: lo.Assign(taskPricingSetting.VertexResolution4K),
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package task_pricing_setting
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/QuantumNous/new-api/setting/config"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestTaskPricingDefaultsAndOptionUpdate(t *testing.T) {
|
||||
original := GetCopy()
|
||||
t.Cleanup(func() { taskPricingSetting = original })
|
||||
assert.InDelta(t, 1.666667, SoraSizeRatio("1792x1024"), 0.000001)
|
||||
assert.InDelta(t, 2.333333, VertexResolutionRatio("veo-3.1-fast-generate-preview", "4K"), 0.000001)
|
||||
require.NoError(t, config.UpdateConfigFromMap(&taskPricingSetting, map[string]string{"sora_size_ratio": `{"1792x1024":2}`}))
|
||||
assert.Equal(t, 2.0, SoraSizeRatio("1792x1024"))
|
||||
assert.Equal(t, 1.0, SoraSizeRatio("720x1280"))
|
||||
}
|
||||
|
||||
func TestVertexResolutionRatioPrefersMostSpecificModelPattern(t *testing.T) {
|
||||
original := GetCopy()
|
||||
t.Cleanup(func() { taskPricingSetting = original })
|
||||
taskPricingSetting.VertexResolution4K = map[string]float64{
|
||||
"veo-3.1": 1.5,
|
||||
"veo-3.1-fast-generate": 2.333333,
|
||||
"veo-3.1-fast-generate-preview": 3,
|
||||
}
|
||||
|
||||
assert.Equal(t, 3.0, VertexResolutionRatio("veo-3.1-fast-generate-preview", "4K"))
|
||||
assert.Equal(t, 2.333333, VertexResolutionRatio("veo-3.1-fast-generate", "4k"))
|
||||
assert.Equal(t, 1.5, VertexResolutionRatio("veo-3.1-generate", "4K"))
|
||||
}
|
||||
Reference in New Issue
Block a user