agno 2.0.0rc2__py3-none-any.whl → 2.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agno/agent/agent.py +6009 -2874
- agno/api/api.py +2 -0
- agno/api/os.py +1 -1
- agno/culture/__init__.py +3 -0
- agno/culture/manager.py +956 -0
- agno/db/async_postgres/__init__.py +3 -0
- agno/db/base.py +385 -6
- agno/db/dynamo/dynamo.py +388 -81
- agno/db/dynamo/schemas.py +47 -10
- agno/db/dynamo/utils.py +63 -4
- agno/db/firestore/firestore.py +435 -64
- agno/db/firestore/schemas.py +11 -0
- agno/db/firestore/utils.py +102 -4
- agno/db/gcs_json/gcs_json_db.py +384 -42
- agno/db/gcs_json/utils.py +60 -26
- agno/db/in_memory/in_memory_db.py +351 -66
- agno/db/in_memory/utils.py +60 -2
- agno/db/json/json_db.py +339 -48
- agno/db/json/utils.py +60 -26
- agno/db/migrations/manager.py +199 -0
- agno/db/migrations/v1_to_v2.py +510 -37
- agno/db/migrations/versions/__init__.py +0 -0
- agno/db/migrations/versions/v2_3_0.py +938 -0
- agno/db/mongo/__init__.py +15 -1
- agno/db/mongo/async_mongo.py +2036 -0
- agno/db/mongo/mongo.py +653 -76
- agno/db/mongo/schemas.py +13 -0
- agno/db/mongo/utils.py +80 -8
- agno/db/mysql/mysql.py +687 -25
- agno/db/mysql/schemas.py +61 -37
- agno/db/mysql/utils.py +60 -2
- agno/db/postgres/__init__.py +2 -1
- agno/db/postgres/async_postgres.py +2001 -0
- agno/db/postgres/postgres.py +676 -57
- agno/db/postgres/schemas.py +43 -18
- agno/db/postgres/utils.py +164 -2
- agno/db/redis/redis.py +344 -38
- agno/db/redis/schemas.py +18 -0
- agno/db/redis/utils.py +60 -2
- agno/db/schemas/__init__.py +2 -1
- agno/db/schemas/culture.py +120 -0
- agno/db/schemas/memory.py +13 -0
- agno/db/singlestore/schemas.py +26 -1
- agno/db/singlestore/singlestore.py +687 -53
- agno/db/singlestore/utils.py +60 -2
- agno/db/sqlite/__init__.py +2 -1
- agno/db/sqlite/async_sqlite.py +2371 -0
- agno/db/sqlite/schemas.py +24 -0
- agno/db/sqlite/sqlite.py +774 -85
- agno/db/sqlite/utils.py +168 -5
- agno/db/surrealdb/__init__.py +3 -0
- agno/db/surrealdb/metrics.py +292 -0
- agno/db/surrealdb/models.py +309 -0
- agno/db/surrealdb/queries.py +71 -0
- agno/db/surrealdb/surrealdb.py +1361 -0
- agno/db/surrealdb/utils.py +147 -0
- agno/db/utils.py +50 -22
- agno/eval/accuracy.py +50 -43
- agno/eval/performance.py +6 -3
- agno/eval/reliability.py +6 -3
- agno/eval/utils.py +33 -16
- agno/exceptions.py +68 -1
- agno/filters.py +354 -0
- agno/guardrails/__init__.py +6 -0
- agno/guardrails/base.py +19 -0
- agno/guardrails/openai.py +144 -0
- agno/guardrails/pii.py +94 -0
- agno/guardrails/prompt_injection.py +52 -0
- agno/integrations/discord/client.py +1 -0
- agno/knowledge/chunking/agentic.py +13 -10
- agno/knowledge/chunking/fixed.py +1 -1
- agno/knowledge/chunking/semantic.py +40 -8
- agno/knowledge/chunking/strategy.py +59 -15
- agno/knowledge/embedder/aws_bedrock.py +9 -4
- agno/knowledge/embedder/azure_openai.py +54 -0
- agno/knowledge/embedder/base.py +2 -0
- agno/knowledge/embedder/cohere.py +184 -5
- agno/knowledge/embedder/fastembed.py +1 -1
- agno/knowledge/embedder/google.py +79 -1
- agno/knowledge/embedder/huggingface.py +9 -4
- agno/knowledge/embedder/jina.py +63 -0
- agno/knowledge/embedder/mistral.py +78 -11
- agno/knowledge/embedder/nebius.py +1 -1
- agno/knowledge/embedder/ollama.py +13 -0
- agno/knowledge/embedder/openai.py +37 -65
- agno/knowledge/embedder/sentence_transformer.py +8 -4
- agno/knowledge/embedder/vllm.py +262 -0
- agno/knowledge/embedder/voyageai.py +69 -16
- agno/knowledge/knowledge.py +595 -187
- agno/knowledge/reader/base.py +9 -2
- agno/knowledge/reader/csv_reader.py +8 -10
- agno/knowledge/reader/docx_reader.py +5 -6
- agno/knowledge/reader/field_labeled_csv_reader.py +290 -0
- agno/knowledge/reader/json_reader.py +6 -5
- agno/knowledge/reader/markdown_reader.py +13 -13
- agno/knowledge/reader/pdf_reader.py +43 -68
- agno/knowledge/reader/pptx_reader.py +101 -0
- agno/knowledge/reader/reader_factory.py +51 -6
- agno/knowledge/reader/s3_reader.py +3 -15
- agno/knowledge/reader/tavily_reader.py +194 -0
- agno/knowledge/reader/text_reader.py +13 -13
- agno/knowledge/reader/web_search_reader.py +2 -43
- agno/knowledge/reader/website_reader.py +43 -25
- agno/knowledge/reranker/__init__.py +3 -0
- agno/knowledge/types.py +9 -0
- agno/knowledge/utils.py +20 -0
- agno/media.py +339 -266
- agno/memory/manager.py +336 -82
- agno/models/aimlapi/aimlapi.py +2 -2
- agno/models/anthropic/claude.py +183 -37
- agno/models/aws/bedrock.py +52 -112
- agno/models/aws/claude.py +33 -1
- agno/models/azure/ai_foundry.py +33 -15
- agno/models/azure/openai_chat.py +25 -8
- agno/models/base.py +1011 -566
- agno/models/cerebras/cerebras.py +19 -13
- agno/models/cerebras/cerebras_openai.py +8 -5
- agno/models/cohere/chat.py +27 -1
- agno/models/cometapi/__init__.py +5 -0
- agno/models/cometapi/cometapi.py +57 -0
- agno/models/dashscope/dashscope.py +1 -0
- agno/models/deepinfra/deepinfra.py +2 -2
- agno/models/deepseek/deepseek.py +2 -2
- agno/models/fireworks/fireworks.py +2 -2
- agno/models/google/gemini.py +110 -37
- agno/models/groq/groq.py +28 -11
- agno/models/huggingface/huggingface.py +2 -1
- agno/models/internlm/internlm.py +2 -2
- agno/models/langdb/langdb.py +4 -4
- agno/models/litellm/chat.py +18 -1
- agno/models/litellm/litellm_openai.py +2 -2
- agno/models/llama_cpp/__init__.py +5 -0
- agno/models/llama_cpp/llama_cpp.py +22 -0
- agno/models/message.py +143 -4
- agno/models/meta/llama.py +27 -10
- agno/models/meta/llama_openai.py +5 -17
- agno/models/nebius/nebius.py +6 -6
- agno/models/nexus/__init__.py +3 -0
- agno/models/nexus/nexus.py +22 -0
- agno/models/nvidia/nvidia.py +2 -2
- agno/models/ollama/chat.py +60 -6
- agno/models/openai/chat.py +102 -43
- agno/models/openai/responses.py +103 -106
- agno/models/openrouter/openrouter.py +41 -3
- agno/models/perplexity/perplexity.py +4 -5
- agno/models/portkey/portkey.py +3 -3
- agno/models/requesty/__init__.py +5 -0
- agno/models/requesty/requesty.py +52 -0
- agno/models/response.py +81 -5
- agno/models/sambanova/sambanova.py +2 -2
- agno/models/siliconflow/__init__.py +5 -0
- agno/models/siliconflow/siliconflow.py +25 -0
- agno/models/together/together.py +2 -2
- agno/models/utils.py +254 -8
- agno/models/vercel/v0.py +2 -2
- agno/models/vertexai/__init__.py +0 -0
- agno/models/vertexai/claude.py +96 -0
- agno/models/vllm/vllm.py +1 -0
- agno/models/xai/xai.py +3 -2
- agno/os/app.py +543 -175
- agno/os/auth.py +24 -14
- agno/os/config.py +1 -0
- agno/os/interfaces/__init__.py +1 -0
- agno/os/interfaces/a2a/__init__.py +3 -0
- agno/os/interfaces/a2a/a2a.py +42 -0
- agno/os/interfaces/a2a/router.py +250 -0
- agno/os/interfaces/a2a/utils.py +924 -0
- agno/os/interfaces/agui/agui.py +23 -7
- agno/os/interfaces/agui/router.py +27 -3
- agno/os/interfaces/agui/utils.py +242 -142
- agno/os/interfaces/base.py +6 -2
- agno/os/interfaces/slack/router.py +81 -23
- agno/os/interfaces/slack/slack.py +29 -14
- agno/os/interfaces/whatsapp/router.py +11 -4
- agno/os/interfaces/whatsapp/whatsapp.py +14 -7
- agno/os/mcp.py +111 -54
- agno/os/middleware/__init__.py +7 -0
- agno/os/middleware/jwt.py +233 -0
- agno/os/router.py +556 -139
- agno/os/routers/evals/evals.py +71 -34
- agno/os/routers/evals/schemas.py +31 -31
- agno/os/routers/evals/utils.py +6 -5
- agno/os/routers/health.py +31 -0
- agno/os/routers/home.py +52 -0
- agno/os/routers/knowledge/knowledge.py +185 -38
- agno/os/routers/knowledge/schemas.py +82 -22
- agno/os/routers/memory/memory.py +158 -53
- agno/os/routers/memory/schemas.py +20 -16
- agno/os/routers/metrics/metrics.py +20 -8
- agno/os/routers/metrics/schemas.py +16 -16
- agno/os/routers/session/session.py +499 -38
- agno/os/schema.py +308 -198
- agno/os/utils.py +401 -41
- agno/reasoning/anthropic.py +80 -0
- agno/reasoning/azure_ai_foundry.py +2 -2
- agno/reasoning/deepseek.py +2 -2
- agno/reasoning/default.py +3 -1
- agno/reasoning/gemini.py +73 -0
- agno/reasoning/groq.py +2 -2
- agno/reasoning/ollama.py +2 -2
- agno/reasoning/openai.py +7 -2
- agno/reasoning/vertexai.py +76 -0
- agno/run/__init__.py +6 -0
- agno/run/agent.py +266 -112
- agno/run/base.py +53 -24
- agno/run/team.py +252 -111
- agno/run/workflow.py +156 -45
- agno/session/agent.py +105 -89
- agno/session/summary.py +65 -25
- agno/session/team.py +176 -96
- agno/session/workflow.py +406 -40
- agno/team/team.py +3854 -1692
- agno/tools/brightdata.py +3 -3
- agno/tools/cartesia.py +3 -5
- agno/tools/dalle.py +9 -8
- agno/tools/decorator.py +4 -2
- agno/tools/desi_vocal.py +2 -2
- agno/tools/duckduckgo.py +15 -11
- agno/tools/e2b.py +20 -13
- agno/tools/eleven_labs.py +26 -28
- agno/tools/exa.py +21 -16
- agno/tools/fal.py +4 -4
- agno/tools/file.py +153 -23
- agno/tools/file_generation.py +350 -0
- agno/tools/firecrawl.py +4 -4
- agno/tools/function.py +257 -37
- agno/tools/giphy.py +2 -2
- agno/tools/gmail.py +238 -14
- agno/tools/google_drive.py +270 -0
- agno/tools/googlecalendar.py +36 -8
- agno/tools/googlesheets.py +20 -5
- agno/tools/jira.py +20 -0
- agno/tools/knowledge.py +3 -3
- agno/tools/lumalab.py +3 -3
- agno/tools/mcp/__init__.py +10 -0
- agno/tools/mcp/mcp.py +331 -0
- agno/tools/mcp/multi_mcp.py +347 -0
- agno/tools/mcp/params.py +24 -0
- agno/tools/mcp_toolbox.py +284 -0
- agno/tools/mem0.py +11 -17
- agno/tools/memori.py +1 -53
- agno/tools/memory.py +419 -0
- agno/tools/models/azure_openai.py +2 -2
- agno/tools/models/gemini.py +3 -3
- agno/tools/models/groq.py +3 -5
- agno/tools/models/nebius.py +7 -7
- agno/tools/models_labs.py +25 -15
- agno/tools/notion.py +204 -0
- agno/tools/openai.py +4 -9
- agno/tools/opencv.py +3 -3
- agno/tools/parallel.py +314 -0
- agno/tools/replicate.py +7 -7
- agno/tools/scrapegraph.py +58 -31
- agno/tools/searxng.py +2 -2
- agno/tools/serper.py +2 -2
- agno/tools/slack.py +18 -3
- agno/tools/spider.py +2 -2
- agno/tools/tavily.py +146 -0
- agno/tools/whatsapp.py +1 -1
- agno/tools/workflow.py +278 -0
- agno/tools/yfinance.py +12 -11
- agno/utils/agent.py +820 -0
- agno/utils/audio.py +27 -0
- agno/utils/common.py +90 -1
- agno/utils/events.py +222 -7
- agno/utils/gemini.py +181 -23
- agno/utils/hooks.py +57 -0
- agno/utils/http.py +111 -0
- agno/utils/knowledge.py +12 -5
- agno/utils/log.py +1 -0
- agno/utils/mcp.py +95 -5
- agno/utils/media.py +188 -10
- agno/utils/merge_dict.py +22 -1
- agno/utils/message.py +60 -0
- agno/utils/models/claude.py +40 -11
- agno/utils/models/cohere.py +1 -1
- agno/utils/models/watsonx.py +1 -1
- agno/utils/openai.py +1 -1
- agno/utils/print_response/agent.py +105 -21
- agno/utils/print_response/team.py +103 -38
- agno/utils/print_response/workflow.py +251 -34
- agno/utils/reasoning.py +22 -1
- agno/utils/serialize.py +32 -0
- agno/utils/streamlit.py +16 -10
- agno/utils/string.py +41 -0
- agno/utils/team.py +98 -9
- agno/utils/tools.py +1 -1
- agno/vectordb/base.py +23 -4
- agno/vectordb/cassandra/cassandra.py +65 -9
- agno/vectordb/chroma/chromadb.py +182 -38
- agno/vectordb/clickhouse/clickhousedb.py +64 -11
- agno/vectordb/couchbase/couchbase.py +105 -10
- agno/vectordb/lancedb/lance_db.py +183 -135
- agno/vectordb/langchaindb/langchaindb.py +25 -7
- agno/vectordb/lightrag/lightrag.py +17 -3
- agno/vectordb/llamaindex/__init__.py +3 -0
- agno/vectordb/llamaindex/llamaindexdb.py +46 -7
- agno/vectordb/milvus/milvus.py +126 -9
- agno/vectordb/mongodb/__init__.py +7 -1
- agno/vectordb/mongodb/mongodb.py +112 -7
- agno/vectordb/pgvector/pgvector.py +142 -21
- agno/vectordb/pineconedb/pineconedb.py +80 -8
- agno/vectordb/qdrant/qdrant.py +125 -39
- agno/vectordb/redis/__init__.py +9 -0
- agno/vectordb/redis/redisdb.py +694 -0
- agno/vectordb/singlestore/singlestore.py +111 -25
- agno/vectordb/surrealdb/surrealdb.py +31 -5
- agno/vectordb/upstashdb/upstashdb.py +76 -8
- agno/vectordb/weaviate/weaviate.py +86 -15
- agno/workflow/__init__.py +2 -0
- agno/workflow/agent.py +299 -0
- agno/workflow/condition.py +112 -18
- agno/workflow/loop.py +69 -10
- agno/workflow/parallel.py +266 -118
- agno/workflow/router.py +110 -17
- agno/workflow/step.py +645 -136
- agno/workflow/steps.py +65 -6
- agno/workflow/types.py +71 -33
- agno/workflow/workflow.py +2113 -300
- agno-2.3.0.dist-info/METADATA +618 -0
- agno-2.3.0.dist-info/RECORD +577 -0
- agno-2.3.0.dist-info/licenses/LICENSE +201 -0
- agno/knowledge/reader/url_reader.py +0 -128
- agno/tools/googlesearch.py +0 -98
- agno/tools/mcp.py +0 -610
- agno/utils/models/aws_claude.py +0 -170
- agno-2.0.0rc2.dist-info/METADATA +0 -355
- agno-2.0.0rc2.dist-info/RECORD +0 -515
- agno-2.0.0rc2.dist-info/licenses/LICENSE +0 -375
- {agno-2.0.0rc2.dist-info → agno-2.3.0.dist-info}/WHEEL +0 -0
- {agno-2.0.0rc2.dist-info → agno-2.3.0.dist-info}/top_level.txt +0 -0
agno/run/base.py
CHANGED
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
from dataclasses import asdict, dataclass
|
|
2
2
|
from enum import Enum
|
|
3
|
-
from typing import Any, Dict
|
|
3
|
+
from typing import Any, Dict, List, Optional, Union
|
|
4
4
|
|
|
5
5
|
from pydantic import BaseModel
|
|
6
6
|
|
|
7
|
-
from agno.
|
|
7
|
+
from agno.filters import FilterExpr
|
|
8
|
+
from agno.media import Audio, Image, Video
|
|
8
9
|
from agno.models.message import Citations, Message, MessageReferences
|
|
9
10
|
from agno.models.metrics import Metrics
|
|
10
|
-
from agno.models.response import ToolExecution
|
|
11
11
|
from agno.reasoning.step import ReasoningStep
|
|
12
12
|
from agno.utils.log import log_error
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
@dataclass
|
|
16
|
+
class RunContext:
|
|
17
|
+
run_id: str
|
|
18
|
+
session_id: str
|
|
19
|
+
user_id: Optional[str] = None
|
|
20
|
+
|
|
21
|
+
dependencies: Optional[Dict[str, Any]] = None
|
|
22
|
+
knowledge_filters: Optional[Union[Dict[str, Any], List[FilterExpr]]] = None
|
|
23
|
+
metadata: Optional[Dict[str, Any]] = None
|
|
24
|
+
session_state: Optional[Dict[str, Any]] = None
|
|
25
|
+
|
|
26
|
+
|
|
15
27
|
@dataclass
|
|
16
28
|
class BaseRunOutputEvent:
|
|
17
29
|
def to_dict(self) -> Dict[str, Any]:
|
|
@@ -35,6 +47,7 @@ class BaseRunOutputEvent:
|
|
|
35
47
|
"reasoning_steps",
|
|
36
48
|
"references",
|
|
37
49
|
"additional_input",
|
|
50
|
+
"session_summary",
|
|
38
51
|
"metrics",
|
|
39
52
|
]
|
|
40
53
|
}
|
|
@@ -60,21 +73,15 @@ class BaseRunOutputEvent:
|
|
|
60
73
|
if hasattr(self, "images") and self.images is not None:
|
|
61
74
|
_dict["images"] = []
|
|
62
75
|
for img in self.images:
|
|
63
|
-
if isinstance(img,
|
|
76
|
+
if isinstance(img, Image):
|
|
64
77
|
_dict["images"].append(img.to_dict())
|
|
65
78
|
else:
|
|
66
79
|
_dict["images"].append(img)
|
|
67
80
|
|
|
68
|
-
if hasattr(self, "image") and self.image is not None:
|
|
69
|
-
if isinstance(self.image, ImageArtifact):
|
|
70
|
-
_dict["image"] = self.image.to_dict()
|
|
71
|
-
else:
|
|
72
|
-
_dict["image"] = self.image
|
|
73
|
-
|
|
74
81
|
if hasattr(self, "videos") and self.videos is not None:
|
|
75
82
|
_dict["videos"] = []
|
|
76
83
|
for vid in self.videos:
|
|
77
|
-
if isinstance(vid,
|
|
84
|
+
if isinstance(vid, Video):
|
|
78
85
|
_dict["videos"].append(vid.to_dict())
|
|
79
86
|
else:
|
|
80
87
|
_dict["videos"].append(vid)
|
|
@@ -82,13 +89,13 @@ class BaseRunOutputEvent:
|
|
|
82
89
|
if hasattr(self, "audio") and self.audio is not None:
|
|
83
90
|
_dict["audio"] = []
|
|
84
91
|
for aud in self.audio:
|
|
85
|
-
if isinstance(aud,
|
|
92
|
+
if isinstance(aud, Audio):
|
|
86
93
|
_dict["audio"].append(aud.to_dict())
|
|
87
94
|
else:
|
|
88
95
|
_dict["audio"].append(aud)
|
|
89
96
|
|
|
90
97
|
if hasattr(self, "response_audio") and self.response_audio is not None:
|
|
91
|
-
if isinstance(self.response_audio,
|
|
98
|
+
if isinstance(self.response_audio, Audio):
|
|
92
99
|
_dict["response_audio"] = self.response_audio.to_dict()
|
|
93
100
|
else:
|
|
94
101
|
_dict["response_audio"] = self.response_audio
|
|
@@ -103,6 +110,8 @@ class BaseRunOutputEvent:
|
|
|
103
110
|
_dict["content"] = self.content.model_dump(exclude_none=True)
|
|
104
111
|
|
|
105
112
|
if hasattr(self, "tools") and self.tools is not None:
|
|
113
|
+
from agno.models.response import ToolExecution
|
|
114
|
+
|
|
106
115
|
_dict["tools"] = []
|
|
107
116
|
for tool in self.tools:
|
|
108
117
|
if isinstance(tool, ToolExecution):
|
|
@@ -111,6 +120,8 @@ class BaseRunOutputEvent:
|
|
|
111
120
|
_dict["tools"].append(tool)
|
|
112
121
|
|
|
113
122
|
if hasattr(self, "tool") and self.tool is not None:
|
|
123
|
+
from agno.models.response import ToolExecution
|
|
124
|
+
|
|
114
125
|
if isinstance(self.tool, ToolExecution):
|
|
115
126
|
_dict["tool"] = self.tool.to_dict()
|
|
116
127
|
else:
|
|
@@ -119,44 +130,50 @@ class BaseRunOutputEvent:
|
|
|
119
130
|
if hasattr(self, "metrics") and self.metrics is not None:
|
|
120
131
|
_dict["metrics"] = self.metrics.to_dict()
|
|
121
132
|
|
|
133
|
+
if hasattr(self, "session_summary") and self.session_summary is not None:
|
|
134
|
+
_dict["session_summary"] = self.session_summary.to_dict()
|
|
135
|
+
|
|
122
136
|
return _dict
|
|
123
137
|
|
|
124
|
-
def to_json(self) -> str:
|
|
138
|
+
def to_json(self, separators=(", ", ": "), indent: Optional[int] = 2) -> str:
|
|
125
139
|
import json
|
|
126
140
|
|
|
141
|
+
from agno.utils.serialize import json_serializer
|
|
142
|
+
|
|
127
143
|
try:
|
|
128
144
|
_dict = self.to_dict()
|
|
129
145
|
except Exception:
|
|
130
146
|
log_error("Failed to convert response event to json", exc_info=True)
|
|
131
147
|
raise
|
|
132
148
|
|
|
133
|
-
|
|
149
|
+
if indent is None:
|
|
150
|
+
return json.dumps(_dict, separators=separators, default=json_serializer, ensure_ascii=False)
|
|
151
|
+
else:
|
|
152
|
+
return json.dumps(_dict, indent=indent, separators=separators, default=json_serializer, ensure_ascii=False)
|
|
134
153
|
|
|
135
154
|
@classmethod
|
|
136
155
|
def from_dict(cls, data: Dict[str, Any]):
|
|
137
156
|
tool = data.pop("tool", None)
|
|
138
157
|
if tool:
|
|
158
|
+
from agno.models.response import ToolExecution
|
|
159
|
+
|
|
139
160
|
data["tool"] = ToolExecution.from_dict(tool)
|
|
140
161
|
|
|
141
162
|
images = data.pop("images", None)
|
|
142
163
|
if images:
|
|
143
|
-
data["images"] = [
|
|
144
|
-
|
|
145
|
-
image = data.pop("image", None)
|
|
146
|
-
if image:
|
|
147
|
-
data["image"] = ImageArtifact.model_validate(image)
|
|
164
|
+
data["images"] = [Image.model_validate(image) for image in images]
|
|
148
165
|
|
|
149
166
|
videos = data.pop("videos", None)
|
|
150
167
|
if videos:
|
|
151
|
-
data["videos"] = [
|
|
168
|
+
data["videos"] = [Video.model_validate(video) for video in videos]
|
|
152
169
|
|
|
153
170
|
audio = data.pop("audio", None)
|
|
154
171
|
if audio:
|
|
155
|
-
data["audio"] = [
|
|
172
|
+
data["audio"] = [Audio.model_validate(audio) for audio in audio]
|
|
156
173
|
|
|
157
174
|
response_audio = data.pop("response_audio", None)
|
|
158
175
|
if response_audio:
|
|
159
|
-
data["response_audio"] =
|
|
176
|
+
data["response_audio"] = Audio.model_validate(response_audio)
|
|
160
177
|
|
|
161
178
|
additional_input = data.pop("additional_input", None)
|
|
162
179
|
if additional_input is not None:
|
|
@@ -178,7 +195,19 @@ class BaseRunOutputEvent:
|
|
|
178
195
|
if metrics:
|
|
179
196
|
data["metrics"] = Metrics(**metrics)
|
|
180
197
|
|
|
181
|
-
|
|
198
|
+
session_summary = data.pop("session_summary", None)
|
|
199
|
+
if session_summary:
|
|
200
|
+
from agno.session.summary import SessionSummary
|
|
201
|
+
|
|
202
|
+
data["session_summary"] = SessionSummary.from_dict(session_summary)
|
|
203
|
+
|
|
204
|
+
# Filter data to only include fields that are actually defined in the target class
|
|
205
|
+
from dataclasses import fields
|
|
206
|
+
|
|
207
|
+
supported_fields = {f.name for f in fields(cls)}
|
|
208
|
+
filtered_data = {k: v for k, v in data.items() if k in supported_fields}
|
|
209
|
+
|
|
210
|
+
return cls(**filtered_data)
|
|
182
211
|
|
|
183
212
|
@property
|
|
184
213
|
def is_paused(self):
|