diff --git a/backend/open_webui/routers/openai.py b/backend/open_webui/routers/openai.py index 6d2c3a241e..875b9c3b75 100644 --- a/backend/open_webui/routers/openai.py +++ b/backend/open_webui/routers/openai.py @@ -702,6 +702,10 @@ def get_azure_allowed_params(api_version: str) -> set[str]: return allowed_params +def is_openai_reasoning_model(model: str) -> bool: + return model.lower().startswith(("o1", "o3", "o4", "gpt-5")) + + def convert_to_azure_payload(url, payload: dict, api_version: str): model = payload.get("model", "") @@ -709,7 +713,7 @@ def convert_to_azure_payload(url, payload: dict, api_version: str): allowed_params = get_azure_allowed_params(api_version) # Special handling for o-series models - if model.startswith("o") and model.endswith("-mini"): + if is_openai_reasoning_model(model): # Convert max_tokens to max_completion_tokens for o-series models if "max_tokens" in payload: payload["max_completion_tokens"] = payload["max_tokens"] @@ -815,10 +819,7 @@ async def generate_chat_completion( key = request.app.state.config.OPENAI_API_KEYS[idx] # Check if model is a reasoning model that needs special handling - is_reasoning_model = ( - payload["model"].lower().startswith(("o1", "o3", "o4", "gpt-5")) - ) - if is_reasoning_model: + if is_openai_reasoning_model(payload["model"]): payload = openai_reasoning_model_handler(payload) elif "api.openai.com" not in url: # Remove "max_completion_tokens" from the payload for backward compatibility