codechap / ai
A generic PHP wrapper for integrating multiple AI services like OpenAI, Anthropic, and xAI.
Requires
- php: ^8.2
Requires (Dev)
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2025-04-25 13:47:29 UTC
README
Overview
A PHP library that provides a unified interface for interacting with multiple AI services (OpenAI, Anthropic, Mistral, Groq, xAI). Simplifies integration and standardizes interactions across different AI providers while maintaining service-specific features.
Implementations
Service | Chat | Streaming | Tools | Vision | Caching | JSON | |
---|---|---|---|---|---|---|---|
Anthropic | ✓ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
Groq | ✓ | ✕ | ✕ | ✓ | ✕ | ✕ | ✓ |
Mistral | ✓ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
OpenAI | ✓ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
xAI | ✓ | ✕ | ✓ | ✓ | ✕ | ✕ | ✓ |
✓ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
Requirements
- PHP 8.2+
- Composer
Installation
composer require codechap/ai
Basic Usage
OpenAI
use codechap\ai\Ai; $openai = new ai('openai', $openaiKey); print $openai ->set('temperature', 0) ->set('model', 'o3-mini-2025-01-31') ->set('systemPrompt', 'You are a helpful assistant from planet earth.') ->set('json', true) ->set('reasoningEffort', 'low') ->query("What is the capital of South Africa? Only return the three in a JSON response.") ->one() ;
Mistral
use codechap\ai\Ai; $mistral = new Ai('mistral', $mistralKey); print $mistral ->set('temperature', 0) ->set('model', 'o3-mini-2025-01-31') ->set('systemPrompt', 'You are a helpful assistant from planet earth.') ->set('json', true) ->query("What is the capital of South Africa? Only return the three in a JSON response.") ->one() ;
Groq (Most open source models)
use codechap\ai\Ai; $groq = new Ai('groq', $groqKey); print $groq ->set('temperature', 0) ->set('model', 'deepseek-r1-distill-llama-70b') ->set('systemPrompt', 'You are a helpful assistant from planet earth.') ->set('stream', false) ->query("What is the capital of South Africa?") ->one() ; print "\n\n";
Anthropic (Claude)
use codechap\ai\Ai; $anthropic = new Ai('anthropic', $anthropicKey); print $anthropic ->set('temperature', 0) ->set('model', 'claude-3-5-sonnet-20241022') ->set('systemPrompt', 'You are a helpful assistant from planet earth.') ->set('stream', false) ->query("What is the capital of South Africa?") ->one() ;
xAI (Grok)
use codechap\ai\Ai; $xai = new Ai('xai', $xaiKey); print $xai ->set('temperature', 0) ->set('model', 'grok-2-latest') ->set('systemPrompt', 'You are a helpful assistant from planet earth.') ->set('stream', false) ->query("What is the capital of South Africa?") ->one() ;
Google (Gemini)
use codechap\ai\Ai; $google = new Ai('google', $googleKey); print = $google ->set('temperature', 0) ->set('systemPrompt', 'You are a helpful assistant from planet earth.') ->set('stream', false) ->set('json', true) ->query("What is the capital of South Africa? Only return the three in a JSON response.") ->all() ;
Vision Example
$groq = new Ai('groq', $groqKey); $result = $groq ->set('temperature', 0) ->set('model', 'meta-llama/llama-4-scout-17b-16e-instruct') ->set('systemPrompt', 'You are a helpful assistant from planet earth.') ->set('stream', false) ->set('json', false) ->query( [ [ 'role' => 'user', 'content' => [ [ 'type' => 'image_url', 'image_url' => [ 'url' => 'https://upload.wikimedia.org/wikipedia/commons/f/f2/LPU-v1-die.jpg' ] ], [ 'type' => 'text', 'text' => 'What is this image about?' ] ] ] ]) ->all() ; print_r($result);
JSON Response Handling
Different AI services handle JSON responses in different ways:
OpenAI
- Uses native JSON response formatting via the
response_format
parameter - Set
json: true
to automatically receive properly formatted JSON responses - No additional processing needed
Other Services (Anthropic, Mistral, Groq, xAI)
- JSON responses are handled through post-processing
- Set
json: true
to enable JSON extraction and validation - Uses the JsonExtractor helper to:
- Extract JSON from raw responses
- Handle JSON within markdown code blocks (
json ...
) - Validate JSON structure
Example usage:
// OpenAI (native JSON) $ai->openai() ->set('json', true) ->query('Return user data') ->one(); // Other services (post-processed JSON) $ai->anthropic() // or mistral(), groq(), xai() ->set('json', true) ->query('Return user data') ->one();
Contributing
- Todo
Testing
- PHPUnit test suite
- Automatic service discovery testing
- Error handling verification
Contributing by adding a New Service
To add a new AI service:
-
Create a new file in
src/Services/
following the naming convention -
Implement the required methods:
__construct(string $apiKey)
query(string $prompt): string
-
The service will be automatically discovered and available through AIWrapper
-
Run
composer test
to verify your implementation