* provider: a model can be told to accept images Reasoning levels can be narrowed per model, but whether a model sees images came only from the vendor's list. A relay or a model the list hasn't caught yet could not be marked as taking images, or as text only. The names editor now has Accepts images. The choice is kept beside the name and the levels, and is what agents and the gateway's image check are told. The same answer as the vendor's is not stored. Restore default clears it. Tested with TestModelImage. go build -tags nogui passes. * settings: a save of the Settings page keeps the models' image choices, as it keeps their names and levels POST /api/settings copied Visible, ModelNames and ModelEfforts over from the current settings but not the new ModelImages, and the Settings page never sends it, so switching the theme or language dropped every "Accepts images" override. Tested with TestSettingsSaveKeepsModelChoices (fails without the fix: images map[]). --------- Co-authored-by: yetone <yetoneful@gmail.com>
37 lines
1.2 KiB
Go
37 lines
1.2 KiB
Go
package gui
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/yetone/magpie/internal/settings"
|
|
)
|
|
|
|
// What the models' page keeps in settings — names, levels, whether a model
|
|
// takes images — outlives a save of the Settings page, which never sends it.
|
|
func TestSettingsSaveKeepsModelChoices(t *testing.T) {
|
|
h := t.TempDir()
|
|
t.Setenv("HOME", h)
|
|
t.Setenv("XDG_CONFIG_HOME", filepath.Join(h, ".config"))
|
|
t.Setenv("XDG_CACHE_HOME", filepath.Join(h, ".cache"))
|
|
if err := settings.Save(settings.Settings{
|
|
ModelNames: map[string]string{"p/m": "Mine"},
|
|
ModelEfforts: map[string][]string{"p/m": {"low"}},
|
|
ModelImages: map[string]bool{"p/m": true},
|
|
}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
rec := httptest.NewRecorder()
|
|
Handler(nil, nil).ServeHTTP(rec, httptest.NewRequest("POST", "/api/settings", strings.NewReader(`{"theme":"dark","lang":"en"}`)))
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("%d %s", rec.Code, rec.Body)
|
|
}
|
|
s := settings.Load()
|
|
if s.Theme != "dark" || s.ModelNames["p/m"] != "Mine" || len(s.ModelEfforts["p/m"]) != 1 || !s.ModelImages["p/m"] {
|
|
t.Fatalf("theme %q names %v efforts %v images %v", s.Theme, s.ModelNames, s.ModelEfforts, s.ModelImages)
|
|
}
|
|
}
|