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

Packages

Package details

extension

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 to t/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