Providers

Code language

View this guide and its examples in your language.

Voyage AI

Configuration#

'voyageai' => [
    'api_key' => env('VOYAGEAI_API_KEY', ''),
    'url' => env('VOYAGEAI_URL', 'https://api.voyageai.com/v1'),
],

Output dimensions#

For text embeddings, set outputDimension through provider options to request a dimension supported by the selected model:

use Prism\Prism\Facades\Prism;

$response = Prism::embeddings()
    ->using('voyageai', 'voyage-4-large')
    ->fromInput('A document to index')
    ->withProviderOptions(['outputDimension' => 1024, 'inputType' => 'document'])
    ->asEmbeddings();

Image embeddings#

use Prism\Prism\Facades\Prism;
use Prism\Prism\ValueObjects\Media\Image;

$response = Prism::embeddings()
    ->using('voyageai', 'voyage-multimodal-3.5')
    ->fromInput('A text item to index')
    ->fromImage(Image::fromUrl('https://example.com/diagram.png'))
    ->withProviderOptions(['inputType' => 'document'])
    ->asEmbeddings();

Adding an image selects /multimodalembeddings. Each text input and each image becomes a separate input item, in that order; this API does not combine them into one interleaved item. Image URLs remain references, while local/raw/base64 images become data URIs. The multimodal handler forwards inputType and truncation, but does not forward outputDimension. Use a model available in the Voyage multimodal catalog.

Read vectors from $response->embeddings, token usage from $response->usage, and the model from $response->meta. Provider errors raise PrismException.

Provider specific options#

You can change some options on your request specific to Voyage AI by using ->withProviderOptions().

Input type#

By default, Voyage AI generates general purpose vectors.

Set the input type to query for search queries or document for content to be retrieved:

For search / querying:

use Prism\Prism\Enums\Provider;
use Prism\Prism\Facades\Prism;

Prism::embeddings()
    ->using(Provider::VoyageAI, 'voyage-3-lite')
    ->fromInput('The food was delicious and the waiter...')
    ->withProviderOptions(['inputType' => 'query'])
    ->asEmbeddings();

For document retrieval:

use Prism\Prism\Enums\Provider;
use Prism\Prism\Facades\Prism;

Prism::embeddings()
    ->using(Provider::VoyageAI, 'voyage-3-lite')
    ->fromInput('The food was delicious and the waiter...')
    ->withProviderOptions(['inputType' => 'document'])
    ->asEmbeddings();

Truncation#

By default, Voyage AI truncates inputs that are over the context length.

You can force it to throw an error instead by setting truncation to false.

use Prism\Prism\Enums\Provider;
use Prism\Prism\Facades\Prism;

Prism::embeddings()
    ->using(Provider::VoyageAI, 'voyage-3-lite')
    ->fromInput('The food was delicious and the waiter...')
    ->withProviderOptions(['truncation' => false])
    ->asEmbeddings();