Files
dev/third_party/pi/packages/ai/src/models-store.ts
alexion 6081e3e325 chore(vendor): import pi 1.3.0
Imported as a linear vendor commit so forge rebases do not replay the upstream root tree.

git-subtree-dir: third_party/pi

git-subtree-split: 71023aec1546d6d677a65669c5665c0927ce0dd0
2026-10-15 17:58:48 -04:00

47 lines
1.7 KiB
TypeScript

import type { AnyModel } from "./types.ts";
export interface ModelsStoreEntry {
/** Persisted models of every type. */
models: readonly AnyModel[];
/** Unix timestamp from the remote catalog's Last-Modified header. */
lastModified?: number;
/** Unix timestamp of the last completed remote check. */
checkedAt?: number;
/**
* Opaque validator from the remote catalog's ETag header, stored verbatim
* (quotes included) and echoed back as If-None-Match.
*/
etag?: string;
}
export interface ModelsStoreOperationOptions {
signal?: AbortSignal;
}
/** Persistent model catalogs keyed by provider ID. */
export interface ModelsStore {
read(providerId: string, options?: ModelsStoreOperationOptions): Promise<ModelsStoreEntry | undefined>;
write(providerId: string, entry: ModelsStoreEntry, options?: ModelsStoreOperationOptions): Promise<void>;
delete(providerId: string, options?: ModelsStoreOperationOptions): Promise<void>;
}
export class InMemoryModelsStore implements ModelsStore {
private readonly entries = new Map<string, ModelsStoreEntry>();
async read(providerId: string, options?: ModelsStoreOperationOptions): Promise<ModelsStoreEntry | undefined> {
options?.signal?.throwIfAborted();
const entry = this.entries.get(providerId);
return entry ? structuredClone(entry) : undefined;
}
async write(providerId: string, entry: ModelsStoreEntry, options?: ModelsStoreOperationOptions): Promise<void> {
options?.signal?.throwIfAborted();
this.entries.set(providerId, structuredClone(entry));
}
async delete(providerId: string, options?: ModelsStoreOperationOptions): Promise<void> {
options?.signal?.throwIfAborted();
this.entries.delete(providerId);
}
}