Utilising the Agentverse Mailroom feature
Introduction
The Agentverse assists you in setting up mailboxes for local and Agentverse agents, allowing them to have a two-way communication with each other without the need to be constantly online and without requiring your constant presence to operate.
To create a Mailbox, retrieve your local agent address and head over to the Agentverse: My Agents tab. Here, click on Local Agents and click on Connect Local Agent.
You will need to provide the address of the local agent you wish to retrieve and wait for confirmation. You will then need to provide a name for the agent.
Once you do so and confirm, you will see a Mailbox API Key showing up.
Copy and paste it within your local agent code by filling up the AGENT_MAILBOX_KEY
field inline. Remember, each agent needs a dedicated separate mailbox.
You can then restart your local agent.
Local agent setup
Let's now start by creating a local agent named alice
with a handle_message()
function using an @agent.on_message()
decorator to handle messages received by other agents and matching the Message
class:
from uagents import Agent, Context, Model
class Message(Model):
message: str
# First generate a secure seed phrase (e.g. https://pypi.org/project/mnemonic/)
SEED_PHRASE = "put_your_seed_phrase_here"
AGENT_MAILBOX_KEY = "put_your_AGENT_MAILBOX_KEY_here"
# Now your agent is ready to join the agentverse!
agent = Agent(
name="alice",
seed=SEED_PHRASE,
mailbox=f"{AGENT_MAILBOX_KEY}@https://agentverse.ai",
)
# Copy the address shown below
print(f"Your agent's address is: {Agent(seed=SEED_PHRASE).address}")
# Then go to https://agentverse.ai, register your agent in the Mailroom and copy the agent's mailbox key. FIll the AGENT_MAILBOX_KEY in-line
@agent.on_message(model=Message, replies={Message})
async def handle_message(ctx: Context, sender: str, msg: Message):
ctx.logger.info(f"Received message from {sender}: {msg.message}")
# send the response
ctx.logger.info("Sending message to bob")
await ctx.send(sender, Message(message="hello there bob"))
if __name__ == "__main__":
agent.run()
You can then restart your agent; now your agent doesn't need to run all the time as their messages will be waiting for them for when they come back online.
Agentverse agent setup
Now create an Agentverse agent by selecting + New Agent in the My Agents tab in the Agentverse ↗️ (opens in a new tab). Then, select a blank script and add the following code into it:
class Message(Model):
message: str
# Copy ALICE_ADDRESS generated in agent_1.py
ALICE_ADDRESS = "agent1qfa53drat8rzau90u4494gx5mhj3v87tm4t5cuz7gkegxcm5vx5pku7kf"
# Generate a second seed phrase (e.g. https://pypi.org/project/mnemonic/)
SEED_PHRASE = "put_your_seed_phrase_here"
@agent.on_interval(period=2.0)
async def send_message(ctx: Context):
ctx.logger.info("Sending message to alice")
await ctx.send(ALICE_ADDRESS, Message(message="hello there alice"))
@agent.on_message(model=Message, replies=set())
async def on_message(ctx: Context, sender: str, msg: Message):
ctx.logger.info(f"Received message from {sender}: {msg.message}")
if __name__ == "__main__":
agent.run()
Next, run this agent on the Agentverse.
Expected output
You will see something like the following depending on the agent considered:
-
Agentverse Agent output:
2024-06-27 11:20:19 Info Agent [INFO]: Sending message to alice 2024-06-27 11:20:19 Info Agent [INFO]: Received message from agent1qfa53drat8rzau90u4494gx5mhj3v87tm4t5cuzkd7gkegxcm5vx5pku7kf: hello there bob
-
Local Agent output:
INFO: [ALICE]: Received message from agent1qd3hd6peaejavk3uredlxz05e8tcx6purl5gpuamk22xduj7e37k2sqetaa: hello there alice INFO: [ALICE]: Sending message to bob