UNPKG

@tanstack/ai-persistence

Version:

Composable state persistence for TanStack AI messages, runs, interrupts, metadata, and locks.

31 lines (30 loc) • 1.6 kB
//#region src/retrieve.ts /** * Look up a persisted generation artifact's metadata by id. Returns `null` when * the persistence has no `artifacts` store or no record matches — so a serve * handler can map that straight to a 404. */ async function retrieveArtifact(persistence, artifactId) { return await persistence.stores.artifacts?.get(artifactId) ?? null; } /** * Look up a persisted generation artifact's stored bytes. Pass an `artifactId` * (resolved to its record first) or an already-loaded {@link ArtifactRecord} * (no second metadata lookup). Returns `null` when the artifact, its record, or * its blob is missing, or the stores are not configured. * * Pass `options.range` to read one slice — how a serve route answers a `Range` * request with `206` + `Content-Range` instead of the whole file, which is what * `<video>` seeking is built on. Resolve the range against `record.size` and * reply `416` yourself when it does not fit; the store is handed satisfiable * ranges only. The returned object's `range` reports the slice actually served. */ async function retrieveBlob(persistence, artifact, options) { const record = typeof artifact === "string" ? await retrieveArtifact(persistence, artifact) : artifact; if (!record) return null; if (!record.blobKey) throw new Error(`Artifact ${record.artifactId} has no blobKey. Records written by 0.x need blob_key backfilled before their bytes can be read.`); return await persistence.stores.blobs?.get(record.blobKey, options) ?? null; } //#endregion export { retrieveArtifact, retrieveBlob }; //# sourceMappingURL=retrieve.js.map