Planner Autonomy: добавить статус catalog-alignment
This commit is contained in:
@@ -56,6 +56,7 @@ function buildAssistantMcpDiscoveryDebugAttachmentFields(input) {
|
||||
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),
|
||||
|
||||
@@ -41,20 +41,22 @@ function pushAllUnique(target, values) {
|
||||
}
|
||||
}
|
||||
function pushCatalogChainTemplateAlignmentReasons(target, alignment) {
|
||||
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");
|
||||
}
|
||||
}
|
||||
@@ -380,7 +382,17 @@ function catalogChainTemplateMatchesForContract(input, recipe) {
|
||||
function catalogChainTemplateAlignmentForContract(recipe, matches) {
|
||||
const selectedChainIsCatalogTemplate = recipe.chainId !== "metadata_lane_clarification";
|
||||
const selectedIndex = matches.indexOf(recipe.chainId);
|
||||
const alignmentStatus = !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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -18,6 +18,7 @@ function entryPointContract(overrides: Record<string, unknown> = {}) {
|
||||
selected_chain_id: "value_flow_ranking",
|
||||
catalog_chain_template_matches: ["value_flow_ranking", "value_flow"],
|
||||
catalog_chain_template_alignment: {
|
||||
alignment_status: "selected_matches_top",
|
||||
top_chain_template_match: "value_flow_ranking",
|
||||
selected_chain_template_rank: 1,
|
||||
selected_chain_is_catalog_template: true,
|
||||
@@ -50,6 +51,7 @@ describe("assistant MCP discovery debug attachment", () => {
|
||||
expect(debug.mcp_discovery_bridge_status).toBe("answer_draft_ready");
|
||||
expect(debug.mcp_discovery_selected_chain_id).toBe("value_flow_ranking");
|
||||
expect(debug.mcp_discovery_catalog_chain_template_matches).toEqual(["value_flow_ranking", "value_flow"]);
|
||||
expect(debug.mcp_discovery_catalog_chain_alignment_status).toBe("selected_matches_top");
|
||||
expect(debug.mcp_discovery_catalog_chain_top_match).toBe("value_flow_ranking");
|
||||
expect(debug.mcp_discovery_catalog_chain_selected_matches_top).toBe(true);
|
||||
expect(debug.mcp_discovery_answer_mode).toBe("confirmed_with_bounded_inference");
|
||||
@@ -71,6 +73,7 @@ describe("assistant MCP discovery debug attachment", () => {
|
||||
expect(debug.mcp_discovery_bridge_status).toBeNull();
|
||||
expect(debug.mcp_discovery_selected_chain_id).toBeNull();
|
||||
expect(debug.mcp_discovery_catalog_chain_template_matches).toEqual([]);
|
||||
expect(debug.mcp_discovery_catalog_chain_alignment_status).toBeNull();
|
||||
expect(debug.mcp_discovery_catalog_chain_top_match).toBeNull();
|
||||
expect(debug.mcp_discovery_catalog_chain_selected_matches_top).toBe(false);
|
||||
expect(debug.mcp_discovery_answer_mode).toBeNull();
|
||||
|
||||
@@ -49,6 +49,7 @@ describe("assistant MCP discovery planner", () => {
|
||||
expect(result.data_need_graph?.business_fact_family).toBe("value_flow");
|
||||
expect(result.catalog_chain_template_matches[0]).toBe("value_flow");
|
||||
expect(result.catalog_chain_template_alignment).toMatchObject({
|
||||
alignment_status: "selected_matches_top",
|
||||
top_chain_template_match: "value_flow",
|
||||
selected_chain_template_rank: 1,
|
||||
selected_chain_is_catalog_template: true,
|
||||
@@ -200,6 +201,7 @@ describe("assistant MCP discovery planner", () => {
|
||||
for (const item of cases) {
|
||||
const result = planAssistantMcpDiscovery(item.input);
|
||||
expect(result.selected_chain_id, item.name).toBe(item.expected);
|
||||
expect(result.catalog_chain_template_alignment.alignment_status, item.name).toBe("selected_matches_top");
|
||||
expect(result.catalog_chain_template_alignment.top_chain_template_match, item.name).toBe(item.expected);
|
||||
expect(result.catalog_chain_template_alignment.selected_chain_template_rank, item.name).toBe(1);
|
||||
expect(result.catalog_chain_template_alignment.selected_chain_matches_top, item.name).toBe(true);
|
||||
@@ -1098,6 +1100,7 @@ describe("assistant MCP discovery planner", () => {
|
||||
expect(result.discovery_plan.plan_status).toBe("needs_clarification");
|
||||
expect(result.catalog_chain_template_matches).toEqual([]);
|
||||
expect(result.catalog_chain_template_alignment).toMatchObject({
|
||||
alignment_status: "selected_unscored",
|
||||
top_chain_template_match: null,
|
||||
selected_chain_template_rank: null,
|
||||
selected_chain_in_catalog_matches: false,
|
||||
|
||||
@@ -148,6 +148,7 @@ describe("assistant MCP discovery runtime bridge", () => {
|
||||
expect(result.loop_state.pending_axes).toContain("organization");
|
||||
expect(result.loop_state.provided_axes).toContain("aggregate_axis");
|
||||
expect(result.loop_state.catalog_chain_template_matches[0]).toBe("value_flow_ranking");
|
||||
expect(result.loop_state.catalog_chain_template_alignment.alignment_status).toBe("selected_matches_top");
|
||||
expect(result.loop_state.catalog_chain_template_alignment.selected_chain_matches_top).toBe(true);
|
||||
expect(result.reason_codes).toContain("planner_selected_chain_matches_catalog_top");
|
||||
expect(result.reason_codes).toContain("runtime_bridge_loop_state_awaiting_clarification");
|
||||
|
||||
Reference in New Issue
Block a user