Registry for Non-Serializable Components
Register tools, models, dbs, and Pydantic schemas in a Registry so saved agents can be rehydrated from Postgres.
Demonstrates using Registry to restore tools, models, and schemas when loading components from the database.
The preserved source only saves until its final two calls are uncommented. Add a stable ID so that the shown lookup can find the saved agent.
"""
Registry for Non-Serializable Components
========================================
Demonstrates using Registry to restore tools, models, and schemas when loading
components from the database.
"""
from agno.agent.agent import Agent, get_agent_by_id # noqa: F401
from agno.db.postgres import PostgresDb
from agno.models.openai import OpenAIChat
from agno.registry import Registry
from agno.tools.duckduckgo import DuckDuckGoTools
from pydantic import BaseModel
# ---------------------------------------------------------------------------
# Setup
# ---------------------------------------------------------------------------
db = PostgresDb(db_url="postgresql+psycopg://ai:ai@localhost:5532/ai")
# ---------------------------------------------------------------------------
# Create Registry Schemas and Tools
# ---------------------------------------------------------------------------
class BasicInputSchema(BaseModel):
message: str
class BasicOutputSchema(BaseModel):
message: str
class ComplexInputSchema(BaseModel):
message: str
name: str
age: int
def sample_tool():
return "Hello, world!"
# ---------------------------------------------------------------------------
# Create Registry
# ---------------------------------------------------------------------------
registry = Registry(
name="Agno Registry",
description="Registry for Agno",
tools=[DuckDuckGoTools(), sample_tool],
models=[OpenAIChat(id="gpt-5-mini")],
dbs=[db],
schemas=[BasicInputSchema, BasicOutputSchema, ComplexInputSchema],
)
# ---------------------------------------------------------------------------
# Run Registry Example
# ---------------------------------------------------------------------------
if __name__ == "__main__":
# Uncomment this during your first run to save the agent to the database
agent = Agent(
model=OpenAIChat(id="gpt-5.6-luna"),
db=db,
tools=[DuckDuckGoTools(), sample_tool],
output_schema=BasicOutputSchema,
)
agent.save()
# agent = get_agent_by_id(db=db, id="registry-agent", registry=registry)
# agent.print_response("Call the sample tool")Run the Example
Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateInstall dependencies
uv pip install -U agno "psycopg[binary]" ddgs openai sqlalchemyExport your OpenAI API key
export OPENAI_API_KEY="your_openai_api_key_here"Run PgVector
docker run -d \
-e POSTGRES_DB=ai \
-e POSTGRES_USER=ai \
-e POSTGRES_PASSWORD=ai \
-e PGDATA=/var/lib/postgresql \
-v pgvolume:/var/lib/postgresql \
-p 5532:5432 \
--name pgvector \
agnohq/pgvector:18Save and load the same ID
Add id="registry-agent" to the Agent(...) constructor. Uncomment both final lines that call get_agent_by_id(...) and agent.print_response(...). Run the script to save that ID, reload it with the registry, and call the sample tool. The final response requires your OpenAI key.
Run the example
Save the code above as registry.py, then run:
python registry.pyFull source: cookbook/93_components/registry.py