From 67bafa6302b9729bb9fadf0bbecdb73a395cd78e Mon Sep 17 00:00:00 2001 From: Reinier van der Leer Date: Wed, 14 Feb 2024 14:34:04 +0100 Subject: [PATCH] fix(autogpt/llm): `AssistantChatMessage.tool_calls` default `[]` instead of `None` OpenAI ChatCompletion calls fail when `tool_calls = None`. This issue came to light after 22aba6d. --- .../autogpt/core/resource/model_providers/openai.py | 2 +- .../autogpt/core/resource/model_providers/schema.py | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/autogpts/autogpt/autogpt/core/resource/model_providers/openai.py b/autogpts/autogpt/autogpt/core/resource/model_providers/openai.py index 3f7457e8ae..16180f4233 100644 --- a/autogpts/autogpt/autogpt/core/resource/model_providers/openai.py +++ b/autogpts/autogpt/autogpt/core/resource/model_providers/openai.py @@ -423,7 +423,7 @@ class OpenAIProvider( tool_calls=( [AssistantToolCall(**tc.dict()) for tc in _assistant_msg.tool_calls] if _assistant_msg.tool_calls - else None + else list() ), ) response = ChatModelResponse( diff --git a/autogpts/autogpt/autogpt/core/resource/model_providers/schema.py b/autogpts/autogpt/autogpt/core/resource/model_providers/schema.py index d220fbbbee..ec6e8eea0c 100644 --- a/autogpts/autogpt/autogpt/core/resource/model_providers/schema.py +++ b/autogpts/autogpt/autogpt/core/resource/model_providers/schema.py @@ -44,16 +44,14 @@ class ChatMessage(BaseModel): SYSTEM = "system" ASSISTANT = "assistant" + TOOL = "tool" + """May be used for the result of tool calls""" FUNCTION = "function" """May be used for the return value of function calls""" role: Role content: str - @staticmethod - def assistant(content: str) -> "ChatMessage": - return ChatMessage(role=ChatMessage.Role.ASSISTANT, content=content) - @staticmethod def user(content: str) -> "ChatMessage": return ChatMessage(role=ChatMessage.Role.USER, content=content) @@ -93,7 +91,7 @@ class AssistantToolCallDict(TypedDict): class AssistantChatMessage(ChatMessage): role: Literal["assistant"] = "assistant" content: Optional[str] - tool_calls: Optional[list[AssistantToolCall]] + tool_calls: list[AssistantToolCall] = Field(default_factory=list) class AssistantChatMessageDict(TypedDict, total=False):