@ai2070/l0
Version:
L0: The Missing Reliability Substrate for AI
245 lines • 7.64 kB
TypeScript
import type { GuardrailRule, GuardrailViolation } from "./guardrails";
import type { BackoffStrategy, RetryReason } from "./retry";
import { ErrorCategory } from "./retry";
import type { L0Event as L0ObservabilityEvent } from "./observability";
export interface CheckpointValidationResult {
skipContinuation: boolean;
violations: GuardrailViolation[];
driftDetected: boolean;
driftTypes: string[];
}
export type L0ContentType = "text" | "image" | "audio" | "video" | "file" | "json" | "binary";
export interface L0DataPayload {
contentType: L0ContentType;
mimeType?: string;
base64?: string;
url?: string;
bytes?: Uint8Array;
json?: unknown;
metadata?: {
width?: number;
height?: number;
duration?: number;
size?: number;
filename?: string;
seed?: number;
model?: string;
[key: string]: unknown;
};
}
export interface L0Progress {
percent?: number;
step?: number;
totalSteps?: number;
message?: string;
eta?: number;
}
export interface L0Event {
type: "token" | "message" | "data" | "progress" | "error" | "complete";
value?: string;
role?: string;
data?: L0DataPayload;
progress?: L0Progress;
error?: Error;
reason?: ErrorCategory;
timestamp?: number;
usage?: {
input_tokens?: number;
output_tokens?: number;
cost?: number;
[key: string]: unknown;
};
}
export interface L0Options<TOutput = unknown> {
__outputType?: TOutput;
stream: () => Promise<any> | any;
context?: Record<string, unknown>;
fallbackStreams?: Array<() => Promise<any> | any>;
guardrails?: GuardrailRule[];
retry?: RetryOptions;
timeout?: {
initialToken?: number;
interToken?: number;
};
signal?: AbortSignal;
monitoring?: {
enabled?: boolean;
sampleRate?: number;
includeNetworkDetails?: boolean;
includeTimings?: boolean;
metadata?: Record<string, any>;
};
checkIntervals?: {
guardrails?: number;
drift?: number;
checkpoint?: number;
};
detectDrift?: boolean;
detectZeroTokens?: boolean;
continueFromLastKnownGoodToken?: boolean;
buildContinuationPrompt?: (checkpoint: string) => string;
deduplicateContinuation?: boolean;
deduplicationOptions?: {
minOverlap?: number;
maxOverlap?: number;
caseSensitive?: boolean;
normalizeWhitespace?: boolean;
};
onStart?: (attempt: number, isRetry: boolean, isFallback: boolean) => void;
onComplete?: (state: L0State) => void;
onError?: (error: Error, willRetry: boolean, willFallback: boolean) => void;
onEvent?: (event: L0Event | L0ObservabilityEvent) => void;
onViolation?: (violation: GuardrailViolation) => void;
onRetry?: (attempt: number, reason: string) => void;
onFallback?: (index: number, reason: string) => void;
onResume?: (checkpoint: string, tokenCount: number) => void;
onCheckpoint?: (checkpoint: string, tokenCount: number) => void;
onTimeout?: (type: "initial" | "inter", elapsedMs: number) => void;
onAbort?: (tokenCount: number, contentLength: number) => void;
onDrift?: (types: string[], confidence?: number) => void;
onToolCall?: (toolName: string, toolCallId: string, args: Record<string, unknown>) => void;
interceptors?: L0Interceptor[];
adapter?: L0Adapter | string;
adapterOptions?: unknown;
}
export interface L0Adapter<StreamType = unknown, Options = unknown> {
name: string;
detect?(input: unknown): input is StreamType;
wrap(stream: StreamType, options?: Options): AsyncGenerator<L0Event>;
}
export interface L0Interceptor {
name?: string;
before?: (options: L0Options) => L0Options | Promise<L0Options>;
after?: (result: L0Result) => L0Result | Promise<L0Result>;
onError?: (error: Error, options: L0Options) => void | Promise<void>;
}
export interface L0Result<TOutput = unknown> {
__outputType?: TOutput;
stream: AsyncIterable<L0Event>;
text?: string;
state: L0State;
errors: Error[];
telemetry?: L0Telemetry;
abort: () => void;
}
export interface L0State {
content: string;
checkpoint: string;
tokenCount: number;
modelRetryCount: number;
networkRetryCount: number;
fallbackIndex: number;
violations: GuardrailViolation[];
driftDetected: boolean;
completed: boolean;
firstTokenAt?: number;
lastTokenAt?: number;
duration?: number;
networkErrors: CategorizedNetworkError[];
resumed: boolean;
resumePoint?: string;
resumeFrom?: number;
dataOutputs: L0DataPayload[];
lastProgress?: L0Progress;
toolCallStartTimes?: Map<string, number>;
toolCallNames?: Map<string, string>;
}
export interface L0Telemetry {
sessionId: string;
startTime: number;
endTime?: number;
duration?: number;
metrics: {
timeToFirstToken?: number;
avgInterTokenTime?: number;
tokensPerSecond?: number;
totalTokens: number;
totalRetries: number;
networkRetryCount: number;
modelRetryCount: number;
};
network: {
errorCount: number;
errorsByType: Record<string, number>;
errors?: Array<{
type: string;
message: string;
timestamp: number;
retried: boolean;
delay?: number;
}>;
};
guardrails?: {
violationCount: number;
violationsByRule: Record<string, number>;
violationsByRuleAndSeverity: Record<string, {
warning: number;
error: number;
fatal: number;
}>;
violationsBySeverity: {
warning: number;
error: number;
fatal: number;
};
};
drift?: {
detected: boolean;
types: string[];
};
continuation?: {
enabled: boolean;
used: boolean;
checkpointContent?: string;
checkpointLength?: number;
continuationCount?: number;
};
metadata?: Record<string, any>;
}
export interface CategorizedNetworkError {
type: string;
message: string;
timestamp: number;
retried: boolean;
delay?: number;
attempt?: number;
}
export interface RetryOptions {
attempts?: number;
maxRetries?: number;
backoff?: BackoffStrategy;
baseDelay?: number;
maxDelay?: number;
retryOn?: RetryReason[];
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;
};
calculateDelay?: (context: {
attempt: number;
totalAttempts: number;
category: ErrorCategory;
reason: string;
error: Error;
defaultDelay: number;
}) => number | undefined;
shouldRetry?: (error: Error, state: L0State, attempt: number, category: ErrorCategory) => Promise<boolean>;
}
export declare const minimalGuardrails: GuardrailRule[];
export declare const recommendedGuardrails: GuardrailRule[];
export declare const strictGuardrails: GuardrailRule[];
export declare const minimalRetry: RetryOptions;
export declare const recommendedRetry: RetryOptions;
export declare const strictRetry: RetryOptions;
export declare const exponentialRetry: RetryOptions;
//# sourceMappingURL=l0.d.ts.map