PHP code example of mozex / anthropic-php
1. Go to this page and download the library: Download mozex/anthropic-php 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/ */
mozex / anthropic-php example snippets
$yourApiKey = getenv('YOUR_API_KEY');
$client = Anthropic::client($yourApiKey);
$result = $client->messages()->create([
'model' => 'claude-3-opus-20240229',
'max_tokens' => 1024,
'messages' => [
['role' => 'user', 'content' => 'Hello!'],
],
]);
echo $result->content[0]->text; // Hello! How can I assist you today?
$yourApiKey = getenv('YOUR_API_KEY');
$client = Anthropic::factory()
->withApiKey($yourApiKey)
->withHttpHeader('anthropic-version', '2023-06-01')
->withBaseUri('anthropic.example.com/v1') // default: api.anthropic.com/v1
->withHttpClient($client = new \GuzzleHttp\Client([])) // default: HTTP client found using PSR-18 HTTP Client Discovery
->withHttpHeader('X-My-Header', 'foo')
->withQueryParam('my-param', 'bar')
->withStreamHandler(fn (RequestInterface $request): ResponseInterface => $client->send($request, [
'stream' => true // Allows to provide a custom stream handler for the http client.
]))
->make();
$response = $client->completions()->create([
'model' => 'claude-2.1',
'prompt' => '\n\nHuman: Hello, Claude\n\nAssistant:',
'max_tokens_to_sample' => 100,
'temperature' => 0
]);
$response->type; // 'completion'
$response->id; // 'compl_01EKm5HZ9y6khqaSZjsX44fS'
$response->completion; // ' Hello! Nice to meet you.'
$response->stop_reason; // 'stop_sequence'
$response->model; // 'claude-2.1'
$response->stop; // '\n\nHuman:'
$response->log_id; // 'compl_01EKm5HZ9y6khqaSZjsX44fS'
$response->toArray(); // ['id' => 'compl_01EKm5HZ9y6khqaSZjsX44fS', ...]
$stream = $client->completions()->createStreamed([
'model' => 'claude-2.1',
'prompt' => 'Hi',
'max_tokens_to_sample' => 70,
]);
foreach($stream as $response){
$response->completion;
}
// 1. iteration => 'I'
// 2. iteration => ' am'
// 3. iteration => ' very'
// 4. iteration => ' excited'
// ...
$response = $client->messages()->create([
'model' => 'claude-3-opus-20240229',
'max_tokens' => 1024,
'messages' => [
['role' => 'user', 'content' => 'Hello, world'],
],
]);
$response->id; // 'msg_01BSy0WCV7QR2adFBauynAX7'
$response->type; // 'message'
$response->role; // 'assistant'
$response->model; // 'claude-3-opus-20240229'
$response->stop_sequence; // null
$response->stop_reason; // 'end_turn'
foreach ($response->content as $result) {
$result->type; // 'text'
$result->text; // 'Hello! It's nice to meet you. How can I assist you today?'
}
$response->usage->inputTokens; // 10,
$response->usage->outputTokens; // 19,
$response->toArray(); // ['id' => 'msg_01BSy0WCV7QR2adFBauynAX7', ...]
$stream = $client->messages()->createStreamed([
'model' => 'claude-3-haiku-20240307',
'max_tokens' => 1024,
'messages' => [
['role' => 'user', 'content' => 'Hello!'],
],
]);
foreach($stream as $response){
$response->toArray();
}
// 1. iteration
[
'type' => 'message_start',
'message' => [
'id' => 'msg_01SX1jLtTXgtJwB2EpSRNutG',
'type' => 'message',
'role' => 'assistant',
'content' => [],
'model' => 'claude-3-haiku-20240307',
'stop_reason' => null,
'stop_sequence' => null,
],
'usage' => [
'input_tokens' => 9,
'output_tokens' => 1,
]
]
// 2. iteration
[
'type' => 'content_block_delta',
'index' => 0,
'delta' => [
'type' => 'text_delta',
'text' => 'Hello',
]
]
// 3. iteration
[
'type' => 'content_block_delta',
'index' => 0,
'delta' => [
'type' => 'text_delta',
'text' => '!',
]
]
// ...
// last iteration
[
'type' => 'message_delta',
'delta' => [
'stop_reason' => 'end_turn',
'stop_sequence' => null,
],
'usage' => [
'output_tokens' => 12,
]
]
$response = $client->messages()->create([
'model' => 'claude-3-sonnet-20240229',
'max_tokens' => 1024,
'messages' => [
['role' => 'user', 'content' => 'Hello, world'],
],
]);
$meta = $response->meta();
$meta->requestId; // 'req_012nTzj6kLoP8vZ1SGANvcgR'
$meta->requestLimit->limit; // 3000
$meta->requestLimit->remaining; // 2999
$meta->requestLimit->reset; // '2024-05-01T13:29:17Z'
$meta->tokenLimit->limit; // 250000
$meta->tokenLimit->remaining; // 249984
$meta->tokenLimit->reset; // '2024-05-01T13:29:17Z'
$meta->toArray();
// [
// 'request-id' => 'req_012nTzj6kLoP8vZ1SGANvcgR',
// 'anthropic-ratelimit-requests-limit' => 3000,
// 'anthropic-ratelimit-requests-remaining' => 2999,
// 'anthropic-ratelimit-requests-reset' => '2024-05-01T13:29:17Z',
// 'anthropic-ratelimit-tokens-limit' => 250000,
// 'anthropic-ratelimit-tokens-remaining' => 249983,
// 'anthropic-ratelimit-tokens-reset' => '2024-05-01T13:29:17Z',
// ]
$stream = $client->messages()->createStreamed([
'model' => 'claude-3-sonnet-20240229',
'max_tokens' => 1024,
'messages' => [
['role' => 'user', 'content' => 'Hello, world'],
],
]);
$stream->meta();
Anthropic::factory()
->withApiKey($apiKey)
->withHttpHeader('anthropic-version', '2023-06-01')
->withHttpClient(new \GuzzleHttp\Client(['timeout' => $timeout]))
->make();
use Anthropic\Testing\ClientFake;
use Anthropic\Responses\Completions\CreateResponse;
$client = new ClientFake([
CreateResponse::fake([
'completion' => 'awesome!',
]),
]);
$completion = $client->completions()->create([
'model' => 'claude-2.1',
'prompt' => '\n\nHuman: PHP is \n\nAssistant:',
'max_tokens_to_sample' => 100,
]);
expect($completion['completion'])->toBe('awesome!');
use Anthropic\Testing\ClientFake;
use Anthropic\Responses\Messages\CreateStreamedResponse;
$client = new ClientFake([
CreateStreamedResponse::fake(fopen('file.txt', 'r'););
]);
$completion = $client->messages()->createStreamed([
'model' => 'claude-3-haiku-20240307',
'max_tokens' => 1024,
'messages' => [
['role' => 'user', 'content' => 'Hello!'],
],
]);
expect($response->getIterator()->current())
->type->toBe('message_start');
// assert completion create request was sent
$client->assertSent(Completions::class, function (string $method, array $parameters): bool {
return $method === 'create' &&
$parameters['model'] === 'claude-2.1' &&
$parameters['prompt'] === 'PHP is ';
});
// or
$client->completions()->assertSent(function (string $method, array $parameters): bool {
// ...
});
// assert 2 completion create requests were sent
$client->assertSent(Completions::class, 2);
// assert no completion create requests were sent
$client->assertNotSent(Completions::class);
// or
$client->completions()->assertNotSent();
// assert no requests were sent
$client->assertNothingSent();
$client = new ClientFake([
new \Anthropic\Exceptions\ErrorException([
'message' => 'Overloaded',
'type' => 'overloaded_error',
])
]);
// the `ErrorException` will be thrown
$completion = $client->completions()->create([
'model' => 'claude-2.1',
'prompt' => '\n\nHuman: PHP is \n\nAssistant:',
'max_tokens_to_sample' => 100,
]);
bash
composer