import PQueue from 'p-queue'; import EventEmitter3 from 'eventemitter3'; import { ModelInstance } from './instance.js'; import { ModelConfig, InferenceParams, ModelEngine } from './types/index.js'; import { Logger, LogLevel } from './lib/logger.js'; export interface ModelInstanceHandle { instance: ModelInstance; release: () => Promise; } type PrepareModelInstanceCallback = (instance: ModelInstance, signal?: AbortSignal) => Promise; interface ModelPoolConfig { concurrency: number; models: Record; } export interface ModelPoolOptions { concurrency?: number; models: Record; log?: Logger | LogLevel; } type ModelPoolEvent = 'ready' | 'spawn' | 'release'; export declare class ModelPool extends EventEmitter3 { queue: PQueue; config: ModelPoolConfig; instances: Record; private engines?; private cleanupInterval?; private log; private requestSequence; private pendingRequests; private shutdownController; private gpuLock; private prepareInstance?; constructor(options: ModelPoolOptions, prepareInstance?: PrepareModelInstanceCallback); init(engines: Record): Promise; ensureModelInstances(model: ModelConfig): Promise>[]; dispose(): Promise; private disposeOutdatedInstances; getStatus(): { processing: number; pending: number; instances: { [k: string]: { model: string; status: "error" | "preparing" | "idle" | "busy" | "loading"; engine: (string & {}) | import("./engines").BuiltInEngineName; device: string; contextState: string | undefined; lastUsed: string; }; }; }; canSpawnInstance(modelId: string): boolean; private disposeInstance; private spawnInstance; private acquireGpuInstance; private acquireIdleInstance; private acquireInstance; private createRequestSequence; requestInstance(params: Partial, signal?: AbortSignal): Promise; } export {};