2024-06-05 15:48:14 -04:00
|
|
|
import pytest
|
2024-05-27 16:33:28 -04:00
|
|
|
|
2024-06-22 14:50:32 -04:00
|
|
|
from agnext.application import SingleThreadedAgentRuntime
|
|
|
|
from agnext.core import AgentId, AgentRuntime
|
|
|
|
from test_utils import LoopbackAgent, MessageType, NoopAgent
|
2024-05-27 16:33:28 -04:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
|
|
async def test_agent_names_must_be_unique() -> None:
|
2024-06-17 10:44:46 -04:00
|
|
|
runtime = SingleThreadedAgentRuntime()
|
2024-05-27 16:33:28 -04:00
|
|
|
|
2024-06-22 14:50:32 -04:00
|
|
|
def agent_factory(runtime: AgentRuntime, id: AgentId) -> NoopAgent:
|
|
|
|
assert id == AgentId("name1", "default")
|
|
|
|
agent = NoopAgent()
|
|
|
|
assert agent.id == id
|
|
|
|
return agent
|
|
|
|
|
|
|
|
agent1 = runtime.register_and_get("name1", agent_factory)
|
|
|
|
assert agent1 == AgentId("name1", "default")
|
2024-05-27 16:33:28 -04:00
|
|
|
|
|
|
|
with pytest.raises(ValueError):
|
2024-06-18 14:53:18 -04:00
|
|
|
_agent1 = runtime.register_and_get("name1", NoopAgent)
|
|
|
|
|
|
|
|
_agent1 = runtime.register_and_get("name3", NoopAgent)
|
|
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
|
|
async def test_register_receives_publish() -> None:
|
|
|
|
runtime = SingleThreadedAgentRuntime()
|
|
|
|
|
|
|
|
runtime.register("name", LoopbackAgent)
|
|
|
|
await runtime.publish_message(MessageType(), namespace="default")
|
2024-05-27 16:33:28 -04:00
|
|
|
|
2024-06-18 14:53:18 -04:00
|
|
|
while len(runtime.unprocessed_messages) > 0 or runtime.outstanding_tasks > 0:
|
|
|
|
await runtime.process_next()
|
2024-05-27 16:33:28 -04:00
|
|
|
|
2024-06-18 14:53:18 -04:00
|
|
|
# Agent in default namespace should have received the message
|
|
|
|
long_running_agent: LoopbackAgent = runtime._get_agent(runtime.get("name")) # type: ignore
|
|
|
|
assert long_running_agent.num_calls == 1
|
|
|
|
|
|
|
|
# Agent in other namespace should not have received the message
|
|
|
|
other_long_running_agent: LoopbackAgent = runtime._get_agent(runtime.get("name", namespace="other")) # type: ignore
|
|
|
|
assert other_long_running_agent.num_calls == 0
|
|
|
|
|