@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/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
- type ReadFile = (path: string, signal?: AbortSignal) => Promise<Uint8Array>;
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 };