import type { AIPlannerProvider, PlannerInput, PlannerOutput } from "@loomic/types"; import { RuntimeEventEmitter } from "./event-emitter.js"; /** * Task type classification — determines which provider should handle the request. */ export type TaskType = "plan" | "summarize" | "evaluate"; /** * Routing hints the run loop can attach to a planner request. * Consumers can extend this with app-specific metadata. */ export type RoutingHints = { /** Task type. Default: "plan" */ taskType?: TaskType; /** Whether the task involves private/sensitive data. Default: false */ isPrivate?: boolean; /** Whether the device is currently online. Default: true */ isOnline?: boolean; /** Latency budget in ms. If set, prefer faster providers. */ maxLatencyMs?: number; /** Whether to prefer on-device execution. Default: false */ preferLocal?: boolean; }; /** * A routing rule that the consumer can define. * Rules are evaluated in order — first match wins. */ export type RoutingRule = { name: string; /** Return the preferred provider target, or undefined to skip this rule. */ evaluate: (hints: RoutingHints) => "cloud" | "local" | "defer" | undefined; }; /** * ProviderRouterConfig — configure the router with available providers * and optional routing rules. */ export type ProviderRouterConfig = { /** Primary cloud provider (e.g., OpenAI). */ cloudProvider?: AIPlannerProvider | undefined; /** Optional on-device/local provider (e.g., Apple Foundation Models). */ localProvider?: AIPlannerProvider | undefined; /** Custom routing rules, evaluated in order. */ rules?: RoutingRule[] | undefined; /** Optional event emitter for routing telemetry. */ emitter?: RuntimeEventEmitter | undefined; }; /** * ProviderRouter — routes AI requests to the appropriate provider * based on task type, connectivity, privacy, and consumer-defined rules. * * Implements the AIPlannerProvider interface so it can be used as a * drop-in replacement for a single provider in the run loop. */ export declare class ProviderRouter implements AIPlannerProvider { readonly name = "router"; private readonly config; private readonly rules; constructor(config: ProviderRouterConfig); /** * Resolve which provider to use for the given hints. * Returns the provider and the routing decision. */ resolve(hints?: RoutingHints): { provider: AIPlannerProvider | undefined; decision: string; ruleName: string; }; plan(input: PlannerInput, hints?: RoutingHints): Promise; summarize(input: PlannerInput, hints?: RoutingHints): Promise; evaluate(input: PlannerInput, hints?: RoutingHints): Promise; private route; } //# sourceMappingURL=provider-router.d.ts.map