openai / openai/openai-python

Azure OpenAI - `model` parameter in request body causes failures when deployment name differs from model name

Open
#2,892 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Python
Stars
31.6k
Forks
5.7k
Avg merge
1d 6h
Merged PRs (30d)
96

Description

Confirm this is an issue with the Python library and not an underlying OpenAI API
  • This is an issue with the Python library
Describe the bug

When using AzureOpenAI client, the SDK sends the model parameter in the request body even though Azure OpenAI uses URL-based routing (/deployments/{deployment-id}/...). This causes failures when the deployment name doesn't match the model name exactly.

This is particularly problematic for gpt-image-1.5 because:

  1. Azure resource naming rules prohibit periods (dots) in deployment names
  2. The model name contains a dot: gpt-image-1.5
  3. Therefore, deployment name can never match model name (e.g., must use gpt-image-1-5)

The Azure backend validates the body's model field against actual model names, rejecting valid deployment names.

To Reproduce

Steps to Reproduce

from openai import AzureOpenAI

client = AzureOpenAI(
    azure_endpoint="https://<resource>.openai.azure.com/",
    api_key="<key>",
    api_version="2024-10-21"
)

# Deployment name: "gpt-image-1-5" (dashes, due to Azure naming rules)
# Model name: "gpt-image-1.5" (dot)

response = client.images.generate(
    model="gpt-image-1-5",  # deployment name
    prompt="A sunset over mountains",
    size="1024x1024",
    n=1
)

Expected Behavior

Request succeeds because URL routing correctly targets the deployment:

POST /openai/deployments/gpt-image-1-5/images/generations

Actual Behavior

Request fails with:

{
    "error": {
        "message": "Model not supported with Responses API. Supported models are: ['gpt-image-1', 'gpt-image-1-mini', 'gpt-image-1.5']",
        "type": "invalid_request_error"
    }
}

The Azure backend is validating "model": "gpt-image-1-5" in the request body against model names, not deployment names.


Root Cause

In openai/lib/azure.py, the _build_request method uses model from the body to construct the URL but doesn't remove it from the body:

def _build_request(self, options, *, retries_taken=0):
    if options.url in _deployments_endpoints and is_mapping(options.json_data):
        model = options.json_data.get("model")
        if model is not None and "/deployments" not in str(self.base_url.path):
            options.url = f"/deployments/{model}{options.url}"
            # BUG: model is still in options.json_data

    return super()._build_request(options, retries_taken=retries_taken)

The Azure OpenAI REST API spec does not include model in the request body for deployment-based endpoints - model selection is done entirely via the URL path.

Code snippets

OS

Linux (Ubuntu)

Python version

3.12

Library version

2.7.1 (also tested against latest)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in openai/lib/azure.py at AzureOpenAI._build_request and inspect how _deployments_endpoints and options.json_data are handled. Reproduce the images.generate request with different deployment and model names, then verify that deployment routing still works and the request body matches the Azure OpenAI REST API expectations.

Written by the indexing model from the issue text.

Assessment

Tech stack
azure, python
Domain
api, backend
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.