from agno.agent import Agent, RemoteAgent
from agno.db.postgres import PostgresDb
from agno.models.openai import OpenAIChat
from agno.os import AgentOS
from agno.team import RemoteTeam
from agno.workflow import RemoteWorkflow, Workflow
from agno.workflow.step import Step
# Database for local components
db = PostgresDb(db_url="postgresql+psycopg://ai:ai@localhost:5532/ai")
# Local agents for a local workflow
story_writer = Agent(
name="Story Writer",
model=OpenAIChat(id="gpt-4o-mini"),
instructions="Write a 100 word story based on the given topic",
)
story_editor = Agent(
name="Story Editor",
model=OpenAIChat(id="gpt-4o-mini"),
instructions="Review and improve the story's grammar and flow",
)
# Local workflow using local agents
story_workflow = Workflow(
name="Story Generation",
id="story-workflow",
description="Generate and edit stories",
db=db,
steps=[
Step(name="write_story", agent=story_writer),
Step(name="edit_story", agent=story_editor),
],
)
# Gateway combining local and remote components
gateway = AgentOS(
id="content-gateway",
description="Gateway for content generation services",
agents=[
# Remote agents from specialized servers
RemoteAgent(base_url="http://server-1:7778", agent_id="assistant-agent"),
RemoteAgent(base_url="http://server-1:7778", agent_id="researcher-agent"),
],
teams=[
# Remote team
RemoteTeam(base_url="http://server-1:7778", team_id="research-team"),
],
workflows=[
# Remote workflow
RemoteWorkflow(base_url="http://server-1:7778", workflow_id="qa-workflow"),
# Local workflow
story_workflow,
],
)
app = gateway.get_app()
if __name__ == "__main__":
gateway.serve(app="gateway:app", reload=True, port=7777)