From 3dd3242c6d97c6923a720ab40690dcc31f9cb12e Mon Sep 17 00:00:00 2001 From: cthomas Date: Mon, 31 Mar 2025 09:49:15 -0700 Subject: [PATCH] fix: anthropic system event parse (#1471) --- letta/llm_api/anthropic_client.py | 14 ++++++-------- letta/schemas/message.py | 2 +- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/letta/llm_api/anthropic_client.py b/letta/llm_api/anthropic_client.py index 86a1f09f..ee73c09f 100644 --- a/letta/llm_api/anthropic_client.py +++ b/letta/llm_api/anthropic_client.py @@ -113,21 +113,19 @@ class AnthropicClient(LLMClientBase): # Messages inner_thoughts_xml_tag = "thinking" + + # Move 'system' to the top level + if messages[0].role != "system": + raise RuntimeError(f"First message is not a system message, instead has role {messages[0].role}") + data["system"] = messages[0].content if isinstance(messages[0].content, str) else messages[0].content[0].text data["messages"] = [ m.to_anthropic_dict( inner_thoughts_xml_tag=inner_thoughts_xml_tag, put_inner_thoughts_in_kwargs=bool(self.llm_config.put_inner_thoughts_in_kwargs), ) - for m in messages + for m in messages[1:] ] - # Move 'system' to the top level - if data["messages"][0]["role"] != "system": - raise RuntimeError(f'First message is not a system message, instead has role {data["messages"][0]["role"]}') - - data["system"] = data["messages"][0]["content"] - data["messages"] = data["messages"][1:] - # Ensure first message is user if data["messages"][0]["role"] != "user": data["messages"] = [{"role": "user", "content": DUMMY_FIRST_USER_MESSAGE}] + data["messages"] diff --git a/letta/schemas/message.py b/letta/schemas/message.py index 503a4072..65e5d84b 100644 --- a/letta/schemas/message.py +++ b/letta/schemas/message.py @@ -681,7 +681,7 @@ class Message(BaseMessage): user_system_event = add_xml_tag(string=f"SYSTEM ALERT: {text_content}", xml_tag="event") anthropic_message = { "content": user_system_event, - "role": "system", + "role": "user", } elif self.role == "user":