
Security News
Lovable’s OJ Rewrites Vite’s Dev Server in Rust as AI Lowers the Cost of Forking Open Source
Lovable’s OJ rewrites Vite’s dev server in Rust, reducing memory use and preview times as AI lowers the cost of open source reimplementation.
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,
"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 toRules 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 83 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
Lovable’s OJ rewrites Vite’s dev server in Rust, reducing memory use and preview times as AI lowers the cost of open source reimplementation.

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.