Skip to main content

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.

note

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.

policy-config.yaml
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_KEY

The 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.

  1. 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
  2. Restart the test gateway with the key in its environment.

  3. Deploy the file to the test agent in Configurations. If that agent already runs pack.version 1.0.0, increase the version first. Then wait for the gateway log line connected read model refresh applied updated config with your version as config_version. Try the change on a test gateway has the steps.

  4. 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​

RequestSupport
Embeddings, textYes. The OpenAI-style body goes to Voyage unchanged.
Chat, Messages, Responses, audio, tools, streamingNo
Voyage reranking and multimodal APIsNo

The gateway does not translate Voyage-specific options. Dimensions, input types, and batch limits depend on the model.

Failure behavior​

ProblemWhat to check
401 from the gatewayYou sent the Verdictan application token, not the Voyage key.
Provider authentication errorVERDICTAN_VOYAGE_API_KEY is set in the gateway process. Restart the gateway.
Model errorThe request and the target use the same embedding model.
capability.unsupported_familyThe request is an embeddings request.
Rate limit or input errorThe 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​