Files
Assistant/tests/cognitive_providers/providers_test.go
2026-08-17 09:33:43 +03:00

91 lines
4.2 KiB
Go

package cognitive_providers_test
import (
"context"
"io"
"net/http"
"net/http/httptest"
"strings"
"testing"
"git.cin.su/m/Assistant/adapters/models"
"git.cin.su/m/Assistant/contracts/capability"
capabilitydomain "git.cin.su/m/Assistant/modules/capability/domain"
)
func TestCPUDiscoveryIsReadOnlyAndCredentialFree(t *testing.T) {
requests := 0
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
requests++
if r.Method != http.MethodGet || r.URL.Path != "/v1/models" || r.Header.Get("Authorization") != "" {
t.Fatalf("unexpected request %s %s auth=%q", r.Method, r.URL.Path, r.Header.Get("Authorization"))
}
_, _ = io.WriteString(w, `{"data":[{"id":"same-name","created":`+string(rune('0'+requests))+`,"owned_by":"local","meta":{"n_ctx":2048,"n_params":3,"size":10,"ftype":"Q4"}}]}`)
}))
defer server.Close()
adapter, err := models.NewOpenAICompatibleLocalAdapter(server.URL+"/v1", nil)
if err != nil {
t.Fatal(err)
}
discovered, probe := adapter.Discover(context.Background())
if probe.Health != capability.HealthAvailable || len(discovered) != 1 || requests != 1 {
t.Fatalf("probe=%+v models=%+v requests=%d", probe, discovered, requests)
}
second, probe := adapter.Discover(context.Background())
if probe.Health != capability.HealthAvailable || len(second) != 1 || second[0].Fingerprint != discovered[0].Fingerprint {
t.Fatalf("volatile created field changed fingerprint: %s != %s", second[0].Fingerprint, discovered[0].Fingerprint)
}
}
func TestOllamaDiscoveryDoesNotRunInference(t *testing.T) {
paths := []string{}
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
paths = append(paths, r.URL.Path)
switch r.URL.Path {
case "/api/version":
_, _ = io.WriteString(w, `{"version":"1.2.3"}`)
case "/api/tags":
_, _ = io.WriteString(w, `{"models":[{"name":"same-name","model":"same-name","size":20,"digest":"digest-a","details":{"format":"gguf","quantization_level":"Q4","context_length":4096},"capabilities":["completion"]}]}`)
default:
t.Fatalf("unexpected expensive endpoint %s", r.URL.Path)
}
}))
defer server.Close()
adapter, err := models.NewOllamaAdapter(server.URL, nil)
if err != nil {
t.Fatal(err)
}
discovered, probe := adapter.Discover(context.Background())
if probe.Health != capability.HealthAvailable || len(discovered) != 1 || strings.Join(paths, ",") != "/api/version,/api/tags" {
t.Fatalf("probe=%+v models=%+v paths=%v", probe, discovered, paths)
}
}
func TestDiscoveryIsIdempotentAndProviderScoped(t *testing.T) {
base := capability.CognitiveDiscoverySnapshot{ProviderInstanceID: "cpu", ProviderKind: "kind", EndpointRef: "endpoint", Enabled: true, OwnerPrincipalID: "owner", CapabilityID: "creator-advisory", DataPolicy: capability.DataPolicyLocalOnly, LimitPolicyRef: "limits", Health: capability.HealthAvailable, ObservedAtUnixMillis: 1, Models: []capability.DiscoveredModelSnapshot{{ProviderModelID: "same-name", Fingerprint: "digest-a", MaxContextBytes: 100, Modalities: []capability.ModelModality{capability.ModalityText}, Capabilities: []capability.ModelCapability{capability.CapabilityUnknown}, Installed: capability.OperationalYes, Loaded: capability.OperationalNotObserved, Invokable: capability.OperationalNotObserved}}}
first, err := capabilitydomain.BuildDiscoveryRegistration(base)
if err != nil {
t.Fatal(err)
}
second, err := capabilitydomain.BuildDiscoveryRegistration(base)
if err != nil {
t.Fatal(err)
}
if first.Models[0].ID != second.Models[0].ID || first.Models[0].Revision != second.Models[0].Revision || first.Bindings[0].Activation != capability.ActivationInactive {
t.Fatalf("discovery not idempotent/inactive: %+v %+v", first, second)
}
gpu := base
gpu.ProviderInstanceID = "gpu"
other, _ := capabilitydomain.BuildDiscoveryRegistration(gpu)
if first.Models[0].ID == other.Models[0].ID {
t.Fatal("same model name collided across providers")
}
changed := base
changed.Models = append([]capability.DiscoveredModelSnapshot(nil), base.Models...)
changed.Models[0].Fingerprint = "digest-b"
revision, _ := capabilitydomain.BuildDiscoveryRegistration(changed)
if revision.Models[0].Revision == first.Models[0].Revision {
t.Fatal("digest change silently reused revision")
}
}