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.
| Service | Chat | Streaming | Tools | Vision | Caching | JSON | Live Search | |
|---|---|---|---|---|---|---|---|---|
| Anthropic | ✓ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✕ | 
| Groq | ✓ | ✕ | ✕ | ✓ | ✕ | ✕ | ✓ | ✕ | 
| Mistral | ✓ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✕ | 
| OpenAI | ✓ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✕ | 
| xAI | ✓ | ✕ | ✓ | ✓ | ✕ | ✕ | ✓ | ✓ | 
| ✓ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✕ | 
- PHP 8.2+
 - Composer
 
composer require codechap/aiuse 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()
    ;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()
    ;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";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()
    ;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()
    ;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()
    ;$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);Different AI services handle JSON responses in different ways:
- Uses native JSON response formatting via the 
response_formatparameter - Set 
json: trueto automatically receive properly formatted JSON responses - No additional processing needed
 
- JSON responses are handled through post-processing
 - Set 
json: trueto 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();- Todo
 
- PHPUnit test suite
 - Automatic service discovery testing
 - Error handling verification
 
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 testto verify your implementation