NODEDC_1C/llm_normalizer/backend/src/services/assistantContractsBundleAss...

98 lines
3.2 KiB
TypeScript

import type {
AssistantReplyType,
AssistantRequirement,
AnswerGroundingCheck,
RequirementCoverageReport,
UnifiedRetrievalResult
} from "../types/assistant";
import type { NormalizedPayload, RouteHintSummary } from "../types/normalizer";
import {
buildAssistantCoverageContractV1,
buildAssistantExecutionPlanContractV1,
buildAssistantQueryFrameContractV1,
classifyAssistantOutcomeClassV1,
type AssistantCoverageContractV1,
type AssistantEvidenceBundleContractV1,
type AssistantExecutionPlanContractV1,
type AssistantOutcomeClassV1,
type AssistantQueryFrameContractV1
} from "./assistantOrchestrationContracts";
export interface AssistantContractsBundleV1 {
queryFrameContractV1: AssistantQueryFrameContractV1;
executionPlanContractV1: AssistantExecutionPlanContractV1;
outcomeClassV1: AssistantOutcomeClassV1;
coverageContractV1: AssistantCoverageContractV1;
assistantOrchestrationContractsV1: {
query_frame: AssistantQueryFrameContractV1;
execution_plan: AssistantExecutionPlanContractV1;
evidence_bundle: AssistantEvidenceBundleContractV1;
coverage: AssistantCoverageContractV1;
};
}
export function assembleAssistantContractsBundleV1(input: {
userMessage: string;
normalizedQuestion: string;
normalized: NormalizedPayload | null;
routeSummary: RouteHintSummary | null;
droppedIntentSegments: string[];
analysisContext: {
as_of_date: string | null;
period_from: string | null;
period_to: string | null;
source: string | null;
snapshot_mode: "auto" | "force_snapshot" | "force_live";
} | null;
executionPlan: Array<{
fragment_id: string;
requirement_ids: string[];
route: string;
should_execute: boolean;
no_route_reason?: string | null;
clarification_reason?: string | null;
}>;
requirements: AssistantRequirement[];
evidenceBundleContractV1: AssistantEvidenceBundleContractV1;
replyType: AssistantReplyType;
coverageReport: RequirementCoverageReport;
grounding: AnswerGroundingCheck;
retrievalResults: UnifiedRetrievalResult[];
}): AssistantContractsBundleV1 {
const queryFrameContractV1 = buildAssistantQueryFrameContractV1({
userMessage: input.userMessage,
normalizedQuestion: input.normalizedQuestion,
normalized: input.normalized,
routeSummary: input.routeSummary,
droppedIntentSegments: input.droppedIntentSegments,
analysisContext: input.analysisContext
});
const executionPlanContractV1 = buildAssistantExecutionPlanContractV1({
executionPlan: input.executionPlan,
requirements: input.requirements
});
const outcomeClassV1 = classifyAssistantOutcomeClassV1({
replyType: input.replyType,
coverageReport: input.coverageReport,
grounding: input.grounding,
retrievalResults: input.retrievalResults
});
const coverageContractV1 = buildAssistantCoverageContractV1({
coverageReport: input.coverageReport,
grounding: input.grounding,
outcomeClass: outcomeClassV1
});
return {
queryFrameContractV1,
executionPlanContractV1,
outcomeClassV1,
coverageContractV1,
assistantOrchestrationContractsV1: {
query_frame: queryFrameContractV1,
execution_plan: executionPlanContractV1,
evidence_bundle: input.evidenceBundleContractV1,
coverage: coverageContractV1
}
};
}