1. Go to this page and download the library: Download ez-php/ai library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use EzPhp\Ai\Ai;
use EzPhp\Ai\Request\AiRequest;
$response = Ai::complete(AiRequest::make('What is the capital of France?'));
echo $response->content(); // "Paris"
use EzPhp\Ai\AiClientInterface;
use EzPhp\Ai\Request\AiRequest;
class MyService
{
public function __construct(private AiClientInterface $ai) {}
public function ask(string $question): string
{
$response = $this->ai->complete(AiRequest::make($question));
return $response->content();
}
}
use EzPhp\Ai\Request\AiRequest;
use EzPhp\Ai\Message\AiMessage;
// Single user message
$request = AiRequest::make('Hello');
// Explicit message list
$request = AiRequest::withMessages(
AiMessage::system('You are a helpful assistant.'),
AiMessage::user('What is 2 + 2?'),
);
// Chain withers
$request = AiRequest::make('Explain async/await')
->withModel('gpt-4o')
->withTemperature(0.7)
->withMaxTokens(500)
->withSystemPrompt('You are a concise technical writer.');
// Append a message
$request = $request->addMessage(AiMessage::user('Give an example in PHP.'));
use EzPhp\Ai\Message\AiMessage;
use EzPhp\Ai\Message\ContentPart;
// Plain text
AiMessage::user('Hello');
AiMessage::assistant('Hi there!');
AiMessage::system('You are a helpful assistant.');
// Multimodal (text + image URL)
AiMessage::userWithParts([
ContentPart::text('What is in this image?'),
ContentPart::imageUrl('https://example.com/image.png'),
]);
use EzPhp\Ai\Ai;
use EzPhp\Ai\Request\AiRequest;
use EzPhp\Ai\StreamingAiClientInterface;
$client = Ai::getClient();
if ($client instanceof StreamingAiClientInterface) {
$stream = $client->stream(AiRequest::make('Tell me a story.'));
foreach ($stream as $chunk) {
echo $chunk->content();
if ($chunk->isFinal()) {
echo PHP_EOL;
echo 'Finish reason: ' . $chunk->finishReason()?->value . PHP_EOL;
}
}
}
// Or collect the full text at once
$text = $stream->collect();
use EzPhp\Ai\Ai;
use EzPhp\Ai\Request\AiRequest;
use EzPhp\Ai\Message\AiMessage;
use EzPhp\Ai\Response\FinishReason;
use EzPhp\Ai\Tool\ToolDefinition;
$getWeather = new ToolDefinition(
name: 'get_weather',
description: 'Returns the current weather for a city.',
parameters: [
'type' => 'object',
'properties' => [
'city' => ['type' => 'string', 'description' => 'The city name'],
],
'lt => 'Unknown tool',
};
$toolMessages[] = AiMessage::tool($result, $call->id());
}
$request = $request
->addMessage(AiMessage::assistantWithToolCalls(...$response->toolCalls()))
->addMessage(...$toolMessages); // may need multiple addMessage calls
$response = Ai::complete($request);
}
echo $response->content();
use EzPhp\Ai\Driver\OpenAiConfig;
use EzPhp\Ai\Driver\OpenAiEmbeddingDriver;
use EzPhp\HttpClient\CurlTransport;
use EzPhp\HttpClient\HttpClient;
$driver = new OpenAiEmbeddingDriver(
new HttpClient(new CurlTransport()),
new OpenAiConfig(apiKey: $_ENV['OPENAI_API_KEY']),
);
// Returns float[]
$vector = $driver->embed('The quick brown fox');
// Override model
$vector = $driver->embed('Hello world', 'text-embedding-3-large');
use EzPhp\Ai\Driver\GeminiConfig;
use EzPhp\Ai\Driver\GeminiEmbeddingDriver;
use EzPhp\HttpClient\CurlTransport;
use EzPhp\HttpClient\HttpClient;
$driver = new GeminiEmbeddingDriver(
new HttpClient(new CurlTransport()),
new GeminiConfig(apiKey: $_ENV['GEMINI_API_KEY']),
);
// Default model: text-embedding-004
$vector = $driver->embed('The quick brown fox');
$response = Ai::complete($request);
$response->content(); // string — generated text
$response->finishReason(); // FinishReason enum: STOP, LENGTH, TOOL_CALL, CONTENT_FILTER, ERROR
$response->usage(); // TokenUsage|null
$response->toolCalls(); // list<ToolCall> — non-empty when finishReason === TOOL_CALL
$response->hasToolCalls(); // bool
$response->rawBody(); // string — raw JSON from the provider
$usage = $response->usage();
if ($usage !== null) {
$usage->inputTokens(); // int
$usage->outputTokens(); // int
$usage->totalTokens(); // int
}
use EzPhp\Ai\Driver\NullDriver;
use EzPhp\Ai\Request\AiRequest;
$driver = NullDriver::withContent('Paris');
$response = $driver->complete(AiRequest::make('What is the capital of France?'));
assertEquals('Paris', $response->content());
use EzPhp\Ai\Driver\OpenAiDriver;
use EzPhp\Ai\Driver\OpenAiConfig;
use EzPhp\Ai\Request\AiRequest;
use EzPhp\HttpClient\FakeTransport;
use EzPhp\HttpClient\HttpClient;
$fake = new FakeTransport();
$fake->queue(200, '{"choices":[{"message":{"role":"assistant","content":"Paris"},"finish_reason":"stop"}],"usage":{"prompt_tokens":10,"completion_tokens":5,"total_tokens":15}}');
$driver = new OpenAiDriver(
new HttpClient($fake),
new OpenAiConfig('test-key'),
);
$response = $driver->complete(AiRequest::make('Capital of France?'));
assertEquals('Paris', $response->content());
bash
composer
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.