ARCH: сохранять metadata ambiguity через clarification follow-up

This commit is contained in:
2026-04-22 10:05:03 +03:00
parent 40cf71d118
commit 007369a78a
9 changed files with 179 additions and 39 deletions
@@ -142,6 +142,17 @@ function readAssistantMcpDiscoveryTurnMeaning(
return toRecordObject(turnInput?.turn_meaning_ref);
}
function readAssistantMcpDiscoveryTurnMeaningMetadataAmbiguityEntitySets(
debug: Record<string, unknown> | null,
toNonEmptyString: (value: unknown) => string | null = fallbackToNonEmptyString
): string[] {
const values = readAssistantMcpDiscoveryTurnMeaning(debug)?.metadata_ambiguity_entity_sets;
if (!Array.isArray(values)) {
return [];
}
return values.map((item) => toNonEmptyString(item)).filter((item): item is string => Boolean(item));
}
function readAssistantMcpDiscoveryActionFamily(
debug: Record<string, unknown> | null,
toNonEmptyString: (value: unknown) => string | null = fallbackToNonEmptyString
@@ -189,7 +200,10 @@ export function readAssistantMcpDiscoveryMetadataSelectedEntitySet(
export function readAssistantMcpDiscoveryMetadataAmbiguityDetected(
debug: Record<string, unknown> | null
): boolean {
return readAssistantMcpDiscoveryDerivedMetadataSurface(debug)?.ambiguity_detected === true;
return (
readAssistantMcpDiscoveryDerivedMetadataSurface(debug)?.ambiguity_detected === true ||
readAssistantMcpDiscoveryTurnMeaningMetadataAmbiguityEntitySets(debug).length > 0
);
}
export function readAssistantMcpDiscoveryMetadataAmbiguityEntitySets(
@@ -197,10 +211,10 @@ export function readAssistantMcpDiscoveryMetadataAmbiguityEntitySets(
toNonEmptyString: (value: unknown) => string | null = fallbackToNonEmptyString
): string[] {
const values = readAssistantMcpDiscoveryDerivedMetadataSurface(debug)?.ambiguity_entity_sets;
if (!Array.isArray(values)) {
return [];
if (Array.isArray(values)) {
return values.map((item) => toNonEmptyString(item)).filter((item): item is string => Boolean(item));
}
return values.map((item) => toNonEmptyString(item)).filter((item): item is string => Boolean(item));
return readAssistantMcpDiscoveryTurnMeaningMetadataAmbiguityEntitySets(debug, toNonEmptyString);
}
function mapAssistantMcpDiscoveryPilotScopeToAddressIntent(
@@ -1562,6 +1562,9 @@ function buildEmptyEvidence(
}
function pilotScopeForPlanner(planner: AssistantMcpDiscoveryPlannerContract): AssistantMcpDiscoveryPilotScope {
if (planner.reason_codes.includes("planner_selected_metadata_lane_clarification_recipe")) {
return "metadata_inspection_v1";
}
if (isMetadataPilotEligible(planner)) {
return "metadata_inspection_v1";
}
@@ -25,6 +25,7 @@ export interface AssistantMcpDiscoveryTurnMeaningRef {
asked_action_family?: string | null;
asked_aggregation_axis?: string | null;
explicit_entity_candidates?: string[];
metadata_ambiguity_entity_sets?: string[];
explicit_organization_scope?: string | null;
explicit_date_scope?: string | null;
meaning_confidence?: number | null;
@@ -170,6 +171,7 @@ function normalizeTurnMeaning(
const dateScope = toNonEmptyString(value.explicit_date_scope);
const unsupported = toNonEmptyString(value.unsupported_but_understood_family);
const entities = toStringList(value.explicit_entity_candidates);
const metadataAmbiguityEntitySets = toStringList(value.metadata_ambiguity_entity_sets);
if (domain) {
result.asked_domain_family = domain;
}
@@ -182,6 +184,9 @@ function normalizeTurnMeaning(
if (entities.length > 0) {
result.explicit_entity_candidates = entities;
}
if (metadataAmbiguityEntitySets.length > 0) {
result.metadata_ambiguity_entity_sets = metadataAmbiguityEntitySets;
}
if (organization) {
result.explicit_organization_scope = organization;
}
@@ -725,6 +725,10 @@ export function buildAssistantMcpDiscoveryTurnInput(
: rawAction ?? seededAction,
asked_aggregation_axis: monthlyAggregationSignal ? "month" : rawAggregationAxis,
explicit_entity_candidates: entityCandidates,
metadata_ambiguity_entity_sets:
metadataAmbiguityLaneClarificationApplicable && followupSeed.metadataAmbiguityEntitySets.length > 0
? followupSeed.metadataAmbiguityEntitySets
: undefined,
explicit_organization_scope: explicitOrganizationScope,
explicit_date_scope: explicitDateScope,
unsupported_but_understood_family:
@@ -775,6 +779,9 @@ export function buildAssistantMcpDiscoveryTurnInput(
if ((turnMeaning.explicit_entity_candidates?.length ?? 0) > 0) {
cleanTurnMeaning.explicit_entity_candidates = turnMeaning.explicit_entity_candidates;
}
if ((turnMeaning.metadata_ambiguity_entity_sets?.length ?? 0) > 0) {
cleanTurnMeaning.metadata_ambiguity_entity_sets = turnMeaning.metadata_ambiguity_entity_sets;
}
if (toNonEmptyString(turnMeaning.explicit_organization_scope)) {
cleanTurnMeaning.explicit_organization_scope = turnMeaning.explicit_organization_scope;
}