pi-tps-was-taken
Live tokens-per-second (TPS) widget for pi coding agent — animated spinner, color-coded performance, and real-time streaming stats in the footer
Package details
Install pi-tps-was-taken from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-tps-was-taken- Package
pi-tps-was-taken- Version
1.2.1- Published
- Aug 30, 2026
- Downloads
- 296/mo · 53/wk
- Author
- shreyashp7
- License
- MIT
- Types
- extension
- Size
- 9.9 KB
- Dependencies
- 0 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./extensions"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-tps-was-taken
A pi coding agent extension that displays live tokens-per-second (TPS) in the footer during AI response generation.
Features
- Real-time streaming TPS — updates continuously as tokens are generated, including while the model is thinking
- Thinking-aware — thinking-block tokens are included in the TPS and total counts, with the thinking portion shown separately
- Animated spinner — rotating
⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏frames during generation - Color-coded performance — green (≥100 t/s), yellow (30–100 t/s), red (<30 t/s)
- Compact display — token counts in K notation (e.g.
1.2k), shortened tot/s - Completion summary — checkmark with final stats:
tps · tokens in X.Xs
Display
Streaming (thinking tokens counted too):
⠇ 127.3 t/s ↓ 1.2k tokens (0.8k thinking)
Completed:
✓ 127.3 t/s · 1.2k tokens (0.8k thinking) in 9.4s
Installation
Via pi install (recommended)
pi install npm:pi-tps-was-taken
This installs the package and registers it in pi's settings automatically. Then reload pi with /reload.
How It Works
The extension subscribes to four pi events:
| Event | Purpose |
|---|---|
agent_start |
Clears state on new prompt |
message_start |
Resets per-message state, begins spinner animation |
message_update |
Calculates and displays live TPS. The clock starts on the first update that carries content (not when the stream opens), so prefill/TTFT wait time is excluded and TPS never starts from 0. Uses reported usage.output (which includes reasoning tokens) when available, and otherwise estimates tokens from streamed content (text + thinking blocks) so TPS keeps updating while the model is thinking |
message_end |
Shows final average TPS over the message's generation time (first token → end), covering thinking + output tokens, stops spinner |
Uses ctx.ui.setStatus("tps", ...) to append TPS to the existing footer (pwd, context %, model) instead of replacing it.
Requirements
- pi coding agent with TUI support
Note: providers report exact token usage at different times — some only in the final stream chunk. Until then, the widget estimates tokens from streamed content (chars/4, including thinking blocks) so live TPS works with any provider (OpenAI, Anthropic, Google, llama.cpp, …). The final average uses the exact reported usage when the provider provides it.
License
MIT