feat: flatten content field in user message (#781)

This commit is contained in:
cthomas 2025-01-28 10:32:44 -08:00 committed by GitHub
parent b8e4b15605
commit 2cc801c154
3 changed files with 26 additions and 4 deletions

View File

@ -25,6 +25,7 @@ from letta.schemas.letta_message import (
ToolReturnMessage,
UserMessage,
)
from letta.system import unpack_message
from letta.utils import get_utc_time, is_utc_datetime, json_dumps
@ -264,11 +265,12 @@ class Message(BaseMessage):
elif self.role == MessageRole.user:
# This is type UserMessage
assert self.text is not None, self
message_str = unpack_message(self.text)
messages.append(
UserMessage(
id=self.id,
date=self.created_at,
content=self.text,
content=message_str or self.text,
)
)
elif self.role == MessageRole.system:

View File

@ -1,5 +1,6 @@
import json
import uuid
import warnings
from typing import Optional
from .constants import (
@ -205,3 +206,22 @@ def get_token_limit_warning():
}
return json_dumps(packaged_message)
def unpack_message(packed_message) -> str:
"""Take a packed message string and attempt to extract the inner message content"""
try:
message_json = json.loads(packed_message)
except:
warnings.warn(f"Was unable to load message as JSON to unpack: ''{packed_message}")
return packed_message
if "message" not in message_json:
if "type" in message_json and message_json["type"] in ["login", "heartbeat"]:
# This is a valid user message that the ADE expects, so don't print warning
return packed_message
warnings.warn(f"Was unable to find 'message' field in packed message object: '{packed_message}'")
return packed_message
else:
return message_json.get("message")

View File

@ -26,6 +26,7 @@ from letta.schemas.job import Job as PydanticJob
from letta.schemas.message import Message
from letta.schemas.source import Source as PydanticSource
from letta.server.server import SyncServer
from letta.system import unpack_message
from .utils import DummyDataConnector
@ -711,7 +712,7 @@ def _test_get_messages_letta_format(
elif message.role == MessageRole.user:
assert isinstance(letta_message, UserMessage)
assert message.text == letta_message.content
assert unpack_message(message.text) == letta_message.content
letta_message_index += 1
elif message.role == MessageRole.system:
@ -734,8 +735,7 @@ def _test_get_messages_letta_format(
def test_get_messages_letta_format(server, user, agent_id):
# for reverse in [False, True]:
for reverse in [False]:
for reverse in [False, True]:
_test_get_messages_letta_format(server, user, agent_id, reverse=reverse)