
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
pi-model-fallback
Advanced tools
Pi extension that switches to a fallback model after provider failures such as 429 rate limits.
Pi extension that switches to a fallback model after provider failures such as 429 rate limits.
pi-model-fallback watches provider failures and automatically moves Pi to a safer fallback model when a matching rule fires.
Current default:
zai429, 500, 502, 503, 504deepseek/deepseek-v4-flashWhen a failure matches, the extension also stores persistent fallback state so future sessions can preselect the fallback model until the cooldown expires.
Install from npm:
pi install npm:pi-model-fallback
Install into the current project only:
pi install npm:pi-model-fallback -l
Or install from GitHub:
pi install git:github.com/eiei114/pi-model-fallback
Try it without permanently installing:
pi -e npm:pi-model-fallback
/model-fallback:status
/model-fallback:reset
status: shows whether fallback is enabled, active persistent entries, and current pathsreset: clears persistent fallback state and switches back to the remembered original model when possibleThe extension exposes the model_fallback_config tool for reading, validating, and saving config JSON.
Default config shape:
{
"version": 1,
"enabled": true,
"autoRetry": true,
"rules": [
{
"name": "zai-to-deepseek-flash",
"matchProviders": ["zai"],
"statuses": [429, 500, 502, 503, 504],
"fallback": {
"provider": "deepseek",
"model": "deepseek-v4-flash"
}
}
]
}
Rule fields:
matchProviders: match all models from a providermatchModels: match specific provider + model pairsstatuses: optional; defaults to 429, 500, 502, 503, 504cooldownMs: optional persistent fallback windowfallback: target model Pi should switch toTop-level fields:
enabled: toggle the extension without deleting rulesautoRetry: when a fallback fires from a failed turn, automatically re-queue the failed user prompt so the turn retries on the fallback model (defaults to true; set to false to only switch models)Rules use first-match order: the first rule whose provider/model and status match wins. Put specific matchModels rules before broad matchProviders rules when they should take priority. model_fallback_config validate, save, read, and status report warning-only diagnostics when a later rule or model entry is completely shadowed by an earlier rule; /model-fallback:status also includes a concise warning summary for the current config. Warning-bearing config remains valid and can still be saved.
When a rule does not set cooldownMs, the extension uses these defaults:
429 → 72 hours5xx → 10 minutesWhen the provider response includes Retry-After or x-ratelimit-reset* headers, those values override cooldownMs and the defaults for the persisted fallback window.
The extension stores:
model-fallback/config.jsonmodel-fallback/state.jsonIf the package is installed project-locally and the current project references it from .pi/settings.json, those files live under the project .pi/ directory. Otherwise they live under the user agent directory.
after_provider_response can trigger fallback immediately.turn_end can also persist fallback state for SDK/provider failures that do not emit the normal response hook. Status extraction looks for HTTP-style tokens (for example status 429, HTTP 503, or rate limit) rather than any bare 3-digit number in the message.npm install
npm run ci
Run locally in Pi:
pi -e .
docs/usage.mdMIT
FAQs
Pi extension that switches to a fallback model after provider failures such as 429 rate limits.
The npm package pi-model-fallback receives a total of 204 weekly downloads. As such, pi-model-fallback popularity was classified as not popular.
We found that pi-model-fallback demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.