Skip to content

AI Router

WordPress 7.0+ PHP 8.3+ License: GPL v2+

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.

Screenshot 2026-03-27 at 15 54 33

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
CapabilityDescription
text_generationGPT models, Claude, etc.
chat_historyConversation context
image_generationDALL-E, Stable Diffusion
embedding_generationVector embeddings
text_to_speechAudio synthesis
speech_generationVoice generation
music_generationMusic synthesis
video_generationVideo synthesis
  • WordPress 7.0+
  • PHP 8.3+
  • Underlying AI provider plugin(s) installed (e.g., ai-provider-for-openai)
  1. Download ai-router.zip from Releases
  2. Upload via Plugins → Add New → Upload Plugin
  3. Activate the plugin
Terminal window
cd wp-content/plugins
git clone https://github.com/soderlind/ai-router.git
cd ai-router
composer install --no-dev
npm install && npm run build

The plugin includes a GitHub updater — updates are delivered automatically when new releases are published.

  1. Go to Settings → Connectors in WordPress admin
  2. In the AI Router section, click Add Configuration
  3. Select a provider and configure its settings (API key, model, endpoint)
  4. Assign capabilities to the configuration
  5. 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.

Terminal window
npm install
npm run build # Production build
npm run start # Watch mode
Terminal window
# PHP tests (PHPUnit + Brain Monkey)
composer install
composer test
# JavaScript tests (Vitest)
npm run test:js
npm run test:js:watch
ai-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
EndpointMethodDescription
/ai-router/v1/configurationsGETList all configurations
/ai-router/v1/configurationsPOSTCreate configuration
/ai-router/v1/configurations/{id}GETGet single configuration
/ai-router/v1/configurations/{id}PUTUpdate configuration
/ai-router/v1/configurations/{id}DELETEDelete configuration
/ai-router/v1/capability-mapGETGet capability mappings
/ai-router/v1/capability-mapPOSTUpdate capability mappings

See CHANGELOG.md for version history.

GPL-2.0-or-later — see LICENSE for details.

Per Søderlind