{"record":{"id":"63e8053e23c7f309","repo":"heygen-com/hyperframes","slug":"parakeet-did-not-produce-output","errorCode":null,"errorMessage":"Parakeet did not produce output.","messagePattern":"Parakeet did not produce output\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/cli/src/whisper/parakeet.ts","lineNumber":141,"sourceCode":"  }\n\n  const model = options?.model ?? DEFAULT_MODEL;\n  // First run pulls the model from HuggingFace (~600MB) — cue it so the wait\n  // doesn't read as a hang. HF caches at ~/.cache/huggingface/hub/models--<slug>.\n  const cached = existsSync(\n    join(homedir(), \".cache\", \"huggingface\", \"hub\", `models--${model.replace(/\\//g, \"--\")}`),\n  );\n  options?.onProgress?.(\n    cached ? \"Transcribing with Parakeet...\" : \"Downloading Parakeet model (first run, ~600MB)...\",\n  );\n  const workDir = mkdtempSync(join(tmpdir(), \"hyperframes-parakeet-\"));\n  try {\n    const argv = [inputPath, \"--model\", model, \"--output-format\", \"json\", \"--output-dir\", workDir];\n    if (options?.language) argv.push(\"--language\", options.language);\n    execFileSync(runner, argv, { stdio: [\"ignore\", \"pipe\", \"pipe\"], timeout: 1_800_000 });\n\n    const produced = join(workDir, `${basename(inputPath, extname(inputPath))}.json`);\n    if (!existsSync(produced)) throw new Error(\"Parakeet did not produce output.\");\n    const words = mergeTokensToWords(JSON.parse(readFileSync(produced, \"utf-8\")) as ParakeetJson);\n\n    const transcriptPath = join(dir, \"transcript.json\");\n    writeFileSync(transcriptPath, JSON.stringify(words, null, 2));\n    const durationSeconds = words.length > 0 ? words[words.length - 1]!.end : 0;\n    return { transcriptPath, wordCount: words.length, durationSeconds, speechOnsetSeconds: null };\n  } finally {\n    rmSync(workDir, { recursive: true, force: true });\n  }\n}\n","sourceCodeStart":123,"sourceCodeEnd":152,"githubUrl":"https://github.com/heygen-com/hyperframes/blob/c2996c8626135db5253519359d8a063d3bafad8d/packages/cli/src/whisper/parakeet.ts#L123-L152","documentation":"Thrown by transcribeWithParakeet when the parakeet-mlx process ran without throwing an error (execFileSync returned normally) but the expected output JSON file was not created in the work directory. The output file is named after the input (stem + .json) in a temp directory. Its absence means parakeet-mlx ran but produced no transcription — a silent failure.","triggerScenarios":"parakeet-mlx exits 0 but writes to a different output path or format; the model isn't downloaded yet and parakeet exits without error but produces no output; the input audio file is empty or has no detectable speech; a parakeet-mlx version change altered the output naming convention.","commonSituations":"First run where the model download silently fails or is interrupted; an empty or corrupt audio file that parakeet processes without error but yields no transcription; an output directory permissions issue; a version mismatch in parakeet-mlx's CLI flags.","solutions":["Verify the input audio/video file is valid and contains audible speech.","Check that the Parakeet model is fully downloaded (~/.cache/huggingface/hub/models--mlx-community/parakeet-tdt-0.6b-v3).","Run parakeet-mlx manually with the same arguments to see its actual output and any stderr warnings.","Update parakeet-mlx to the latest version in case of output-path changes.","Fall back to the whisper engine (--engine whisper) if Parakeet consistently fails."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  return transcribeWithParakeet(inputPath, dir, options);\n} catch (err) {\n  if (err instanceof Error && err.message === \"Parakeet did not produce output.\") {\n    // Check input validity, then fall back to whisper\n    console.warn(\"Parakeet produced no output. Check audio validity or use --engine whisper.\");\n    return transcribeWithWhisper(inputPath, dir, options);\n  }\n  throw err;\n}","preventionTips":["Verify the input audio/video file is valid and contains speech before transcription.","Ensure the Parakeet model is fully downloaded before transcription runs.","Run parakeet-mlx manually with the same args to diagnose silent output failures.","Always have the whisper engine as a fallback for when Parakeet silently fails."],"tags":["whisper","parakeet","transcription","engine"],"backgroundTag":null,"analyzedSha":"c2996c8626135db5253519359d8a063d3bafad8d","analyzedAt":"2026-08-12T22:18:56.877Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}