openreader/packages/compute-worker/src/jobs/worker-loop-policy.ts
Richard R 358a56cc9a refactor: implement modular monorepo packages
- Extract database schema and migrations into @openreader/database

- Extract startup and orchestration scripts into @openreader/bootstrap

- Move compute-worker into packages/compute-worker

- Remove runtime dependency on drizzle-kit

- Update Dockerfile to deploy isolated packages without merging node_modules
2026-06-13 13:51:18 -06:00

22 lines
808 B
TypeScript

import type { WorkerOperationKind } from '../operations/contracts';
export type RetryAction = 'nak_retry' | 'term_fail';
export function buildQueueWaitTiming(queuedAt: number, now: number): { queueWaitMs: number } | undefined {
if (!Number.isFinite(queuedAt) || !Number.isFinite(now)) return undefined;
return { queueWaitMs: Math.max(0, Math.floor(now - queuedAt)) };
}
export function decideRetryAction(input: {
kind: WorkerOperationKind;
deliveryCount: number;
pdfAttempts: number;
whisperMaxDeliver?: number;
}): RetryAction {
const whisperMaxDeliver = input.whisperMaxDeliver ?? 1;
if (input.kind === 'whisper_align') {
return input.deliveryCount < whisperMaxDeliver ? 'nak_retry' : 'term_fail';
}
return input.deliveryCount < input.pdfAttempts ? 'nak_retry' : 'term_fail';
}