export type RoutingPath = 'fast' | 'llm'; export interface RoutingPolicyConfig { enabled: boolean; fastPathThreshold: number; llmThreshold: number; defaultPath: RoutingPath; } export interface RoutingDecisionInput { confidence: number | null; } export interface RoutingDecision { path: RoutingPath; reason: 'disabled' | 'no_match' | 'high_confidence' | 'low_confidence' | 'mid_confidence'; } export class RoutingPolicy { private readonly config: RoutingPolicyConfig; constructor(config: RoutingPolicyConfig) { this.config = config; } isEnabled(): boolean { return this.config.enabled; } decide(input: RoutingDecisionInput): RoutingDecision { if (!this.config.enabled) { return { path: this.config.defaultPath, reason: 'disabled', }; } if (input.confidence === null) { return { path: this.config.defaultPath, reason: 'no_match', }; } if (input.confidence >= this.config.fastPathThreshold) { return { path: 'fast', reason: 'high_confidence', }; } if (input.confidence <= this.config.llmThreshold) { return { path: 'llm', reason: 'low_confidence', }; } return { path: this.config.defaultPath, reason: 'mid_confidence', }; } }