chore(vendor): import pi 0.85.1
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: d981de1229ef899957bbe968bc8dcda02a21f477
This commit is contained in:
45
third_party/pi/packages/ai/src/models-store.ts
vendored
Normal file
45
third_party/pi/packages/ai/src/models-store.ts
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
import type { Api, Model } from "./types.ts";
|
||||
|
||||
export interface ModelsStoreEntry {
|
||||
models: readonly Model<Api>[];
|
||||
/** 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user