For the complete documentation index, see llms.txt. Markdown versions of all docs pages are available by appending .md to any docs URL.
Audio models
Configure self-hosted audio models such as Voxtral with passthrough routing for transcription endpoints.
Configure self-hosted audio models like Voxtral Small through agentgateway. Audio models expose endpoints like /v1/audio/transcriptions and /v1/models that are handled via Passthrough routing — agentgateway forwards the request and response without parsing or modifying the payload.
Before you begin
Install and set up an agentgateway proxy.Set up and expose your audio model
Step 1: Deploy the audio model (self-hosted)
Deploy the audio model inside your cluster (e.g., Voxtral Small via vLLM) and expose it via a Service.
Warning
Voxtral Small requires a Docker environment with NVIDIA GPU support (nvidia-container-toolkit).
Deploy Voxtral Small using the official vLLM OpenAI-compatible image.
kubectl apply -f- <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: voxtral-vllm namespace: agentgateway-system spec: replicas: 1 selector: matchLabels: app: voxtral-vllm template: metadata: labels: app: voxtral-vllm spec: containers: - name: voxtral-vllm image: vllm/vllm-openai:latest args: - "vllm" - "serve" - "mistralai/Voxtral-Small-24B-2507" - "--tokenizer_mode" - "mistral" - "--config_format" - "mistral" - "--load_format" - "mistral" - "--tool-call-parser" - "mistral" - "--enable-auto-tool-choice" ports: - containerPort: 8000 name: http resources: limits: nvidia.com/gpu: "1" requests: nvidia.com/gpu: "1" --- apiVersion: v1 kind: Service metadata: name: voxtral-service namespace: agentgateway-system spec: selector: app: voxtral-vllm ports: - port: 80 targetPort: 8000 protocol: TCP EOFThe deployment uses:
vllm/vllm-openai:latest— the official vLLM OpenAI-compatible server imagevllm serve mistralai/Voxtral-Small-24B-2507with Mistral-specific configuration- Port
8000internally (vLLM default) exposed as port80on the Service - NVIDIA GPU reservation (1 GPU)
Wait for the pod to be ready.
kubectl wait --for=condition=ready pod \ -l app=voxtral-vllm \ -n agentgateway-system \ --timeout=300s
Step 2: Verify the model is responding
Verify that the model is responding by listing the models that it serves. The voxtral-service Service is a ClusterIP Service, so send the request from a pod inside the cluster.
kubectl run curl-audio --rm -i --restart=Never \
-n agentgateway-system \
--image=curlimages/curl -- \
curl -s http://voxtral-service.agentgateway-system.svc.cluster.local:80/v1/modelsYou should see a JSON response listing the model.
Step 3: Create the LLM backend with Passthrough routes
Create an AgentgatewayBackend resource with policies.ai.routes to forward audio endpoints via Passthrough processing.
kubectl apply -f- <<EOF
apiVersion: agentgateway.dev/v1alpha1
kind: AgentgatewayBackend
metadata:
name: voxtral-audio
namespace: agentgateway-system
spec:
ai:
provider:
openai:
model: voxtral-small-24b-2507
host: voxtral-service.agentgateway-system.svc.cluster.local
port: 80
policies:
ai:
routes:
"/v1/audio/transcriptions": "Passthrough"
"/v1/models": "Passthrough"
"*": "Passthrough"
EOFReview the following table to understand this configuration. For more information, see the API reference.
| Setting | Description |
|---|---|
ai.provider.openai | Use the openai provider type — audio models typically expose OpenAI-compatible APIs. |
openai.model | The audio model name. |
host | The in-cluster DNS name of the Service pointing to the audio model. |
port | The port the audio model listens on. |
policies.ai.routes["/v1/audio/transcriptions"] | Routes audio transcription requests with Passthrough processing. Agentgateway forwards the multipart form data and response without modification. |
policies.ai.routes["*"] | Catches any unmatched paths and forwards them as Passthrough. |
Note
The Passthrough route type applies no LLM policies at all. To keep token-based rate limiting and telemetry for audio traffic, set the audio paths to Detect instead. Detect also forwards the payload unchanged, but makes a best effort to extract the model and token counts. For more information about the available route types, see Multiple endpoints.
Step 4: Create an HTTPRoute
Create an HTTPRoute that routes traffic to the audio backend.
kubectl apply -f- <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: voxtral-audio-route
namespace: agentgateway-system
spec:
parentRefs:
- name: agentgateway-proxy
namespace: agentgateway-system
rules:
- matches:
- path:
type: PathPrefix
value: /audio
filters:
- type: URLRewrite
urlRewrite:
path:
type: ReplacePrefixMatch
replacePrefixMatch: /
backendRefs:
- name: voxtral-audio
namespace: agentgateway-system
group: agentgateway.dev
kind: AgentgatewayBackend
EOF| Setting | Description |
|---|---|
matches.path | Matches requests along the /audio path prefix. |
filters.urlRewrite | Strips the /audio prefix before the request is forwarded, so that the audio model receives the /v1/audio/transcriptions path that it serves. Without this filter, the model receives /audio/v1/audio/transcriptions and returns a 404 response. |
backendRefs | Forwards matching requests to the voxtral-audio AgentgatewayBackend resource that you created in the previous step. |
Step 5: Send audio transcription requests
Create a sample WAV file to transcribe. If you already have an audio file, use its path in the following requests instead.
mkdir -p testdata
python3 -c "
import wave
w = wave.open('testdata/sample-audio.wav', 'wb')
w.setnchannels(1); w.setsampwidth(2); w.setframerate(16000)
w.writeframes(b'\x00\x00' * 16000)
w.close()
"Then, send a transcription request to the audio model through the gateway.
export INGRESS_GW_ADDRESS=$(kubectl get svc -n agentgateway-system agentgateway-proxy -o=jsonpath="{.status.loadBalancer.ingress[0]['hostname','ip']}")
curl --request POST \
--url "http://${INGRESS_GW_ADDRESS}:80/audio/v1/audio/transcriptions" \
--header 'Content-Type: multipart/form-data' \
--form model=voxtral-small-24b-2507 \
--form 'file=@./testdata/sample-audio.wav' | jqNote
Supported audio formats: WAV, FLAC, OGG and AU (via libsndfile). These formats are natively supported by the vLLM audio processing pipeline.
Supported audio endpoints
The table below lists the audio-specific endpoints that can be configured via Passthrough routing.
| API path | Route type | Description |
|---|---|---|
/v1/audio/transcriptions | Passthrough | Transcribes audio files to text. Agentgateway forwards the multipart/form-data payload and the JSON response without modification. |
/v1/models | Passthrough | Lists available models. |
Note
When a route is set to Passthrough, agentgateway does not apply any LLM-specific policies (such as cost tracking, rate limiting, or prompt guards) to those requests. The requests are forwarded exactly as received.
Cleanup
You can remove the resources that you created in this guide.kubectl delete AgentgatewayBackend voxtral-audio -n agentgateway-system
kubectl delete httproute voxtral-audio-route -n agentgateway-system
kubectl delete svc voxtral-service -n agentgateway-system
kubectl delete deployment voxtral-vllm -n agentgateway-system