47 lines
3.5 KiB
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)
|
|
}
|
|
}
|