import { type PublishedRoutingActivation, type RequestDecomposition, type RequestRoutingRequirements, type RoutingCandidateDecision, type RoutingObjectivePolicy } from "@velum-labs/routekit-eval-contracts";
import { type RoutingModelAvailability, type RoutingScoreConstraints } from "@velum-labs/routekit-eval-core";
import { Effect } from "effect";
export type CompositionalRoutingInput = Readonly<{
snapshot: PublishedRoutingActivation;
decomposition: RequestDecomposition;
requirements: RequestRoutingRequirements;
objective: RoutingObjectivePolicy;
availableModels: readonly RoutingModelAvailability[];
maximumUnknownWeight: number;
constraints?: RoutingScoreConstraints;
}>;
export type CompositionalRoutingErrorCode = "invalid_input" | "unknown_weight_above_maximum" | "no_eligible_models";
declare const CompositionalRoutingError_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: "CompositionalRoutingError";
} & Readonly;
/**
* Sanitized deterministic-routing failure. Candidate outputs, request text,
* provider errors, and other request content are deliberately not retained.
*/
export declare class CompositionalRoutingError extends CompositionalRoutingError_base<{
readonly code: CompositionalRoutingErrorCode;
readonly message: string;
readonly candidates: readonly RoutingCandidateDecision[];
}> {
}
/**
* Compose a classifier-produced dimension vector with the published model-by-dimension
* evidence matrix. Model selection is delegated exclusively to the pure,
* deterministic eval-core scorer.
*/
export declare const routeCompositionalRequest: (input: Readonly<{
snapshot: PublishedRoutingActivation;
decomposition: RequestDecomposition;
requirements: RequestRoutingRequirements;
objective: RoutingObjectivePolicy;
availableModels: readonly Readonly<{
model: string;
served: boolean;
endpoints: readonly import("@velum-labs/routekit-eval-contracts").RoutingEndpoint[];
supportsTools: boolean;
supportsVision: boolean;
maxInputTokens?: number;
maxOutputTokens?: number;
}>[];
maximumUnknownWeight: number;
constraints?: Readonly<{
minimumDimensionQuality?: Readonly>;
maximumFailureRate?: number;
}>;
}>) => Effect.Effect<{
readonly version: 2;
readonly decomposition: {
readonly version: 2;
readonly basisDigest: string;
readonly weights: readonly {
readonly dimensionId: string;
readonly weight: number;
}[];
readonly unknownWeight: number;
};
readonly requirements: {
readonly endpoint: "anthropic" | "responses" | "chat";
readonly requiresTools: boolean;
readonly requiresVision: boolean;
readonly inputTokens?: number | undefined;
readonly maxOutputTokens?: number | undefined;
};
readonly objective: {
readonly kind: "highest-quality";
} | {
readonly kind: "lowest-cost";
readonly minimumQuality: number;
} | {
readonly kind: "lowest-latency";
readonly minimumQuality: number;
} | {
readonly kind: "balanced";
readonly minimumQuality: number;
readonly weights: {
readonly quality: number;
readonly cost: number;
readonly latency: number;
};
} | {
readonly kind: "pareto";
readonly minimumQuality: number;
readonly preference: "quality" | "cost" | "latency";
};
readonly evidenceDigest: string;
readonly candidates: readonly {
readonly model: string;
readonly eligible: boolean;
readonly exclusionReasons: readonly string[];
readonly costStatus: "unavailable" | "known";
readonly quality?: number | undefined;
readonly utility?: number | undefined;
readonly rank?: number | undefined;
readonly failureRate?: number | undefined;
readonly p95DurationMs?: number | undefined;
readonly averageCostUsd?: number | undefined;
}[];
readonly selectedModel: string;
readonly fallbackModels: readonly string[];
}, CompositionalRoutingError, never>;
export {};