import { MultiMutex, Mutex } from '@livekit/mutex';
import { type Throws } from '@livekit/throws-transformer/throws';
import type { RunningJobInfo } from '../job.js';
import { Queue } from '../utils.js';
import type { InferenceExecutor } from './inference_executor.js';
import type { JobExecutor } from './job_executor.js';
type ProcPoolOptions = {
    agent: string;
    numIdleProcesses: number;
    initializeTimeout: number;
    closeTimeout: number;
    sessionEndTimeout: number;
    inferenceExecutor?: InferenceExecutor;
    memoryWarnMB: number;
    memoryLimitMB: number;
};
export declare class ProcPool {
    agent: string;
    initializeTimeout: number;
    closeTimeout: number;
    sessionEndTimeout: number;
    executors: JobExecutor[];
    tasks: Promise<void>[];
    started: boolean;
    closed: boolean;
    controller: AbortController;
    initMutex: Mutex;
    procMutex?: MultiMutex;
    warmedProcQueue: Queue<{
        proc: JobExecutor;
        unlock: () => void;
    }>;
    inferenceExecutor?: InferenceExecutor;
    memoryWarnMB: number;
    memoryLimitMB: number;
    constructor({ agent, numIdleProcesses, initializeTimeout, closeTimeout, sessionEndTimeout, inferenceExecutor, memoryWarnMB, memoryLimitMB, }: ProcPoolOptions);
    get processes(): JobExecutor[];
    getByJobId(id: string): JobExecutor | null;
    launchJob(info: RunningJobInfo): Promise<Throws<void, Error>>;
    procWatchTask(procUnlock: () => void): Promise<void>;
    start(): void;
    run(signal: AbortSignal): Promise<void>;
    close(): Promise<void>;
}
export {};
//# sourceMappingURL=proc_pool.d.ts.map