import pytest from autogen_agentchat.messages import StopMessage, TextMessage from autogen_agentchat.task import MaxMessageTermination, StopMessageTermination, TextMentionTermination @pytest.mark.asyncio async def test_stop_message_termination() -> None: termination = StopMessageTermination() assert await termination([]) is None await termination.reset() assert await termination([TextMessage(content="Hello", source="user")]) is None await termination.reset() assert await termination([StopMessage(content="Stop", source="user")]) is not None await termination.reset() assert ( await termination([TextMessage(content="Hello", source="user"), TextMessage(content="World", source="agent")]) is None ) await termination.reset() assert ( await termination([TextMessage(content="Hello", source="user"), StopMessage(content="Stop", source="user")]) is not None ) @pytest.mark.asyncio async def test_max_message_termination() -> None: termination = MaxMessageTermination(2) assert await termination([]) is None await termination.reset() assert await termination([TextMessage(content="Hello", source="user")]) is None await termination.reset() assert ( await termination([TextMessage(content="Hello", source="user"), TextMessage(content="World", source="agent")]) is not None ) @pytest.mark.asyncio async def test_mention_termination() -> None: termination = TextMentionTermination("stop") assert await termination([]) is None await termination.reset() assert await termination([TextMessage(content="Hello", source="user")]) is None await termination.reset() assert await termination([TextMessage(content="stop", source="user")]) is not None await termination.reset() assert ( await termination([TextMessage(content="Hello", source="user"), TextMessage(content="stop", source="user")]) is not None ) @pytest.mark.asyncio async def test_and_termination() -> None: termination = MaxMessageTermination(2) & TextMentionTermination("stop") assert await termination([]) is None await termination.reset() assert await termination([TextMessage(content="Hello", source="user")]) is None await termination.reset() assert ( await termination([TextMessage(content="Hello", source="user"), TextMessage(content="World", source="agent")]) is None ) await termination.reset() assert ( await termination([TextMessage(content="Hello", source="user"), TextMessage(content="stop", source="user")]) is not None ) @pytest.mark.asyncio async def test_or_termination() -> None: termination = MaxMessageTermination(3) | TextMentionTermination("stop") assert await termination([]) is None await termination.reset() assert await termination([TextMessage(content="Hello", source="user")]) is None await termination.reset() assert ( await termination([TextMessage(content="Hello", source="user"), TextMessage(content="World", source="agent")]) is None ) await termination.reset() assert ( await termination([TextMessage(content="Hello", source="user"), TextMessage(content="stop", source="user")]) is not None ) await termination.reset() assert ( await termination([TextMessage(content="Hello", source="user"), TextMessage(content="Hello", source="user")]) is None ) await termination.reset() assert ( await termination( [ TextMessage(content="Hello", source="user"), TextMessage(content="Hello", source="user"), TextMessage(content="Hello", source="user"), ] ) is not None ) await termination.reset() assert ( await termination( [ TextMessage(content="Hello", source="user"), TextMessage(content="Hello", source="user"), TextMessage(content="stop", source="user"), ] ) is not None ) await termination.reset() assert ( await termination( [ TextMessage(content="Hello", source="user"), TextMessage(content="Hello", source="user"), TextMessage(content="Hello", source="user"), TextMessage(content="stop", source="user"), ] ) is not None )