57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import {ToolRankerFallbackPolicy} from "../common/policies.js";
|
|
import {decidePipelineFallback, type PipelineFallbackDecision} from "./user-request-pipeline/fallback-executor.js";
|
|
|
|
export type ToolRankerFallbackSelection = {
|
|
toolNames: string[];
|
|
usedRanker: boolean;
|
|
};
|
|
|
|
export type ToolRankerFallbackDecision = PipelineFallbackDecision & ToolRankerFallbackSelection;
|
|
|
|
function fallbackActionForPolicy(policy: ToolRankerFallbackPolicy) {
|
|
return policy === ToolRankerFallbackPolicy.MAIN_MODEL
|
|
? "use_alternate_target"
|
|
: "continue_without_stage";
|
|
}
|
|
|
|
export function decideToolRankerFallback(params: {
|
|
fallbackPolicy: ToolRankerFallbackPolicy;
|
|
availableToolNames: readonly string[];
|
|
reason: "unavailable" | "failed";
|
|
}): ToolRankerFallbackDecision {
|
|
const action = fallbackActionForPolicy(params.fallbackPolicy);
|
|
const decision = decidePipelineFallback({
|
|
stage: "tool_rank",
|
|
reason: params.reason,
|
|
policies: [{
|
|
stage: "tool_rank",
|
|
onUnavailable: action,
|
|
onFailed: action,
|
|
}],
|
|
});
|
|
|
|
return {
|
|
...decision,
|
|
toolNames: params.fallbackPolicy === ToolRankerFallbackPolicy.NO_TOOLS
|
|
? []
|
|
: [...params.availableToolNames],
|
|
usedRanker: false,
|
|
};
|
|
}
|
|
|
|
export function resolveToolRankerFallbackSelection(params: {
|
|
fallbackPolicy: ToolRankerFallbackPolicy;
|
|
availableToolNames: readonly string[];
|
|
}): ToolRankerFallbackSelection {
|
|
const decision = decideToolRankerFallback({
|
|
fallbackPolicy: params.fallbackPolicy,
|
|
availableToolNames: params.availableToolNames,
|
|
reason: "failed",
|
|
});
|
|
|
|
return {
|
|
toolNames: decision.toolNames,
|
|
usedRanker: decision.usedRanker,
|
|
};
|
|
}
|