npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@yeliu84/pi-model-router

v0.2.0

Published

Intelligent per-turn model router extension for the pi coding agent

Readme

pi-model-router

Intelligent per-turn model router extension for the pi-coding-agent. Automatically selects between high, medium, and low-tier LLMs based on task intent, session budget, context size, and custom rules — with automatic fallbacks and phase awareness.

What it does

  • Logical Router Provider: Registers a router provider that exposes stable profiles (e.g., router/auto) as models.
  • Per-Turn Routing: Intelligently chooses between high, medium, and low tiers for every turn based on task intent and complexity.
  • Task-Aware Heuristics: Detects planning vs. implementation vs. lightweight tasks using keyword analysis, word count, and conversation history.
  • Advanced Controls: Includes built-in support for:
    • LLM Intent Classifier: Optionally use a fast model to categorize intent (overrides heuristics).
    • Custom Rules: Define keyword-based tier overrides for specific patterns (e.g., deployhigh).
    • Context Trigger: Automatically upgrade to high-tier when token usage exceeds a threshold.
    • Cost Budgeting: Set a session spend limit; high tier downgrades to medium once exceeded.
    • Fallback Chains: Automatic retry with alternative models if the primary choice fails.
  • Phase Memory: Biased stickiness to keep you in the same tier during multi-turn planning or implementation work.
  • Thinking Control: Full control over reasoning/thinking levels per tier and profile.
  • Persistent State: Pins, profiles, costs, and debug history are remembered across agent restarts and conversation branches.

Installation

As a user

Install from npm:

pi install npm:@yeliu84/pi-model-router

For development

Clone this repo and install from source:

pi install .

Or load directly for one run:

pi -e ./extensions/index.ts

Configuration

Copy the example config to one of:

  • ~/.pi/agent/model-router.json (Global)
  • .pi/model-router.json (Project-specific)

Basic Config Shape

{
  "defaultProfile": "auto",
  "classifierModel": "google/gemini-flash-latest",
  "maxSessionBudget": 1.0,
  "profiles": {
    "auto": {
      "high": { "model": "openai/gpt-5.4-pro", "thinking": "high" },
      "medium": { "model": "google/gemini-flash-latest", "thinking": "medium" },
      "low": { "model": "openai/gpt-5.4-nano", "thinking": "low" }
    }
  }
}

Configuration Fields

| Field | Description | | ----------------------- | --------------------------------------------------------------------------------- | | defaultProfile | The profile to use when starting a new session. | | classifierModel | (Optional) Model used to categorize intent. If omitted, fast heuristics are used. | | maxSessionBudget | (Optional) USD budget for the session. Forces medium tier once exceeded. | | largeContextThreshold | (Optional) Token count trigger to force high tier for large contexts. | | phaseBias | (0.0 - 1.0) Stickiness of the current phase. Higher = more stable. Default 0.5. | | rules | List of custom keyword rules (e.g. { "matches": "deploy", "tier": "high" }). | | profiles | Map of profile definitions, each containing high, medium, and low tiers. |

Commands

| Command | Description | | --------------------------- | ------------------------------------------------------------------------------- | | /router | Show detailed status, current profile, spend, and settings. | | /router status | Alias for /router (show current status). | | /router profile [name] | Switch to a profile or list available ones (enables router if off). | | /router pin [prof] <t\|a> | Pin a tier (high/medium/low/auto) for the current or specified profile. | | /router fix <tier> | Correct the last decision and pin that tier for the current profile. | | /router thinking ... | Override thinking levels (e.g. /router thinking low xhigh). | | /router disable | Disable the router and switch back to the last non-router model. | | /router widget <on\|off> | Toggle the persistent state widget (supports toggle). | | /router debug <on\|off> | Toggle turn-by-turn routing notifications (supports toggle, clear, show). | | /router reload | Hot-reload the configuration JSON. | | /router help | Show usage help for all subcommands. |

Documentation