91 lines
4.2 KiB
Go
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")
|
|
}
|
|
}
|