Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create new merged Storage #2294

Merged
merged 17 commits into from
Mar 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
# Ignore .envrc files (used by direnv: https://direnv.net/)
.envrc

certs/

# ignore storage dir
/storage
Expand Down Expand Up @@ -62,4 +63,4 @@ token.json

# Coverage
coverage_report
.coverage
.coverage
2 changes: 1 addition & 1 deletion cookbook/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ The concepts cookbook walks through the core concepts of Agno.
- [RAG](./agent_concepts/rag)
- [Knowledge](./agent_concepts/knowledge)
- [Memory](./agent_concepts/memory)
- [Storage](./agent_concepts/storage)
- [Storage](storage)
- [Tools](./agent_concepts/tools)
- [Reasoning](./agent_concepts/reasoning)
- [Vector DBs](./agent_concepts/vector_dbs)
Expand Down
1 change: 0 additions & 1 deletion cookbook/examples/agents/agno_support_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
from agno.knowledge.url import UrlKnowledge
from agno.models.openai import OpenAIChat
from agno.storage.agent.sqlite import SqliteAgentStorage
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.python import PythonTools
from agno.vectordb.lancedb import LanceDb, SearchType
from rich import print
Expand Down
4 changes: 2 additions & 2 deletions cookbook/getting_started/04_agent_with_storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from agno.embedder.openai import OpenAIEmbedder
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
from agno.models.openai import OpenAIChat
from agno.storage.agent.sqlite import SqliteAgentStorage
from agno.storage.sqlite import SqliteStorage
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.vectordb.lancedb import LanceDb, SearchType
from rich import print
Expand All @@ -41,7 +41,7 @@
# if agent_knowledge is not None:
# agent_knowledge.load()

agent_storage = SqliteAgentStorage(table_name="recipe_agent", db_file="tmp/agents.db")
agent_storage = SqliteStorage(table_name="recipe_agent", db_file="tmp/agents.db")


def recipe_agent(user: str = "user"):
Expand Down
4 changes: 2 additions & 2 deletions cookbook/getting_started/09_research_workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.storage.workflow.sqlite import SqliteWorkflowStorage
from agno.storage.sqlite import SqliteStorage
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.newspaper4k import Newspaper4kTools
from agno.utils.log import logger
Expand Down Expand Up @@ -408,7 +408,7 @@ def write_research_report(
# Initialize the news report generator workflow
generate_research_report = ResearchReportGenerator(
session_id=f"generate-report-on-{url_safe_topic}",
storage=SqliteWorkflowStorage(
storage=SqliteStorage(
table_name="generate_research_report_workflow",
db_file="tmp/workflows.db",
),
Expand Down
6 changes: 2 additions & 4 deletions cookbook/getting_started/16_agent_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import typer
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.storage.agent.sqlite import SqliteAgentStorage
from agno.storage.sqlite import SqliteStorage
from rich import print
from rich.console import Console
from rich.json import JSON
Expand All @@ -34,9 +34,7 @@ def create_agent(user: str = "user"):
new = typer.confirm("Do you want to start a new session?")

# Get existing session if user doesn't want a new one
agent_storage = SqliteAgentStorage(
table_name="agent_sessions", db_file="tmp/agents.db"
)
agent_storage = SqliteStorage(table_name="agent_sessions", db_file="tmp/agents.db")

if not new:
existing_sessions = agent_storage.get_all_session_ids(user)
Expand Down
6 changes: 2 additions & 4 deletions cookbook/getting_started/17_user_memories_and_summaries.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
from agno.agent import Agent, AgentMemory
from agno.memory.db.sqlite import SqliteMemoryDb
from agno.models.openai import OpenAIChat
from agno.storage.agent.sqlite import SqliteAgentStorage
from agno.storage.sqlite import SqliteStorage
from rich.console import Console
from rich.json import JSON
from rich.panel import Panel
Expand All @@ -43,9 +43,7 @@ def create_agent(user: str = "user"):
new = typer.confirm("Do you want to start a new session?")

# Initialize storage for both agent sessions and memories
agent_storage = SqliteAgentStorage(
table_name="agent_memories", db_file="tmp/agents.db"
)
agent_storage = SqliteStorage(table_name="agent_memories", db_file="tmp/agents.db")

if not new:
existing_sessions = agent_storage.get_all_session_ids(user)
Expand Down
4 changes: 2 additions & 2 deletions cookbook/hackathon/playground/blog_to_podcast.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.playground import Playground, serve_playground_app
from agno.storage.agent.sqlite import SqliteAgentStorage
from agno.storage.sqlite import SqliteStorage
from agno.tools.eleven_labs import ElevenLabsTools
from agno.tools.firecrawl import FirecrawlTools

Expand Down Expand Up @@ -43,7 +43,7 @@
markdown=True,
debug_mode=True,
add_history_to_messages=True,
storage=SqliteAgentStorage(
storage=SqliteStorage(
table_name="blog_to_podcast_agent", db_file=image_agent_storage_file
),
)
Expand Down
18 changes: 6 additions & 12 deletions cookbook/hackathon/playground/demo.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
"""Run `pip install openai exa_py duckduckgo-search yfinance pypdf sqlalchemy 'fastapi[standard]' youtube-transcript-api python-docx agno` to install dependencies."""

from datetime import datetime
from textwrap import dedent

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.playground import Playground, serve_playground_app
from agno.storage.agent.sqlite import SqliteAgentStorage
from agno.storage.sqlite import SqliteStorage
from agno.tools.dalle import DalleTools
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.exa import ExaTools
from agno.tools.yfinance import YFinanceTools
from agno.tools.youtube import YouTubeTools

Expand All @@ -22,7 +18,7 @@
role="Answer basic questions",
agent_id="simple-agent",
model=OpenAIChat(id="gpt-4o-mini"),
storage=SqliteAgentStorage(table_name="simple_agent", db_file=agent_storage_file),
storage=SqliteStorage(table_name="simple_agent", db_file=agent_storage_file),
add_history_to_messages=True,
num_history_responses=3,
add_datetime_to_instructions=True,
Expand All @@ -39,7 +35,7 @@
"Break down the users request into 2-3 different searches.",
"Always include sources",
],
storage=SqliteAgentStorage(table_name="web_agent", db_file=agent_storage_file),
storage=SqliteStorage(table_name="web_agent", db_file=agent_storage_file),
add_history_to_messages=True,
num_history_responses=5,
add_datetime_to_instructions=True,
Expand All @@ -60,7 +56,7 @@
)
],
instructions=["Always use tables to display data"],
storage=SqliteAgentStorage(table_name="finance_agent", db_file=agent_storage_file),
storage=SqliteStorage(table_name="finance_agent", db_file=agent_storage_file),
add_history_to_messages=True,
num_history_responses=5,
add_datetime_to_instructions=True,
Expand All @@ -81,9 +77,7 @@
debug_mode=True,
add_history_to_messages=True,
add_datetime_to_instructions=True,
storage=SqliteAgentStorage(
table_name="image_agent", db_file=image_agent_storage_file
),
storage=SqliteStorage(table_name="image_agent", db_file=image_agent_storage_file),
)

youtube_agent = Agent(
Expand All @@ -102,7 +96,7 @@
num_history_responses=5,
show_tool_calls=True,
add_datetime_to_instructions=True,
storage=SqliteAgentStorage(table_name="youtube_agent", db_file=agent_storage_file),
storage=SqliteStorage(table_name="youtube_agent", db_file=agent_storage_file),
markdown=True,
)

Expand Down
26 changes: 8 additions & 18 deletions cookbook/hackathon/playground/multimodal_agents.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from agno.models.openai import OpenAIChat
from agno.models.response import FileType
from agno.playground import Playground, serve_playground_app
from agno.storage.agent.sqlite import SqliteAgentStorage
from agno.storage.sqlite import SqliteStorage
from agno.tools.dalle import DalleTools
from agno.tools.eleven_labs import ElevenLabsTools
from agno.tools.fal import FalTools
Expand All @@ -33,9 +33,7 @@
debug_mode=True,
add_history_to_messages=True,
add_datetime_to_instructions=True,
storage=SqliteAgentStorage(
table_name="image_agent", db_file=image_agent_storage_file
),
storage=SqliteStorage(table_name="image_agent", db_file=image_agent_storage_file),
)

ml_gif_agent = Agent(
Expand All @@ -52,9 +50,7 @@
debug_mode=True,
add_history_to_messages=True,
add_datetime_to_instructions=True,
storage=SqliteAgentStorage(
table_name="ml_gif_agent", db_file=image_agent_storage_file
),
storage=SqliteStorage(table_name="ml_gif_agent", db_file=image_agent_storage_file),
)

ml_music_agent = Agent(
Expand All @@ -78,7 +74,7 @@
debug_mode=True,
add_history_to_messages=True,
add_datetime_to_instructions=True,
storage=SqliteAgentStorage(
storage=SqliteStorage(
table_name="ml_music_agent", db_file=image_agent_storage_file
),
)
Expand All @@ -97,7 +93,7 @@
debug_mode=True,
add_history_to_messages=True,
add_datetime_to_instructions=True,
storage=SqliteAgentStorage(
storage=SqliteStorage(
table_name="ml_video_agent", db_file=image_agent_storage_file
),
)
Expand All @@ -116,9 +112,7 @@
debug_mode=True,
add_history_to_messages=True,
add_datetime_to_instructions=True,
storage=SqliteAgentStorage(
table_name="fal_agent", db_file=image_agent_storage_file
),
storage=SqliteStorage(table_name="fal_agent", db_file=image_agent_storage_file),
)

gif_agent = Agent(
Expand All @@ -135,9 +129,7 @@
debug_mode=True,
add_history_to_messages=True,
add_datetime_to_instructions=True,
storage=SqliteAgentStorage(
table_name="gif_agent", db_file=image_agent_storage_file
),
storage=SqliteStorage(table_name="gif_agent", db_file=image_agent_storage_file),
)

audio_agent = Agent(
Expand All @@ -163,9 +155,7 @@
debug_mode=True,
add_history_to_messages=True,
add_datetime_to_instructions=True,
storage=SqliteAgentStorage(
table_name="audio_agent", db_file=image_agent_storage_file
),
storage=SqliteStorage(table_name="audio_agent", db_file=image_agent_storage_file),
)


Expand Down
7 changes: 2 additions & 5 deletions cookbook/models/anthropic/memory.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@
from agno.agent import Agent, AgentMemory
from agno.memory.db.postgres import PgMemoryDb
from agno.models.anthropic import Claude
from agno.storage.agent.postgres import PostgresAgentStorage
from rich.pretty import pprint
from agno.storage.postgres import PostgresStorage

db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"
agent = Agent(
Expand All @@ -22,9 +21,7 @@
create_session_summary=True,
),
# Store agent sessions in a database
storage=PostgresAgentStorage(
table_name="personalized_agent_sessions", db_url=db_url
),
storage=PostgresStorage(table_name="personalized_agent_sessions", db_url=db_url),
# Show debug logs so, you can see the memory being created
# debug_mode=True,
)
Expand Down
4 changes: 2 additions & 2 deletions cookbook/models/anthropic/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.storage.agent.postgres import PostgresAgentStorage
from agno.storage.postgres import PostgresStorage
from agno.tools.duckduckgo import DuckDuckGoTools

db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"

agent = Agent(
model=Claude(id="claude-3-5-sonnet-20241022"),
storage=PostgresAgentStorage(table_name="agent_sessions", db_url=db_url),
storage=PostgresStorage(table_name="agent_sessions", db_url=db_url),
tools=[DuckDuckGoTools()],
add_history_to_messages=True,
)
Expand Down
4 changes: 2 additions & 2 deletions cookbook/models/aws/claude/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

from agno.agent import Agent
from agno.models.aws import Claude
from agno.storage.agent.postgres import PostgresAgentStorage
from agno.storage.postgres import PostgresStorage
from agno.tools.duckduckgo import DuckDuckGoTools

db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"

agent = Agent(
model=Claude(id="anthropic.claude-3-5-sonnet-20240620-v1:0"),
storage=PostgresAgentStorage(table_name="agent_sessions", db_url=db_url),
storage=PostgresStorage(table_name="agent_sessions", db_url=db_url),
tools=[DuckDuckGoTools()],
add_history_to_messages=True,
)
Expand Down
4 changes: 2 additions & 2 deletions cookbook/models/azure/ai_foundry/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

from agno.agent import Agent
from agno.models.azure import AzureAIFoundry
from agno.storage.agent.postgres import PostgresAgentStorage
from agno.storage.postgres import PostgresStorage
from agno.tools.duckduckgo import DuckDuckGoTools

db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"

agent = Agent(
model=AzureAIFoundry(id="Phi-4"),
storage=PostgresAgentStorage(table_name="agent_sessions", db_url=db_url),
storage=PostgresStorage(table_name="agent_sessions", db_url=db_url),
tools=[DuckDuckGoTools()],
add_history_to_messages=True,
)
Expand Down
4 changes: 2 additions & 2 deletions cookbook/models/azure/openai/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

from agno.agent import Agent
from agno.models.azure import AzureOpenAI
from agno.storage.agent.postgres import PostgresAgentStorage
from agno.storage.postgres import PostgresStorage
from agno.tools.duckduckgo import DuckDuckGoTools

db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"

agent = Agent(
model=AzureOpenAI(id="gpt-4o-mini"),
storage=PostgresAgentStorage(table_name="agent_sessions", db_url=db_url),
storage=PostgresStorage(table_name="agent_sessions", db_url=db_url),
tools=[DuckDuckGoTools()],
add_history_to_messages=True,
)
Expand Down
6 changes: 2 additions & 4 deletions cookbook/models/cohere/memory.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from agno.agent import Agent, AgentMemory
from agno.memory.db.postgres import PgMemoryDb
from agno.models.cohere import Cohere
from agno.storage.agent.postgres import PostgresAgentStorage
from agno.storage.postgres import PostgresStorage

db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"
agent = Agent(
Expand All @@ -21,9 +21,7 @@
create_session_summary=True,
),
# Store agent sessions in a database
storage=PostgresAgentStorage(
table_name="personalized_agent_sessions", db_url=db_url
),
storage=PostgresStorage(table_name="personalized_agent_sessions", db_url=db_url),
# Show debug logs so, you can see the memory being created
# debug_mode=True,
)
Expand Down
4 changes: 2 additions & 2 deletions cookbook/models/cohere/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

from agno.agent import Agent
from agno.models.cohere import Cohere
from agno.storage.agent.postgres import PostgresAgentStorage
from agno.storage.postgres import PostgresStorage
from agno.tools.duckduckgo import DuckDuckGoTools

db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"

agent = Agent(
model=Cohere(id="command-r-08-2024"),
storage=PostgresAgentStorage(table_name="agent_sessions", db_url=db_url),
storage=PostgresStorage(table_name="agent_sessions", db_url=db_url),
tools=[DuckDuckGoTools()],
add_history_to_messages=True,
)
Expand Down
Loading