Download packages/coding-agent/src/core/models-store.ts from SaylorTwift/pi: direct link, hf CLI and curl.
- Browser
- Download file 5.23 kB
-
https://huggingface.co/SaylorTwift/pi/resolve/main/packages/coding-agent/src/core/models-store.ts
- Command line
-
hf download hf://SaylorTwift/pi/packages/coding-agent/src/core/models-store.ts
-
curl -L -o models-store.ts https://huggingface.co/SaylorTwift/pi/resolve/main/packages/coding-agent/src/core/models-store.ts
5.23 kB
| import { join } from "node:path"; | |
| import type { ModelsStore, ModelsStoreEntry, ModelsStoreOperationOptions } from "@earendil-works/pi-ai"; | |
| import { getAgentDir } from "../config.ts"; | |
| import { raceWithAbortSignal } from "../utils/abort.ts"; | |
| import { getFileRevision, normalizePath } from "../utils/paths.ts"; | |
| import { stripBom } from "../utils/text.ts"; | |
| import { type AuthStorageBackend, FileAuthStorageBackend } from "./auth-storage.ts"; | |
| type StoredModels = Record<string, ModelsStoreEntry>; | |
| type ModelsFileReload = { | |
| controller: AbortController; | |
| promise: Promise<StoredModels>; | |
| readers: number; | |
| }; | |
| type ModelsFileReadState = { | |
| data: StoredModels; | |
| revision?: string; | |
| reload?: ModelsFileReload; | |
| }; | |
| // Optimize the common path without retaining an unbounded set of custom paths. | |
| let sharedModelsFileReadState: { path: string; readState: ModelsFileReadState } | undefined; | |
| export class InMemoryCodingAgentModelsStore 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); | |
| } | |
| } | |
| /** Locked JSON-backed storage for dynamically refreshed provider catalogs. */ | |
| export class FileModelsStore implements ModelsStore { | |
| private readonly storage: AuthStorageBackend; | |
| private readonly path: string; | |
| private readonly readState: ModelsFileReadState; | |
| constructor(path: string = join(getAgentDir(), "models-store.json")) { | |
| this.path = normalizePath(path); | |
| this.storage = new FileAuthStorageBackend(this.path); | |
| this.readState = | |
| sharedModelsFileReadState?.path === this.path ? sharedModelsFileReadState.readState : { data: {} }; | |
| if (!sharedModelsFileReadState) { | |
| sharedModelsFileReadState = { path: this.path, readState: this.readState }; | |
| } | |
| } | |
| private parse(content: string | undefined): StoredModels { | |
| return content ? (JSON.parse(stripBom(content)) as StoredModels) : {}; | |
| } | |
| private updateReadState(readState: ModelsFileReadState, data: StoredModels, revision?: string): void { | |
| readState.data = data; | |
| readState.revision = revision; | |
| } | |
| private reloadFromStorage( | |
| readState: ModelsFileReadState, | |
| options?: ModelsStoreOperationOptions, | |
| ): Promise<StoredModels> { | |
| return this.storage.withLockAsync(async (content) => { | |
| const data = this.parse(content); | |
| this.updateReadState(readState, data, getFileRevision(this.path)); | |
| return { result: data }; | |
| }, options); | |
| } | |
| private async readLatest( | |
| readState: ModelsFileReadState, | |
| options?: ModelsStoreOperationOptions, | |
| ): Promise<StoredModels> { | |
| options?.signal?.throwIfAborted(); | |
| const revision = getFileRevision(this.path); | |
| if (revision !== undefined && revision === readState.revision) return readState.data; | |
| if (!readState.reload) { | |
| const controller = new AbortController(); | |
| const reload: ModelsFileReload = { | |
| controller, | |
| promise: this.reloadFromStorage(readState, { signal: controller.signal }), | |
| readers: 0, | |
| }; | |
| readState.reload = reload; | |
| void reload.promise.then( | |
| () => { | |
| if (readState.reload === reload) readState.reload = undefined; | |
| }, | |
| () => { | |
| if (readState.reload === reload) readState.reload = undefined; | |
| }, | |
| ); | |
| } | |
| const reload = readState.reload; | |
| reload.readers++; | |
| try { | |
| return await raceWithAbortSignal(reload.promise, options?.signal); | |
| } finally { | |
| reload.readers--; | |
| if (reload.readers === 0 && readState.reload === reload) { | |
| readState.reload = undefined; | |
| reload.controller.abort(); | |
| } | |
| } | |
| } | |
| async read(providerId: string, options?: ModelsStoreOperationOptions): Promise<ModelsStoreEntry | undefined> { | |
| const entry = (await this.readLatest(this.readState, options))[providerId]; | |
| options?.signal?.throwIfAborted(); | |
| return entry ? structuredClone(entry) : undefined; | |
| } | |
| async write(providerId: string, entry: ModelsStoreEntry, options?: ModelsStoreOperationOptions): Promise<void> { | |
| let latest: StoredModels | undefined; | |
| await this.storage.withLockAsync(async (content) => { | |
| const current = this.parse(content); | |
| current[providerId] = structuredClone(entry); | |
| latest = current; | |
| return { result: undefined, next: JSON.stringify(current, null, 2) }; | |
| }, options); | |
| if (latest) this.updateReadState(this.readState, latest); | |
| } | |
| async delete(providerId: string, options?: ModelsStoreOperationOptions): Promise<void> { | |
| let latest: StoredModels | undefined; | |
| await this.storage.withLockAsync(async (content) => { | |
| const current = this.parse(content); | |
| delete current[providerId]; | |
| latest = current; | |
| return { result: undefined, next: JSON.stringify(current, null, 2) }; | |
| }, options); | |
| if (latest) this.updateReadState(this.readState, latest); | |
| } | |
| } | |