fix: FormData stream exhausted on retry + undefined segments crash
Two bugs triggered together when the model was unloaded during a job: 1. submitJob() created FormData/createReadStream once outside the retry loop. After a 503, the audio ReadStream was consumed and subsequent retries sent an empty body to whisper, causing it to return segments:undefined. 2. webhook handler cast whisperJob.segments as Segment[] without guarding against undefined, so deduplicateSegments(undefined) crashed with 'Cannot read properties of undefined (reading 'map')' — stored as job.error. Fixes: - Move FormData + createReadStream inside the retry loop (fresh stream per attempt) - Use (whisperJob.segments ?? []) in webhook handler - Add Array.isArray guard at top of deduplicateSegments() as belt-and-suspenders Tests: - New: verifies createReadStream called once per attempt (3 attempts = 3 streams) - New: webhook handles segments:undefined without throwing - New: webhook handles segments:null without throwing - 150/150 passing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -30,7 +30,7 @@ try {
|
||||
setJobStatus(jobId, 'processing', 90);
|
||||
emitProgress(jobId, { type: 'status', status: 'processing', progress: 90 });
|
||||
|
||||
const rawSegments = whisperJob.segments as Segment[];
|
||||
const rawSegments = (whisperJob.segments ?? []) as Segment[];
|
||||
const segments = deduplicateSegments(rawSegments);
|
||||
|
||||
const paths = await writeOutputs(segments, job.title, jobId);
|
||||
|
||||
Reference in New Issue
Block a user