npm.io
0.1.0 • Published 3d ago

pi-retry-empty

Licence
MIT
Version
0.1.0
Deps
0
Size
7 kB
Vulns
0
Weekly
0

pi-retry-empty

A Pi extension that retries empty model responses.

Some providers/models occasionally return an empty assistant turn — no text, no tool call, zero output tokens, and stopReason: "stop" with no error. Pi's agent loop treats that as a normal end-of-turn, so the run just stops, often silently abandoning the task (e.g. a manager that read its skill files, ran mkdir, then got a blank continuation and quit without launching any work).

An empty response is a transient content-level failure. The standard remedy across agent harnesses (Codex, LiteLLM, and others) is to retry it a bounded number of times. That's all this extension does.

Behavior

On agent_end, if the last assistant turn is empty (no tool call, no non-empty text, zero output tokens, clean non-error stop), it re-triggers the turn from the same context — up to maxRetries times per run.

  • Never retries a turn that produced any real output.
  • Never retries an error turn — Pi has its own retry path for those.
  • Caps retries per run, so it can't loop forever. A real (non-empty) turn resets the budget for later independent stalls.

Deliberately simple: no backoff, no fallback, no model-switching — just a bounded retry.

Install

pi install git:github.com/robobryce/pi-retry-empty

Configure

--retry-empty <N> sets the max retries per run (default 3; 0 disables):

pi -p "..." --retry-empty 5
pi -p "..." --retry-empty 0     # disable

Test

npm test

Keywords