MCPTools
and MultiMCPTools
classes can now be initialized and used without an async context manager, providing a much easier experience. See the updated docs.LiteLLM
.ZepTools
are now compatible with Zep v3.dimensions
length for text-embedding-3-small
as 1536 and text-embedding-3-large
as 3072.BitbucketTools
with a variety of Bitbucket repository actions.JinaEmbedder
for using embedding models via Jina.RowChunking
as a CSV chunking strategy.EvmTools
to do transactions on EVM compatible blockchains using web3
.LinkupTools
for powerful search.PostgresTools
toolkit.Daytona
agent Toolkitarun
functions are treated. It now correctly keeps async generators as async generators and doesn’t convert it to a coroutine.
arun
functions were incorrectly awaited as coroutines, which could cause runtime errors or prevent proper iteration through the yielded asynchronous values.async for
. This ensures all yielded results are processed as intended within asynchronous workflows.cache_session
attribute to allow users to switch off session caching, which improves on memory management.FastAPIApp
.session_state
when running an agent or team. See docs for more information.GCSPDFKnowledgeBase
to support PDFs on Google Cloud Storage.DocumentKnowledgeBase
Agent
where history is enabled.MySQLStorage
as an agent/team/workflow session storage backend.o4-mini-deep-research
and o3-deep-research
models.memory_growth_tracking
as an attribute on PerformanceEval
to enable additional debug logs for memory growth.agent
and team
as optional parameters in tool hooks, for more flexibility.debug_level
to both Agent
and Team
. This is an int
value of either 1
(default) or 2
(more verbose logging). Currently this only enables more verbose model logs, but will be used more widely in future.parser_model
support for Team
. See docs here.thinking_budget
and include_thoughts
parameters for Gemini
model class.search_news
, search_scholar
and scrape_webpage
.OxylabsTools
for adding more web-scraping capabilities to agents.read_csv
method for improved CSV parsingfull_team_session_metrics
on Teams.Agent
and Team
→ add_tool(tool)
to append new tools after inititialisation.response_model
is passed. The structured output itself is not streamed, but it is part of the iterator response when running an agent/team with streaming. The response model is set on a single RunResponseContentEvent
and on the final RunResponseCompletedEvent
.run(..., stream=True)
or arun(..., stream=True)
on Agent
or Team
with a response_model
set, the current behaviour would switch off streaming and respond with a single RunResponse
object. After the changes mentioned above, you will get the Iterator[RunResponseEvent]
/ AsyncIterator[RunResponseEvent]
response instead.search
to FileTools
.upsert
not using the parameter filters
team.rename_session(...)
that raises an AttributeError
: Fixed function rename_session
not using the parameter session_id
store_events
parameter to optionally add all events that happened during the course of an agent/team run on the RunResponse
/TeamRunResponse
.csv
and csv_url
knowledge bases: Add knowledge filters support for these knowledge base types.a
prefix from async function names: asearch_knowledge_base
, etc will now be the same as their sync
counterparts when sent to the model. The names of functions are important for accurate function calling.agent_id
not set.ObjectId
is not JSON serializableagent_name
to agent events, and team_name
to team events. Also added team_session_id
to team-member events to indicate that it belongs to the top-level team session.stream_member_events
to teams to optionally disable streaming of member events.async
support on DocumentKnowledgeBase
enum
parameters in custom tools.RunResponse
now does not have an event
attribute. It still represents the responses of the entire run.RunResponse.status
now indicates whether the run response is RUNNING
, PAUSED
, or CANCELLED
.agent.run(..., stream=True)
or agent.arun(..., stream=True)
.RunResponseContent
RunError
RunCancelled
ToolCallStarted
ToolCallCompleted
stream_intermediate_steps=True
:
RunStarted
RunCompleted
ReasoningStarted
ReasoningStep
ReasoningCompleted
MemoryUpdateStarted
MemoryUpdateCompleted
TeamRunResponseContent
TeamRunError
TeamRunCancelled
TeamToolCallStarted
TeamToolCallCompleted
stream_intermediate_steps=True
:
TeamRunStarted
TeamRunCompleted
TeamReasoningStarted
TeamReasoningStep
TeamReasoningCompleted
TeamMemoryUpdateStarted
TeamMemoryUpdateCompleted
WorkflowRunResponseStartedEvent
and WorkflowRunResponseCompletedEvent
events.async
and evaluations. See examples here.research
tool on ExaTools
. See more on their docs about how research works.SerperTools
toolkit to search GooglePDFBytesKnowledgeBase
, which allows the ingestion of in-memory PDF content via bytes or IO streams instead of file paths.DaytonaTools
toolkit to let Agents execute code remotely on Daytona sandboxesAWSSESTools
to send emails via AWS SES.add_location_to_instructions
to automatically detect the current location where the agent is running and add that to the system message.agent
was replaced with agents
, team
with teams
and workflows
was added. This also now requires you to specify which agent/team/workflow to run.
http://localhost:8001/runs?agent_id=my-agent
ZepTools
to remove deprecated features.GmailTools
now support attachments.fetch_with_retry
and async_fetc_with_retry
to be reused inurl_reader.py
search_posts
for XTools
.slack
, whatsapp
, etcRunResponse.to_dict()
to handle non-serializable fields, as Python enumsSlackApp
to allow you to create agents for Slack! The app allows agents to respond to individual messages or on group chats, and it creates threads to respond to messages.VisualizationTools
that uses matplotlib
to give agents the ability to make graphs.BraveSearch
that allows agent to search the web using brave search api.knowledge_filters
even if self.add_references=True
which is a case for traditional RAG (diff from Agentic RAG)Mem0Tools
FastAPIApp
does not have a default prefix
anymore and /run
→ /runs
(i.e. the created run endpoint is now <your_domain>/runs
)serve_fastapi_app
is now replaced with .serve()
on the instance of FastAPIApp
.serve_whatsapp_app
is now replaced with .serve()
on the instance of WhatsappAPI
.arun
support for Workflows, so they can now be used with async
Python.tool_call_limit
: Revamp of tool_call_limit
to make it work across a whole agent run.run
.team_session_state
is now correctly propagated and shared between all members and sub-teams of a team.Dict[str, int]
fields (and other Dict types) were failing when used as response_schema
for both OpenAI and Gemini models due to schema format incompatibilities.session_name
is now available after a run.team_session_state
, you now have to set team_session_state
on the Team
instead of session_state
.AI/ML API
, a platform providing AI/ML models. AI/ML API provides 300+ AI models including Deepseek, Gemini, ChatGPT. The models run at enterprise-grade rate limits and uptimes.Pydantic
and dataclass
objects as input to a function. See here for an example.concurrent.futures
module to enforce timeouts on all Exa API operations (search, get contents, find similar, and answer generation).get_previous_session_messages(number_of_sessions: int)
that returns a list of messages that the agent can analysesearch_previous_sessions_history
expire
key to set TTL on Redis keys.cache_creation_input_tokens
to agent session metrics, to allow for tracking Anthropic cache write statistics.post
on their InferenceClient()
- https://discuss.huggingface.co/t/getting-error-attributeerror-inferenceclient-object-has-no-attribute-post/156682id: str = "jinaai/jina-embeddings-v2-base-code"
as default, because these models are no longer provided by the HF Inference API
. Changed the default to id: str = "intfloat/multilingual-e5-large"
role_map
for OpenAIChat
: This allows certain models that don’t adhere to OpenAI’s role mapping to be used vir OpenAILike
.content_hash
in upsert as ID.paused
awaiting completion of certain user requirements before the agent can continue.agent.continue_run
and agent.acontinue_run
functions.@tool(requires_confirmation=True)
and the agent will expect user confirmation before executing the tool.@tool(requires_user_input=True)
to have the agent stop and ask for user input before continuing.@tool(external_execution=True)
to indicate that you will execute this function outside of the agent context.UserControlFlowTools()
to an agent to give the agent the ability to dynamically stop the flow and ask for user input where required.FirecrawlTools
.include_tools
and exclude_tools
.FastAPIApp
→ A really simple FastAPI server that provides access to your agent
or team
.WhatsappAPIApp
→ An app that implements the Whatsapp protocol allowing you to have an Agno agent running on Whatsapp. Supports image / audio / video input and can generate images as responses. Supports reasoning.cosmos_compatibility=True
pdf
and text
s3 readers.stop_after_tool_call
and show_result
for Toolkits: Now the base Toolkit class has stop_after_tool_call_tools
and show_result_tools
similar to the @tool
decorator.hybrid_search
on Milvus.PerfEval
to PerformanceEval
agent
, prompt
and expected_answer
stream=True
). Individual events will have more relevant data now.PDF
, Text
, DOCX
, JSON
, and PDF_URL
Qdrant
, LanceDB
, and MongoDB
current_user_id
and current_session_id
as default variables in session_data
for Agent
and Team
.abc.-.xyz.pdf
and abc.-.def.pdf
) were being incorrectly identified due to the readers using formatted names as unique id which were getting uniqueness conflict. Introduced a unique ID for each document in all the readers using uuidv4()
to ensure strict identification and prevent conflicts.AwsBedrockEmbedder
has been added with a default embedding model of cohere.embed-multilingual-v3
.GeminiTools
.ApifyTools
to make it completely compatible with Apify actors.File
attached to prompts for agents with OpenAIChat
models.retriever
parameter can now be an async
function to be used with agent.arun
and agent.aprint_response
.Video(url=...)
for Gemini.OpenAIResponses
.MCPTools
usage while calling agent.acli_app
.Toolkits
and custom tools. See this example.PubmedTools
.OpenAITools
to enable text-to-speech and image generation through OpenAI’s APIs.ZepTools
and AsyncZepTools
to manage memories for your Agent using zep-cloud
include_tools
and exclude_tools
for all toolkits. This allows for selective enabling / disabling of tools inside toolkits, which is especially useful for larger toolkits.deepcopy
when Gemini is used with Memory
.Memory
instead of the now deprecated AgentMemory
. - agent.memory.messages
→ run.messages for run in agent.memory.runs
(or agent.get_messages_for_session()
) - create_user_memories
→ enable_user_memories
and is now set on the Agent/Team directly. - create_session_summary
→ enable_session_summaries
and is now set on the Agent/Team directly.reasoning_content
on RunResponse
for stream/non-stream
, async/non-async
Reasoning events
webbrowser
tool for agents to interact with the web.proxy
parameter support to both URL and PDF tools for network customization.client_params
passed in the client_params
argument for more flexible configuration.mode
attribute to team data serialization for enhanced team configuration.__all__
.apprint_run_response
to support async.Memory
. See here.agent.get_session_summary()
→ Use to get the previous session summary from the agent.agent.get_user_memories()
→ Use to get the current user’s memories.MemoryManager
or SessionSummarizer
.add_member_tools_to_system_message
to remove the member tool names from the system message given to the team leader, which allows flexibility to make teams transfer functions work in more cases.Memory
class that supports adding, updating and deleting user memories, as well as doing semantic search with a model. This also adds additional abilities to the agent to manage memories on your behalf. See the docs here.user_id
and session_id
on agent.run()
. This will ensure the agent is set up for the session belonging to the session_id
and that only the memories of the current user is accessible to the agent. This allows you to build multi-user and multi-session applications with a single agent configuration.knowledge
to Team
to better align with the functionality on Agent
. This comes with retriever
to set a custom retriever and search_knowledge
to enable Agentic RAG.OpenAIResponses
and OpenAIChat
.GithubTools
.timezone_identifier
parameter in the Agent class to include the timezone alongside the current date in the instructions.ReasoningTools
for an advanced reasoning scratchpad for agents.MultiMCPTools
to support multiple server connections and simplified the interface to allow command
to be passed. See these examples of how to use it.Toolkit
with instructions
and add_instructions
to enable you to specify additional instructions related to how a tool should be used. These instructions are then added to the model’s “system message” if add_instructions=True
.gemini-2.0-flash-exp-image-generation
model.@tool
decorator. See the docs here.async-await
support, so it will be used in agent.arun
and agent.aprint_response
. This also means that knowledge_base.aload()
is possible which should greatly increase loading speed in some cases. The following have been converted:
JSONKnowledgeBase
→ Here is a cookbook to illustrate how to use it.PDFKnowledgeBase
→ Here is a cookbook to illustrate how to use it.PDFUrlKnowledgeBase
→ Here is a cookbook to illustrate how to use it.CSVKnowledgeBase
→ Here is a cookbook to illustrate how to use it.CSVUrlKnowledgeBase
→ Here is a cookbook to illustrate how to use it.ArxivKnowledgeBase
→ Here is a cookbook to illustrate how to use it.WebsiteKnowledgeBase
→ Here is a cookbook to illustrate how to use it.YoutubeKnowledgeBase
→ Here is a cookbook to illustrate how to use it.TextKnowledgeBase
→ Here is a cookbook to illustrate how to use it.tools
and tool_call_limit
to Team
. This means the team leader itself can also have tools provided by the user, so it can act as an agent.MCPTools
to allow you to specify tools to specifically include or exclude from all the available tools on an MCP server. This is very useful for limiting which tools the model has access to.@tool()
decorator now supports async functions, including async pre and post-hooks.tool_choice
from Ollama usage as it is not supported.entity_id
mappings.tool_choice
configurable.update_task
on TodoistTools
.MCPTools
for connections to external MCP servers. See the updated docs.print_response
and aprint_response
is used. They are now displayed in a separate panel different from response panel. It can also be used in conjunction in response_model
.Team
in one of 3 modes: “Collaborate”, “Coordinate” or “Route”.debug_mode=True
and team.print_response(...)
to see it in action.Agent(team=[])
is still there, but deprecated (see below).OpenAILike
interface.use_json_mode: bool = False
as a parameter of Agent
and Team
, which in conjunction with response_model=YourModel
, is used to indicate whether the agent/team model should be forced to respond in json instead of (now default) structured output. Previous behaviour defaulted to “json-mode”, but since most models now support native structured output, we are now defaulting to native structured output. It is now also much simpler to work with response models, since now only response_model
needs to be set. It is not necessary anymore to set structured_output=True
to specifically get structured output from the model.WebsiteTools
to also update combined knowledgebases.get_message_pairs()
fetching incorrect messages.Agent.structured_output
has been replaced by Agent.use_json_mode
. This will be removed in a future major version release.Agent.team
is deprecated with the release of our new Teams implementation here. This will be removed in a future major version release.File
objects attached to the agent prompt.File
objects are attached to agent prompts.File
type that can be added to prompts and will be sent to the model providers. Only Gemini and Anthropic Claude supported for now.MCPTools
along with examples for using MCP with Agno agents.Gemini
models with video processing capabilities.Huggingface
model integration. Tool calling is now fully supported in non-streaming cases.agent.run_response.response_audio
.
OpenAIChat
with the gpt-4o-audio-preview
model. See their docs for more on how it works. For example
get_emails_by_thread
and send_email_reply
methods to GmailTools
.GeminiEmbedder
to use the new Google’s genai SDK. This update introduces a slight change in the interface:
.pdf
, .csv
, .txt
, .docx
, .json
.png
, .jpeg
, .jpg
, .webp
ModelsLabTools
Toolkit Constructor: The constructor in /libs/agno/tools/models_labs.py
has been updated to accommodate audio generation API calls. This is a breaking change, as the parameters for the ModelsLabTools
class have changed. The url
and fetch_url
parameters have been removed, and API URLs are now decided based on the file_type
provided by the user.
FileType
enum now includes MP3
type:
MistralEmbedder
.AwsBedrock
.Gemini
. This will allow for easier integration of Gemini features in future.exponential_backoff
is set to True
.GoogleSearch
to GoogleSearchTools
for consistency.Gemini
implementation directly on the Vertex API has been replaced by the Google SDK implementation of Gemini
.Gemini
implementation via the OpenAI client has been replaced by the Google SDK implementation of Gemini
.OllamaHermes
has been removed as the implementation of Ollama
was improved.name_exists
function for LanceDb.run_messages.messages
for every run in storage.agent.arun()
and agent.aprint_response()
.agent.arun()
and agent.aprint_response()
.retriever
parameter with an agent.find_similar
to ExaTools
await agent.aprint_response()
and await agent.arun()
.TwitterTools
to XTools
and updated capabilities to be compatible with Twitter API v2.slots=True
from the agent dataclass decorator, which was not compatible with Python < 3.10.AzureOpenAIEmbedder
a dataclass to match other embedders.phidata
to agno
, released with the official launch of Agno AI.See the migration guide for additional guidance.phi.model.x
→ agno.models.x
phi.knowledge_base.x
→ agno.knowledge.x
(applies to all knowledge bases)
phi.document.reader.xxx
→ agno.document.reader.xxx_reader
(applies to all document readers)
Tools
. E.g. DuckDuckGo
→ DuckDuckGoTools
agent.run(images=[])
and agent.print_response(images=[])
is now of type Image
agent.run(audio=[])
and agent.print_response(audio=[])
is now of type Audio
agent.run(video=[])
and agent.print_response(video=[])
is now of type Video
RunResponse.images
is now a list of type ImageArtifact
RunResponse.audio
is now a list of type AudioArtifact
RunResponse.videos
is now a list of type VideoArtifact
RunResponse.response_audio
is now of type AudioOutput
Hermes
→ OllamaHermes
AzureOpenAIChat
→ AzureOpenAI
CohereChat
→ Cohere
DeepSeekChat
→ DeepSeek
GeminiOpenAIChat
→ GeminiOpenAI
HuggingFaceChat
→ HuggingFace
id
instead of model
as a parameter. For example
PgAgentStorage
→ PostgresDbAgentStorage
SqlAgentStorage
→ SqliteDbAgentStorage
MongoAgentStorage
→ MongoDbAgentStorage
S2AgentStorage
→ SingleStoreDbAgentStorage
SqlWorkflowStorage
→ SqliteDbWorkflowStorage
PgWorkflowStorage
→ PostgresDbWorkflowStorage
MongoWorkflowStorage
→ MongoDbWorkflowStorage
phi.knowledge.pdf.PDFUrlKnowledgeBase
→ agno.knowledge.pdf_url.PDFUrlKnowledgeBase
phi.knowledge.csv.CSVUrlKnowledgeBase
→ agno.knowledge.csv_url.CSVUrlKnowledgeBase
phi.document.reader.arxiv
→ agno.document.reader.arxiv_reader
phi.document.reader.docx
→ agno.document.reader.docx_reader
phi.document.reader.json
→ agno.document.reader.json_reader
phi.document.reader.pdf
→ agno.document.reader.pdf_reader
phi.document.reader.s3.pdf
→ agno.document.reader.s3.pdf_reader
phi.document.reader.s3.text
→ agno.document.reader.s3.text_reader
phi.document.reader.text
→ agno.document.reader.text_reader
phi.document.reader.website
→ agno.document.reader.website_reader
Embedder
class from pydantic to data classAssistant
llm
PhiTools
toolAgent
class, guidelines
, prevent_hallucinations
, prevent_prompt_leakage
, limit_tool_access
, and task
has been removed. They can be incorporated into the instructions
parameter as you see fit.similarity_threshold
param with threshold
param.