import type { DecompositionInput, DecompositionResult, RoutingBasis } from "@velum-labs/routekit-eval-contracts";
import { CLASSIFIER_BASIS_TEXT_LIMIT } from "@velum-labs/routekit-eval-contracts";
import { Effect } from "effect";
export declare const CLASSIFIABLE_REQUEST_TEXT_LIMIT = 4000;
export { CLASSIFIER_BASIS_TEXT_LIMIT };
declare const ClassificationError_base: new = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
readonly _tag: "ClassificationError";
} & Readonly;
export declare class ClassificationError extends ClassificationError_base<{
readonly message: string;
readonly cause?: unknown;
}> {
}
export type DimensionDecompositionOperation = (input: DecompositionInput) => Effect.Effect;
export type ObservedDecompositionResult = DecompositionResult & {
readonly classifierCallId?: string;
};
export declare function classifyRequestDimensions(classifier: Readonly<{
decompose: DimensionDecompositionOperation;
}>, input: DecompositionInput): Effect.Effect;
export declare function validateDecompositionInput(input: unknown): Effect.Effect;
export declare function validateDecompositionResult(result: unknown, basis: RoutingBasis): Effect.Effect;
export declare function extractClassifiableRequestText(body: unknown): string;
export declare function parseDecompositionResult(text: string): unknown;
export declare function makeFakeDimensionDecomposition(result: DecompositionResult | ((request: string) => DecompositionResult)): DimensionDecompositionOperation;
export type LanguageModelDimensionClassifierOptions = Readonly<{
model: string;
complete: (body: unknown, signal?: AbortSignal) => Effect.Effect;
}>;
export declare function makeLanguageModelDimensionClassifier(options: LanguageModelDimensionClassifierOptions): DimensionDecompositionOperation;