From 38d716995c27e41192e3bbc2ae2495006b1e484e Mon Sep 17 00:00:00 2001 From: "Ching Hsuan(Luca) Lin" <67009502+Lucaz0619@users.noreply.github.com> Date: Thu, 6 Feb 2025 19:49:34 +0800 Subject: [PATCH] git: Handle None values in ChatMessage content (#422) * git: Handle None values in ChatMessage content * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/litserve/specs/openai.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/litserve/specs/openai.py b/src/litserve/specs/openai.py index bf783ad5..857f60cf 100644 --- a/src/litserve/specs/openai.py +++ b/src/litserve/specs/openai.py @@ -133,7 +133,7 @@ class ResponseFormatJSONSchema(BaseModel): class ChatMessage(BaseModel): role: str - content: Union[str, List[Union[TextContent, ImageContent]]] + content: Optional[Union[str, List[Union[TextContent, ImageContent]]]] = None name: Optional[str] = None tool_calls: Optional[List[ToolCall]] = None tool_call_id: Optional[str] = None @@ -312,9 +312,10 @@ def validate_chat_message(self, obj): def _encode_response(self, output: Union[Dict[str, str], List[Dict[str, str]]]) -> Dict: logger.debug(output) - if isinstance(output, str): + if output is None: + message = {"role": "assistant", "content": None} + elif isinstance(output, str): message = {"role": "assistant", "content": output} - elif self.validate_chat_message(output): message = output elif isinstance(output, dict) and "content" in output: @@ -448,7 +449,7 @@ async def non_streaming_completion(self, request: ChatCompletionRequest, generat if chat_msg.tool_calls: tool_calls = chat_msg.tool_calls - content = "".join(msgs) + content = "".join(msg for msg in msgs if msg is not None) msg = {"role": "assistant", "content": content, "tool_calls": tool_calls} choice = ChatCompletionResponseChoice(index=i, message=msg, finish_reason="stop") choices.append(choice)