mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-09-12 07:00:42 +00:00
feat(task): replace built-in task adaptors with a sandboxed JS plugin system (#7076)
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
package jsplugin
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestRegistrySetEnabledHidesFactoryAndOverride(t *testing.T) {
|
||||
registry := NewRegistry()
|
||||
_, err := registry.RegisterFactory(routingTestPluginSource(
|
||||
"master-factory",
|
||||
50,
|
||||
`["master-factory-model"]`,
|
||||
`routes: [
|
||||
{method: "POST", path: "/vendor/master-factory", type: "submit", action: "generate", decode: "decodeVideo", render: "videoCreated"}
|
||||
],
|
||||
protocols: [{name: "openai_responses", supports: ["stream", "sync", "background"]}],`,
|
||||
`export const native = {
|
||||
decodeVideo: function(ctx) { return {kind: "submit", model: "master-factory-model", requestBody: ctx.body.value}; },
|
||||
videoCreated: function(ctx, task) { return task; }
|
||||
};
|
||||
`+routingProtocolExport("openai_responses"),
|
||||
), Options{})
|
||||
require.NoError(t, err)
|
||||
_, err = registry.Register(routingTestPluginSource(
|
||||
"master-override",
|
||||
51,
|
||||
`["master-override-model"]`,
|
||||
`routes: [
|
||||
{method: "POST", path: "/vendor/master-override", type: "submit", action: "generate", decode: "decodeVideo", render: "videoCreated"}
|
||||
],
|
||||
protocols: [{name: "openai_responses", supports: ["stream", "sync", "background"]}],`,
|
||||
`export const native = {
|
||||
decodeVideo: function(ctx) { return {kind: "submit", model: "master-override-model", requestBody: ctx.body.value}; },
|
||||
videoCreated: function(ctx, task) { return task; }
|
||||
};
|
||||
`+routingProtocolExport("openai_responses"),
|
||||
), Options{})
|
||||
require.NoError(t, err)
|
||||
|
||||
_, ok := registry.Get("master-factory")
|
||||
require.True(t, ok)
|
||||
_, ok = registry.Get("master-override")
|
||||
require.True(t, ok)
|
||||
before := registry.Generation().Number
|
||||
|
||||
registry.SetEnabled(false)
|
||||
_, ok = registry.Get("master-factory")
|
||||
assert.False(t, ok)
|
||||
_, ok = registry.Get("master-override")
|
||||
assert.False(t, ok)
|
||||
generation := registry.Generation()
|
||||
assert.Greater(t, generation.Number, before)
|
||||
assert.Empty(t, generation.Plugins())
|
||||
assert.Empty(t, generation.Routes())
|
||||
_, ok = generation.LookupDeclaredRoute("POST", "/vendor/master-factory")
|
||||
assert.False(t, ok)
|
||||
_, ok = generation.LookupDeclaredRoute("POST", "/vendor/master-override")
|
||||
assert.False(t, ok)
|
||||
_, ok = generation.LookupEndpoint("POST", "/v1/responses", "master-factory-model")
|
||||
assert.False(t, ok)
|
||||
_, ok = generation.LookupEndpoint("POST", "/v1/responses", "master-override-model")
|
||||
assert.False(t, ok)
|
||||
|
||||
snapshot := registry.Snapshot()
|
||||
require.Len(t, snapshot.Factory, 1)
|
||||
assert.Equal(t, "master-factory", snapshot.Factory[0].Key)
|
||||
require.Len(t, snapshot.Override, 1)
|
||||
assert.Equal(t, "master-override", snapshot.Override[0].Key)
|
||||
}
|
||||
|
||||
func TestRegistryMutationsWhileDisabledDoNotResurrectEndpoints(t *testing.T) {
|
||||
registry := NewRegistry()
|
||||
require.NoError(t, registerTestPlugin(registry, "1.0.0-factory", true))
|
||||
registry.SetEnabled(false)
|
||||
_, ok := registry.Get("test")
|
||||
require.False(t, ok)
|
||||
|
||||
require.NoError(t, registerTestPlugin(registry, "1.0.0-override", false))
|
||||
registry.SetDisabledFactoryKeys([]string{"other"})
|
||||
_, ok = registry.Get("test")
|
||||
assert.False(t, ok)
|
||||
assert.Empty(t, registry.Generation().Plugins())
|
||||
|
||||
override := registry.OverridePlugins()
|
||||
require.Contains(t, override, "test")
|
||||
require.NoError(t, registry.ReplaceOverrides([]*LoadedPlugin{override["test"]}))
|
||||
_, ok = registry.Get("test")
|
||||
assert.False(t, ok)
|
||||
assert.Empty(t, registry.Generation().Plugins())
|
||||
}
|
||||
|
||||
func TestRegistrySetEnabledTrueRestoresFactoryAndOverride(t *testing.T) {
|
||||
registry := NewRegistry()
|
||||
require.NoError(t, registerTestPlugin(registry, "1.0.0-factory", true))
|
||||
registry.SetEnabled(false)
|
||||
require.NoError(t, registerTestPlugin(registry, "1.0.0-override", false))
|
||||
_, ok := registry.Get("test")
|
||||
require.False(t, ok)
|
||||
|
||||
registry.SetEnabled(true)
|
||||
plugin, ok := registry.Get("test")
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, "1.0.0-override", plugin.Meta.Version)
|
||||
snapshot := registry.Snapshot()
|
||||
require.Len(t, snapshot.Factory, 1)
|
||||
require.Len(t, snapshot.Override, 1)
|
||||
}
|
||||
|
||||
func TestRegistrySetEnabledNoOpDoesNotBumpGeneration(t *testing.T) {
|
||||
registry := NewRegistry()
|
||||
require.NoError(t, registerTestPlugin(registry, "1.0.0", true))
|
||||
before := registry.Generation().Number
|
||||
|
||||
registry.SetEnabled(true)
|
||||
assert.Equal(t, before, registry.Generation().Number)
|
||||
}
|
||||
|
||||
func TestRegistryMasterSwitchIsOrthogonalToLayerFlags(t *testing.T) {
|
||||
registry := NewRegistry()
|
||||
require.NoError(t, registerTestPlugin(registry, "1.0.0-factory", true))
|
||||
require.NoError(t, registerTestPlugin(registry, "1.0.0-override", false))
|
||||
|
||||
registry.SetOverrideEnabled(false)
|
||||
plugin, ok := registry.Get("test")
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, "1.0.0-factory", plugin.Meta.Version)
|
||||
|
||||
registry.SetDisabledFactoryKeys([]string{"test"})
|
||||
_, ok = registry.Get("test")
|
||||
assert.False(t, ok)
|
||||
|
||||
registry.SetEnabled(false)
|
||||
_, ok = registry.Get("test")
|
||||
assert.False(t, ok)
|
||||
|
||||
registry.SetEnabled(true)
|
||||
_, ok = registry.Get("test")
|
||||
assert.False(t, ok)
|
||||
|
||||
registry.SetDisabledFactoryKeys(nil)
|
||||
plugin, ok = registry.Get("test")
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, "1.0.0-factory", plugin.Meta.Version)
|
||||
}
|
||||
Reference in New Issue
Block a user