Model Providers
Voyage AI
Create text embeddings with Voyage AI through your Verdictan gateway. An embedding is a list of numbers that represents text for similarity search. Your application sends text to the gateway's /v1/embeddings route, and the gateway adds the Voyage key.
Voyage is embeddings-only here: there is no chat route for this provider.
The gateway authenticates embeddings requests and applies provider access and budget rules, but your policy chain does not run on them. Controls such as prompt-injection do not see the embedded text. If text must pass your controls first, check it through a chat route before you embed it.
Before you start
- A working gateway from the quickstart.
- A Voyage AI API key, and one embedding model ID that your account can use.
- The gateway startup command, and a separate application token for test requests.
Configure the provider
A pack still needs a chain, even though it does not run on embeddings.
pack:
name: voyage-integration
version: 1.0.0
enabled: true
policies:
chain:
- prompt-injection
providers:
targets:
- id: voyage-primary
provider: voyage
model: "replace-with-voyage-model-id"
base_url: https://api.voyageai.com
secret_key_ref:
env: VERDICTAN_VOYAGE_API_KEYThe gateway sends requests to /v1/embeddings with the key from VERDICTAN_VOYAGE_API_KEY as a Bearer token.
Start and verify
To deploy the Voyage target from a local file, use CLI 0.1.14 or later. After In sync, run the request below. A matching configuration alone does not prove access to the Voyage model.
With the quickstart in Docker, follow the container steps instead of steps 1 to 3.
-
In the gateway terminal, set the key and lint the file:
export VERDICTAN_VOYAGE_API_KEY="<provider-api-key>" verdictan policy lint --file policy-config.yaml -
Restart the test gateway with the key in its environment.
-
Deploy the file to the test agent in Configurations. If that agent already runs
pack.version1.0.0, increase the version first. Then wait for the gateway log lineconnected read model refresh applied updated configwith your version asconfig_version. Try the change on a test gateway has the steps. -
In a second terminal, send an embeddings request for the configured model:
export VERDICTAN_CLIENT_TOKEN="<application-token>" curl --fail-with-body http://127.0.0.1:41002/v1/embeddings \ -H "Authorization: Bearer ${VERDICTAN_CLIENT_TOKEN}" \ -H "Content-Type: application/json" \ -d '{"model":"replace-with-voyage-model-id","input":["Govern this text."]}'
data[0].embedding is a list of numbers. There is no chat reply.
Supported requests
| Request | Support |
|---|---|
| Embeddings, text | Yes. The OpenAI-style body goes to Voyage unchanged. |
| Chat, Messages, Responses, audio, tools, streaming | No |
| Voyage reranking and multimodal APIs | No |
The gateway does not translate Voyage-specific options. Dimensions, input types, and batch limits depend on the model.
Failure behavior
| Problem | What to check |
|---|---|
401 from the gateway | You sent the Verdictan application token, not the Voyage key. |
| Provider authentication error | VERDICTAN_VOYAGE_API_KEY is set in the gateway process. Restart the gateway. |
| Model error | The request and the target use the same embedding model. |
capability.unsupported_family | The request is an embeddings request. |
| Rate limit or input error | The Voyage response body, your quota, and the model's batch limits. |
Limits
- Model names, prices, rate limits, and data terms are in the Voyage AI documentation.
- Index and query with the same model and settings. Vectors from different models are not comparable.
- A listener on a non-loopback address needs TLS and network controls.
Next steps
- OpenAI: chat, embeddings, and audio from one provider.
- Provider Configuration: target fields, routing, and fallback.