File size: 2,198 Bytes
077865a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
export interface RoutingWeights {
    reliability: number;
    speed: number;
    intelligence: number;
}
export type RoutingStrategy = 'priority' | 'balanced' | 'smartest' | 'fastest' | 'reliable' | 'custom';
export declare const BANDIT_PRESETS: Record<Exclude<RoutingStrategy, 'priority' | 'custom'>, RoutingWeights>;
export declare const DEFAULT_STRATEGY: RoutingStrategy;
export declare const PRIOR_SUCCESS = 1;
export declare const PRIOR_FAILURE = 1;
export declare function reliabilityPosterior(successes: number, failures: number): {
    alpha: number;
    beta: number;
};
export declare function expectedReliability(successes: number, failures: number): number;
export declare const SPEED_SCALE_TOK_S = 60;
export declare const TTFB_BEST_MS = 300;
export declare const TTFB_WORST_MS = 5000;
export declare const SPEED_PRIOR = 0.6;
/**
 * Blend throughput and TTFB into a single [0,1] speed score.
 * `tokPerSec <= 0` means no successful samples → return the exploration prior.
 * `ttfbMs === null` means we have throughput but no first-byte timing → fall
 * back to throughput alone rather than guessing latency.
 */
export declare function speedScore(tokPerSec: number, ttfbMs: number | null): number;
export declare function intelligenceScore(composite: number, min: number, max: number): number;
export declare const HEADROOM_FLOOR = 0.1;
export declare const HEADROOM_RAMP_START = 0.2;
export declare function headroomFactor(usedTokens: number, budgetTokens: number): number;
export declare const MAX_PENALTY = 10;
export declare const RATE_LIMIT_MAX_DAMP = 0.6;
export declare function rateLimitFactor(penalty: number): number;
export declare function sampleBeta(alpha: number, beta: number): number;
export interface ScoreInputs {
    reliability: number;
    speed: number;
    intelligence: number;
    headroom: number;
    rateLimit: number;
}
/**
 * Convex base (∈[0,1]) × the two guardrail multipliers. The weights are assumed
 * to sum to 1; if a caller passes a non-normalized vector we renormalize so the
 * base never escapes [0,1].
 */
export declare function combineScore(inputs: ScoreInputs, weights: RoutingWeights): number;
//# sourceMappingURL=scoring.d.ts.map