ГЛОБАЛЬНЫЙ РЕФАКТОРИНГ АРХИТЕКТУРЫ - Рефакторинг этапов 2.109 - 2.112 - Ужесточение типы plan-аудита и live-route аудита в deep grounding
This commit is contained in:
@@ -5,6 +5,7 @@ import type {
|
||||
AssistantDeepTurnRetrievalGuardPipelineInput,
|
||||
AssistantDeepTurnRetrievalGuardPipelineOutput
|
||||
} from "./assistantDeepTurnGuardRuntimeAdapter";
|
||||
import type { AssistantBusinessScopeResolution } from "./assistantDeepTurnContextRuntimeAdapter";
|
||||
import type {
|
||||
AssistantPlanEnforcementAuditLike,
|
||||
AssistantRequirementExtractionLike
|
||||
@@ -20,17 +21,15 @@ import type {
|
||||
} from "./assistantDeepTurnGroundingRuntimeAdapter";
|
||||
import type { AssistantDeepTurnCompositionOutput } from "./assistantDeepTurnCompositionRuntimeAdapter";
|
||||
import type { DomainPolarityGuardAudit, TemporalGuardAudit } from "./assistantRuntimeGuards";
|
||||
import type { CompanyAnchorSet } from "./companyAnchorResolver";
|
||||
|
||||
export interface AssistantDeepTurnRuntimeContextLike {
|
||||
companyAnchors: AssistantDeepTurnRetrievalGuardPipelineInput["companyAnchors"];
|
||||
companyAnchors: CompanyAnchorSet | null;
|
||||
focusDomainForGuards: AssistantDeepTurnRetrievalGuardPipelineInput["focusDomainForGuards"];
|
||||
temporalGuard: TemporalGuardAudit;
|
||||
domainPolarityGuardInitial: DomainPolarityGuardAudit;
|
||||
claimAnchorAudit: ClaimBoundAnchorAudit;
|
||||
businessScopeResolution: {
|
||||
business_scope_resolved?: string[] | null;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
businessScopeResolution: AssistantBusinessScopeResolution;
|
||||
resolvedRouteSummary: RouteHintSummary | null;
|
||||
liveTemporalHint: AssistantLiveTemporalHint | null;
|
||||
}
|
||||
@@ -65,8 +64,8 @@ export interface RunAssistantDeepTurnAnalysisRuntimeInput {
|
||||
runGroundingRuntime: (input: {
|
||||
claimType: string;
|
||||
retrievalResults: UnifiedRetrievalResult[];
|
||||
rbpPlanAudit: unknown;
|
||||
faPlanAudit: unknown;
|
||||
rbpPlanAudit: AssistantDeepTurnGroundingRuntimeInput["rbpPlanAudit"];
|
||||
faPlanAudit: AssistantDeepTurnGroundingRuntimeInput["faPlanAudit"];
|
||||
routeSummary: RouteHintSummary | null;
|
||||
requirementExtraction: AssistantRequirementExtractionLike;
|
||||
temporalGuard: AssistantDeepTurnGroundingRuntimeInput["temporalGuard"];
|
||||
@@ -82,13 +81,13 @@ export interface RunAssistantDeepTurnAnalysisRuntimeInput {
|
||||
requirements: AssistantRequirement[];
|
||||
coverageReport: RequirementCoverageReport;
|
||||
groundingCheck: AnswerGroundingCheck;
|
||||
companyAnchors: unknown;
|
||||
companyAnchors: CompanyAnchorSet | null;
|
||||
}) => AssistantDeepTurnCompositionOutput;
|
||||
}
|
||||
|
||||
export interface RunAssistantDeepTurnAnalysisRuntimeOutput {
|
||||
companyAnchors: unknown;
|
||||
temporalGuard: unknown;
|
||||
companyAnchors: CompanyAnchorSet | null;
|
||||
temporalGuard: TemporalGuardAudit;
|
||||
claimAnchorAudit: AssistantDeepTurnRuntimeContextLike["claimAnchorAudit"];
|
||||
businessScopeResolution: AssistantDeepTurnRuntimeContextLike["businessScopeResolution"];
|
||||
resolvedRouteSummary: RouteHintSummary | null;
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { ClaimBoundAnchorAudit } from "./assistantClaimBoundEvidence";
|
||||
import type { AssistantLiveTemporalHint } from "./assistantDeepTurnRetrievalRuntimeAdapter";
|
||||
import { isAssistantFollowupApplied, type AssistantFollowupUsage } from "./assistantFollowupUsage";
|
||||
import type { DomainPolarityGuardAudit, TemporalGuardAudit } from "./assistantRuntimeGuards";
|
||||
import type { CompanyAnchorSet } from "./companyAnchorResolver";
|
||||
|
||||
const KNOWN_P0_DOMAINS = new Set([
|
||||
"settlements_60_62",
|
||||
@@ -37,31 +38,28 @@ export interface BuildAssistantDeepTurnRuntimeContextInput {
|
||||
source: string | null;
|
||||
};
|
||||
followupUsage: AssistantFollowupUsage | null | undefined;
|
||||
resolveCompanyAnchors: (userMessage: string) => unknown;
|
||||
resolveCompanyAnchors: (userMessage: string) => CompanyAnchorSet;
|
||||
resolveBusinessScopeAlignment: (input: {
|
||||
userMessage: string;
|
||||
companyAnchors: unknown;
|
||||
companyAnchors: CompanyAnchorSet;
|
||||
normalized: NormalizeResponsePayload["normalized"];
|
||||
routeSummary: RouteHintSummary | null;
|
||||
}) => {
|
||||
route_summary_resolved: RouteHintSummary | null;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
}) => AssistantBusinessScopeResolution;
|
||||
inferP0DomainFromMessage: (userMessage: string) => string | null;
|
||||
resolveTemporalGuard: (input: {
|
||||
userMessage: string;
|
||||
normalized: NormalizeResponsePayload["normalized"];
|
||||
companyAnchors: unknown;
|
||||
companyAnchors: CompanyAnchorSet;
|
||||
analysisContext: AssistantLiveTemporalHint | null;
|
||||
}) => TemporalGuardAudit;
|
||||
resolveDomainPolarityGuard: (input: {
|
||||
userMessage: string;
|
||||
companyAnchors: unknown;
|
||||
companyAnchors: CompanyAnchorSet;
|
||||
focusDomainHint: string | null;
|
||||
}) => DomainPolarityGuardAudit;
|
||||
resolveClaimBoundAnchors: (input: {
|
||||
userMessage: string;
|
||||
companyAnchors: unknown;
|
||||
companyAnchors: CompanyAnchorSet;
|
||||
focusDomainHint: string | null;
|
||||
primaryPeriod: unknown;
|
||||
}) => ClaimBoundAnchorAudit;
|
||||
@@ -74,29 +72,29 @@ export interface BuildAssistantDeepTurnRuntimeContextInput {
|
||||
claimType: string;
|
||||
focusDomainHint: string | null;
|
||||
userMessage: string;
|
||||
companyAnchors: unknown;
|
||||
companyAnchors: CompanyAnchorSet;
|
||||
followupApplied: boolean;
|
||||
}) => {
|
||||
route_summary_resolved: RouteHintSummary | null;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
}) => AssistantBusinessScopeResolution;
|
||||
}
|
||||
|
||||
export interface AssistantBusinessScopeResolution {
|
||||
route_summary_resolved: RouteHintSummary | null;
|
||||
business_scope_raw?: string[];
|
||||
business_scope_resolved?: string[];
|
||||
company_grounding_applied?: boolean;
|
||||
scope_resolution_reason?: string[];
|
||||
[key: string]: unknown;
|
||||
}
|
||||
|
||||
export interface BuildAssistantDeepTurnRuntimeContextOutput {
|
||||
companyAnchors: unknown;
|
||||
initialBusinessScopeResolution: {
|
||||
route_summary_resolved: RouteHintSummary | null;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
companyAnchors: CompanyAnchorSet;
|
||||
initialBusinessScopeResolution: AssistantBusinessScopeResolution;
|
||||
inferredDomainByMessage: string | null;
|
||||
focusDomainForGuards: string | null;
|
||||
temporalGuard: TemporalGuardAudit;
|
||||
domainPolarityGuardInitial: DomainPolarityGuardAudit;
|
||||
claimAnchorAudit: ClaimBoundAnchorAudit;
|
||||
businessScopeResolution: {
|
||||
route_summary_resolved: RouteHintSummary | null;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
businessScopeResolution: AssistantBusinessScopeResolution;
|
||||
resolvedRouteSummary: RouteHintSummary | null;
|
||||
liveTemporalHint: AssistantLiveTemporalHint | null;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,9 @@ import type {
|
||||
AnswerGroundingCheck,
|
||||
AssistantRequirement,
|
||||
RequirementCoverageReport,
|
||||
RbpLiveRouteAuditDebug,
|
||||
FaLiveRouteAuditDebug,
|
||||
GroundedAnswerEligibilityGuardDebug,
|
||||
UnifiedRetrievalResult
|
||||
} from "../types/assistant";
|
||||
import type { NormalizeResponsePayload, RouteHintSummary } from "../types/normalizer";
|
||||
@@ -16,8 +19,8 @@ import {
|
||||
export interface AssistantDeepTurnGroundingRuntimeInput {
|
||||
claimType: string;
|
||||
retrievalResults: UnifiedRetrievalResult[];
|
||||
rbpPlanAudit: unknown;
|
||||
faPlanAudit: unknown;
|
||||
rbpPlanAudit: RbpLiveRouteAuditDebug["plan_override"];
|
||||
faPlanAudit: FaLiveRouteAuditDebug["plan_override"];
|
||||
routeSummary: RouteHintSummary | null;
|
||||
normalizedPayload: NormalizeResponsePayload["normalized"] | null | undefined;
|
||||
userMessage: string;
|
||||
@@ -46,13 +49,13 @@ export interface AssistantDeepTurnGroundingRuntimeInput {
|
||||
collectRbpLiveRouteAudit: (input: {
|
||||
claimType: string;
|
||||
retrievalResults: UnifiedRetrievalResult[];
|
||||
planAudit: unknown;
|
||||
}) => unknown;
|
||||
planAudit: RbpLiveRouteAuditDebug["plan_override"];
|
||||
}) => RbpLiveRouteAuditDebug | null;
|
||||
collectFaLiveRouteAudit: (input: {
|
||||
claimType: string;
|
||||
retrievalResults: UnifiedRetrievalResult[];
|
||||
planAudit: unknown;
|
||||
}) => unknown;
|
||||
planAudit: FaLiveRouteAuditDebug["plan_override"];
|
||||
}) => FaLiveRouteAuditDebug | null;
|
||||
runCoverageGroundingPipelineFn?: typeof runAssistantCoverageGroundingPipeline;
|
||||
applyGroundingEligibilityFn?: (
|
||||
input: AssistantDeepTurnGroundingEligibilityInput<AnswerGroundingCheck>
|
||||
@@ -60,11 +63,11 @@ export interface AssistantDeepTurnGroundingRuntimeInput {
|
||||
}
|
||||
|
||||
export interface AssistantDeepTurnGroundingRuntimeOutput {
|
||||
rbpLiveRouteAudit: unknown;
|
||||
faLiveRouteAudit: unknown;
|
||||
rbpLiveRouteAudit: RbpLiveRouteAuditDebug | null;
|
||||
faLiveRouteAudit: FaLiveRouteAuditDebug | null;
|
||||
coverageEvaluation: AssistantCoverageEvaluationResult;
|
||||
groundingCheckBase: AnswerGroundingCheck;
|
||||
groundedAnswerEligibilityGuard: unknown;
|
||||
groundedAnswerEligibilityGuard: GroundedAnswerEligibilityGuardDebug;
|
||||
groundingCheck: AnswerGroundingCheck;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ export interface AssistantRequirementExtractionLike {
|
||||
|
||||
export interface AssistantPlanEnforcementAuditLike {
|
||||
executionPlan: AssistantExecutionPlanItem[];
|
||||
audit: unknown;
|
||||
audit: Record<string, unknown> | null;
|
||||
}
|
||||
|
||||
export interface BuildAssistantDeepTurnExecutionPlanInput {
|
||||
|
||||
@@ -44,6 +44,27 @@ function toObject(value: unknown): Record<string, unknown> | null {
|
||||
return value as Record<string, unknown>;
|
||||
}
|
||||
|
||||
function normalizeRawRetrievalResult(raw: unknown): RawRetrievalResult {
|
||||
const source = toObject(raw);
|
||||
if (!source) {
|
||||
return {};
|
||||
}
|
||||
return {
|
||||
status: source.status as string | undefined,
|
||||
result_type: source.result_type as string | undefined,
|
||||
items: source.items,
|
||||
summary: source.summary,
|
||||
evidence: source.evidence,
|
||||
why_included: source.why_included,
|
||||
selection_reason: source.selection_reason,
|
||||
risk_factors: source.risk_factors,
|
||||
business_interpretation: source.business_interpretation,
|
||||
confidence: source.confidence,
|
||||
limitations: source.limitations,
|
||||
errors: source.errors
|
||||
};
|
||||
}
|
||||
|
||||
function toStringOrNull(value: unknown): string | null {
|
||||
if (typeof value !== "string") return null;
|
||||
const trimmed = value.trim();
|
||||
@@ -101,6 +122,20 @@ function normalizeStringArray(value: unknown): string[] {
|
||||
return value.map((item) => String(item));
|
||||
}
|
||||
|
||||
function normalizeNumberRecord(value: unknown): Record<string, number> {
|
||||
const source = toObject(value);
|
||||
if (!source) {
|
||||
return {};
|
||||
}
|
||||
const result: Record<string, number> = {};
|
||||
for (const [key, entry] of Object.entries(source)) {
|
||||
if (typeof entry === "number" && Number.isFinite(entry)) {
|
||||
result[key] = entry;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function mergeSummaryWithProblemUnitMeta(
|
||||
summary: Record<string, unknown>,
|
||||
input: {
|
||||
@@ -511,7 +546,7 @@ export function normalizeRetrievalResult(
|
||||
route: string,
|
||||
raw: unknown
|
||||
): UnifiedRetrievalResult {
|
||||
const rawResult = (toObject(raw) as RawRetrievalResult | null) ?? {};
|
||||
const rawResult = normalizeRawRetrievalResult(raw);
|
||||
const items = normalizeObjectArray(rawResult.items);
|
||||
const summary = normalizeSummary(rawResult.summary);
|
||||
const evidence = normalizeEvidenceItems(fragmentId, requirementIds, route, rawResult.evidence);
|
||||
@@ -584,8 +619,8 @@ export function normalizeRetrievalResult(
|
||||
severityDistribution: graphBoundSummary.severity_distribution,
|
||||
confidenceDistribution: graphBoundSummary.confidence_distribution,
|
||||
lifecycleEnrichedUnits: graphBoundSummary.lifecycle_enriched_units ?? 0,
|
||||
lifecycleDomainDistribution: (graphBoundSummary.lifecycle_domain_distribution ?? {}) as Record<string, number>,
|
||||
lifecycleDefectDistribution: (graphBoundSummary.lifecycle_defect_distribution ?? {}) as Record<string, number>
|
||||
lifecycleDomainDistribution: normalizeNumberRecord(graphBoundSummary.lifecycle_domain_distribution),
|
||||
lifecycleDefectDistribution: normalizeNumberRecord(graphBoundSummary.lifecycle_defect_distribution)
|
||||
});
|
||||
|
||||
if (graphBuild) {
|
||||
|
||||
Reference in New Issue
Block a user