@plasius/gpu-model-runtime 0.1.1 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -4
- package/dist/index.cjs +873 -137
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +136 -2
- package/dist/index.d.ts +136 -2
- package/dist/index.js +868 -137
- package/dist/index.js.map +1 -1
- package/package.json +17 -10
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { ModelAssetRef, ModelLodLevel } from '@plasius/asset-contracts';
|
|
2
|
+
|
|
3
|
+
/** Default ceiling per entrypoint or related resource: 64 MiB. */
|
|
4
|
+
declare const DEFAULT_MODEL_MAX_BYTES: number;
|
|
1
5
|
type ModelSourceKind = "file-path" | "url" | "blob-storage-url" | "blob" | "array-buffer" | "uint8-array" | "stream";
|
|
2
6
|
type ModelProvenance = Readonly<{
|
|
3
7
|
sourceId?: string;
|
|
@@ -82,6 +86,8 @@ interface ResourceResolver {
|
|
|
82
86
|
resolve(reference: string | ResourceReference, options?: ResolveResourceOptions): Promise<ResolvedResource>;
|
|
83
87
|
}
|
|
84
88
|
type ResolveResourceOptions = Readonly<{
|
|
89
|
+
/** Tightens the inherited acquisition ceiling for this resource. */
|
|
90
|
+
maxBytes?: number;
|
|
85
91
|
signal?: AbortSignal;
|
|
86
92
|
range?: Readonly<{
|
|
87
93
|
start: number;
|
|
@@ -89,13 +95,18 @@ type ResolveResourceOptions = Readonly<{
|
|
|
89
95
|
}>;
|
|
90
96
|
}>;
|
|
91
97
|
type FetchPolicy = Readonly<{
|
|
98
|
+
/** Maximum bytes per entrypoint/resource, including non-HTTP sources. Default 64 MiB. */
|
|
99
|
+
maxBytes?: number;
|
|
92
100
|
maxAttempts?: number;
|
|
93
101
|
baseDelayMs?: number;
|
|
94
102
|
maxDelayMs?: number;
|
|
95
103
|
timeoutMs?: number;
|
|
96
104
|
}>;
|
|
97
105
|
type RuntimeFetch = (input: string | URL, init?: RequestInit) => Promise<Response>;
|
|
98
|
-
|
|
106
|
+
/** Providers must enforce maxBytes during I/O; runtime also checks returned bytes. */
|
|
107
|
+
type ReadFile = (path: string, signal?: AbortSignal, options?: Readonly<{
|
|
108
|
+
maxBytes: number;
|
|
109
|
+
}>) => Promise<Uint8Array>;
|
|
99
110
|
type HashBytes = (bytes: Uint8Array) => Promise<string>;
|
|
100
111
|
type Sleep = (milliseconds: number, signal?: AbortSignal) => Promise<void>;
|
|
101
112
|
type BlobStorageUrlResolver = (baseUrl: string, reference: string) => string | Promise<string>;
|
|
@@ -218,6 +229,7 @@ declare class AdapterRegistry {
|
|
|
218
229
|
resolve<TCanonicalModel = unknown, TRendererReady = unknown>(input: SniffInput, formatId?: string): Promise<ModelAdapter<TCanonicalModel, TRendererReady>>;
|
|
219
230
|
}
|
|
220
231
|
declare class PackageResourceResolver implements ResourceResolver {
|
|
232
|
+
private readonly parentSignal?;
|
|
221
233
|
private readonly memoryResources;
|
|
222
234
|
private readonly baseUrl?;
|
|
223
235
|
private readonly sourceKind;
|
|
@@ -229,6 +241,7 @@ declare class PackageResourceResolver implements ResourceResolver {
|
|
|
229
241
|
private readonly blobStorageUrlResolver?;
|
|
230
242
|
constructor(options: Readonly<{
|
|
231
243
|
sourceKind: ModelSourceKind;
|
|
244
|
+
signal?: AbortSignal;
|
|
232
245
|
baseUrl?: string;
|
|
233
246
|
package?: ModelPackage;
|
|
234
247
|
fetch: RuntimeFetch;
|
|
@@ -264,6 +277,127 @@ declare class ModelRuntime {
|
|
|
264
277
|
private resolveSource;
|
|
265
278
|
}
|
|
266
279
|
|
|
280
|
+
/** Hard CPU, GPU, and concurrent-load limits for one residency manager. */
|
|
281
|
+
interface ModelResidencyBudget {
|
|
282
|
+
readonly maxCpuBytes: number;
|
|
283
|
+
readonly maxGpuBytes: number;
|
|
284
|
+
readonly maxInFlightLoads: number;
|
|
285
|
+
}
|
|
286
|
+
/** Adapter request for one immutable model LOD or partition. */
|
|
287
|
+
interface ModelLoadRequest {
|
|
288
|
+
readonly assetRef: ModelAssetRef;
|
|
289
|
+
readonly lod: ModelLodLevel;
|
|
290
|
+
readonly partitionId?: string;
|
|
291
|
+
readonly priority: number;
|
|
292
|
+
readonly signal: AbortSignal;
|
|
293
|
+
}
|
|
294
|
+
/** Resource returned by a format-specific loader/upload adapter. */
|
|
295
|
+
interface ModelLoadedResource<Resource> {
|
|
296
|
+
readonly resource: Resource;
|
|
297
|
+
readonly contentHash: string;
|
|
298
|
+
readonly cpuBytes: number;
|
|
299
|
+
readonly gpuBytes: number;
|
|
300
|
+
readonly dispose: () => void | Promise<void>;
|
|
301
|
+
}
|
|
302
|
+
/** Options for acquiring a shared model resource. */
|
|
303
|
+
interface AcquireModelOptions {
|
|
304
|
+
readonly assetRef: ModelAssetRef;
|
|
305
|
+
readonly lod: ModelLodLevel;
|
|
306
|
+
readonly partitionId?: string;
|
|
307
|
+
readonly priority: number;
|
|
308
|
+
readonly estimatedCpuBytes: number;
|
|
309
|
+
readonly estimatedGpuBytes: number;
|
|
310
|
+
readonly signal?: AbortSignal;
|
|
311
|
+
readonly pinned?: boolean;
|
|
312
|
+
}
|
|
313
|
+
/** Idempotent reference to one shared resident model resource. */
|
|
314
|
+
interface ModelResidencyLease<Resource> {
|
|
315
|
+
readonly key: string;
|
|
316
|
+
readonly assetRef: ModelAssetRef;
|
|
317
|
+
readonly lod: ModelLodLevel;
|
|
318
|
+
readonly partitionId?: string;
|
|
319
|
+
readonly resource: Resource;
|
|
320
|
+
release(): void;
|
|
321
|
+
setPriority(priority: number): void;
|
|
322
|
+
setPinned(pinned: boolean): void;
|
|
323
|
+
}
|
|
324
|
+
/** Construction boundary for adapter-driven model loading. */
|
|
325
|
+
interface ModelResidencyManagerOptions<Resource> {
|
|
326
|
+
readonly budget: ModelResidencyBudget;
|
|
327
|
+
readonly load: (request: ModelLoadRequest) => Promise<ModelLoadedResource<Resource>>;
|
|
328
|
+
readonly loadTimeoutMs?: number;
|
|
329
|
+
}
|
|
330
|
+
type ModelResidencyErrorCode = "acquire-aborted" | "budget-exceeded" | "content-hash-mismatch" | "invalid-load-result" | "load-timeout" | "manager-closed";
|
|
331
|
+
/** Stable operational error returned by residency-specific failure paths. */
|
|
332
|
+
declare class ModelResidencyError extends Error {
|
|
333
|
+
readonly code: ModelResidencyErrorCode;
|
|
334
|
+
constructor(code: ModelResidencyErrorCode, message: string);
|
|
335
|
+
}
|
|
336
|
+
interface ModelResidencyEntrySnapshot {
|
|
337
|
+
readonly key: string;
|
|
338
|
+
readonly state: "queued" | "loading" | "resident";
|
|
339
|
+
readonly priority: number;
|
|
340
|
+
readonly references: number;
|
|
341
|
+
readonly pinned: boolean;
|
|
342
|
+
readonly cpuBytes: number;
|
|
343
|
+
readonly gpuBytes: number;
|
|
344
|
+
}
|
|
345
|
+
/** Immutable accounting and lifetime metrics for diagnostics. */
|
|
346
|
+
interface ModelResidencySnapshot {
|
|
347
|
+
readonly maxCpuBytes: number;
|
|
348
|
+
readonly maxGpuBytes: number;
|
|
349
|
+
readonly maxInFlightLoads: number;
|
|
350
|
+
readonly cpuBytes: number;
|
|
351
|
+
readonly gpuBytes: number;
|
|
352
|
+
readonly reservedCpuBytes: number;
|
|
353
|
+
readonly reservedGpuBytes: number;
|
|
354
|
+
readonly residentCount: number;
|
|
355
|
+
readonly pendingCount: number;
|
|
356
|
+
readonly referenceCount: number;
|
|
357
|
+
readonly pinnedCount: number;
|
|
358
|
+
readonly inFlightLoads: number;
|
|
359
|
+
readonly queuedLoads: number;
|
|
360
|
+
readonly acquireCount: number;
|
|
361
|
+
readonly cacheHits: number;
|
|
362
|
+
readonly deduplicatedAcquires: number;
|
|
363
|
+
readonly loadsStarted: number;
|
|
364
|
+
readonly loadsCompleted: number;
|
|
365
|
+
readonly loadsFailed: number;
|
|
366
|
+
readonly loadsAborted: number;
|
|
367
|
+
readonly loadsTimedOut: number;
|
|
368
|
+
readonly evictions: number;
|
|
369
|
+
readonly disposals: number;
|
|
370
|
+
readonly disposalFailures: number;
|
|
371
|
+
readonly residentKeys: readonly string[];
|
|
372
|
+
readonly entries: readonly ModelResidencyEntrySnapshot[];
|
|
373
|
+
}
|
|
374
|
+
/** Build the canonical content-hash, LOD, and optional partition cache key. */
|
|
375
|
+
declare function createModelResidencyKey(assetRef: ModelAssetRef, lod: ModelLodLevel, partitionId?: string): string;
|
|
376
|
+
/**
|
|
377
|
+
* Content-addressed model cache with bounded work, reference-counted leases,
|
|
378
|
+
* deterministic eviction, and exact-once adapter disposal.
|
|
379
|
+
*/
|
|
380
|
+
declare class ModelResidencyManager<Resource = unknown> {
|
|
381
|
+
#private;
|
|
382
|
+
constructor(options: ModelResidencyManagerOptions<Resource>);
|
|
383
|
+
/** Acquire one shared resource lease, loading it at most once per cache key. */
|
|
384
|
+
acquire(options: AcquireModelOptions): Promise<ModelResidencyLease<Resource>>;
|
|
385
|
+
/** Dispose every currently unreferenced, unpinned resident cache entry. */
|
|
386
|
+
evictUnused(): Promise<void>;
|
|
387
|
+
/** Wait until queued/loading work and its resulting disposal have settled. */
|
|
388
|
+
waitForIdle(): Promise<void>;
|
|
389
|
+
/** Abort pending work and dispose every resident or late-completing resource. */
|
|
390
|
+
shutdown(): Promise<void>;
|
|
391
|
+
/** Return immutable byte, queue, cache, and lifetime metrics. */
|
|
392
|
+
snapshot(): ModelResidencySnapshot;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/** Non-retryable acquisition failure; never contains a source URI or provider error. */
|
|
396
|
+
declare class ModelResourceTooLargeError extends Error {
|
|
397
|
+
readonly code = "MODEL_RESOURCE_TOO_LARGE";
|
|
398
|
+
constructor();
|
|
399
|
+
}
|
|
400
|
+
|
|
267
401
|
/** Package identity and rollout metadata for the runtime boundary. */
|
|
268
402
|
declare const packageName: "@plasius/gpu-model-runtime";
|
|
269
403
|
declare const packageBootstrap: Readonly<{
|
|
@@ -272,4 +406,4 @@ declare const packageBootstrap: Readonly<{
|
|
|
272
406
|
readonly status: "runtime";
|
|
273
407
|
}>;
|
|
274
408
|
|
|
275
|
-
export { type AdapterLoadContext, type AdapterLoadResult, type AdapterModule, type AdapterRegistration, AdapterRegistry, type BlobStorageUrlResolver, type FetchPolicy, type FetchedResource, type HashBytes, type LoadModelOptions, MemoryModelCache, type ModelAdapter, type ModelCache, type ModelLoadResult, type ModelPackage, type ModelProvenance, type ModelResourceInput, ModelRuntime, type ModelSource, type ModelSourceKind, PackageResourceResolver, type ReadFile, type ResolveResourceOptions, type ResolvedModelSource, type ResolvedResource, type ResourceReference, type ResourceResolver, type RuntimeDependencies, type RuntimeFetch, type Sleep, type SniffInput, type WorkerDispatcher, type WorkerLoadRequest, createModelCacheKey, defaultSleep, fetchResource, packageBootstrap, packageName, sha256Hex, verifyIntegrity };
|
|
409
|
+
export { type AcquireModelOptions, type AdapterLoadContext, type AdapterLoadResult, type AdapterModule, type AdapterRegistration, AdapterRegistry, type BlobStorageUrlResolver, DEFAULT_MODEL_MAX_BYTES, type FetchPolicy, type FetchedResource, type HashBytes, type LoadModelOptions, MemoryModelCache, type ModelAdapter, type ModelCache, type ModelLoadRequest, type ModelLoadResult, type ModelLoadedResource, type ModelPackage, type ModelProvenance, type ModelResidencyBudget, type ModelResidencyEntrySnapshot, ModelResidencyError, type ModelResidencyErrorCode, type ModelResidencyLease, ModelResidencyManager, type ModelResidencyManagerOptions, type ModelResidencySnapshot, type ModelResourceInput, ModelResourceTooLargeError, ModelRuntime, type ModelSource, type ModelSourceKind, PackageResourceResolver, type ReadFile, type ResolveResourceOptions, type ResolvedModelSource, type ResolvedResource, type ResourceReference, type ResourceResolver, type RuntimeDependencies, type RuntimeFetch, type Sleep, type SniffInput, type WorkerDispatcher, type WorkerLoadRequest, createModelCacheKey, createModelResidencyKey, defaultSleep, fetchResource, packageBootstrap, packageName, sha256Hex, verifyIntegrity };
|