Этап 4 / Волна 10: корректировка settlement-кейса — доменная фиксация синтеза, честное покрытие, удержание фокуса / Этап 4 / Волна 11: бизнес-якоря, доменное заземление и устранение утечки дебага
This commit is contained in:
@@ -4,7 +4,11 @@ import type {
|
||||
RetrievalResultType,
|
||||
UnifiedRetrievalResult
|
||||
} from "../types/assistant";
|
||||
import { FEATURE_ASSISTANT_EVIDENCE_ENRICHMENT_V1, FEATURE_ASSISTANT_PROBLEM_UNITS_V1 } from "../config";
|
||||
import {
|
||||
FEATURE_ASSISTANT_EVIDENCE_ENRICHMENT_V1,
|
||||
FEATURE_ASSISTANT_GRAPH_RUNTIME_V1,
|
||||
FEATURE_ASSISTANT_PROBLEM_UNITS_V1
|
||||
} from "../config";
|
||||
import { EVIDENCE_SOURCE_REF_SCHEMA_VERSION } from "../types/stage1Contracts";
|
||||
import type {
|
||||
EvidenceConfidence,
|
||||
@@ -15,6 +19,8 @@ import type {
|
||||
EvidenceSourceRef
|
||||
} from "../types/stage1Contracts";
|
||||
import { assembleProblemUnits } from "./problemUnitAssembler";
|
||||
import { buildAccountingGraph } from "./stage4GraphRuntime";
|
||||
import type { GraphSignalSummary } from "../types/stage4Graph";
|
||||
|
||||
interface RawRetrievalResult {
|
||||
status?: string;
|
||||
@@ -124,6 +130,22 @@ function mergeSummaryWithProblemUnitMeta(
|
||||
};
|
||||
}
|
||||
|
||||
function mergeSummaryWithGraphMeta(summary: Record<string, unknown>, graphSummary: GraphSignalSummary): Record<string, unknown> {
|
||||
return {
|
||||
...summary,
|
||||
graph_runtime_enabled: true,
|
||||
graph_total_units: graphSummary.total_units,
|
||||
graph_bound_units: graphSummary.bound_units,
|
||||
graph_nodes_count: graphSummary.node_count,
|
||||
graph_edges_count: graphSummary.edge_count,
|
||||
graph_missing_links_count: graphSummary.missing_links_count,
|
||||
graph_conflicting_links_count: graphSummary.conflicting_links_count,
|
||||
graph_coverage_grade: graphSummary.graph_coverage_grade,
|
||||
graph_domain_distribution: graphSummary.domain_distribution,
|
||||
graph_relation_distribution: graphSummary.relation_distribution
|
||||
};
|
||||
}
|
||||
|
||||
function normalizeConfidence(value: unknown): RetrievalConfidence {
|
||||
if (value === "high" || value === "medium" || value === "low") {
|
||||
return value;
|
||||
@@ -526,24 +548,60 @@ export function normalizeRetrievalResult(
|
||||
business_interpretation: baseResult.business_interpretation
|
||||
});
|
||||
|
||||
const enrichedSummary = mergeSummaryWithProblemUnitMeta(summary, {
|
||||
candidateEvidenceCount: assembled.candidate_evidence.length,
|
||||
problemUnitsCount: assembled.problem_units.length,
|
||||
unitTypes: assembled.problem_unit_summary.unit_types,
|
||||
duplicateCollapses: assembled.problem_unit_summary.duplicate_collapses,
|
||||
severityDistribution: assembled.problem_unit_summary.severity_distribution,
|
||||
confidenceDistribution: assembled.problem_unit_summary.confidence_distribution,
|
||||
lifecycleEnrichedUnits: assembled.problem_unit_summary.lifecycle_enriched_units ?? 0,
|
||||
lifecycleDomainDistribution: (assembled.problem_unit_summary.lifecycle_domain_distribution ?? {}) as Record<string, number>,
|
||||
lifecycleDefectDistribution: (assembled.problem_unit_summary.lifecycle_defect_distribution ?? {}) as Record<string, number>
|
||||
const graphBuild = FEATURE_ASSISTANT_GRAPH_RUNTIME_V1
|
||||
? buildAccountingGraph({
|
||||
route,
|
||||
candidateEvidence: assembled.candidate_evidence,
|
||||
problemUnits: assembled.problem_units
|
||||
})
|
||||
: null;
|
||||
|
||||
const graphBindingByUnitId = new Map(graphBuild?.unit_bindings.map((item) => [item.problem_unit_id, item] as const) ?? []);
|
||||
const graphBoundProblemUnits = assembled.problem_units.map((unit) => {
|
||||
const binding = graphBindingByUnitId.get(unit.problem_unit_id);
|
||||
if (!binding) {
|
||||
return unit;
|
||||
}
|
||||
return {
|
||||
...unit,
|
||||
graph_binding: binding
|
||||
};
|
||||
});
|
||||
|
||||
const graphBoundSummary = graphBuild
|
||||
? {
|
||||
...assembled.problem_unit_summary,
|
||||
graph_summary: graphBuild.summary
|
||||
}
|
||||
: assembled.problem_unit_summary;
|
||||
|
||||
let enrichedSummary = mergeSummaryWithProblemUnitMeta(summary, {
|
||||
candidateEvidenceCount: assembled.candidate_evidence.length,
|
||||
problemUnitsCount: graphBoundProblemUnits.length,
|
||||
unitTypes: graphBoundSummary.unit_types,
|
||||
duplicateCollapses: graphBoundSummary.duplicate_collapses,
|
||||
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>
|
||||
});
|
||||
|
||||
if (graphBuild) {
|
||||
enrichedSummary = mergeSummaryWithGraphMeta(enrichedSummary, graphBuild.summary);
|
||||
}
|
||||
|
||||
return {
|
||||
...baseResult,
|
||||
summary: enrichedSummary,
|
||||
raw_entities: items,
|
||||
candidate_evidence: assembled.candidate_evidence,
|
||||
problem_units: assembled.problem_units,
|
||||
problem_unit_summary: assembled.problem_unit_summary
|
||||
problem_units: graphBoundProblemUnits,
|
||||
problem_unit_summary: graphBoundSummary,
|
||||
...(graphBuild
|
||||
? {
|
||||
accounting_graph: graphBuild
|
||||
}
|
||||
: {})
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user