@ai2070/l0
Version:
L0: The Missing Reliability Substrate for AI
263 lines (262 loc) • 8.24 kB
JavaScript
import { z } from "zod4";
import { GuardrailViolationSchema } from "./guardrails";
import {
BackoffStrategySchema,
RetryReasonSchema,
ErrorCategorySchema
} from "./retry";
const L0ContentTypeSchema = z.enum([
"text",
"image",
"audio",
"video",
"file",
"json",
"binary"
]);
const L0DataPayloadSchema = z.object({
contentType: L0ContentTypeSchema,
mimeType: z.string().optional(),
base64: z.string().optional(),
url: z.string().optional(),
bytes: z.instanceof(Uint8Array).optional(),
json: z.unknown().optional(),
metadata: z.object({
width: z.number().optional(),
height: z.number().optional(),
duration: z.number().optional(),
size: z.number().optional(),
filename: z.string().optional(),
seed: z.number().optional(),
model: z.string().optional()
}).catchall(z.unknown()).optional()
});
const L0ProgressSchema = z.object({
percent: z.number().optional(),
step: z.number().optional(),
totalSteps: z.number().optional(),
message: z.string().optional(),
eta: z.number().optional()
});
const L0EventSchema = z.object({
type: z.enum(["token", "message", "data", "progress", "error", "complete"]),
value: z.string().optional(),
role: z.string().optional(),
data: L0DataPayloadSchema.optional(),
progress: L0ProgressSchema.optional(),
error: z.instanceof(Error).optional(),
reason: ErrorCategorySchema.optional(),
timestamp: z.number().optional(),
usage: z.object({
input_tokens: z.number().optional(),
output_tokens: z.number().optional(),
cost: z.number().optional()
}).catchall(z.unknown()).optional()
});
const CategorizedNetworkErrorSchema = z.object({
type: z.string(),
message: z.string(),
timestamp: z.number(),
retried: z.boolean(),
delay: z.number().optional(),
attempt: z.number().optional()
});
const L0StateSchema = z.object({
content: z.string(),
checkpoint: z.string(),
tokenCount: z.number(),
modelRetryCount: z.number(),
networkRetryCount: z.number(),
fallbackIndex: z.number(),
violations: z.array(GuardrailViolationSchema),
driftDetected: z.boolean(),
completed: z.boolean(),
firstTokenAt: z.number().optional(),
lastTokenAt: z.number().optional(),
duration: z.number().optional(),
networkErrors: z.array(CategorizedNetworkErrorSchema),
resumed: z.boolean(),
resumePoint: z.string().optional(),
resumeFrom: z.number().optional(),
dataOutputs: z.array(L0DataPayloadSchema),
lastProgress: L0ProgressSchema.optional(),
toolCallStartTimes: z.map(z.string(), z.number()).optional(),
toolCallNames: z.map(z.string(), z.string()).optional()
});
const L0TelemetrySchema = z.object({
sessionId: z.string(),
startTime: z.number(),
endTime: z.number().optional(),
duration: z.number().optional(),
metrics: z.object({
timeToFirstToken: z.number().optional(),
avgInterTokenTime: z.number().optional(),
tokensPerSecond: z.number().optional(),
totalTokens: z.number(),
totalRetries: z.number(),
networkRetryCount: z.number(),
modelRetryCount: z.number()
}),
network: z.object({
errorCount: z.number(),
errorsByType: z.record(z.string(), z.number()),
errors: z.array(
z.object({
type: z.string(),
message: z.string(),
timestamp: z.number(),
retried: z.boolean(),
delay: z.number().optional()
})
).optional()
}),
guardrails: z.object({
violationCount: z.number(),
violationsByRule: z.record(z.string(), z.number()),
violationsByRuleAndSeverity: z.record(
z.string(),
z.object({
warning: z.number(),
error: z.number(),
fatal: z.number()
})
),
violationsBySeverity: z.object({
warning: z.number(),
error: z.number(),
fatal: z.number()
})
}).optional(),
drift: z.object({
detected: z.boolean(),
types: z.array(z.string())
}).optional(),
continuation: z.object({
enabled: z.boolean(),
used: z.boolean(),
checkpointContent: z.string().optional(),
checkpointLength: z.number().optional(),
continuationCount: z.number().optional()
}).optional(),
metadata: z.record(z.string(), z.any()).optional()
});
const CheckpointValidationResultSchema = z.object({
skipContinuation: z.boolean(),
violations: z.array(GuardrailViolationSchema),
driftDetected: z.boolean(),
driftTypes: z.array(z.string())
});
const RetryOptionsSchema = z.object({
attempts: z.number().optional(),
maxRetries: z.number().optional(),
backoff: BackoffStrategySchema.optional(),
baseDelay: z.number().optional(),
maxDelay: z.number().optional(),
retryOn: z.array(RetryReasonSchema).optional(),
errorTypeDelays: z.object({
connectionDropped: z.number().optional(),
fetchError: z.number().optional(),
econnreset: z.number().optional(),
econnrefused: z.number().optional(),
sseAborted: z.number().optional(),
noBytes: z.number().optional(),
partialChunks: z.number().optional(),
runtimeKilled: z.number().optional(),
backgroundThrottle: z.number().optional(),
dnsError: z.number().optional(),
timeout: z.number().optional(),
unknown: z.number().optional()
}).optional(),
calculateDelay: z.function().optional(),
shouldRetry: z.function().optional()
});
const L0AdapterSchema = z.object({
name: z.string(),
detect: z.function().optional(),
wrap: z.function()
});
const L0InterceptorSchema = z.object({
name: z.string().optional(),
before: z.function().optional(),
after: z.function().optional(),
onError: z.function().optional()
});
const L0OptionsSchema = z.object({
__outputType: z.unknown().optional(),
stream: z.function(),
context: z.record(z.string(), z.unknown()).optional(),
fallbackStreams: z.array(z.function()).optional(),
guardrails: z.array(z.any()).optional(),
// GuardrailRule has function, use any
retry: RetryOptionsSchema.optional(),
timeout: z.object({
initialToken: z.number().optional(),
interToken: z.number().optional()
}).optional(),
signal: z.instanceof(AbortSignal).optional(),
monitoring: z.object({
enabled: z.boolean().optional(),
sampleRate: z.number().optional(),
includeNetworkDetails: z.boolean().optional(),
includeTimings: z.boolean().optional(),
metadata: z.record(z.string(), z.any()).optional()
}).optional(),
checkIntervals: z.object({
guardrails: z.number().optional(),
drift: z.number().optional(),
checkpoint: z.number().optional()
}).optional(),
detectDrift: z.boolean().optional(),
detectZeroTokens: z.boolean().optional(),
continueFromLastKnownGoodToken: z.boolean().optional(),
buildContinuationPrompt: z.function().optional(),
deduplicateContinuation: z.boolean().optional(),
deduplicationOptions: z.object({
minOverlap: z.number().optional(),
maxOverlap: z.number().optional(),
caseSensitive: z.boolean().optional(),
normalizeWhitespace: z.boolean().optional()
}).optional(),
onStart: z.function().optional(),
onComplete: z.function().optional(),
onError: z.function().optional(),
onEvent: z.function().optional(),
onViolation: z.function().optional(),
onRetry: z.function().optional(),
onFallback: z.function().optional(),
onResume: z.function().optional(),
onCheckpoint: z.function().optional(),
onTimeout: z.function().optional(),
onAbort: z.function().optional(),
onDrift: z.function().optional(),
onToolCall: z.function().optional(),
interceptors: z.array(L0InterceptorSchema).optional(),
adapter: z.union([L0AdapterSchema, z.string()]).optional(),
adapterOptions: z.unknown().optional()
});
const L0ResultSchema = z.object({
__outputType: z.unknown().optional(),
stream: z.any(),
// AsyncIterable can't be validated
text: z.string().optional(),
state: L0StateSchema,
errors: z.array(z.instanceof(Error)),
telemetry: L0TelemetrySchema.optional(),
abort: z.function()
});
export {
CategorizedNetworkErrorSchema,
CheckpointValidationResultSchema,
L0AdapterSchema,
L0ContentTypeSchema,
L0DataPayloadSchema,
L0EventSchema,
L0InterceptorSchema,
L0OptionsSchema,
L0ProgressSchema,
L0ResultSchema,
L0StateSchema,
L0TelemetrySchema,
RetryOptionsSchema
};
//# sourceMappingURL=l0.js.map