30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
import type { RectificationDecision } from "../core/rectification-decision.ts";
|
|
|
|
export type RectificationLabel =
|
|
| "blocked"
|
|
| "user_history_verification_required"
|
|
| "manual_pattern_consensus"
|
|
| "single_adapter_support"
|
|
| "multi_adapter_consensus";
|
|
|
|
export function rectificationLabel(input: {
|
|
decision: Pick<RectificationDecision, "separation" | "nextAction" | "stopReason">;
|
|
supportedAdapterCount?: number;
|
|
}): RectificationLabel {
|
|
if (input.decision.stopReason === "insufficient_dated_events"
|
|
|| input.decision.stopReason === "insufficient_domains") {
|
|
return "user_history_verification_required";
|
|
}
|
|
if (input.decision.stopReason === "tied_first"
|
|
|| input.decision.stopReason === "user_uncertainty_too_high") {
|
|
return "blocked";
|
|
}
|
|
if (input.decision.nextAction === "ask_fact_collection" && input.decision.separation.ranked.length === 0) {
|
|
return "blocked";
|
|
}
|
|
const adapterCount = Math.max(0, Math.floor(input.supportedAdapterCount ?? 0));
|
|
if (adapterCount >= 2) return "multi_adapter_consensus";
|
|
if (adapterCount === 1) return "single_adapter_support";
|
|
return "manual_pattern_consensus";
|
|
}
|