39 lines
1.5 KiB
TypeScript
39 lines
1.5 KiB
TypeScript
const DEFAULT_COMPUTE_WHISPER_TIMEOUT_MS = 30_000;
|
|
const DEFAULT_COMPUTE_PDF_TIMEOUT_MS = 300_000;
|
|
const DEFAULT_COMPUTE_PDF_HARD_CAP_MS = 24 * 60 * 60 * 1000;
|
|
const DEFAULT_WORKER_WAIT_BUFFER_MS = 15_000;
|
|
const DEFAULT_WORKER_WAIT_MIN_MS = 60_000;
|
|
|
|
export type ComputeTimeoutConfig = {
|
|
whisperTimeoutMs: number;
|
|
pdfTimeoutMs: number;
|
|
pdfHardCapMs: number;
|
|
};
|
|
|
|
export type ComputeOperationKind = 'whisper_align' | 'pdf_layout';
|
|
|
|
function readPositiveIntEnv(name: string, fallback: number): number {
|
|
const raw = process.env[name]?.trim();
|
|
if (!raw) return fallback;
|
|
const parsed = Number(raw);
|
|
if (!Number.isFinite(parsed) || parsed <= 0) return fallback;
|
|
return Math.floor(parsed);
|
|
}
|
|
|
|
let timeoutConfigCache: ComputeTimeoutConfig | null = null;
|
|
|
|
export function getComputeTimeoutConfig(): ComputeTimeoutConfig {
|
|
if (timeoutConfigCache) return timeoutConfigCache;
|
|
timeoutConfigCache = {
|
|
whisperTimeoutMs: readPositiveIntEnv('COMPUTE_WHISPER_TIMEOUT_MS', DEFAULT_COMPUTE_WHISPER_TIMEOUT_MS),
|
|
pdfTimeoutMs: readPositiveIntEnv('COMPUTE_PDF_TIMEOUT_MS', DEFAULT_COMPUTE_PDF_TIMEOUT_MS),
|
|
pdfHardCapMs: DEFAULT_COMPUTE_PDF_HARD_CAP_MS,
|
|
};
|
|
return timeoutConfigCache;
|
|
}
|
|
|
|
export function getWorkerClientWaitTimeoutMs(kind: ComputeOperationKind): number {
|
|
const config = getComputeTimeoutConfig();
|
|
const timeoutMs = kind === 'pdf_layout' ? config.pdfTimeoutMs : config.whisperTimeoutMs;
|
|
return Math.max(DEFAULT_WORKER_WAIT_MIN_MS, timeoutMs + DEFAULT_WORKER_WAIT_BUFFER_MS);
|
|
}
|