
- Agents, Teams and Workflows are now fully stateless.
- Knowledge is now a single solution that supports many forms of content.
- Storage of sessions, memories, evals, etc. has been simplified
General Changes
Repo Updates
Repo Updates
/libs/agno
has been restructured to fit the new concepts in Agno and for better organization.- All code related to managing workspaces and agent deployment in Agno has been moved to a new package called
agno-infra
. This is a combination of the previousagno-aws
andagno-docker
packages, as well as the CLI and other tools. agno-aws
andagno-docker
packages have been deprecated and will no-longer be maintained.- All code related to the Agno CLI (
ag
) has been moved to this newagno-infra
package. - Added
AgentOS
toagno
as a comprehensive API solution for building multi-agent systems. This also replacesPlayground
and other Apps. See details below. - Cookbook has been completely restructured, with new and more valuable READMEs, better coverage of concepts, and more examples.
AgentOS
AgentOS
- Introducing
AgentOS
, a system for hosting agents, teams and workflows as a production-ready API. See full details in the AgentOS section. - This adds routes for session management, memory management, knowledge management, evals management, and metrics.
- This enables you to host agents, teams and workflows, and use the Agent OS UI to manage them.
Apps Deprecations
Apps Deprecations
- Removed
Playground
. Its functionality has been replaced byAgentOS
. - Removed
AGUIApp
and replace withAGUI
interface onAgentOS
. - Removed
SlackApi
and replace withSlack
interface onAgentOS
. - Removed
WhatsappApi
and replace withWhatsapp
interface onAgentOS
. - Removed
FastAPIApp
. Its functionality has been replaced byAgentOS
. DiscordClient
has been moved to/integrations/discord
.
Session & Run State
- We have made significant changes to the innerworkings of
Agent
,Team
andWorkflow
to make them completely stateless. - This means that
agent_session
,session_metrics
,session_state
, etc. should not be seen as stateful variables that would be updated during the course of a run, but rather as “defaults” for the agent if they can be set on initialisation. CustomEvent
is now supported and you can inherit from it to create your own custom events that can be yielded from your own tools. See the documentation for more details.
Updates to Run Objects
Updates to Run Objects
For agents:
RunResponse
->RunOutput
RunResponseStartedEvent
->RunStartedEvent
RunResponseContentEvent
->RunContentEvent
RunResponseCompletedEvent
->RunCompletedEvent
IntermediateRunResponseContentEvent
->IntermediateRunContentEvent
RunResponseErrorEvent
->RunErrorEvent
RunResponseCancelledEvent
->RunCancelledEvent
TeamRunResponse
->TeamRunOutput
RunResponseStartedEvent
->RunStartedEvent
RunResponseContentEvent
->RunContentEvent
RunResponseCompletedEvent
->RunCompletedEvent
IntermediateRunResponseContentEvent
->IntermediateRunContentEvent
RunResponseErrorEvent
->RunErrorEvent
RunResponseCancelledEvent
->RunCancelledEvent
-
WorkflowRunResponse
->WorkflowRunOutput
-
WorkflowRunResponseStartedEvent
->WorkflowRunStartedEvent
-
WorkflowRunResponseContentEvent
->WorkflowRunContentEvent
-
WorkflowRunResponseCompletedEvent
->WorkflowRunCompletedEvent
-
WorkflowRunResponseErrorEvent
->WorkflowRunErrorEvent
-
WorkflowRunResponseCancelledEvent
->WorkflowRunCancelledEvent
-
The import location for
RunOutput
(and events) has been moved toagno.run.agent
. -
For
RunOutput
,TeamRunOutput
andWorkflowRunOutput
theextra_data
attribute has been removed and the internal attributes are now top-level. This isreferences
,additional_input
,reasoning_steps
, andreasoning_messages
. -
metadata
added toRunOutput
,TeamRunOutput
andWorkflowRunOutput
. This represents all the set metadata for the run.
Updates to Session Objects
Updates to Session Objects
- Session storage now stores
AgentSession
,TeamSession
andWorkflowSession
with new schemas. See full details in the Session section. - Session objects now have
runs
directly on it. - Session objects support new convenience methods:
get_run
-> Get a specific run by ID.get_session_summary
-> Get the session summary.get_chat_history
-> Get an aggregated view of all messages for all runs in the session.
Updates to Metrics
Updates to Metrics
SessionMetrics
andMessageMetrics
have been unified as a singleMetrics
class.audio_tokens
has been renamed toaudio_total_tokens
.input_audio_tokens
has been renamed toaudio_input_tokens
.output_audio_tokens
has been renamed toaudio_output_tokens
.cached_tokens
has been renamed tocache_read_tokens
.prompt_tokens
andcompletion_tokens
have been removed (onlyinput_tokens
andoutput_tokens
should be used)prompt_tokens_details
andcompletion_tokens_details
have been removed. Insteadprovider_metrics
captures any provider-specific metrics.time
has been renamed toduration
.
Cancelling Runs
Cancelling Runs
- You can now cancel a run by calling
cancel_run
on theAgent
,Team
orWorkflow
. - This will cancel the run and return a
RunCancelledEvent
during streaming, or set theRunOutput.status
to"cancelled"
.
Storage
Agent
,Team
,Workflow
and the various evals now all support a singledb
parameter. This is to enable storage for the instance of that class. This is required for persistence of sessions, memories, metrics, etc.storage
andmemory
have been removed fromAgent
,Team
andWorkflow
.
Updates to Storage Classes
Updates to Storage Classes
- This means all previous storage providers have been reworked. Also session storage, memory storage and eval storage are all a single solution now referred to as a “DB”.
PostgresStorage
->PostgresDb
SqliteStorage
->SqliteDb
MysqlStorage
->MysqlDb
RedisStorage
->RedisDb
MongoStorage
->MongoDb
DynamoDBStorage
->DynamoDb
SingleStoreStorage
->SingleStoreDb
InMemoryStorage
->InMemoryDb
JsonStorage
->JsonDb
GCSJsonStorage
->GCSJsonDb
Memory
- With the above changes to storage, memory has been simplified.
memory
has been removed fromAgent
andTeam
. Instead memory is enabled withenable_user_memories: bool
(like before) and persisted in thedb
instance.- Changes to how memories are created can still be done by overriding the
MemoryManager
class onAgent
orTeam
. E.g.Agent(memory_manager=MyMemoryManager())
. AgentMemory
andTeamMemory
have been removed.
Knowledge
- Knowledge has been completely reworked. See full details in the Knowledge section.
- You now define a single
Knowledge
instance for all types of content. Files (PDF, CSV, etc.), URLs, and other. - The agent can still use your knowledge base to search for information at runtime. All existing RAG implementations are still supported.
- Added full
async
support for embedding models and vector DBs. This has a significant impact on performance and is a major speed improvement when adding content to the knowledge base usingknowledge.add_content_async(...)
. AgentKnowledge
and all other knowledge base classes have been removed.- Import locations for
embedder
,document
,chunking
,reranker
andreader
have been moved toagno.knowledge
. See examples for more details.
Tools updates
- General:
- Since Agents and Teams are now stateless, using attributes from the agent/team object inside a function will give you access to the attributes set on initialisation of that agent/team. E.g.
agent.session_state
should not be used, insteadsession_state
can now be directly accessed and would have the “current” state of the session. - A new flow allows images, audio and video files generated during tool execution to be passed back in a
FunctionExecutionResult
object and this will ensure these artifacts are made available to the model and agent as needed.
- Since Agents and Teams are now stateless, using attributes from the agent/team object inside a function will give you access to the attributes set on initialisation of that agent/team. E.g.
- All tools that handle media (e.g. image generation tools) now correctly add this generated media to the
RunOutput
, but also make it available for subsequent model calls. - The interface of almost all the toolkits have been updated for a more consistent experience around switching specific tools on and off. The list of changes is too long to list here. We suggest you take a look at the toolkits you use specifically and how they have been updated.
show_results
is nowTrue
by default for all tools. If you just setstop_after_tool_call=True
thenshow_results
will be automatically set toTrue
.images
,videos
,audio
andfiles
are now available as parameters to tools. See the documentation for more details.
Media
Removals
- Removed legacy artifact classes:
ImageArtifact
,VideoArtifact
,AudioArtifact
, andAudioResponse
classes have been completely removed in favor of unified media classes.
New Unified Media Architecture
- Unified
Image
class: Now serves all use cases (input, output, artifacts) with standardizedcontent: Optional[bytes]
field for raw image data - Unified
Audio
class: Replaces bothAudioArtifact
andAudioResponse
with consistent byte-based content storage and additional fields liketranscript
,expires_at
,sample_rate
, andchannels
- Unified
Video
class: Updated to handle all video use cases with standardized content handling and metadata fields - Enhanced
File
class: Updated to work seamlessly across agent, team, workflow, and toolkit contexts
New Methods and Features
from_base64()
class method: Added toImage
,Audio
, andVideo
classes for creating instances from base64-encoded content (automatically converts to raw bytes)get_content_bytes()
method: Retrieves content as raw bytes, handling loading from URLs or file pathsto_base64()
method: Converts content to base64 string for transmission/storageto_dict()
method: Enhanced serialization with optional base64 content inclusion
Content Standardization
- Byte-based storage: All media content is now stored as raw bytes (
Optional[bytes]
) instead of mixed string/bytes formats - Automatic validation: Model validators ensure exactly one content source (
url
,filepath
, orcontent
) is provided - Auto-generated IDs: Media objects automatically generate UUIDs when not provided
Logging
- Added support for custom loggers. See the documentation for more details.
Agent updates
Updates to Agent Class
Updates to Agent Class
agent_id
->id
-> Ifid
is not set, it is autogenerated using thename
of the agent, or a random UUID if thename
is not set.search_previous_sessions_history
->search_session_history
context
->dependencies
add_context
->add_dependencies_to_context
add_history_to_messages
->add_history_to_context
add_name_to_instructions
->add_name_to_context
add_datetime_to_instructions
->add_datetime_to_context
add_location_to_instructions
->add_location_to_context
add_messages
->additional_input
extra_data
->metadata
create_default_system_message
->build_context
create_default_user_message
->build_user_context
- Added
send_media_to_model
->True
by default. Set to False if you don’t want to send media (image, audio, video, files) to the model. This is useful if you only want media for tools. - Added
store_media
->True
by default. Set to False if you don’t want to store any media in theRunOutput
that is persisted with sessions. num_history_responses
->num_history_runs
- Removed
success_criteria
andgoal
- Removed
team_session_id
andworkflow_session_id
. - Removed
introduction
- Removed
show_tool_calls
-> This is now just always enabled. - Removed
team
andteam_data
- Removed
respond_directly
,add_transfer_instructions
,team_response_separator
andteam_session_id
(since team has been removed fromAgent
) - Removed all
team
functionality from insideAgent
(i.e. the deprecated teams implementation has been removed) - Removed all
monitoring
fromAgent
. With the new AgentOS platform, monitoring is done using your own data. Go to os.agno.com to get started.
Updates to Input & Output
Updates to Input & Output
response_model
->output_schema
- Added
input_schema
(a pydantic model) to validate the input to the agent. - Changed
message
toinput
(which also replacesmessages
).input
can be of typestr
,list
,dict
,Message
,BaseModel
, orlist[Message]
. - If a
dict
andinput_schema
is provided, the dict will be validated against the schema. - If a
BaseModel
andinput_schema
is provided, the model will be validated against the schema. arun
andacontinue_run
withstream=True
now return an async iterator ofRunOutputEvent
directly and is not a coroutine anymore.debug_mode: bool
added torun
,arun
,print_response
andaprint_response
to enable debug mode for a specific run.add_history_to_context
added torun
,arun
,print_response
andaprint_response
to add the chat history to the context for the current run.dependencies
added torun
,arun
,print_response
andaprint_response
to add dependencies to the context for the current run.metadata
added torun
,arun
,print_response
andaprint_response
to set the metadata for the current run. This is merged with the metadata set on theTeam
object.- Added
get_run_output
andget_last_run_output
toAgent
to retrieve a run output by ID.
Updates to Metrics
Updates to Metrics
- Metrics have been simplified and cleaned up.
- There are now 3 levels of metrics:
Message.metrics
-> Metrics for each message (assistant, tool, etc.).RunOutput.metrics
-> Aggregated metrics for the whole run.AgentSession.metrics
-> Aggregated metrics for the whole session.
Updates to Knowledge
Updates to Knowledge
knowledge
is now an instance ofKnowledge
instead ofAgentKnowledge
.retriever
->knowledge_retriever
-> For a custom retriever.add_references
->add_knowledge_to_context
-> To enable traditional RAG.
Updates to Memory
Updates to Memory
add_memory_references
->add_memories_to_context
- You can set a custom
memory_manager
to use when creating memories. - Added
get_user_memories
to retrieve the user memories.
Updates to Sessions
Updates to Sessions
add_session_summary_references
->add_session_summary_to_context
- You can set a custom
session_summary_manager
to use when creating session summaries. - Removed
session_name
and replace with functionsget_session_name
andrename_session
. - Added
get_session
to retrieve a session by ID. - Added
get_chat_history
to retrieve the chat history from a session. - Added
get_session_metrics
to retrieve the metrics for a session. - Added
get_session_state
to retrieve the session state from a session. - Added
get_session_summary
to retrieve the session summary from a session. - Because
Agent
is now stateless,agent_session
,session_metrics
,run_id
,run_input
,run_messages
andrun_response
as “sticky” agent attributes have been removed. - Because
Agent
is now stateless,images
,videos
,audio
are no longer available as agent attributes. Instead these can be accessed on theRunOutput
for a particular run. - Removed
team_session_state
andworkflow_session_state
. Onlysession_state
is used. - Added
enable_agentic_state
toAgent
andTeam
to allow the agent to update the session state with a tool call.
Team updates
Updates to Team Class
Updates to Team Class
- Removed
mode
fromTeam
. Instead there are attributes that can be used to control the behavior of the team:respond_directly
-> If True, the team leader won’t process responses from the members and instead will return them directlydelegate_task_to_all_members
-> If True, the team leader will delegate tasks to all members simultaneously, instead of one by one. When running async (usingarun
) members will run concurrently.determine_input_for_members
->True
by default. Set to False if you want to send the run input directly to the member agents without the team leader synthesizing its own input.
team_id
->id
-> Ifid
is not set, it is autogenerated using thename
of the team, or a random UUID if thename
is not set.search_previous_sessions_history
->search_session_history
context
->dependencies
add_context
->add_dependencies_to_context
add_history_to_messages
->add_history_to_context
add_name_to_instructions
->add_name_to_context
add_datetime_to_instructions
->add_datetime_to_context
add_location_to_instructions
->add_location_to_context
add_member_tools_to_system_message
->add_member_tools_to_context
extra_data
->metadata
- Added
additional_input
(works the same as forAgent
) - Added
store_member_responses: bool
to optionally store the member responses on the team run output object. - Added
acli_app
toTeam
to enable the CLI app for the team in async mode. - Added
send_media_to_model
->True
by default. Set to False if you don’t want to send media (image, audio, video, files) to the model. This is useful if you only want media for tools. - Added
store_media
->True
by default. Set to False if you don’t want to store any media in theRunOutput
that is persisted with sessions. num_history_responses
->num_history_runs
- Removed
success_criteria
- Removed
team_session_id
andworkflow_session_id
. - Removed
enable_team_history
- Removed
num_of_interactions_from_history
- Removed
show_tool_calls
-> This is now just always enabled. - Removed
enable_agentic_context
.session_state
andenable_agentic_state
should rather be used to manage state shared between the team and the members. - Removed all
monitoring
fromTeam
. With the new AgentOS platform, monitoring is done using your own data. Go to os.agno.com to get started.
Updates to Input & Output
Updates to Input & Output
response_model
->output_schema
- Added
input_schema
(a pydantic model) to validate the input to the agent. - Changed
message
toinput
(which also replacesmessages
).input
can be of typestr
,list
,dict
,Message
,BaseModel
, orlist[Message]
. - If a
dict
andinput_schema
is provided, the dict will be validated against the schema. - If a
BaseModel
andinput_schema
is provided, the model will be validated against the schema. arun
withstream=True
now return an async iterator ofTeamRunOutputEvent
directly and is not a coroutine anymore.debug_mode: bool
added torun
,arun
,print_response
andaprint_response
to enable debug mode for a specific run.add_history_to_context
added torun
,arun
,print_response
andaprint_response
to add the chat history to the context for the current run.dependencies
added torun
,arun
,print_response
andaprint_response
to add dependencies to the context for the current run.metadata
added torun
,arun
,print_response
andaprint_response
to set the metadata for the current run. This is merged with the metadata set on theTeam
object.- Added
get_run_output
andget_last_run_output
toTeam
to retrieve a run output by ID.
Updates to Metrics
Updates to Metrics
- Metrics have been simplified and cleaned up.
- There are now 3 levels of metrics:
Message.metrics
-> Metrics for each message (assistant, tool, etc.).RunOutput.metrics
-> Aggregated metrics for the whole run.TeamSession.metrics
-> Aggregated metrics for the whole session.
Updates to Knowledge
Updates to Knowledge
knowledge
is now an instance ofKnowledge
instead ofAgentKnowledge
.retriever
->knowledge_retriever
-> For a custom retriever.add_references
->add_knowledge_to_context
-> To enable traditional RAG.- Added
update_knowledge
tool to update the knowledge base. Works the same as forAgent
.
Updates to Memory
Updates to Memory
add_memory_references
->add_memories_to_context
- You can set a custom
memory_manager
to use when creating memories. - Added
get_user_memories
to retrieve the user memories.
Updates to Sessions
Updates to Sessions
add_session_summary_references
->add_session_summary_to_context
- You can set a custom
session_summary_manager
to use when creating session summaries. - Removed
session_name
and replace with functionsget_session_name
andrename_session
. - Added
get_session
to retrieve a session by ID. - Added
get_chat_history
to retrieve the chat history from a session. - Added
get_session_metrics
to retrieve the metrics for a session. - Added
get_session_state
to retrieve the session state from a session. - Added
get_session_summary
to retrieve the session summary from a session. - Because
Team
is now stateless,team_session
,session_metrics
,run_id
,run_input
,run_messages
andrun_response
as “sticky” team attributes have been removed. - Because
Team
is now stateless,images
,videos
,audio
are no longer available as team attributes. Instead these can be accessed on theTeamRunOutput
for a particular run. - Removed
team_session_state
andworkflow_session_state
. Onlysession_state
is used. - Added
enable_agentic_state
toTeam
to allow the agent to update the session state with a tool call.
Workflow updates
Updates to Workflow Class
Updates to Workflow Class
workflow_id
->id
-> Ifid
is not set, it is autogenerated using thename
of the workflow, or a random UUID if thename
is not set.- Workflows “v1” has been completely removed and replaced with
Workflows v2
. See full details in the Workflows section. - This means the import locations for “Workflows v2” is now
agno.workflows
. extra_data
->metadata
- Added
store_events
toWorkflow
to optionally store the events on the workflow run output object. Also addedevents_to_skip
to skip certain events from being stored. This works the same as forAgent
andTeam
. - Added
store_executor_outputs
toWorkflow
to optionally store the agent/team responses on the workflow run output object. - Added
input_schema
toWorkflow
to validate the input to the workflow. - Added support for websocket streaming of the workflow. This is appropriate for long-running workflows that need to be streamed to a client. This is only available for
arun
. - Removed all
monitoring
fromWorkflow
. With the new AgentOS platform, monitoring is done using your own data. Go to os.agno.com to get started.
Updates to Input & Output
Updates to Input & Output
- Changed
message
toinput
(which also replacesmessages
).input
can be of typestr
,list
,dict
, orBaseModel
. - If a
dict
andinput_schema
is provided, the dict will be validated against the schema. - If a
BaseModel
andinput_schema
is provided, the model will be validated against the schema. arun
withstream=True
now return an async iterator ofWorkflowRunOutputEvent
directly and is not a coroutine anymore.debug_mode: bool
added torun
,arun
,print_response
andaprint_response
to enable debug mode for a specific run.- Added
get_run_output
andget_last_run_output
toWorkflow
to retrieve a run output by ID.
Updates to Sessions
Updates to Sessions
- Removed
session_name
and replace with functionsget_session_name
andrename_session
. - Because
Workflow
is now stateless,workflow_session
,session_metrics
,run_id
,run_input
,run_messages
andrun_response
as “sticky” workflow attributes have been removed. - Because
Workflow
is now stateless,images
,videos
,audio
are no longer available as workflow attributes. Instead these can be accessed on theWorkflowRunOutput
for a particular run. - Added
get_session
to retrieve a session by ID. - Added
get_session_metrics
to retrieve the metrics for a session. - Added
get_session_state
to retrieve the session state from a session. - Added
get_session_summary
to retrieve the session summary from a session.