NODEDC_1C/llm_normalizer/backend/tests/assistantEvidenceBundleAsse...

106 lines
3.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import type { UnifiedRetrievalResult } from "../src/types/assistant";
import { assembleAssistantEvidenceBundle } from "../src/services/assistantEvidenceBundleAssembler";
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 evidence bundle assembler", () => {
it("builds evidence contract and retrieval status from the same retrieval set", () => {
const assembled = assembleAssistantEvidenceBundle({
retrievalCalls: [{ route: "hybrid_store_plus_live" }, { route: "store_canonical" }],
retrievalResults: [
buildRetrieval({
fragment_id: "F1",
requirement_ids: ["R1"],
route: "hybrid_store_plus_live",
status: "ok",
evidence: [
{
evidence_id: "ev-1",
claim_ref: "requirement:R1",
source_type: "retrieval_item",
source_ref: {
schema_version: "evidence_source_ref_v1",
namespace: "snapshot_2020",
entity: "document",
id: "doc-1",
period: "2020-07",
canonical_ref: "evidence_source_ref_v1|snapshot_2020|document|doc-1|2020-07"
},
pointer: {
fragment_id: "F1",
route: "hybrid_store_plus_live",
source: {
namespace: "snapshot_2020",
entity: "document",
id: "doc-1",
period: "2020-07"
},
locator: {
field_path: "amount",
item_index: 0
}
},
evidence_kind: "mechanism_link",
mechanism_note: "signal",
confidence: "medium",
limitation: null,
payload: {}
}
]
}),
buildRetrieval({
fragment_id: "F2",
requirement_ids: ["R2"],
route: "store_canonical",
status: "error",
result_type: "list",
errors: ["timeout"]
})
]
});
expect(assembled.evidenceBundleContractV1.retrieval_calls_total).toBe(2);
expect(assembled.evidenceBundleContractV1.retrieval_results_total).toBe(2);
expect(assembled.evidenceBundleContractV1.retrieval_status_breakdown.ok).toBe(1);
expect(assembled.evidenceBundleContractV1.retrieval_status_breakdown.error).toBe(1);
expect(assembled.evidenceBundleContractV1.evidence_total).toBe(1);
expect(assembled.evidenceBundleContractV1.source_refs_total).toBe(1);
expect(assembled.retrievalStatus).toEqual([
{
fragment_id: "F1",
requirement_ids: ["R1"],
route: "hybrid_store_plus_live",
status: "ok",
result_type: "summary"
},
{
fragment_id: "F2",
requirement_ids: ["R2"],
route: "store_canonical",
status: "error",
result_type: "list"
}
]);
});
});