mirror of
https://github.com/open-webui/open-webui
synced 2025-06-26 18:26:48 +00:00
* refactor openai handler to support all o-series models universally
This commit is contained in:
parent
1a6e4c2948
commit
5a8e417590
@ -94,20 +94,19 @@ async def cleanup_response(
|
|||||||
await session.close()
|
await session.close()
|
||||||
|
|
||||||
|
|
||||||
def openai_o1_o3_handler(payload):
|
def openai_o_series_handler(payload):
|
||||||
"""
|
"""
|
||||||
Handle o1, o3 specific parameters
|
Handle "o" series specific parameters
|
||||||
"""
|
"""
|
||||||
if "max_tokens" in payload:
|
if "max_tokens" in payload:
|
||||||
# Remove "max_tokens" from the payload
|
# Convert "max_tokens" to "max_completion_tokens" for all o-series models
|
||||||
payload["max_completion_tokens"] = payload["max_tokens"]
|
payload["max_completion_tokens"] = payload["max_tokens"]
|
||||||
del payload["max_tokens"]
|
del payload["max_tokens"]
|
||||||
|
|
||||||
# Fix: o1 and o3 do not support the "system" role directly.
|
# Handle system role conversion based on model type
|
||||||
# For older models like "o1-mini" or "o1-preview", use role "user".
|
|
||||||
# For newer o1/o3 models, replace "system" with "developer".
|
|
||||||
if payload["messages"][0]["role"] == "system":
|
if payload["messages"][0]["role"] == "system":
|
||||||
model_lower = payload["model"].lower()
|
model_lower = payload["model"].lower()
|
||||||
|
# Legacy models use "user" role instead of "system"
|
||||||
if model_lower.startswith("o1-mini") or model_lower.startswith("o1-preview"):
|
if model_lower.startswith("o1-mini") or model_lower.startswith("o1-preview"):
|
||||||
payload["messages"][0]["role"] = "user"
|
payload["messages"][0]["role"] = "user"
|
||||||
else:
|
else:
|
||||||
@ -670,10 +669,10 @@ async def generate_chat_completion(
|
|||||||
url = request.app.state.config.OPENAI_API_BASE_URLS[idx]
|
url = request.app.state.config.OPENAI_API_BASE_URLS[idx]
|
||||||
key = request.app.state.config.OPENAI_API_KEYS[idx]
|
key = request.app.state.config.OPENAI_API_KEYS[idx]
|
||||||
|
|
||||||
# Fix: o1,o3 does not support the "max_tokens" parameter, Modify "max_tokens" to "max_completion_tokens"
|
# Check if model is from "o" series
|
||||||
is_o1_o3 = payload["model"].lower().startswith(("o1", "o3-"))
|
is_o_series = payload["model"].lower().startswith(("o1", "o3", "o4"))
|
||||||
if is_o1_o3:
|
if is_o_series:
|
||||||
payload = openai_o1_o3_handler(payload)
|
payload = openai_o_series_handler(payload)
|
||||||
elif "api.openai.com" not in url:
|
elif "api.openai.com" not in url:
|
||||||
# Remove "max_completion_tokens" from the payload for backward compatibility
|
# Remove "max_completion_tokens" from the payload for backward compatibility
|
||||||
if "max_completion_tokens" in payload:
|
if "max_completion_tokens" in payload:
|
||||||
|
Loading…
Reference in New Issue
Block a user