Skip to main content

text2vec-voyageai

Overview

The text2vec-voyageai module enables Weaviate to obtain vectors using Voyage AI.

Key notes:

  • As it uses a third-party API, you will need an API key.
  • Its usage may incur costs.
    • Please check the Voyage AI pricing page, especially before vectorizing large amounts of data.
  • This module is available on Weaviate Cloud Services (WCS).
  • Enabling this module will enable the nearText search operator.
  • The default model is voyage-large-2.

Where to set module parameters

The module accepts parameters through the request header, collection configuration, or environment variables. Some parameters (such as the API key) can be set in multiple ways.

Where the same parameter can be set in multiple ways, setting it at query-time through the HTTP request header (if possible) will have the highest precedence.

We suggest you only set any given parameter in one place to avoid confusion.

Weaviate instance configuration

tip

If you use Weaviate Cloud Services (WCS), this module is already enabled and pre-configured. You cannot edit the configuration in WCS.

Docker Compose file

To use text2vec-voyageai, you must enable it in your Docker Compose file (docker-compose.yml). You can do so manually, or create one using the Weaviate configuration tool.

Parameters

  • ENABLE_MODULES (Required): The modules to enable. Include text2vec-voyageai to enable the module.
  • DEFAULT_VECTORIZER_MODULE (Optional): The default vectorizer module. You can set this to text2vec-voyageai to make it the default for all classes.
  • VOYAGEAI_APIKEY (Optional): Your Voyage AI API key. You can also provide the key at query time.

Example

This configuration enables text2vec-voyageai, sets it as the default vectorizer, and sets the API keys.

---
version: '3.4'
services:
weaviate:
image: cr.weaviate.io/semitechnologies/weaviate:1.24.10
restart: on-failure:0
ports:
- 8080:8080
- 50051:50051
environment:
QUERY_DEFAULTS_LIMIT: 20
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: "./data"
ENABLE_MODULES: text2vec-voyageai
DEFAULT_VECTORIZER_MODULE: text2vec-voyageai
VOYAGEAI_APIKEY: sk-foobar # Setting this parameter is optional, you can also provide the API key at query time.
CLUSTER_HOSTNAME: 'node1'
...

Class configuration

You can configure how the module will behave in each class through the Weaviate schema.

API settings

Parameters

ParameterRequiredDefaultPurpose
modelNovoyage-large-2The model to use.
truncateNotrueSets the Voyage AI API input truncation behavior (true/false).
baseURLNohttps://api.voyageai.com/v1Sets a proxy or other URL instead of the default URL.

Use a the protocol domain format: https://your.domain.com.

Example

The following example configures the Document class by setting the vectorizer to text2vec-voyageai, model to voyage-large-2 and explicitly enables input truncation by the Voyage AI API.

info

Different Voyage AI models use different distance metrics. Make sure to set this accordingly. See the distance metric section for more information.

{
"classes": [
{
"class": "Document",
"description": "A class called document",
"vectorizer": "text2vec-voyageai",
"moduleConfig": {
"text2vec-voyageai": {
"model": "voyage-law-2", // Defaults to voyage-large-2 if not set, available models: https://docs.voyageai.com/docs/embeddings
"truncate": true, // Defaults to true if not set
"baseURL": "https://proxy.yourcompanydomain.com" // Optional. Can be overridden by one set in the HTTP header.
}
},
}
]
}

Vectorization settings

You can set vectorizer behavior using the moduleConfig section under each class and property:

Class-level

  • vectorizer - what module to use to vectorize the data.
  • vectorizeClassName – whether to vectorize the class name. Default: true.

Property-level

  • skip – whether to skip vectorizing the property altogether. Default: false
  • vectorizePropertyName – whether to vectorize the property name. Default: false

Example

{
"classes": [
{
"class": "Document",
"description": "A class called document",
"vectorizer": "text2vec-voyageai",
"moduleConfig": {
"text2vec-voyageai": {
"model": "voyage-law-2", // Defaults to voyage-large-2 if not set, available models: https://docs.voyageai.com/docs/embeddings
"truncate": true, // Defaults to true if not set
"vectorizeClassName": false
}
},
"properties": [
{
"name": "content",
"dataType": ["text"],
"description": "Content that will be vectorized",
"moduleConfig": {
"text2vec-voyageai": {
"skip": false,
"vectorizePropertyName": false
}
}
}
]
}
]
}

Query-time parameters

You can supply parameters at query time by adding it to the HTTP header.

HTTP HeaderValuePurposeNote
"X-VoyageAI-Api-Key""YOUR-VOYAGEAI-API-KEY"Voyage AI API key
"X-VoyageAI-BaseURL""YOUR-VOYAGEAI-BASE-URL"Voyage AI base URLUse the protocol domain format: https://your.domain.com.

If specified, this will have precedence over the class-level setting.

Additional information

Available models

You can use any of the following models with text2vec-voyageai (source):

  • voyage-large-2 (default)
  • voyage-code-2
  • voyage-2
  • voyage-law-2
  • voyage-lite-02-instruct

Truncation

The Voyage AI API can be set to automatically truncate your input text.

You can set the truncation option with the truncate parameter to true, false, or omitted altogether. Voyage AI's default behavior is to truncate the input text if it slightly exceeds the context window length. If it significantly exceeds the context window length, an error will be raised.

API rate limits

Since this module uses your API key, your account's corresponding rate limits will also apply to the module. Weaviate will output any rate-limit related error messages generated by the API.

More information about Voyage AI rate limits can be found here.

Import throttling

One potential solution to rate limiting would be to throttle the import within your application. We include an example below.

See code example
from weaviate import Client
import time

def configure_batch(client: Client, batch_size: int, batch_target_rate: int):
"""
Configure the weaviate client's batch so it creates objects at `batch_target_rate`.

Parameters
----------
client : Client
The Weaviate client instance.
batch_size : int
The batch size.
batch_target_rate : int
The batch target rate as # of objects per second.
"""

def callback(batch_results: dict) -> None:

# you could print batch errors here
time_took_to_create_batch = batch_size * (client.batch.creation_time/client.batch.recommended_num_objects)
time.sleep(
max(batch_size/batch_target_rate - time_took_to_create_batch + 1, 0)
)

client.batch.configure(
batch_size=batch_size,
timeout_retries=5,
callback=callback,
)

Usage example

This is an example of a nearText query with text2vec-voyageai.

import weaviate
from weaviate.classes.query import MetadataQuery, Move
import os

client = weaviate.connect_to_local(
headers={
"X-VoyageAI-Api-Key": "YOUR_VOYAGEAI_APIKEY",
}
)

publications = client.collections.get("Publication")

response = publications.query.near_text(
query="fashion",
distance=0.6,
move_to=Move(force=0.85, concepts="haute couture"),
move_away=Move(force=0.45, concepts="finance"),
return_metadata=MetadataQuery(distance=True),
limit=2
)

for o in response.objects:
print(o.properties)
print(o.metadata)

client.close()

Questions and feedback

If you have any questions or feedback, let us know in our user forum.