69 lines
2.8 KiB
Go
69 lines
2.8 KiB
Go
package catalog
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/ConfigKit"
|
|
"gitea.maximumdirect.net/eric/promptkit/internal/configuration"
|
|
)
|
|
|
|
func TestPublishedCatalogsResolveThroughEffectiveConfiguration(t *testing.T) {
|
|
underlays, err := Underlays()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
state, err := configuration.Load(configkit.Input{Source: configkit.NoSource()}, underlays)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
openrouter, err := state.GetBackend("openrouter")
|
|
if err != nil || openrouter.Endpoint != "https://openrouter.ai/api/v1" || openrouter.ConcurrencyLimit != 16 || openrouter.QueueCapacity != 1024 {
|
|
t.Fatalf("OpenRouter backend: %+v, %v", openrouter, err)
|
|
}
|
|
rakestrawhome, err := state.GetBackend("rakestrawhome")
|
|
if err != nil || rakestrawhome.Endpoint != "https://inference.ai.rakestrawhome.com/v1" || rakestrawhome.ConcurrencyLimit != 4 {
|
|
t.Fatalf("Rakestrawhome backend: %+v, %v", rakestrawhome, err)
|
|
}
|
|
for id, want := range map[string]string{
|
|
"promptkit-openrouter-standard": "~google/gemini-flash-latest",
|
|
"promptkit-openrouter-auto": "openrouter/auto",
|
|
"rakestrawhome-gemma-4-31b": "google/gemma-4-31b-it",
|
|
} {
|
|
profile, err := state.GetProfile(context.Background(), id)
|
|
if err != nil || profile.ResolvedTarget.Model != want {
|
|
t.Fatalf("profile %s: %+v, %v", id, profile, err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestConsumerOverlayReplacesCatalogDefaultsBeforeValidation(t *testing.T) {
|
|
underlays, err := Underlays()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
underlays = append(underlays, configkit.Underlay{Inputs: []configkit.Input{{Source: configkit.Mapping("operator", map[string]any{
|
|
"backends": map[string]any{"openrouter": map[string]any{"endpoint": "invalid lower value"}},
|
|
})}}})
|
|
main := configkit.Input{Source: configkit.Mapping("application", map[string]any{
|
|
"backends": map[string]any{"openrouter": map[string]any{"endpoint": "https://alternate.example/v1"}},
|
|
"profiles": map[string]any{"gemini-flash-latest": map[string]any{"model": "consumer-model"}},
|
|
})}
|
|
state, err := configuration.Load(main, underlays)
|
|
if err != nil {
|
|
t.Fatalf("replaced lower-layer value failed final validation: %v", err)
|
|
}
|
|
profile, err := state.GetProfile(context.Background(), "promptkit-openrouter-standard")
|
|
if err != nil || profile.ResolvedTarget.Model != "consumer-model" || profile.ResolvedTarget.Endpoint != "https://alternate.example/v1" {
|
|
t.Fatalf("maintained profile did not observe final configuration: %+v, %v", profile, err)
|
|
}
|
|
_, err = configuration.Load(configkit.Input{Source: configkit.Mapping("invalid final", map[string]any{
|
|
"backends": map[string]any{"openrouter": map[string]any{"endpoint": "invalid final value"}},
|
|
})}, underlays[:2])
|
|
var loadError *configkit.LoadError
|
|
if !errors.As(err, &loadError) {
|
|
t.Fatalf("invalid final backend did not produce a ConfigKit load error: %v", err)
|
|
}
|
|
}
|