Skip to content

[bug] new_text_message() may create messages with empty contents #28

@IthacaDream

Description

@IthacaDream

Issue:

  • new_text_message() may create messages with empty contents

def new_text_message(content: str, *, role: str | Role = "") -> Message:
"""
创建一个系统消息.
"""
meta = MessageMeta(role=str(role))
obj = Text(text=content)
return Message(meta=meta).as_completed([obj.to_content()])

Description:

new_text_message() builds a Message with the default seq="completed" and then calls as_completed(contents).
Since Message.as_completed() returns early when seq is already "completed", the provided contents are ignored and the resulting message can have missing/empty contents.
This breaks downstream consumers that expect context messages to contain serialized content parts.

def as_completed(self, contents: list[Content] | None = None) -> Self:
"""
基于当前数据, 生成一个 尾包.
常见用法:
>>> msg = Message.new().as_completed(contents)
>>> # 复制一个新的尾包.
>>> copy_msg = msg.get_copy().as_completed()
"""
if self.seq == "completed":
return self

Repro Steps:

Use the following test function:

    def test_new_text_message_creates_completed_message() -> None:
        msg = new_text_message("hello", role="system")
        assert msg.role == Role.SYSTEM.value
        assert msg.seq == "completed"
>       assert msg.contents is not None
E       AssertionError: assert None is not None

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions