talleu / cohere-php-client
PHP client to interact with Cohere API
Requires
- php: >=8.2
- ext-json: *
- nyholm/psr7: ^1.8
- php-http/discovery: ^1.20
- php-http/multipart-stream-builder: ^1.4
- psr/http-client: ^1.0
- psr/http-client-implementation: *
- psr/http-factory: ^1.1
- psr/http-factory-implementation: *
- psr/http-message: ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.75
- phpstan/phpstan: ^1.12
- phpunit/phpunit: ^11.0
- symfony/browser-kit: ^7.2
- symfony/framework-bundle: ^7.2
- symfony/http-client: ^7.3
- symfony/var-dumper: ^7.0
README
Cohere PHP Client
A PHP client to interact with the Cohereยฎ API, designed to be framework-agnostic, simple to use, and fully compatible with PSR-18.
This package provides an easy and structured way to use Cohere's powerful language models โ for embeddings, chat, classification, tokenization, and more โ in any PHP project.
Features ๐ ๏ธ
- โ Support for Cohere API v1/v2 endpoints (chat, embed, classify, tokenize, etc.)
- โ Compatible with any PSR-18 HTTP Client
- โ File upload and multipart support
- โ Developer-friendly DTOs and response builders
- โ Easily extendable with your own endpoints
Requirements โ๏ธ
- PHP 8.2 or higher
- Composer
- A PSR-18 compatible HTTP client ( e.g. Guzzle, Symfony HttpClient, HTTPlug clients)
Installation ๐
Install the library via Composer:
composer require talleu/cohere-php-client
Then install your preferred HTTP client
Using Symfony HttpClient:
composer require symfony/http-client
Using Guzzle:
composer require guzzlehttp/guzzle
Or another client implementing PSR18
Basic Usage ๐ฏ
Minimal example
use Talleu\CohereClient\Cohere; $client = Cohere::client('your-api-key'); // Call the embed endpoint $embeds = $client->embed()->create([ 'Cohere is amazing!', 'Letโs try embedding some text.' ]); var_dump($embeds);
Or to simple chats with LLM
$chat = $client->chat()->create([ [ 'role' => 'user', 'content' => 'how are you ?' ] ]);
Authentication ๐
You can pass the API key directly in the http client:
Cohere::client('your-api-key');
Or use an environment variable (recommended):
#.env COHERE_API_KEY=your-api-key
Available Endpoints ๐
The following endpoints are supported:
Endpoint | Class | Description |
---|---|---|
v2/embed |
Embed |
Generate embeddings from input text |
v2/chat |
Chat |
Perform conversational chat with a LLM |
v1/classify |
Classify |
Text classification based on custom labels |
v1/tokenize |
Tokenize |
Token-level breakdown of input text |
v1/detokenize |
Detokenize |
De-tokenify tokens to text |
v1/connectors |
Connector |
Cohere connectors |
v1/embed-jobs |
EmbedJob |
Async embed jobs |
v2/rerank |
Rerank |
Retrieve Cohere available models |
v1/models |
Model |
Produces an ordered array with text |
v1/datasets |
Dataset |
Create a dataset by uploading a file, retrieve datasets |
v1/finetuning |
FineTuning |
Trains, deploy, list datasets |
You can access them via:
$client->embed(); $client->chat(); $client->tokenize(); $client->detokenize(); $client->classify(); $client->rerank(); $client->dataset(); $client->fineTuning(); $client->model(); $client->embedJob(); $client->connector(); // etc.
Then you can use it simple :
$connector = $client->connector()->create($name, $url, ['model' => 'command-a-03-2025']); $connector = $client->connector()->get($id); $connector = $client->connector()->list();
Each endpoint returns a strongly typed DTO with the result of the API call.
To send a request without using provided resources, you can use directly the CohereClient sendRequesst() method
$chat = Cohere::client()->sendRequest('GET', '/v2/chat', $body);
๐ Documentation by endpoints
- Embedding
- Chat Completion
- Rerank
- Model
- Connector
- Classify
- Fine Tuning
- Dataset
- Embed jobs
- Tokenize
- Detokenize
- A tutorial for Fine-tune and Classify a dataset
Documentation ๐
- ๐ง Cohere official docs: https://docs.cohere.com
- ๐ API Reference: https://docs.cohere.com/reference
- ๐ฆ This PHP client wraps the API endpoints in a friendly OO API with typed DTOs.
Contributing ๐ค
PRs are welcome! If youโd like to add support for more endpoints, improve tests or add features, feel free to open an issue or submit a PR.