UNPKG

@ai2070/l0

Version:

L0: The Missing Reliability Substrate for AI

193 lines 5.58 kB
export async function* toL0Events(stream, extractText) { try { for await (const chunk of stream) { const text = extractText(chunk); if (text != null) { yield { type: "token", value: text, timestamp: Date.now(), }; } } yield { type: "complete", timestamp: Date.now(), }; } catch (err) { yield { type: "error", error: err instanceof Error ? err : new Error(String(err)), timestamp: Date.now(), }; } } export async function* toL0EventsWithMessages(stream, handlers) { try { for await (const chunk of stream) { const text = handlers.extractText(chunk); if (text != null) { yield { type: "token", value: text, timestamp: Date.now(), }; continue; } if (handlers.extractMessage) { const message = handlers.extractMessage(chunk); if (message != null) { yield { type: "message", value: message.value, role: message.role, timestamp: Date.now(), }; } } } yield { type: "complete", timestamp: Date.now(), }; } catch (err) { yield { type: "error", error: err instanceof Error ? err : new Error(String(err)), timestamp: Date.now(), }; } } export function createAdapterTokenEvent(value) { return { type: "token", value, timestamp: Date.now(), }; } export function createAdapterDoneEvent() { return { type: "complete", timestamp: Date.now(), }; } export function createAdapterErrorEvent(err) { return { type: "error", error: err instanceof Error ? err : new Error(String(err)), timestamp: Date.now(), }; } export function createAdapterMessageEvent(value, role) { return { type: "message", value, role, timestamp: Date.now(), }; } export function createAdapterDataEvent(payload) { return { type: "data", data: payload, timestamp: Date.now(), }; } export function createAdapterProgressEvent(progress) { return { type: "progress", progress, timestamp: Date.now(), }; } export function createImageEvent(options) { const payload = { contentType: "image", mimeType: options.mimeType ?? "image/png", url: options.url, base64: options.base64, bytes: options.bytes, metadata: { width: options.width, height: options.height, seed: options.seed, model: options.model, }, }; if (payload.metadata) { payload.metadata = Object.fromEntries(Object.entries(payload.metadata).filter(([_, v]) => v !== undefined)); if (Object.keys(payload.metadata).length === 0) { delete payload.metadata; } } return createAdapterDataEvent(payload); } export function createAudioEvent(options) { const payload = { contentType: "audio", mimeType: options.mimeType ?? "audio/mp3", url: options.url, base64: options.base64, bytes: options.bytes, metadata: { duration: options.duration, model: options.model, }, }; if (payload.metadata) { payload.metadata = Object.fromEntries(Object.entries(payload.metadata).filter(([_, v]) => v !== undefined)); if (Object.keys(payload.metadata).length === 0) { delete payload.metadata; } } return createAdapterDataEvent(payload); } export function createJsonDataEvent(data, metadata) { return createAdapterDataEvent({ contentType: "json", mimeType: "application/json", json: data, metadata, }); } export async function* toMultimodalL0Events(stream, handlers) { try { for await (const chunk of stream) { if (handlers.extractText) { const text = handlers.extractText(chunk); if (text != null) { yield createAdapterTokenEvent(text); continue; } } if (handlers.extractData) { const data = handlers.extractData(chunk); if (data != null) { yield createAdapterDataEvent(data); continue; } } if (handlers.extractProgress) { const progress = handlers.extractProgress(chunk); if (progress != null) { yield createAdapterProgressEvent(progress); continue; } } if (handlers.extractMessage) { const message = handlers.extractMessage(chunk); if (message != null) { yield createAdapterMessageEvent(message.value, message.role); continue; } } } yield createAdapterDoneEvent(); } catch (err) { yield createAdapterErrorEvent(err); } } //# sourceMappingURL=helpers.js.map