Files
Assistant/tests/cognitive_router/router_test.go

47 lines
3.5 KiB
Go

package cognitive_router_test
import (
"testing"
"git.cin.su/m/Assistant/contracts/capability"
capabilitydomain "git.cin.su/m/Assistant/modules/capability/domain"
)
func candidate(id string, health capability.HealthState) capability.ResolvedCognitiveBinding {
return capability.ResolvedCognitiveBinding{Binding: capability.CognitiveBinding{ID: capability.CapabilityBindingID(id), Revision: 1, CapabilityID: "creator-advisory", OwnerPrincipalID: "owner", ProviderInstanceID: capability.ProviderInstanceID("provider-" + id), ProviderRevision: 1, ModelDescriptorID: capability.ModelDescriptorID("model-" + id), ModelRevision: 1, DataPolicy: capability.DataPolicyLocalOnly, Qualification: capability.QualificationValidated, Activation: capability.ActivationActive, Health: capability.HealthAvailable, LimitPolicyRef: "limits"}, Provider: capability.ProviderInstance{ID: capability.ProviderInstanceID("provider-" + id), Revision: 1, Kind: "kind", EndpointRef: capability.EndpointBindingRef("endpoint-" + id), Enabled: true, Qualification: capability.QualificationValidated, Health: health, ObservedAtUnixMillis: 1}, Model: capability.ModelDescriptor{ID: capability.ModelDescriptorID("model-" + id), Revision: 1, ProviderInstanceID: capability.ProviderInstanceID("provider-" + id), ProviderModelID: "snapshot", Fingerprint: "digest", MaxContextBytes: 10000, Modalities: []capability.ModelModality{capability.ModalityText}, Capabilities: []capability.ModelCapability{capability.CapabilityAdvisory}, Qualification: capability.QualificationValidated, Health: capability.HealthAvailable, ObservedAtUnixMillis: 1}}
}
func requirement() capability.CognitiveRequirement {
return capability.CognitiveRequirement{CapabilityID: "creator-advisory", OwnerPrincipalID: "owner", DataPolicy: capability.DataPolicyExternalMessageOnly, RequiredModalities: []capability.ModelModality{capability.ModalityText}, RequiredCapabilities: []capability.ModelCapability{capability.CapabilityAdvisory}, InputBytes: 10, MaxOutputBytes: 100}
}
func TestUnavailableGPUFallsBackToCPU(t *testing.T) {
gpu := candidate("gpu", capability.HealthUnavailable)
cpu := candidate("cpu", capability.HealthAvailable)
selected, err := capabilitydomain.SelectCognitiveBinding(requirement(), []capability.ResolvedCognitiveBinding{gpu, cpu})
if err != nil || selected.Binding.ID != "cpu" {
t.Fatalf("selected=%+v err=%v", selected, err)
}
}
func TestObservedQualityRanksOnlyComparableEvidence(t *testing.T) {
left, right := candidate("left", capability.HealthAvailable), candidate("right", capability.HealthAvailable)
low, high := int64(600), int64(900)
left.Evaluation = &capability.EvaluatedCapability{CapabilityID: "creator-advisory", Result: capability.EvaluationSupported, QualityScoreMillis: &low}
right.Evaluation = &capability.EvaluatedCapability{CapabilityID: "creator-advisory", Result: capability.EvaluationSupported, QualityScoreMillis: &high}
selected, err := capabilitydomain.SelectCognitiveBinding(requirement(), []capability.ResolvedCognitiveBinding{left, right})
if err != nil || selected.Binding.ID != "right" {
t.Fatalf("selected=%+v err=%v", selected, err)
}
}
func TestExcludedFailedBindingSelectsAlternative(t *testing.T) {
gpu, cpu := candidate("gpu", capability.HealthAvailable), candidate("cpu", capability.HealthAvailable)
req := requirement()
req.ExcludedBindingIDs = []capability.CapabilityBindingID{"gpu"}
selected, err := capabilitydomain.SelectCognitiveBinding(req, []capability.ResolvedCognitiveBinding{gpu, cpu})
if err != nil || selected.Binding.ID != "cpu" {
t.Fatalf("selected=%+v err=%v", selected, err)
}
}