Azure OpenAI - `model` parameter in request body causes failures when deployment name differs from model name
Maintainer antworten meist innerhalb von 1 Tag
@fengjikui arbeitet bereits daran.
Seit 24.6.2026.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 45/100
Rechercherichtung
Beginnen Sie in openai/lib/azure.py bei AzureOpenAI._build_request und prüfen Sie, wie _deployments_endpoints und options.json_data behandelt werden. Reproduzieren Sie die images.generate-Anfrage mit verschiedenen Deployment- und Modellnamen und verifizieren Sie anschließend, dass das Deployment-Routing weiterhin funktioniert und der Anfrage-Body den Erwartungen der Azure OpenAI REST API entspricht.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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:
- Azure resource naming rules prohibit periods (dots) in deployment names
- The model name contains a dot:
gpt-image-1.5 - 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)
- Vorherrschende Sprache
- Python
- Sterne
- 31.8k
- Forks
- 8k
- Ø Merge
- 22 Std. 23 Min.
- Gemergte PRs (30 T.)
- 148
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus openai/openai-python
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
openai/openai-python#4022 · 23 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
fix(auth): SubjectTokenProviderError drops response and duplicates error message in workload identity providersEvtl. vergeben @mohmedmm hat das vor 14 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
openai/openai-python#4017 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Querystring drops explicit empty-string scalar valuesEvtl. vergeben @sylvesterkaczmarek hat das vor 36 Tagen übernommen. Offensdk-breaking-change v4
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
openai/openai-python#3837 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Define + export `ServiceTiers` string literalEvtl. vergeben @SparshGarg999 hat das vor 63 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
openai/openai-python#3556 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Empty OPENAI_BASE_URL prevents fallback to default API endpointEvtl. vergeben @Sehastrajit-S hat das vor 29 Tagen übernommen. Offenbug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
openai/openai-python#2927 · 7 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in openai/openai-python
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
noontide-co/mainbranch#1211 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
[1.x Bug] run-operation --sql reports success but rolls back writes on transaction-capable adaptersOffentriage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
dbt-labs/dbt#16784 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug needs-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug settings ui
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
DewaldOosthuizen/py-tray-command-launcher#162 ·
Maintainer antworten meist innerhalb von 1 Tag
-
run_all sleeps after the final job despite documenting delays between jobsEvtl. vergeben @Gambit-Checkmate hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100