Skip to content

LLM Providers

Harish Dhanraj Sugandhi edited this page Mar 4, 2026 · 1 revision

LLM Providers

OpenWP supports 4 LLM providers through a unified interface. Provider clients are created via the Provider_Factory and implement ProviderClientInterface.

Provider Factory (inc/Providers/Provider_Factory.php)

$client = Provider_Factory::create('openai');    // OpenAI_Client
$client = Provider_Factory::create('anthropic'); // Anthropic_Client
$client = Provider_Factory::create('glm');       // GLM_Client
$client = Provider_Factory::create('openrouter');// OpenRouter_Client

Provider Interface

All providers implement ProviderClientInterface with two methods:

interface ProviderClientInterface {
    public function generate(ProviderRequest $request): ProviderResponse|WP_Error;
    public function generate_stream(ProviderRequest $request, callable $on_delta): ProviderResponse|WP_Error;
}

Providers

OpenAI (inc/Providers/OpenAI_Client.php)

  • API: Responses API
  • Default Model: gpt-5.2
  • Streaming: Supported via Stream_Transport

Anthropic (inc/Providers/Anthropic_Client.php)

  • API: Messages API
  • Default Model: claude-3-5-sonnet-latest
  • Streaming: Supported via Stream_Transport

GLM (inc/Providers/GLM_Client.php)

  • API: Z.AI Chat Completions
  • Default Model: glm-5
  • Streaming: Supported via Stream_Transport

OpenRouter (inc/Providers/OpenRouter_Client.php)

  • API: Unified gateway (compatible with OpenAI format)
  • Default Model: anthropic/claude-sonnet-4-5
  • Streaming: Supported via Stream_Transport

Request / Response Objects

ProviderRequest (inc/Providers/ProviderRequest.php)

$request = new ProviderRequest([
    'system_prompt' => '...',    // System instructions
    'prompt'        => '...',    // User prompt
    'model'         => 'gpt-5.2',
    'schema'        => [...],    // Expected JSON output schema
    'stream'        => true,     // Enable streaming
    'temperature'   => 0.2,      // Low for predictable JSON output
    'timeout'       => 120,      // Seconds
    'max_tokens'    => 16384,    // Max output tokens
]);

ProviderResponse (inc/Providers/ProviderResponse.php)

$response->output_text;    // Raw text output from LLM
$response->input_tokens;   // Input token count
$response->output_tokens;  // Output token count

Stream Transport (inc/Providers/Stream_Transport.php)

Handles HTTP streaming for all providers:

  • Uses wp_remote_request with streaming enabled
  • Parses SSE data: lines in real-time
  • Forwards text deltas to callback
  • Handles connection timeouts

API Key Storage

Provider API keys are:

  1. Encrypted via Encryption_Service (Sodium or AES-256-CBC)
  2. Stored in OPENWP_OPTION_PROVIDER_KEYS option
  3. Managed by Provider_Key_Manager
  4. Masked for UI display (only last 4 characters shown)

Configuration

Default provider and model are configurable per-provider:

Setting Key Default
Default provider default_provider openrouter
OpenAI model default_model_openai gpt-5.2
Anthropic model default_model_anthropic claude-3-5-sonnet-latest
GLM model default_model_glm glm-5
OpenRouter model default_model_openrouter anthropic/claude-sonnet-4-5
Request timeout timeout_seconds 45
Temperature (hardcoded) 0.2
Max tokens (hardcoded) 16384

Clone this wiki locally