Files
magpie/internal/agent/pi_thinking_test.go
T
Eachann 3dc5577d43 pi: changing the thinking level writes only that level, and only when it changed — with the model on magpie it rebuilt providers.magpie, so a contextWindow (or any other field) edited by hand was replaced. Default still clears defaultThinkingLevel and leaves the model and the provider where they are. Picking a model, and the catalog sync, still refresh the provider. OmO shares this path. (#285)
Tested with TestPiThinkingLeavesTheProvider: a hand-edited contextWindow and another provider stay byte for byte through an unchanged level, a changed level and Default; the level itself changes or clears, and Default again does not rewrite the file. gofmt, go vet -tags nogui ./internal/agent/ and go test -tags nogui ./internal/agent/ pass.
2026-09-30 15:41:17 +08:00

101 lines
2.9 KiB
Go

package agent
import (
"os"
"path/filepath"
"testing"
"github.com/yetone/magpie/internal/edit"
)
// Changing Pi's thinking level writes defaultThinkingLevel alone, and only
// when it changed. It used to rebuild providers.magpie, so a contextWindow
// edited by hand was replaced. Default clears the level and leaves the
// model on magpie; picking the model is what removes the provider.
func TestPiThinkingLeavesTheProvider(t *testing.T) {
home := syncHome(t)
dir := filepath.Join(home, ".pi", "agent")
settings := filepath.Join(dir, "settings.json")
models := filepath.Join(dir, "models.json")
settingsBody := `{
"theme": "dark",
"defaultProvider": "magpie",
"defaultModel": "relay/glm-4.6",
"defaultThinkingLevel": "low"
}
`
modelsBody := `{
"providers": {
"mine": {"baseUrl": "http://x"},
"magpie": {
"name": "magpie",
"models": [
{"id": "relay/glm-4.6", "name": "GLM", "contextWindow": 272000, "reasoning": false}
]
}
}
}
`
writeFile(t, settings, settingsBody)
writeFile(t, models, modelsBody)
effort := pi(home).Field("effort")
before, _ := os.Stat(settings)
if err := effort.Set("low"); err != nil {
t.Fatal(err)
}
if got := readFile(settings); got != settingsBody {
t.Fatalf("unchanged thinking rewrote settings:\n%s", got)
}
if got := readFile(models); got != modelsBody {
t.Fatalf("unchanged thinking rewrote models:\n%s", got)
}
if now, _ := os.Stat(settings); !now.ModTime().Equal(before.ModTime()) {
t.Fatal("unchanged thinking touched settings.json")
}
if err := effort.Set("high"); err != nil {
t.Fatal(err)
}
for k, want := range map[string]string{
"theme": "dark", "defaultProvider": "magpie", "defaultModel": "relay/glm-4.6", "defaultThinkingLevel": "high",
} {
if v, _ := edit.GetJSON(settings, k); v != want {
t.Fatalf("%s = %q\n%s", k, v, readFile(settings))
}
}
if got := readFile(models); got != modelsBody {
t.Fatalf("thinking change rewrote models:\n%s", got)
}
if err := effort.Set(""); err != nil {
t.Fatal(err)
}
if _, ok := edit.GetJSON(settings, "defaultThinkingLevel"); ok {
t.Fatalf("default left thinking:\n%s", readFile(settings))
}
for k, want := range map[string]string{"theme": "dark", "defaultProvider": "magpie", "defaultModel": "relay/glm-4.6"} {
if v, _ := edit.GetJSON(settings, k); v != want {
t.Fatalf("default changed %s to %q\n%s", k, v, readFile(settings))
}
}
if got := readFile(models); got != modelsBody {
t.Fatalf("default rewrote models:\n%s", got)
}
cleared := readFile(settings)
clearedAt, _ := os.Stat(settings)
if err := effort.Set(""); err != nil {
t.Fatal(err)
}
if got := readFile(settings); got != cleared {
t.Fatalf("default again rewrote settings:\n%s", got)
}
if now, _ := os.Stat(settings); !now.ModTime().Equal(clearedAt.ModTime()) {
t.Fatal("default again touched settings.json")
}
if got := readFile(models); got != modelsBody {
t.Fatalf("default again rewrote models:\n%s", got)
}
}