@ai2070/l0
Version:
L0: The Missing Reliability Substrate for AI
91 lines • 2.53 kB
TypeScript
export interface ErrorTypeDelays {
connectionDropped?: number;
fetchError?: number;
econnreset?: number;
econnrefused?: number;
sseAborted?: number;
noBytes?: number;
partialChunks?: number;
runtimeKilled?: number;
backgroundThrottle?: number;
dnsError?: number;
timeout?: number;
unknown?: number;
}
export interface RetryConfig {
attempts: number;
maxRetries?: number;
baseDelay: number;
maxDelay?: number;
backoff: BackoffStrategy;
retryOn: RetryReason[];
errorTypeDelays?: ErrorTypeDelays;
maxErrorHistory?: number;
}
export type RetryReason = "zero_output" | "guardrail_violation" | "drift" | "unknown" | "incomplete" | "network_error" | "timeout" | "rate_limit" | "server_error";
export type BackoffStrategy = "exponential" | "linear" | "fixed" | "full-jitter" | "fixed-jitter";
export declare const RETRY_DEFAULTS: {
readonly attempts: 3;
readonly maxRetries: 6;
readonly baseDelay: 1000;
readonly maxDelay: 10000;
readonly networkMaxDelay: 30000;
readonly backoff: "fixed-jitter";
readonly retryOn: RetryReason[];
};
export declare const ERROR_TYPE_DELAY_DEFAULTS: Required<ErrorTypeDelays>;
export declare enum ErrorCategory {
NETWORK = "network",
TRANSIENT = "transient",
MODEL = "model",
CONTENT = "content",
PROVIDER = "provider",
FATAL = "fatal",
INTERNAL = "internal"
}
export interface RetryState {
attempt: number;
networkRetryCount: number;
transientRetries: number;
lastError?: CategorizedError;
errorHistory: CategorizedError[];
totalDelay: number;
limitReached: boolean;
}
export interface CategorizedError {
error: Error;
category: ErrorCategory;
reason: RetryReason;
countsTowardLimit: boolean;
retryable: boolean;
timestamp: number;
statusCode?: number;
}
export interface BackoffResult {
delay: number;
cappedAtMax: boolean;
rawDelay: number;
}
export interface RetryDecision {
shouldRetry: boolean;
delay: number;
reason: string;
category: ErrorCategory;
countsTowardLimit: boolean;
}
export interface ErrorClassification {
isNetwork: boolean;
isRateLimit: boolean;
isServerError: boolean;
isTimeout: boolean;
isAuthError: boolean;
isClientError: boolean;
statusCode?: number;
}
export interface RetryContext {
state: RetryState;
config: RetryConfig;
error: CategorizedError;
backoff: BackoffResult;
}
//# sourceMappingURL=retry.d.ts.map