move worker startup logic from server.ts to runtime.ts for better modularity add worker-loop-policy.ts for loop control abstraction delete legacy unit tests under tests/unit/ related to compute worker and control-plane add vitest config and test directories for compute-core and compute-worker add vitest workflow for CI update package.json scripts for new test commands and add vitest as dev dependency BREAKING CHANGE: worker entrypoint is now compute/worker/src/runtime.ts instead of server.ts; legacy Playwright-based unit tests for compute worker are removed in favor of Vitest
22 lines
823 B
TypeScript
22 lines
823 B
TypeScript
import type { WorkerOperationKind } from '@openreader/compute-core/api-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';
|
|
}
|