Planner Autonomy: закрепить metadata lane scoring

This commit is contained in:
2026-05-01 12:05:47 +03:00
parent b333d67665
commit f76ea72b8d
10 changed files with 1124 additions and 30 deletions
@@ -243,13 +243,13 @@ function mergeCatalogPrimitivesWithFallback(
function preferredPrimitiveFromMetadataSurface(
surface: AssistantMcpDiscoveryMetadataSurfaceRef | null | undefined
): AssistantMcpDiscoveryPrimitive | null {
if (surface?.ambiguity_detected) {
return null;
}
const recommendedPrimitive = surface?.recommended_next_primitive ?? null;
if (recommendedPrimitive) {
return recommendedPrimitive;
}
if (surface?.ambiguity_detected) {
return null;
}
if (surface?.downstream_route_family === "document_evidence") {
return "query_documents";
}
@@ -262,16 +262,44 @@ function preferredPrimitiveFromMetadataSurface(
return null;
}
function preferredPrimitiveFromExplicitDataNeedGraph(
graph: AssistantMcpDiscoveryDataNeedGraphContract | null | undefined
): AssistantMcpDiscoveryPrimitive | null {
const factFamily = lower(graph?.business_fact_family);
const actionFamily = lower(graph?.action_family);
if (factFamily === "document_evidence" || actionFamily === "list_documents") {
return "query_documents";
}
if (factFamily === "movement_evidence" || actionFamily === "list_movements") {
return "query_movements";
}
return null;
}
function hasCarriedMetadataSurfaceScoringEvidence(
surface: AssistantMcpDiscoveryMetadataSurfaceRef | null | undefined
): boolean {
return Boolean(
surface &&
(toNonEmptyString(surface.selected_entity_set) ||
surface.selected_surface_objects.length > 0 ||
surface.ambiguity_entity_sets.length > 0)
);
}
function filterCatalogPrimitivesByMetadataSurface(input: {
catalogPrimitives: AssistantMcpDiscoveryPrimitive[];
fallbackPrimitives: AssistantMcpDiscoveryPrimitive[];
dataNeedGraph?: AssistantMcpDiscoveryDataNeedGraphContract | null;
metadataSurface?: AssistantMcpDiscoveryMetadataSurfaceRef | null;
}): { primitives: AssistantMcpDiscoveryPrimitive[]; reasonCodes: string[] } {
const preferredPrimitive = preferredPrimitiveFromMetadataSurface(input.metadataSurface);
const surfacePreferredPrimitive = preferredPrimitiveFromMetadataSurface(input.metadataSurface);
const dataNeedPreferredPrimitive = preferredPrimitiveFromExplicitDataNeedGraph(input.dataNeedGraph);
const preferredPrimitive = surfacePreferredPrimitive ?? dataNeedPreferredPrimitive;
const hasSurfaceScoringEvidence = hasCarriedMetadataSurfaceScoringEvidence(input.metadataSurface);
const reasonCodes: string[] = [];
if (
!preferredPrimitive ||
input.metadataSurface?.ambiguity_detected ||
!input.fallbackPrimitives.includes(preferredPrimitive)
) {
return {
@@ -289,13 +317,21 @@ function filterCatalogPrimitivesByMetadataSurface(input: {
(primitive) => !laneSensitivePrimitives.has(primitive) || primitive === preferredPrimitive
);
if (filteredPrimitives.length !== input.catalogPrimitives.length) {
reasonCodes.push("planner_filtered_catalog_primitives_by_confirmed_metadata_surface");
reasonCodes.push(
surfacePreferredPrimitive
? "planner_filtered_catalog_primitives_by_confirmed_metadata_surface"
: "planner_filtered_catalog_primitives_by_explicit_data_need_lane"
);
}
if (
(filteredPrimitives.includes(preferredPrimitive) || input.fallbackPrimitives.includes(preferredPrimitive)) &&
input.metadataSurface?.selected_surface_objects.length
hasSurfaceScoringEvidence
) {
reasonCodes.push("planner_surface_aware_next_lane_from_confirmed_metadata_objects");
reasonCodes.push(
surfacePreferredPrimitive
? "planner_surface_aware_next_lane_from_confirmed_metadata_objects"
: "planner_metadata_surface_scored_with_explicit_lane_family"
);
}
return {
primitives: filteredPrimitives,
@@ -374,6 +410,7 @@ function selectPrimitivesFromGraphAndCatalog(input: {
const filteredCatalogPrimitives = filterCatalogPrimitivesByMetadataSurface({
catalogPrimitives: combinedCatalogPrimitives,
fallbackPrimitives: input.fallbackPrimitives,
dataNeedGraph: input.dataNeedGraph,
metadataSurface: input.metadataSurface
});
reasonCodes.push(...filteredCatalogPrimitives.reasonCodes);