|
@@ -94,20 +94,19 @@ async def cleanup_response(
|
|
|
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:
|
|
|
- # 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"]
|
|
|
del payload["max_tokens"]
|
|
|
|
|
|
- # Fix: o1 and o3 do not support the "system" role directly.
|
|
|
- # For older models like "o1-mini" or "o1-preview", use role "user".
|
|
|
- # For newer o1/o3 models, replace "system" with "developer".
|
|
|
+ # Handle system role conversion based on model type
|
|
|
if payload["messages"][0]["role"] == "system":
|
|
|
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"):
|
|
|
payload["messages"][0]["role"] = "user"
|
|
|
else:
|
|
@@ -670,10 +669,10 @@ async def generate_chat_completion(
|
|
|
url = request.app.state.config.OPENAI_API_BASE_URLS[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"
|
|
|
- is_o1_o3 = payload["model"].lower().startswith(("o1", "o3-"))
|
|
|
- if is_o1_o3:
|
|
|
- payload = openai_o1_o3_handler(payload)
|
|
|
+ # Check if model is from "o" series
|
|
|
+ is_o_series = payload["model"].lower().startswith(("o1", "o3", "o4"))
|
|
|
+ if is_o_series:
|
|
|
+ payload = openai_o_series_handler(payload)
|
|
|
elif "api.openai.com" not in url:
|
|
|
# Remove "max_completion_tokens" from the payload for backward compatibility
|
|
|
if "max_completion_tokens" in payload:
|