Capability-based AI provider routing for WordPress 7.0
Works with WordPress 7.0-RC2, tested using WordPress AI. Tested text generation and image generation, using two separate Azure OpenAI deployments (gpt-4.1 for text, gpt-image-1 for images).
Route AI requests to different provider configurations based on capability. Configure multiple instances of the same AI provider (e.g., GPT-4o for text, gpt-image-1 for images) and let AI Router automatically select the right one.
WordPress 7.0's AI Client SDK only allows one configuration per provider type. AI Router solves this by enabling:
- Multiple configurations of the same provider (e.g., separate Azure OpenAI deployments)
- Capability-based routing — text generation to GPT-4, images to DALL-E
- Default fallback — set a default for unmatched capabilities
- Automatic selection — no code changes needed in plugins using the AI SDK
- OpenAI
- Azure OpenAI
- Anthropic
- Ollama
| Capability | Description |
|---|---|
text_generation |
GPT models, Claude, etc. |
chat_history |
Conversation context |
image_generation |
DALL-E, Stable Diffusion |
embedding_generation |
Vector embeddings |
text_to_speech |
Audio synthesis |
speech_generation |
Voice generation |
music_generation |
Music synthesis |
video_generation |
Video synthesis |
- WordPress 7.0+
- PHP 8.3+
- Underlying AI provider plugin(s) installed (e.g.,
ai-provider-for-openai)
- Download
ai-router.zipfrom Releases - Upload via Plugins → Add New → Upload Plugin
- Activate the plugin
cd wp-content/plugins
git clone https://github.com/soderlind/ai-router.git
cd ai-router
composer install --no-dev
npm install && npm run buildThe plugin includes a GitHub updater — updates are delivered automatically when new releases are published.
- Go to Settings → Connectors in WordPress admin
- In the AI Router section, click Add Configuration
- Select a provider and configure its settings (API key, model, endpoint)
- Assign capabilities to the configuration
- Optionally set one configuration as default
Map specific capabilities to specific configurations:
text_generation → GPT-4 Config
image_generation → DALL-E Config
chat_history → GPT-4 Config
Unmapped capabilities fall back to the default configuration.
Plugin/Theme → AI Request (text_generation)
↓
AI Router
↓
┌─────────────────────┐
│ 1. Explicit mapping │ → Use mapped config
│ 2. Default supports │ → Use default config
│ 3. Any supporting │ → Use first match
│ 4. None found │ → Use WP default
└─────────────────────┘
↓
AI Provider (OpenAI, Azure, etc.)
See docs/architecture.md for detailed routing logic.
npm install
npm run build # Production build
npm run start # Watch mode# PHP tests (PHPUnit + Brain Monkey)
composer install
composer test
# JavaScript tests (Vitest)
npm run test:js
npm run test:js:watchai-router/
├── src/
│ ├── Admin/ # Connectors page integration
│ ├── DTO/ # Configuration data object
│ ├── Repository/ # Configuration CRUD
│ ├── Rest/ # REST API controller
│ ├── js/ # React admin UI
│ ├── CapabilityMap.php # Capability → Config mapping
│ ├── Router.php # Core routing logic
│ └── ProviderDiscovery.php
├── tests/
│ ├── php/ # PHPUnit tests
│ └── js/ # Vitest tests
└── docs/
└── architecture.md # Architecture documentation
| Endpoint | Method | Description |
|---|---|---|
/ai-router/v1/configurations |
GET | List all configurations |
/ai-router/v1/configurations |
POST | Create configuration |
/ai-router/v1/configurations/{id} |
GET | Get single configuration |
/ai-router/v1/configurations/{id} |
PUT | Update configuration |
/ai-router/v1/configurations/{id} |
DELETE | Delete configuration |
/ai-router/v1/capability-map |
GET | Get capability mappings |
/ai-router/v1/capability-map |
POST | Update capability mappings |
See CHANGELOG.md for version history.
GPL-2.0-or-later — see LICENSE for details.