Supported upstreams
An upstream is the provider API the DIAL OpenAI Adapter calls for a model. This reference shows, for each supported provider and model type, the DIAL Core model entry that connects it, and the adapter variable a model must be listed in, where one is needed. It is for platform engineers who add models to DIAL; it assumes you know the adapter overview and Models in DIAL Core.
In the samples, <ADAPTER> is the adapter's base URL, for example http://adapter-dial-openai:5000. The adapter receives the upstream URL and key from Core in the X-UPSTREAM-ENDPOINT and X-UPSTREAM-KEY headers.
Chat models
Azure OpenAI
Use the v1 API, which carries the deployment name in the request body instead of the URL:
"<DIAL_MODEL_ID>": {
"type": "chat",
"overrideName": "<AZURE_DEPLOYMENT>",
"endpoint": "<ADAPTER>/openai/deployments/<AZURE_DEPLOYMENT>/chat/completions",
"upstreams": [
{
"endpoint": "https://<AZURE_OPENAI_SERVICE>.openai.azure.com/openai/v1/chat/completions",
"key": "<OPTIONAL_API_KEY>"
}
]
}
- Without a
key, the adapter authenticates with Azure'sDefaultAzureCredential, such as a managed identity. - The legacy dated API,
.../openai/deployments/<AZURE_DEPLOYMENT>/chat/completions, still works. Keep the same deployment name inendpointand in every upstream, or prefer the v1 API to avoid that mismatch. - To reach features only the Responses API offers, such as reasoning summaries and the web search tool, point the upstream at
https://<AZURE_OPENAI_SERVICE>.openai.azure.com/openai/v1/responses. The adapter still serves the model through Chat Completions. See Capabilities.
OpenAI Platform
"<DIAL_MODEL_ID>": {
"type": "chat",
"overrideName": "<OPENAI_MODEL>",
"endpoint": "<ADAPTER>/openai/deployments/<OPENAI_MODEL>/chat/completions",
"upstreams": [
{ "endpoint": "https://api.openai.com/v1/chat/completions", "key": "<OPENAI_API_KEY>" }
]
}
The key is required. The legacy Completions API, https://api.openai.com/v1/completions, is also supported, for Azure-style and OpenAI Platform endpoints.
Azure AI Foundry
Models such as gpt-oss-120b or Mistral-Large-2411 deploy only to Azure AI Foundry. Use its Azure OpenAI endpoint, https://<FOUNDRY_SERVICE>.openai.azure.com/openai/v1/chat/completions, or the legacy model inference endpoint, https://<FOUNDRY_SERVICE>.services.ai.azure.com/models/chat/completions.
Amazon Bedrock (OpenAI models)
"<DIAL_MODEL_ID>": {
"type": "chat",
"overrideName": "openai.gpt-5.4",
"endpoint": "<ADAPTER>/openai/deployments/openai.gpt-5.4/chat/completions",
"upstreams": [
{
"endpoint": "https://bedrock-mantle.<AWS_REGION>.api.aws/openai/v1/chat/completions",
"key": "<OPTIONAL_BEDROCK_BEARER_TOKEN>"
}
]
}
- Two endpoint formats are recognized: Bedrock Mantle (
bedrock-mantle.<region>.api.aws) takes the plain model ID, such asopenai.gpt-5.4; Bedrock Runtime (bedrock-runtime.<region>.amazonaws.com) expects it prefixed with the region, such asus.openai.gpt-5.4. - The region comes from the upstream URL. Each upstream can carry its own credentials, so one model can be balanced across AWS accounts.
- The adapter uses the first credentials it finds: a bearer token in
key; static keysaws_access_key_idandaws_secret_access_key(with optionalaws_session_token); a role,aws_assume_role_arn; or the AWS SDK's default credential chain. Set the last three per upstream inextra_data, or for the whole adapter with theAWS_*variables in Configuration.
Mistral Platform
Upstream https://api.mistral.ai/v1/chat/completions, with the model name from the Mistral Platform. List the deployment in MISTRAL_DEPLOYMENTS. Magistral models return reasoning; see Reasoning content.
Alibaba Cloud Model Studio
Model Studio serves the Qwen series and third-party models such as DeepSeek, Kimi, and GLM through an OpenAI-compatible API:
"upstreams": [
{
"endpoint": "https://<WORKSPACE_ID>.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions",
"key": "<API_KEY>",
"extra_data": { "vendor": "alibaba-cloud" }
}
]
The host differs by region. extra_data.vendor turns on prompt caching; without it, the adapter treats the upstream as a plain OpenAI one.
vLLM
Upstream <VLLM_ORIGIN>/v1/chat/completions. List the deployment in VLLM_DEPLOYMENTS, so the adapter uses vLLM's own token counting. For the Qwen3-ASR speech-to-text model served by vLLM, list it in QWEN3_ASR_VLLM_DEPLOYMENTS.
Claude and other Anthropic Messages providers
The adapter serves models behind the Anthropic Messages API: Claude in Azure AI Foundry, the Anthropic API, and compatible providers such as Fireworks or OpenRouter. The Claude-specific behavior comes from the bundled Anthropic adapter package.
"<DIAL_MODEL_ID>": {
"type": "chat",
"endpoint": "<ADAPTER>/openai/deployments/<CLAUDE_MODEL>/chat/completions",
"upstreams": [
{ "endpoint": "https://<FOUNDRY_SERVICE>.services.ai.azure.com/anthropic/v1/messages", "key": "<OPTIONAL_API_KEY>" }
],
"defaults": { "max_tokens": 4096 }
}
For the Anthropic API, use https://api.anthropic.com/v1/messages with a key. Without a key, Azure AI Foundry falls back to Microsoft Entra ID authentication. Claude needs max_tokens; set a default per model in defaults, as above, rather than through CLAUDE_DEFAULT_MAX_TOKENS.
To serve the same model to Anthropic-native clients such as Claude Code, see Anthropic Messages passthrough.
Image, video, and speech models
These models are configured as chat deployments in DIAL.
| Model type | Upstream endpoint | Adapter variable |
|---|---|---|
| DALL·E 3 | https://<SERVICE>.openai.azure.com/openai/deployments/dall-e-3/images/generations | DALLE3_DEPLOYMENTS |
| GPT Image 1 | .../openai/deployments/gpt-image-1/images/generations | GPT_IMAGE_1_DEPLOYMENTS |
| Sora | https://<SERVICE>.openai.azure.com/openai/v1/video/generations | — |
| Sora 2, text-to-video and image-to-video | https://<SERVICE>.openai.azure.com/openai/v1/videos | — |
Text-to-speech: tts, tts-hd, gpt-4o-mini-tts | https://<SERVICE>.openai.azure.com/openai/v1/audio/speech | — |
| Speech-to-text | https://<SERVICE>.openai.azure.com/openai/v1/audio/transcriptions | — |
| Text-to-speech on vLLM-Omni, such as MOSS-TTS | <VLLM_ORIGIN>/v1/audio/speech | VLLM_DEPLOYMENTS |
The Azure Audio API version is set by AUDIO_AZURE_API_VERSION. Image and video models take their parameters, such as size or duration, in custom_fields.configuration; see Configurable models.
Responses API models
To serve a model through the OpenAI Responses API as well, add responsesEndpoint next to the required endpoint:
"<DIAL_MODEL_ID>": {
"type": "chat",
"overrideName": "<MODEL>",
"endpoint": "<ADAPTER>/openai/deployments/<MODEL>/chat/completions",
"responsesEndpoint": "<ADAPTER>/openai/v1/responses",
"upstreams": [
{
"id": "1",
"endpoint": "https://<AZURE_OPENAI_SERVICE>.openai.azure.com/openai/v1/chat/completions",
"responsesEndpoint": "https://<AZURE_OPENAI_SERVICE>.openai.azure.com/openai/v1/responses"
}
]
}
| Upstream | Responses endpoint |
|---|---|
| Azure OpenAI | https://<SERVICE>.openai.azure.com/openai/v1/responses |
| OpenAI Platform | https://api.openai.com/v1/responses |
| Amazon Bedrock | https://bedrock-mantle.<region>.api.aws/openai/v1/responses; use overrideName with the Bedrock model ID |
| Alibaba Cloud Model Studio | https://<WORKSPACE_ID>.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/responses, with extra_data.vendor |
Limitations: WebSocket mode is not supported, references to DIAL files are not supported, and passing context from a previous response works only for models with one upstream. DIAL Core needs each upstream to have an id; see Responses API in DIAL Core.
Embedding models
"<DIAL_MODEL_ID>": {
"type": "embedding",
"endpoint": "<ADAPTER>/openai/deployments/<EMBEDDING_DEPLOYMENT>/embeddings",
"upstreams": [
{ "endpoint": "https://<AZURE_OPENAI_SERVICE>.openai.azure.com/openai/v1/embeddings", "key": "<OPTIONAL_API_KEY>" }
]
}
| Upstream | Endpoint | Adapter variable |
|---|---|---|
| Azure OpenAI | .../openai/v1/embeddings, or the legacy .../openai/deployments/<id>/embeddings | — |
| OpenAI Platform | https://api.openai.com/v1/embeddings | — |
| Azure AI Vision, multimodal | https://<VISION_SERVICE>.cognitiveservices.azure.com | AZURE_AI_VISION_DEPLOYMENTS |
| vLLM | .../v1/embeddings or .../pooling, depending on the model | VLLM_DEPLOYMENTS |
Multimodal models take text in input and images in custom_input, as {"type": "image/png", "url": "..."} objects:
curl -X POST "<DIAL_CORE>/openai/deployments/<DIAL_MODEL_ID>/embeddings" \
-H "Api-Key: <DIAL_API_KEY>" \
-H "Content-Type: application/json" \
-d '{"input": ["cat", "fish"], "custom_input": [{"type": "image/png", "url": "https://example.com/cat.png"}]}'
Other OpenAI-compatible servers
A model that does not fall into any category above is treated as a text chat or text embeddings model on the OpenAI API, so any OpenAI-compatible server works as an upstream. The ai-dial-samples connect Ollama this way, with http://ollama:11434/v1/chat/completions. List Databricks chat models in DATABRICKS_DEPLOYMENTS, so the adapter relies on the provider's own token usage.
Further reading
- DIAL OpenAI Adapter capabilities — token usage, configurable models, caching, and the Anthropic passthrough
- DIAL OpenAI Adapter configuration — the deployment category variables used above
- DIAL Core configuration: Models — the fields that define a model deployment in Core
- Load balancing and upstreams — several upstreams behind one model
- Supported providers — which providers and models each DIAL adapter supports