/**
 * Routing benchmark — synthetic, dependency-free, ships in the
 * package. 16 cross-category items in `dataset.ts`. See
 * `routing/README.md` for the format.
 *
 * `evaluate` does case-insensitive exact match against the canonical
 * route plus declared synonyms. The first valid route token in the
 * response wins; everything else is ignored. Wrong answers also
 * report whether they hit a hard negative — useful when triaging
 * "always picks the popular route" failure modes.
 */
import type { RunSplitTag } from '../../run-record';
import type { BenchmarkAdapter, BenchmarkDatasetItem, BenchmarkEvaluation } from '../types';
import { ROUTING_DATASET, type RoutingItem } from './dataset';
export type { RoutingItem };
export type RoutingPayload = RoutingItem;
export type RoutingDatasetItem = BenchmarkDatasetItem<RoutingPayload>;
declare class RoutingAdapter implements BenchmarkAdapter<RoutingDatasetItem, RoutingPayload> {
    loadDataset(split: RunSplitTag): Promise<RoutingDatasetItem[]>;
    evaluate(item: RoutingDatasetItem, response: string): Promise<BenchmarkEvaluation>;
    assignSplit(itemId: string): RunSplitTag;
}
/**
 * Pull route-shaped tokens out of a model response. Routes look like
 * `category.action` (`fs.write`, `chat.reply`). Bare alphanumerics
 * are not routes, but `category.action` patterns are robust to most
 * model wrappers (JSON output, prose explanations, code fences).
 */
export declare function extractRouteTokens(response: string): string[];
export declare const loadDataset: (split: RunSplitTag) => Promise<RoutingDatasetItem[]>;
export declare const evaluate: (item: RoutingDatasetItem, response: string) => Promise<BenchmarkEvaluation>;
export declare const assignSplit: (itemId: string) => RunSplitTag;
export { ROUTING_DATASET, RoutingAdapter };
//# sourceMappingURL=index.d.ts.map