Files
magpie/providers_decide_cli_test.go
T
yetone 919ceb3a68 provider: Bailian's decision model as a routing preset, and System One for custom providers (#647, Aimer779: Alibaba Cloud Bailian's decision-model-preview speaks TypeSafe's System One at POST <root>/systemone, and magpie only took it from TypeSafe's Jev) — a new preset, Bailian Decision Model (qwen icon, decide-only like TypeSafe Jev), asks decision-model-preview at its plan's root: Workspace · Beijing / Workspace · Singapore (https://{WorkspaceId}.<region>.maas.aliyuncs.com/compatible-mode/v1, the editor asks for the workspace ID and fills it in) or Token Plan · Beijing (token-plan.cn-beijing…, sk-sp- keys). Saving with the workspace still unfilled is refused, both in the editor and in provider.Add. A Bailian host has no /models for it, so its list is the one model, checked by a System One ask. A custom provider can now be a System One API: the CLI's decide=<root> (with models=… named anything, not only jev-*), workspace= and region=/plan= for a preset's plan; the editor's API seg has a fourth option, System One, whose Detect APIs posts a test question to <root>/systemone with the model typed, and a decide-only custom provider passes the "base URL is needed" check. A decide-only provider's first model is what it is asked as (Jev() no longer assumes jev-*), and its models stay routing groups' classifiers, never agents'. TestBailianDecisionPreset, TestCustomSystemOne, TestProviderSystemOne and TestProviderDecidePairs fail on the old code (undefined BailianDecision / DetectDecide, unknown decide=); internal/gui/tests/system-one.test.cjs (webkit, en/zh) covers the workspace, the Singapore and Token Plan plans, TypeSafe's unchanged editor and a custom System One detected and added. go vet, builds (darwin, GOOS=linux, GOOS=windows) and go test -tags nogui -count=1 ./... under a temp HOME pass but TestProvidersAnswerWhileListsComeIn, a timing test that passes alone. Not tried against a real Bailian key.
2026-10-03 15:21:15 +08:00

51 lines
1.7 KiB
Go

package main
import (
"strings"
"testing"
"github.com/yetone/magpie/internal/provider"
)
// Bailian's decision model is added with its workspace or plan, and a
// System One API of another vendor with decide= (#647).
func TestProviderDecidePairs(t *testing.T) {
p, err := provider.FromPreset("bailian-decision")
if err != nil {
t.Fatal(err)
}
if err := applyPairs(&p, []string{"workspace=ws-1"}); err != nil {
t.Fatal(err)
}
if p.Decide != "https://ws-1.cn-beijing.maas.aliyuncs.com/compatible-mode/v1" {
t.Fatalf("workspace: %s", p.Decide)
}
p, _ = provider.FromPreset("bailian-decision")
if err := applyPairs(&p, []string{"workspace=ws-2", "region=ap-southeast-1"}); err != nil {
t.Fatal(err)
}
if p.Decide != "https://ws-2.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1" {
t.Fatalf("Singapore: %s", p.Decide)
}
p, _ = provider.FromPreset("bailian-decision")
if err := applyPairs(&p, []string{"plan=token-plan"}); err != nil {
t.Fatal(err)
}
if p.Decide != "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1" || !strings.Contains(p.KeysURL, "token-plan") {
t.Fatalf("Token Plan: %s %s", p.Decide, p.KeysURL)
}
if err := applyPairs(&p, []string{"workspace=ws-3"}); err == nil {
t.Fatal("a workspace taken for the Token Plan")
}
if err := applyPairs(&p, []string{"region=mars"}); err == nil || !strings.Contains(err.Error(), "token-plan") {
t.Fatalf("unknown region: %v", err)
}
c := provider.Provider{Name: "My Decider"}
if err := applyPairs(&c, []string{"decide=https://decide.example.com/v1", "models=my-decision-model", "key=sk-1"}); err != nil {
t.Fatal(err)
}
if !c.DecideOnly() || c.Jev() != "my-decision-model" || !c.DecidesModel("my-decision-model") {
t.Fatalf("custom: %+v asked as %s", c, c.Jev())
}
}