95 lines
3.5 KiB
JavaScript
95 lines
3.5 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.executeAssistantDeepTurnRetrievalPlan = executeAssistantDeepTurnRetrievalPlan;
|
|
const retrievalResultNormalizer_1 = require("./retrievalResultNormalizer");
|
|
function buildRouteExecutorErrorRawResult(route, message) {
|
|
return {
|
|
status: "error",
|
|
result_type: "summary",
|
|
items: [],
|
|
summary: {
|
|
route
|
|
},
|
|
evidence: [],
|
|
why_included: [],
|
|
selection_reason: [],
|
|
risk_factors: [],
|
|
business_interpretation: [],
|
|
confidence: "low",
|
|
limitations: ["Route executor failed."],
|
|
errors: [message]
|
|
};
|
|
}
|
|
function normalizeRawResult(value) {
|
|
if (value === null || value === undefined) {
|
|
return null;
|
|
}
|
|
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
return value;
|
|
}
|
|
if (Array.isArray(value)) {
|
|
return value;
|
|
}
|
|
if (typeof value === "object") {
|
|
return value;
|
|
}
|
|
return null;
|
|
}
|
|
async function executeAssistantDeepTurnRetrievalPlan(input) {
|
|
const normalizeRetrievalResultSafe = input.normalizeRetrievalResultFn ?? retrievalResultNormalizer_1.normalizeRetrievalResult;
|
|
const retrievalCalls = [];
|
|
const retrievalResultsRaw = [];
|
|
const retrievalResults = [];
|
|
for (const planItem of input.executionPlan) {
|
|
if (!planItem.should_execute) {
|
|
retrievalCalls.push({
|
|
fragment_id: planItem.fragment_id,
|
|
requirement_ids: planItem.requirement_ids,
|
|
route: planItem.route,
|
|
status: "skipped",
|
|
query_text: planItem.fragment_text,
|
|
reason: input.mapNoRouteReason(planItem.no_route_reason)
|
|
});
|
|
retrievalResults.push(input.buildSkippedResult(planItem));
|
|
continue;
|
|
}
|
|
retrievalCalls.push({
|
|
fragment_id: planItem.fragment_id,
|
|
requirement_ids: planItem.requirement_ids,
|
|
route: planItem.route,
|
|
status: "executed",
|
|
query_text: planItem.fragment_text,
|
|
reason: null
|
|
});
|
|
try {
|
|
const raw = await input.executeRouteRuntime(planItem.route, planItem.fragment_text, {
|
|
temporalHint: input.liveTemporalHint
|
|
});
|
|
const normalizedRaw = normalizeRawResult(raw);
|
|
retrievalResultsRaw.push({
|
|
fragment_id: planItem.fragment_id,
|
|
route: planItem.route,
|
|
raw_result: normalizedRaw
|
|
});
|
|
retrievalResults.push(normalizeRetrievalResultSafe(planItem.fragment_id, planItem.requirement_ids, planItem.route, normalizedRaw));
|
|
}
|
|
catch (error) {
|
|
const message = error instanceof Error ? error.message : String(error);
|
|
retrievalCalls[retrievalCalls.length - 1].status = "failed";
|
|
retrievalCalls[retrievalCalls.length - 1].reason = message;
|
|
const rawError = buildRouteExecutorErrorRawResult(planItem.route, message);
|
|
retrievalResultsRaw.push({
|
|
fragment_id: planItem.fragment_id,
|
|
route: planItem.route,
|
|
raw_result: rawError
|
|
});
|
|
retrievalResults.push(normalizeRetrievalResultSafe(planItem.fragment_id, planItem.requirement_ids, planItem.route, rawError));
|
|
}
|
|
}
|
|
return {
|
|
retrievalCalls,
|
|
retrievalResultsRaw,
|
|
retrievalResults
|
|
};
|
|
}
|