The pipeline that occasionally said nothing at all
- THE CLAIM
- Stage 1 had two jobs bundled into one call: decide whether an article was even worth writing about, and, if so, work out what still needed researching to enrich it.
- WHAT WE FOUND
- Both jobs shared the same 4,096-token budget as the model's own hidden reasoning. When reasoning ran long, it could consume that whole budget before either job produced an answer, so a genuinely bad article could slip through unrejected, with zero research questions attached to enrich it, and the exact same prompt, run three times, produced three different outcomes, one of them a completely empty response.
- THE FIX
- Split the single call into two phases: a narrow skip-gate that decides only keep or reject, and, only for what survives that gate, a separate research phase that works out the entities and the gap queries needed to enrich the piece (itself split further into an analysis call and a JSON-transcription call, with reasoning off throughout). Inside the skip-gate itself: ask for the model's stated REASON before its SKIP verdict. With reasoning off, it commits to answers strictly in the order asked, so verdict-first meant guessing before any reasoning existed.
- VERIFIED
- Reordering alone took the skip-gate from 0/5 correct to 10/10 correct across two real articles.
finish_reason: "length", but content was empty: the entire 4,096-token completion budget had gone to invisible reasoning_content before the model ever wrote SKIP or KEEP.