
- 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/agnohas 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-awsandagno-dockerpackages, as well as the CLI and other tools. agno-awsandagno-dockerpackages have been deprecated and will no-longer be maintained.- All code related to the Agno CLI (
ag) has been moved to this newagno-infrapackage. - Added
AgentOStoagnoas a comprehensive API solution for building multi-agent systems. This also replacesPlaygroundand 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
AGUIAppand replace withAGUIinterface onAgentOS. - Removed
SlackApiand replace withSlackinterface onAgentOS. - Removed
WhatsappApiand replace withWhatsappinterface onAgentOS. - Removed
FastAPIApp. Its functionality has been replaced byAgentOS. DiscordClienthas been moved to/integrations/discord.
Session & Run State
- We have made significant changes to the innerworkings of
Agent,TeamandWorkflowto 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. CustomEventis 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->RunOutputRunResponseStartedEvent->RunStartedEventRunResponseContentEvent->RunContentEventRunResponseCompletedEvent->RunCompletedEventIntermediateRunResponseContentEvent->IntermediateRunContentEventRunResponseErrorEvent->RunErrorEventRunResponseCancelledEvent->RunCancelledEvent
TeamRunResponse->TeamRunOutputRunResponseStartedEvent->RunStartedEventRunResponseContentEvent->RunContentEventRunResponseCompletedEvent->RunCompletedEventIntermediateRunResponseContentEvent->IntermediateRunContentEventRunResponseErrorEvent->RunErrorEventRunResponseCancelledEvent->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,TeamRunOutputandWorkflowRunOutputtheextra_dataattribute has been removed and the internal attributes are now top-level. This isreferences,additional_input,reasoning_steps, andreasoning_messages. -
metadataadded toRunOutput,TeamRunOutputandWorkflowRunOutput. This represents all the set metadata for the run.
Updates to Session Objects
Updates to Session Objects
- Session storage now stores
AgentSession,TeamSessionandWorkflowSessionwith new schemas. See full details in the Session section. - Session objects now have
runsdirectly 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
SessionMetricsandMessageMetricshave been unified as a singleMetricsclass.audio_tokenshas been renamed toaudio_total_tokens.input_audio_tokenshas been renamed toaudio_input_tokens.output_audio_tokenshas been renamed toaudio_output_tokens.cached_tokenshas been renamed tocache_read_tokens.prompt_tokensandcompletion_tokenshave been removed (onlyinput_tokensandoutput_tokensshould be used)prompt_tokens_detailsandcompletion_tokens_detailshave been removed. Insteadprovider_metricscaptures any provider-specific metrics.timehas been renamed toduration.
Cancelling Runs
Cancelling Runs
- You can now cancel a run by calling
cancel_runon theAgent,TeamorWorkflow. - This will cancel the run and return a
RunCancelledEventduring streaming, or set theRunOutput.statusto"cancelled".
Storage
Agent,Team,Workflowand the various evals now all support a singledbparameter. This is to enable storage for the instance of that class. This is required for persistence of sessions, memories, metrics, etc.storageandmemoryhave been removed fromAgent,TeamandWorkflow.
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->PostgresDbSqliteStorage->SqliteDbMysqlStorage->MysqlDbRedisStorage->RedisDbMongoStorage->MongoDbDynamoDBStorage->DynamoDbSingleStoreStorage->SingleStoreDbInMemoryStorage->InMemoryDbJsonStorage->JsonDbGCSJsonStorage->GCSJsonDb
Memory
- With the above changes to storage, memory has been simplified.
memoryhas been removed fromAgentandTeam. Instead memory is enabled withenable_user_memories: bool(like before) and persisted in thedbinstance.- Changes to how memories are created can still be done by overriding the
MemoryManagerclass onAgentorTeam. E.g.Agent(memory_manager=MyMemoryManager()). AgentMemoryandTeamMemoryhave been removed.
Knowledge
- Knowledge has been completely reworked. See full details in the Knowledge section.
- You now define a single
Knowledgeinstance 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
asyncsupport 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(...). AgentKnowledgeand all other knowledge base classes have been removed.- Import locations for
embedder,document,chunking,rerankerandreaderhave 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_stateshould not be used, insteadsession_statecan 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
FunctionExecutionResultobject 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_resultsis nowTrueby default for all tools. If you just setstop_after_tool_call=Truethenshow_resultswill be automatically set toTrue.images,videos,audioandfilesare now available as parameters to tools. See the documentation for more details.
Media
Removals
- Removed legacy artifact classes:
ImageArtifact,VideoArtifact,AudioArtifact, andAudioResponseclasses have been completely removed in favor of unified media classes.
New Unified Media Architecture
- Unified
Imageclass: Now serves all use cases (input, output, artifacts) with standardizedcontent: Optional[bytes]field for raw image data - Unified
Audioclass: Replaces bothAudioArtifactandAudioResponsewith consistent byte-based content storage and additional fields liketranscript,expires_at,sample_rate, andchannels - Unified
Videoclass: Updated to handle all video use cases with standardized content handling and metadata fields - Enhanced
Fileclass: Updated to work seamlessly across agent, team, workflow, and toolkit contexts
New Methods and Features
from_base64()class method: Added toImage,Audio, andVideoclasses 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-> Ifidis not set, it is autogenerated using thenameof the agent, or a random UUID if thenameis not set.search_previous_sessions_history->search_session_historycontext->dependenciesadd_context->add_dependencies_to_contextadd_history_to_messages->add_history_to_contextadd_name_to_instructions->add_name_to_contextadd_datetime_to_instructions->add_datetime_to_contextadd_location_to_instructions->add_location_to_contextadd_messages->additional_inputextra_data->metadatacreate_default_system_message->build_contextcreate_default_user_message->build_user_context- Added
send_media_to_model->Trueby 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->Trueby default. Set to False if you don’t want to store any media in theRunOutputthat is persisted with sessions. num_history_responses->num_history_runs- Removed
success_criteriaandgoal - Removed
team_session_idandworkflow_session_id. - Removed
introduction - Removed
show_tool_calls-> This is now just always enabled. - Removed
teamandteam_data - Removed
respond_directly,add_transfer_instructions,team_response_separatorandteam_session_id(since team has been removed fromAgent) - Removed all
teamfunctionality from insideAgent(i.e. the deprecated teams implementation has been removed) - Removed all
monitoringfromAgent. 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
messagetoinput(which also replacesmessages).inputcan be of typestr,list,dict,Message,BaseModel, orlist[Message]. - If a
dictandinput_schemais provided, the dict will be validated against the schema. - If a
BaseModelandinput_schemais provided, the model will be validated against the schema. arunandacontinue_runwithstream=Truenow return an async iterator ofRunOutputEventdirectly and is not a coroutine anymore.debug_mode: booladded torun,arun,print_responseandaprint_responseto enable debug mode for a specific run.add_history_to_contextadded torun,arun,print_responseandaprint_responseto add the chat history to the context for the current run.dependenciesadded torun,arun,print_responseandaprint_responseto add dependencies to the context for the current run.metadataadded torun,arun,print_responseandaprint_responseto set the metadata for the current run. This is merged with the metadata set on theTeamobject.- Added
get_run_outputandget_last_run_outputtoAgentto 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
knowledgeis now an instance ofKnowledgeinstead 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_managerto use when creating memories. - Added
get_user_memoriesto 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_managerto use when creating session summaries. - Removed
session_nameand replace with functionsget_session_nameandrename_session. - Added
get_sessionto retrieve a session by ID. - Added
get_chat_historyto retrieve the chat history from a session. - Added
get_session_metricsto retrieve the metrics for a session. - Added
get_session_stateto retrieve the session state from a session. - Added
get_session_summaryto retrieve the session summary from a session. - Because
Agentis now stateless,agent_session,session_metrics,run_id,run_input,run_messagesandrun_responseas “sticky” agent attributes have been removed. - Because
Agentis now stateless,images,videos,audioare no longer available as agent attributes. Instead these can be accessed on theRunOutputfor a particular run. - Removed
team_session_stateandworkflow_session_state. Onlysession_stateis used. - Added
enable_agentic_statetoAgentandTeamto allow the agent to update the session state with a tool call.
Team updates
Updates to Team Class
Updates to Team Class
- Removed
modefromTeam. 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->Trueby 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-> Ifidis not set, it is autogenerated using thenameof the team, or a random UUID if thenameis not set.search_previous_sessions_history->search_session_historycontext->dependenciesadd_context->add_dependencies_to_contextadd_history_to_messages->add_history_to_contextadd_name_to_instructions->add_name_to_contextadd_datetime_to_instructions->add_datetime_to_contextadd_location_to_instructions->add_location_to_contextadd_member_tools_to_system_message->add_member_tools_to_contextextra_data->metadata- Added
additional_input(works the same as forAgent) - Added
store_member_responses: boolto optionally store the member responses on the team run output object. - Added
acli_apptoTeamto enable the CLI app for the team in async mode. - Added
send_media_to_model->Trueby 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->Trueby default. Set to False if you don’t want to store any media in theRunOutputthat is persisted with sessions. num_history_responses->num_history_runs- Removed
success_criteria - Removed
team_session_idandworkflow_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_stateandenable_agentic_stateshould rather be used to manage state shared between the team and the members. - Removed all
monitoringfromTeam. 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
messagetoinput(which also replacesmessages).inputcan be of typestr,list,dict,Message,BaseModel, orlist[Message]. - If a
dictandinput_schemais provided, the dict will be validated against the schema. - If a
BaseModelandinput_schemais provided, the model will be validated against the schema. arunwithstream=Truenow return an async iterator ofTeamRunOutputEventdirectly and is not a coroutine anymore.debug_mode: booladded torun,arun,print_responseandaprint_responseto enable debug mode for a specific run.add_history_to_contextadded torun,arun,print_responseandaprint_responseto add the chat history to the context for the current run.dependenciesadded torun,arun,print_responseandaprint_responseto add dependencies to the context for the current run.metadataadded torun,arun,print_responseandaprint_responseto set the metadata for the current run. This is merged with the metadata set on theTeamobject.- Added
get_run_outputandget_last_run_outputtoTeamto 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
knowledgeis now an instance ofKnowledgeinstead ofAgentKnowledge.retriever->knowledge_retriever-> For a custom retriever.add_references->add_knowledge_to_context-> To enable traditional RAG.- Added
update_knowledgetool 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_managerto use when creating memories. - Added
get_user_memoriesto 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_managerto use when creating session summaries. - Removed
session_nameand replace with functionsget_session_nameandrename_session. - Added
get_sessionto retrieve a session by ID. - Added
get_chat_historyto retrieve the chat history from a session. - Added
get_session_metricsto retrieve the metrics for a session. - Added
get_session_stateto retrieve the session state from a session. - Added
get_session_summaryto retrieve the session summary from a session. - Because
Teamis now stateless,team_session,session_metrics,run_id,run_input,run_messagesandrun_responseas “sticky” team attributes have been removed. - Because
Teamis now stateless,images,videos,audioare no longer available as team attributes. Instead these can be accessed on theTeamRunOutputfor a particular run. - Removed
team_session_stateandworkflow_session_state. Onlysession_stateis used. - Added
enable_agentic_statetoTeamto 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-> Ifidis not set, it is autogenerated using thenameof the workflow, or a random UUID if thenameis 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_eventstoWorkflowto optionally store the events on the workflow run output object. Also addedevents_to_skipto skip certain events from being stored. This works the same as forAgentandTeam. - Added
store_executor_outputstoWorkflowto optionally store the agent/team responses on the workflow run output object. - Added
input_schematoWorkflowto 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
monitoringfromWorkflow. 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
messagetoinput(which also replacesmessages).inputcan be of typestr,list,dict, orBaseModel. - If a
dictandinput_schemais provided, the dict will be validated against the schema. - If a
BaseModelandinput_schemais provided, the model will be validated against the schema. arunwithstream=Truenow return an async iterator ofWorkflowRunOutputEventdirectly and is not a coroutine anymore.debug_mode: booladded torun,arun,print_responseandaprint_responseto enable debug mode for a specific run.- Added
get_run_outputandget_last_run_outputtoWorkflowto retrieve a run output by ID.
Updates to Sessions
Updates to Sessions
- Removed
session_nameand replace with functionsget_session_nameandrename_session. - Because
Workflowis now stateless,workflow_session,session_metrics,run_id,run_input,run_messagesandrun_responseas “sticky” workflow attributes have been removed. - Because
Workflowis now stateless,images,videos,audioare no longer available as workflow attributes. Instead these can be accessed on theWorkflowRunOutputfor a particular run. - Added
get_sessionto retrieve a session by ID. - Added
get_session_metricsto retrieve the metrics for a session. - Added
get_session_stateto retrieve the session state from a session. - Added
get_session_summaryto retrieve the session summary from a session.