omniroute-pi-ext-integration
v2.0.1
Published
Pi Coding Agent extension for OmniRoute — view combos, browse providers, and sync models with enriched metadata (context windows, max tokens, reasoning, and vision) to the Ctrl+P picker
Downloads
412
Maintainers
Readme
OmniRoute Pi Extension
A seamless Pi Coding Agent extension that brings OmniRoute — the ultimate AI gateway — directly into your editor environment.
Connect to your local or remote OmniRoute server, browse models, manage combos, check quotas, and intelligently route your Pi queries across 44+ LLM providers.
Features
- 🔮 Wizard-Based Setup: Just run
/omni setupinside Pi. No manual JSON editing needed. - ⚡ Pure HTTP Client: Works securely and seamlessly whether your OmniRoute server is running locally on
localhost:20128or hosted on a remote VPS. - 🔄 Combo & Model Sync: Instantly push all OmniRoute combos and available models into Pi’s
Ctrl+Pmodel picker with full metadata (context windows, max tokens, reasoning support, and vision capabilities). - 🛠️ Prompt Tool Fallback for Chat-Only Models: Models that do not support native
tool_callscan still use Pi tools through prompt-emulated tool calling. - 🔁 Same
/modelWorkflow: Switch models normally; the extension chooses native tools or prompt tools automatically. - 📊 Selected Model Status: Status bar shows the currently selected Pi/OmniRoute model ID. For OmniRoute combos, this shows the combo/model selected in Pi, not the underlying provider model that OmniRoute ultimately routed to.
- 🧬 Smart Sorting: Syncing organizes your model list by provider/group (
owned_by) for a cleanerCtrl+Pexperience. - 🛠️ Diagnostics & Health: Spot expired tokens, connection failures, or disconnected providers right when Pi starts (management endpoints must be accessible).
- 📉 Quota Management: Live usage tracking mapped directly to OmniRoute's global quota endpoints.
Installation
Install the package directly from NPM:
pi install omniroute-pi-ext-integrationOr install the latest development version directly from GitHub:
pi install git:github.com/md-riaz/omniroute-pi-ext-integrationGetting Started
- Start Pi:
pi - Run Setup: Once Pi starts, open the command palette and run:
/omni setup - Enter Credentials: Enter your OmniRoute Server URL and API key when prompted. The key is collected before connectivity testing so protected
/v1/modelsendpoints can be verified. - Sync Models: Run
/omni syncto populate theCtrl+Plist with all your provider models and combos. - Switch Models Normally: Use
/modelas usual. No separate prompt-tools provider is needed.
Prompt Tool Fallback
Some OmniRoute-synced models are chat-only: they can answer text, but they do not return native OpenAI-style message.tool_calls. This is common for web-synced model IDs such as:
cgpt-web/gpt-5.4-pro
chatgpt-web/gpt-5.5
bb-web/gpt-4-turbo
ds-web/deepseek-v4-proFor these models, the extension keeps the same Pi provider (omni) and /model workflow, but internally switches to prompt-emulated tool calling.
Native tool mode
Used for normal tool-capable models.
Pi agent
-> omni provider
-> OmniRoute with native tools: [...]
-> model returns native tool_calls
-> Pi executes toolsPrompt tool mode
Used when a model is chat-only or marked as not supporting native tool calls.
Prompt tool mode is intentionally buffered: the extension waits for the full model response before showing text, because it must parse complete <tool_call> blocks before emitting Pi-native tool events.
Pi agent
-> omni provider
-> extension renders Pi tools as text instructions
-> OmniRoute request is sent with tools: []
-> model writes <tool_call>{...}</tool_call>
-> extension converts that text back into Pi native toolCall events
-> Pi executes tools normallyThe model is taught this wire format:
<tool_call>
{"name":"read","arguments":{"path":"index.ts"}}
</tool_call>Tool results are fed back in history as text:
<tool_result tool="read" id="call_123">
...tool output...
</tool_result>How Prompt Tool Mode Is Detected
Prompt tool mode is enabled when either condition is true:
- The upstream model metadata contains
-webduring sync, such as OmniRoute model ID/name,owned_by, or model provider label. This does not change the Pi provider ID, which remainsomni. - The synced
models.jsonmodel entry contains:
{
"tool_calling": false
}The second check reads raw models.json because Pi's runtime Model object does not preserve custom fields like tool_calling.
Example synced model entry:
{
"id": "cgpt-web/gpt-5.4-pro",
"name": "Gpt 5.4 Pro",
"api": "omni-prompt-tools",
"tool_calling": false,
"input": ["text", "image"],
"contextWindow": 400000,
"maxTokens": 65535,
"reasoning": true
}Model Switching
Use Pi's normal model picker/command:
/model cgpt-web/gpt-5.4-pro
/model codex/gpt-5.2
/model premiumThe extension routes automatically:
| Model kind | Detection | Tool mode |
|---|---|---|
| Web-synced model | Upstream model ID/name, OmniRoute owned_by, or model provider label contains -web | Prompt-emulated tools |
| Explicit chat-only model | tool_calling: false in models.json | Prompt-emulated tools |
| Normal model | No fallback marker | Native tools |
Commands Reference
| Command | Description |
|---|---|
| /omni | Dashboard showing server health, active connections, and combos |
| /omni sync | Sync your Pi model picker with all healthy OmniRoute instances |
| /omni setup | Launch interactive wizard to link Pi with your OmniRoute gateway |
| /omni dashboard | Get the direct link to your OmniRoute web interface |
Development
This repo is intentionally small and AI-friendly:
| File | Purpose |
|---|---|
| AGENTS.md | Required instructions for AI agents editing this repo. |
| AI.md | Fast handoff guide for AI agents and future maintainers. |
| ARCHITECTURE.md | Data flows and prompt-tool architecture. |
| CONTRIBUTING.md | Local setup, test checklist, and contribution rules. |
| index.ts | Extension implementation. |
Run TypeScript check:
npm run typecheckSmoke-test extension import:
npm run smokeRequirements
- Pi Coding Agent v0.60.0+
- OmniRoute v2.9.0+
License
MIT
