6adde20 Merge pull request #20394 from open-webui/dev
f9b0534 Merge pull request #20522 from open-webui/dev
📊 Changes
1 file changed (+42 additions, -20 deletions)
View changed files
📝backend/open_webui/routers/openai.py (+42 -20)
📄 Description
Summary
Newer OpenAI models (gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, gpt-5, gpt-5.2) reject the deprecated max_tokens parameter and require max_completion_tokens instead, causing 400 errors during title/emoji/task generation.
Introduces is_openai_new_api_model() to match all models that use the newer API conventions (o-series + gpt-4.1+ + gpt-5+), while keeping is_openai_reasoning_model() for reasoning-specific behavior (system→developer role conversion, temperature restrictions).
Adds _extract_model_name() helper to handle provider-prefixed model names (e.g. openai/gpt-5.2 from LiteLLM proxies).
New _extract_model_name(): strips provider prefixes (openai/gpt-5 → gpt-5)
New is_openai_new_api_model(): matches o1, o3, o4, gpt-4.1, gpt-5 families
Renamed openai_reasoning_model_handler → openai_new_api_model_handler: applies max_completion_tokens conversion to all newer models, but only applies system→developer role conversion for reasoning models
Updated convert_to_azure_payload to use is_openai_new_api_model for token param conversion, while keeping temperature restriction for reasoning models only
Updated generate_chat_completion to use the new broader model check
Test plan
Verify title generation works with gpt-5.2 as task model (no 400 error)
Verify title generation works with gpt-4.1-mini as task model
Verify title generation still works with gpt-4o (uses max_tokens)
Verify reasoning models (o3, o4-mini) still get system→developer role conversion
Verify Ollama models still use max_tokens
Verify LiteLLM proxy with prefixed model names (e.g. openai/gpt-5.2) works correctly
Contributor License Agreement
By submitting this pull request, I confirm that I have read and fully agree to the Contributor License Agreement (CLA), and I am providing my contributions under its terms.
Note
Deleting the CLA section will lead to immediate closure of your PR and it will not be merged in.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/open-webui/open-webui/pull/22556
**Author:** [@alvinttang](https://github.com/alvinttang)
**Created:** 3/11/2026
**Status:** ❌ Closed
**Base:** `dev` ← **Head:** `fix/max-completion-tokens`
---
### 📝 Commits (10+)
- [`fe6783c`](https://github.com/open-webui/open-webui/commit/fe6783c16699911c7be17392596d579333fb110c) Merge pull request #19030 from open-webui/dev
- [`fc05e0a`](https://github.com/open-webui/open-webui/commit/fc05e0a6c5d39da60b603b4d520f800d6e36f748) Merge pull request #19405 from open-webui/dev
- [`e3faec6`](https://github.com/open-webui/open-webui/commit/e3faec62c58e3a83d89aa3df539feacefa125e0c) Merge pull request #19416 from open-webui/dev
- [`9899293`](https://github.com/open-webui/open-webui/commit/9899293f050ad50ae12024cbebee7e018acd851e) Merge pull request #19448 from open-webui/dev
- [`140605e`](https://github.com/open-webui/open-webui/commit/140605e660b8186a7d5c79fb3be6ffb147a2f498) Merge pull request #19462 from open-webui/dev
- [`6f1486f`](https://github.com/open-webui/open-webui/commit/6f1486ffd0cb288d0e21f41845361924e0d742b3) Merge pull request #19466 from open-webui/dev
- [`d95f533`](https://github.com/open-webui/open-webui/commit/d95f533214e3fe5beb5e41ec1f349940bc4c7043) Merge pull request #19729 from open-webui/dev
- [`a727153`](https://github.com/open-webui/open-webui/commit/a7271532f8a38da46785afcaa7e65f9a45e7d753) 0.6.43 (#20093)
- [`6adde20`](https://github.com/open-webui/open-webui/commit/6adde203cd292a9e3af9c64a2ae36b603fed096a) Merge pull request #20394 from open-webui/dev
- [`f9b0534`](https://github.com/open-webui/open-webui/commit/f9b0534e0c442631d1cb7205169588b9b6204179) Merge pull request #20522 from open-webui/dev
### 📊 Changes
**1 file changed** (+42 additions, -20 deletions)
<details>
<summary>View changed files</summary>
📝 `backend/open_webui/routers/openai.py` (+42 -20)
</details>
### 📄 Description
## Summary
- Newer OpenAI models (`gpt-4.1`, `gpt-4.1-mini`, `gpt-4.1-nano`, `gpt-5`, `gpt-5.2`) reject the deprecated `max_tokens` parameter and require `max_completion_tokens` instead, causing 400 errors during title/emoji/task generation.
- Introduces `is_openai_new_api_model()` to match all models that use the newer API conventions (o-series + gpt-4.1+ + gpt-5+), while keeping `is_openai_reasoning_model()` for reasoning-specific behavior (system→developer role conversion, temperature restrictions).
- Adds `_extract_model_name()` helper to handle provider-prefixed model names (e.g. `openai/gpt-5.2` from LiteLLM proxies).
Fixes #22524
## Changes
**`backend/open_webui/routers/openai.py`**:
- New `_extract_model_name()`: strips provider prefixes (`openai/gpt-5` → `gpt-5`)
- New `is_openai_new_api_model()`: matches `o1`, `o3`, `o4`, `gpt-4.1`, `gpt-5` families
- Renamed `openai_reasoning_model_handler` → `openai_new_api_model_handler`: applies `max_completion_tokens` conversion to all newer models, but only applies system→developer role conversion for reasoning models
- Updated `convert_to_azure_payload` to use `is_openai_new_api_model` for token param conversion, while keeping temperature restriction for reasoning models only
- Updated `generate_chat_completion` to use the new broader model check
## Test plan
- [ ] Verify title generation works with `gpt-5.2` as task model (no 400 error)
- [ ] Verify title generation works with `gpt-4.1-mini` as task model
- [ ] Verify title generation still works with `gpt-4o` (uses `max_tokens`)
- [ ] Verify reasoning models (`o3`, `o4-mini`) still get system→developer role conversion
- [ ] Verify Ollama models still use `max_tokens`
- [ ] Verify LiteLLM proxy with prefixed model names (e.g. `openai/gpt-5.2`) works correctly
### Contributor License Agreement
<!--
🚨 DO NOT DELETE THE TEXT BELOW 🚨
Keep the "Contributor License Agreement" confirmation text intact.
Deleting it will trigger the CLA-Bot to INVALIDATE your PR.
Your PR will NOT be reviewed or merged until you check the box below confirming that you have read and agree to the terms of the CLA.
-->
- [x] By submitting this pull request, I confirm that I have read and fully agree to the [Contributor License Agreement (CLA)](https://github.com/open-webui/open-webui/blob/main/CONTRIBUTOR_LICENSE_AGREEMENT), and I am providing my contributions under its terms.
> [!NOTE]
> Deleting the CLA section will lead to immediate closure of your PR and it will not be merged in.
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/open-webui/open-webui/pull/22556
Author: @alvinttang
Created: 3/11/2026
Status: ❌ Closed
Base:
dev← Head:fix/max-completion-tokens📝 Commits (10+)
fe6783cMerge pull request #19030 from open-webui/devfc05e0aMerge pull request #19405 from open-webui/deve3faec6Merge pull request #19416 from open-webui/dev9899293Merge pull request #19448 from open-webui/dev140605eMerge pull request #19462 from open-webui/dev6f1486fMerge pull request #19466 from open-webui/devd95f533Merge pull request #19729 from open-webui/deva7271530.6.43 (#20093)6adde20Merge pull request #20394 from open-webui/devf9b0534Merge pull request #20522 from open-webui/dev📊 Changes
1 file changed (+42 additions, -20 deletions)
View changed files
📝
backend/open_webui/routers/openai.py(+42 -20)📄 Description
Summary
gpt-4.1,gpt-4.1-mini,gpt-4.1-nano,gpt-5,gpt-5.2) reject the deprecatedmax_tokensparameter and requiremax_completion_tokensinstead, causing 400 errors during title/emoji/task generation.is_openai_new_api_model()to match all models that use the newer API conventions (o-series + gpt-4.1+ + gpt-5+), while keepingis_openai_reasoning_model()for reasoning-specific behavior (system→developer role conversion, temperature restrictions)._extract_model_name()helper to handle provider-prefixed model names (e.g.openai/gpt-5.2from LiteLLM proxies).Fixes #22524
Changes
backend/open_webui/routers/openai.py:_extract_model_name(): strips provider prefixes (openai/gpt-5→gpt-5)is_openai_new_api_model(): matcheso1,o3,o4,gpt-4.1,gpt-5familiesopenai_reasoning_model_handler→openai_new_api_model_handler: appliesmax_completion_tokensconversion to all newer models, but only applies system→developer role conversion for reasoning modelsconvert_to_azure_payloadto useis_openai_new_api_modelfor token param conversion, while keeping temperature restriction for reasoning models onlygenerate_chat_completionto use the new broader model checkTest plan
gpt-5.2as task model (no 400 error)gpt-4.1-minias task modelgpt-4o(usesmax_tokens)o3,o4-mini) still get system→developer role conversionmax_tokensopenai/gpt-5.2) works correctlyContributor License Agreement
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.