From fe2a0f962f3d5674a2f8a70b6a4c62ab5cf6b571 Mon Sep 17 00:00:00 2001 From: mlmz <54172054+minleminzui@users.noreply.github.com> Date: Wed, 25 Jun 2025 17:11:03 +0800 Subject: [PATCH] minor: 'role' must be system/assistant/tool, but case insensitive for now (#7499) --- python/sglang/srt/entrypoints/openai/protocol.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/python/sglang/srt/entrypoints/openai/protocol.py b/python/sglang/srt/entrypoints/openai/protocol.py index b44f338e5..192869c31 100644 --- a/python/sglang/srt/entrypoints/openai/protocol.py +++ b/python/sglang/srt/entrypoints/openai/protocol.py @@ -313,6 +313,18 @@ class ChatCompletionMessageGenericParam(BaseModel): reasoning_content: Optional[str] = None tool_calls: Optional[List[ToolCall]] = Field(default=None, examples=[None]) + @field_validator("role", mode="before") + @classmethod + def _normalize_role(cls, v): + if isinstance(v, str): + v_lower = v.lower() + if v_lower not in {"system", "assistant", "tool"}: + raise ValueError( + "'role' must be one of 'system', 'assistant', or 'tool' (case-insensitive)." + ) + return v_lower + raise ValueError("'role' must be a string") + class ChatCompletionMessageUserParam(BaseModel): role: Literal["user"]