From 05dceec3e79675a5ddc428cbee525f3fbb0ea01f Mon Sep 17 00:00:00 2001 From: Quentin BEY Date: Sat, 20 Sep 2025 21:37:57 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B(vercel-sdk)=20allow=20tool=20calls?= =?UTF-8?q?=20to=20have=20no=20arguments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some tools might not need arguments because they rely only on the run context, we can allow that. --- src/backend/chat/ai_sdk_types.py | 4 ++-- src/backend/chat/clients/pydantic_ui_message_converter.py | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/backend/chat/ai_sdk_types.py b/src/backend/chat/ai_sdk_types.py index 137ecdd..d96d184 100644 --- a/src/backend/chat/ai_sdk_types.py +++ b/src/backend/chat/ai_sdk_types.py @@ -22,7 +22,7 @@ class ToolCall(BaseModel): toolCallId: str toolName: str - args: Dict[str, Any] + args: Optional[Dict[str, Any]] = None class ToolResult(BaseModel): @@ -38,7 +38,7 @@ class ToolResult(BaseModel): toolCallId: str toolName: str - args: Dict[str, Any] + args: Optional[Dict[str, Any]] = None result: Any diff --git a/src/backend/chat/clients/pydantic_ui_message_converter.py b/src/backend/chat/clients/pydantic_ui_message_converter.py index 5eda9f0..dd2b65a 100644 --- a/src/backend/chat/clients/pydantic_ui_message_converter.py +++ b/src/backend/chat/clients/pydantic_ui_message_converter.py @@ -119,7 +119,7 @@ def model_message_to_ui_message(model_message: ModelMessage) -> UIMessage: # no raise ValueError( f"Unsupported UserContent in UserPromptPart: {type(c)}" ) - elif isinstance(part, TextPart): + elif isinstance(part, TextPart) and part.content: parts.append(TextUIPart(type="text", text=part.content)) elif isinstance(part, ToolReturnPart): pass @@ -188,7 +188,9 @@ def model_message_to_ui_message(model_message: ModelMessage) -> UIMessage: # no state="call", toolCallId=part.tool_call_id, toolName=part.tool_name, - args=json.loads(part.args) if isinstance(part.args, str) else part.args, + args=json.loads(part.args) + if isinstance(part.args, str) + else part.args or {}, ), ) )