Skip to main content

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's DefaultAzureCredential, such as a managed identity.
  • The legacy dated API, .../openai/deployments/<AZURE_DEPLOYMENT>/chat/completions, still works. Keep the same deployment name in endpoint and 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 as openai.gpt-5.4; Bedrock Runtime (bedrock-runtime.<region>.amazonaws.com) expects it prefixed with the region, such as us.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 keys aws_access_key_id and aws_secret_access_key (with optional aws_session_token); a role, aws_assume_role_arn; or the AWS SDK's default credential chain. Set the last three per upstream in extra_data, or for the whole adapter with the AWS_* 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 typeUpstream endpointAdapter variable
DALL·E 3https://<SERVICE>.openai.azure.com/openai/deployments/dall-e-3/images/generationsDALLE3_DEPLOYMENTS
GPT Image 1.../openai/deployments/gpt-image-1/images/generationsGPT_IMAGE_1_DEPLOYMENTS
Sorahttps://<SERVICE>.openai.azure.com/openai/v1/video/generations—
Sora 2, text-to-video and image-to-videohttps://<SERVICE>.openai.azure.com/openai/v1/videos—
Text-to-speech: tts, tts-hd, gpt-4o-mini-ttshttps://<SERVICE>.openai.azure.com/openai/v1/audio/speech—
Speech-to-texthttps://<SERVICE>.openai.azure.com/openai/v1/audio/transcriptions—
Text-to-speech on vLLM-Omni, such as MOSS-TTS<VLLM_ORIGIN>/v1/audio/speechVLLM_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"
}
]
}
UpstreamResponses endpoint
Azure OpenAIhttps://<SERVICE>.openai.azure.com/openai/v1/responses
OpenAI Platformhttps://api.openai.com/v1/responses
Amazon Bedrockhttps://bedrock-mantle.<region>.api.aws/openai/v1/responses; use overrideName with the Bedrock model ID
Alibaba Cloud Model Studiohttps://<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>" }
]
}
UpstreamEndpointAdapter variable
Azure OpenAI.../openai/v1/embeddings, or the legacy .../openai/deployments/<id>/embeddings—
OpenAI Platformhttps://api.openai.com/v1/embeddings—
Azure AI Vision, multimodalhttps://<VISION_SERVICE>.cognitiveservices.azure.comAZURE_AI_VISION_DEPLOYMENTS
vLLM.../v1/embeddings or .../pooling, depending on the modelVLLM_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​