NODEDC_1C/llm_normalizer/backend/tests/assistantContractsBundleAss...

124 lines
4.0 KiB
TypeScript

import { describe, expect, it } from "vitest";
import type { AssistantRequirement, UnifiedRetrievalResult } from "../src/types/assistant";
import { buildAssistantEvidenceBundleContractV1 } from "../src/services/assistantOrchestrationContracts";
import { assembleAssistantContractsBundleV1 } from "../src/services/assistantContractsBundleAssembler";
function buildRequirement(): AssistantRequirement {
return {
requirement_id: "R1",
source_fragment_id: "F1",
requirement_text: "req1",
subject_tokens: ["account_60.01"],
status: "covered",
route: "hybrid_store_plus_live"
};
}
function buildRetrieval(input?: Partial<UnifiedRetrievalResult>): UnifiedRetrievalResult {
return {
fragment_id: "F1",
requirement_ids: ["R1"],
route: "hybrid_store_plus_live",
status: "ok",
result_type: "summary",
items: [],
summary: {},
evidence: [],
why_included: [],
selection_reason: [],
risk_factors: [],
business_interpretation: [],
confidence: "medium",
limitations: [],
errors: [],
...input
};
}
describe("assistant contracts bundle assembler", () => {
it("assembles query/execution/coverage contracts with outcome class", () => {
const retrievalResults = [buildRetrieval({ status: "ok" })];
const bundle = assembleAssistantContractsBundleV1({
userMessage: "проверь хвосты по 60.01",
normalizedQuestion: "проверь хвосты по 60.01",
normalized: {
schema_version: "normalized_query_v2_0_2",
user_message_raw: "проверь хвосты по 60.01",
message_in_scope: true,
scope_confidence: "high",
contains_multiple_tasks: false,
fragments: [{ fragment_id: "F1" }],
discarded_fragments: [],
global_notes: {
needs_clarification: false,
clarification_reason: null
}
} as any,
routeSummary: {
mode: "deterministic_v2",
message_in_scope: true,
scope_confidence: "high",
planner: {
total_fragments: 1,
in_scope_fragments: 1,
out_of_scope_fragments: 0,
discarded_fragments: 0,
contains_multiple_tasks: false
},
decisions: [],
fallback: {
type: "none",
message: null
}
},
droppedIntentSegments: [],
analysisContext: {
as_of_date: "2020-07-31",
period_from: null,
period_to: null,
source: "eval_analysis_date",
snapshot_mode: "auto"
},
executionPlan: [
{
fragment_id: "F1",
requirement_ids: ["R1"],
route: "hybrid_store_plus_live",
should_execute: true,
no_route_reason: null,
clarification_reason: null
}
],
requirements: [buildRequirement()],
evidenceBundleContractV1: buildAssistantEvidenceBundleContractV1({
retrievalCalls: [{ route: "hybrid_store_plus_live" }],
retrievalResults
}),
replyType: "factual_with_explanation",
coverageReport: {
requirements_total: 1,
requirements_covered: 1,
requirements_uncovered: [],
requirements_partially_covered: [],
clarification_needed_for: [],
out_of_scope_requirements: []
},
grounding: {
status: "grounded",
route_subject_match: true,
missing_requirements: [],
reasons: [],
why_included_summary: [],
selection_reason_summary: []
},
retrievalResults
});
expect(bundle.queryFrameContractV1.schema_version).toBe("assistant_query_frame_v1");
expect(bundle.executionPlanContractV1.schema_version).toBe("assistant_execution_plan_v1");
expect(bundle.coverageContractV1.schema_version).toBe("assistant_coverage_contract_v1");
expect(bundle.outcomeClassV1).toBe("FULLY_ANSWERED");
expect(bundle.assistantOrchestrationContractsV1.evidence_bundle.schema_version).toBe("assistant_evidence_bundle_v1");
});
});