53 lines
2.7 KiB
Go
53 lines
2.7 KiB
Go
package domain
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"git.cin.su/m/Assistant/contracts/capability"
|
|
"git.cin.su/m/Assistant/contracts/work"
|
|
)
|
|
|
|
func evaluationGraphRequest(stage capability.TaskEvaluationProfileStage) work.TaskEvaluationGraphRequest {
|
|
profile := capability.TaskEvaluationProfile{ID: "profile-1", Revision: 1, CapabilityID: "capability-1", Stage: stage, BenchmarkVersion: "general-v1", RequiredCaseIDs: []string{"case-a", "case-b"}, QualityWeightMillis: 600, ReliabilityWeightMillis: 300, LatencyWeightMillis: 100}
|
|
request := work.TaskEvaluationGraphRequest{GraphID: "graph-1", Profile: profile, BindingIDs: []capability.CapabilityBindingID{"binding-a", "binding-b"}, DispatchIDs: []string{"dispatch-a", "dispatch-b"}, IdempotencyPrefix: "task-eval", Budget: work.GraphBudget{MaxParallel: 2, MaxAttempts: 2}, Cases: []capability.TaskEvaluationCase{{CaseID: "case-a", Prompt: "short answer", EvidenceArtifactRef: "artifact-a"}, {CaseID: "case-b", Prompt: "long answer", EvidenceArtifactRef: "artifact-b"}}}
|
|
if stage == capability.TaskEvaluationAdditional {
|
|
request.Profile.ParentProfileID = "profile-general"
|
|
request.Profile.TriggerEvidenceRef = "artifact:unresolved-1"
|
|
request.Profile.Stage = capability.TaskEvaluationAdditional
|
|
request.ParentGraphID, request.ParentGraphRevision, request.ParentGraphState, request.TriggerEvidenceRef = "graph-general", 2, work.GraphPartial, "artifact:unresolved-1"
|
|
}
|
|
return request
|
|
}
|
|
|
|
func TestBuildTaskEvaluationGraphFansOutOneNodePerBinding(t *testing.T) {
|
|
graph, err := BuildTaskEvaluationGraph(evaluationGraphRequest(capability.TaskEvaluationGeneral))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(graph.Nodes) != 2 || graph.Nodes[0].Purpose != work.GraphNodePurposeTaskEvaluation || graph.Nodes[0].TaskProfileID != "profile-1" || len(graph.Nodes[0].CaseIDs) != 2 {
|
|
t.Fatalf("unexpected task graph nodes: %+v", graph.Nodes)
|
|
}
|
|
if graph.ParentGraphID != "" || graph.TriggerEvidenceRef != "" {
|
|
t.Fatalf("general graph unexpectedly has expansion lineage: %+v", graph)
|
|
}
|
|
}
|
|
|
|
func TestBuildTaskEvaluationGraphRequiresCompletedOrPartialGeneralParent(t *testing.T) {
|
|
request := evaluationGraphRequest(capability.TaskEvaluationAdditional)
|
|
request.ParentGraphState = work.GraphRunning
|
|
if _, err := BuildTaskEvaluationGraph(request); err == nil {
|
|
t.Fatal("expected additional graph to require a finished parent graph")
|
|
}
|
|
}
|
|
|
|
func TestBuildTaskEvaluationGraphRejectsGeneralReplacement(t *testing.T) {
|
|
request := evaluationGraphRequest(capability.TaskEvaluationGeneral)
|
|
request.ParentGraphID = "old-graph"
|
|
request.ParentGraphRevision = 2
|
|
request.ParentGraphState = work.GraphPartial
|
|
request.TriggerEvidenceRef = "artifact:unresolved"
|
|
if _, err := BuildTaskEvaluationGraph(request); err == nil {
|
|
t.Fatal("expected general graph replacement to be rejected")
|
|
}
|
|
}
|