Planner Autonomy: добавить статус catalog-alignment

This commit is contained in:
2026-05-01 15:33:30 +03:00
parent 755e2521e8
commit 8b5104a2c6
9 changed files with 76 additions and 23 deletions
@@ -8,6 +8,7 @@ export interface AssistantMcpDiscoveryDebugAttachmentFields {
mcp_discovery_bridge_status: string | null;
mcp_discovery_selected_chain_id: string | null;
mcp_discovery_catalog_chain_template_matches: string[];
mcp_discovery_catalog_chain_alignment_status: string | null;
mcp_discovery_catalog_chain_top_match: string | null;
mcp_discovery_catalog_chain_selected_matches_top: boolean;
mcp_discovery_answer_mode: string | null;
@@ -86,6 +87,7 @@ export function buildAssistantMcpDiscoveryDebugAttachmentFields(
mcp_discovery_bridge_status: toNonEmptyString(bridge?.bridge_status),
mcp_discovery_selected_chain_id: toNonEmptyString(planner?.selected_chain_id),
mcp_discovery_catalog_chain_template_matches: toStringArray(planner?.catalog_chain_template_matches),
mcp_discovery_catalog_chain_alignment_status: toNonEmptyString(chainAlignment?.alignment_status),
mcp_discovery_catalog_chain_top_match: toNonEmptyString(chainAlignment?.top_chain_template_match),
mcp_discovery_catalog_chain_selected_matches_top: chainAlignment?.selected_chain_matches_top === true,
mcp_discovery_answer_mode: toNonEmptyString(answerDraft?.answer_mode),
@@ -39,6 +39,7 @@ export interface AssistantMcpDiscoveryMetadataSurfaceRef {
}
export interface AssistantMcpDiscoveryCatalogChainTemplateAlignment {
alignment_status: AssistantMcpDiscoveryCatalogChainTemplateAlignmentStatus;
top_chain_template_match: AssistantMcpCatalogChainTemplateId | null;
selected_chain_template_rank: number | null;
selected_chain_is_catalog_template: boolean;
@@ -46,6 +47,13 @@ export interface AssistantMcpDiscoveryCatalogChainTemplateAlignment {
selected_chain_matches_top: boolean;
}
export type AssistantMcpDiscoveryCatalogChainTemplateAlignmentStatus =
| "selected_matches_top"
| "selected_lower_rank"
| "selected_outside_match_set"
| "selected_unscored"
| "not_catalog_template";
export type AssistantMcpDiscoveryChainId =
| "metadata_inspection"
| "catalog_drilldown"
@@ -146,19 +154,22 @@ function pushCatalogChainTemplateAlignmentReasons(
target: string[],
alignment: AssistantMcpDiscoveryCatalogChainTemplateAlignment
): void {
if (alignment.top_chain_template_match) {
if (alignment.alignment_status === "selected_matches_top") {
pushReason(target, "planner_catalog_chain_template_alignment_evaluated");
if (alignment.selected_chain_matches_top) {
pushReason(target, "planner_selected_chain_matches_catalog_top");
} else if (alignment.selected_chain_in_catalog_matches) {
pushReason(target, "planner_selected_chain_uses_lower_rank_catalog_match");
} else {
pushReason(target, "planner_selected_chain_outside_catalog_match_set");
}
pushReason(target, "planner_selected_chain_matches_catalog_top");
return;
}
if (alignment.selected_chain_is_catalog_template) {
if (alignment.alignment_status === "selected_lower_rank") {
pushReason(target, "planner_catalog_chain_template_alignment_evaluated");
pushReason(target, "planner_selected_chain_uses_lower_rank_catalog_match");
return;
}
if (alignment.alignment_status === "selected_outside_match_set") {
pushReason(target, "planner_catalog_chain_template_alignment_evaluated");
pushReason(target, "planner_selected_chain_outside_catalog_match_set");
return;
}
if (alignment.alignment_status === "selected_unscored") {
pushReason(target, "planner_catalog_chain_template_alignment_unscored");
}
}
@@ -591,7 +602,17 @@ function catalogChainTemplateAlignmentForContract(
): AssistantMcpDiscoveryCatalogChainTemplateAlignment {
const selectedChainIsCatalogTemplate = recipe.chainId !== "metadata_lane_clarification";
const selectedIndex = matches.indexOf(recipe.chainId as AssistantMcpCatalogChainTemplateId);
const alignmentStatus: AssistantMcpDiscoveryCatalogChainTemplateAlignmentStatus = !selectedChainIsCatalogTemplate
? "not_catalog_template"
: matches.length <= 0
? "selected_unscored"
: selectedIndex === 0
? "selected_matches_top"
: selectedIndex > 0
? "selected_lower_rank"
: "selected_outside_match_set";
return {
alignment_status: alignmentStatus,
top_chain_template_match: matches[0] ?? null,
selected_chain_template_rank: selectedIndex >= 0 ? selectedIndex + 1 : null,
selected_chain_is_catalog_template: selectedChainIsCatalogTemplate,