import { z } from "zod"; import { isDiagnosticToken, MODEL_DIAGNOSTIC_CHECKS, MODEL_DIAGNOSTIC_LIMITS, validateObservedDiagnosticRequest, assessObservedDiagnosticEligibility, runObservedDiagnostics, replayObservedDiagnostics, type ObservedDiagnosticRequest, type ObservedDiagnosticResult } from "@actuarial-ts/core"; import { analysisContextSchema, quantitySemanticsSchema, analysisSnapshotSchema, modelDevelopmentSourceSchema } from "./reviewContracts.js"; import { parseReviewBoundary } from "./reviewBoundary.js"; const token = z.string().refine(isDiagnosticToken, "Expected a valid identifier"); export const observedDiagnosticRequestSchema = z.object({ id: token, version: token, source: modelDevelopmentSourceSchema, context: analysisContextSchema, quantity: quantitySemanticsSchema, snapshots: z.array(analysisSnapshotSchema), checks: z.array(z.enum(MODEL_DIAGNOSTIC_CHECKS)).min(1).max(MODEL_DIAGNOSTIC_CHECKS.length), policies: z.object({ correlationTies: z.enum(["retain-approximation", "not-evaluated"]), residualReference: z.literal("volume-weighted-mack"), futureObservations: z.enum(["reject", "truncate"]) }).strict(), limits: z.object({ maximumInputCharacters: z.number().int().positive().max(MODEL_DIAGNOSTIC_LIMITS.maximumInputCharacters), maximumOrigins: z.number().int().positive().max(MODEL_DIAGNOSTIC_LIMITS.maximumOrigins), maximumCells: z.number().int().positive().max(MODEL_DIAGNOSTIC_LIMITS.maximumCells) }).strict(), }).strict(); export function parseObservedDiagnosticRequest(input: unknown): ObservedDiagnosticRequest { return validateObservedDiagnosticRequest(parseReviewBoundary(observedDiagnosticRequestSchema, input)); } export function runObservedDiagnosticsFromInput(input: unknown): ObservedDiagnosticResult { return runObservedDiagnostics(parseObservedDiagnosticRequest(input)); } export function assessObservedDiagnosticEligibilityFromInput(input: unknown) { return assessObservedDiagnosticEligibility(parseObservedDiagnosticRequest(input)); } export function replayObservedDiagnosticsFromInput(input: unknown): ObservedDiagnosticResult { const raw = parseReviewBoundary(z.object({ result: z.unknown(), limits: z.object({ maximumInputCharacters: z.number().int().positive().max(MODEL_DIAGNOSTIC_LIMITS.maximumInputCharacters) }).strict() }).strict(), input); return replayObservedDiagnostics(raw as Parameters[0]); }