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) } }