agno 1.8.0__py3-none-any.whl → 2.0.0a1__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/__init__.py +8 -0
- agno/agent/__init__.py +19 -27
- agno/agent/agent.py +2781 -4126
- agno/api/agent.py +9 -65
- agno/api/api.py +5 -46
- agno/api/evals.py +6 -17
- agno/api/os.py +17 -0
- agno/api/routes.py +6 -41
- agno/api/schemas/__init__.py +9 -0
- agno/api/schemas/agent.py +5 -21
- agno/api/schemas/evals.py +7 -16
- agno/api/schemas/os.py +14 -0
- agno/api/schemas/team.py +5 -21
- agno/api/schemas/utils.py +21 -0
- agno/api/schemas/workflows.py +11 -7
- agno/api/settings.py +53 -0
- agno/api/team.py +9 -64
- agno/api/workflow.py +28 -0
- agno/cloud/aws/base.py +214 -0
- agno/cloud/aws/s3/__init__.py +2 -0
- agno/cloud/aws/s3/api_client.py +43 -0
- agno/cloud/aws/s3/bucket.py +195 -0
- agno/cloud/aws/s3/object.py +57 -0
- agno/db/__init__.py +24 -0
- agno/db/base.py +245 -0
- agno/db/dynamo/__init__.py +3 -0
- agno/db/dynamo/dynamo.py +1749 -0
- agno/db/dynamo/schemas.py +278 -0
- agno/db/dynamo/utils.py +684 -0
- agno/db/firestore/__init__.py +3 -0
- agno/db/firestore/firestore.py +1438 -0
- agno/db/firestore/schemas.py +130 -0
- agno/db/firestore/utils.py +278 -0
- agno/db/gcs_json/__init__.py +3 -0
- agno/db/gcs_json/gcs_json_db.py +1001 -0
- agno/db/gcs_json/utils.py +194 -0
- agno/db/in_memory/__init__.py +3 -0
- agno/db/in_memory/in_memory_db.py +888 -0
- agno/db/in_memory/utils.py +172 -0
- agno/db/json/__init__.py +3 -0
- agno/db/json/json_db.py +1051 -0
- agno/db/json/utils.py +196 -0
- agno/db/migrations/v1_to_v2.py +162 -0
- agno/db/mongo/__init__.py +3 -0
- agno/db/mongo/mongo.py +1417 -0
- agno/db/mongo/schemas.py +77 -0
- agno/db/mongo/utils.py +204 -0
- agno/db/mysql/__init__.py +3 -0
- agno/db/mysql/mysql.py +1719 -0
- agno/db/mysql/schemas.py +124 -0
- agno/db/mysql/utils.py +298 -0
- agno/db/postgres/__init__.py +3 -0
- agno/db/postgres/postgres.py +1720 -0
- agno/db/postgres/schemas.py +124 -0
- agno/db/postgres/utils.py +281 -0
- agno/db/redis/__init__.py +3 -0
- agno/db/redis/redis.py +1371 -0
- agno/db/redis/schemas.py +109 -0
- agno/db/redis/utils.py +288 -0
- agno/db/schemas/__init__.py +3 -0
- agno/db/schemas/evals.py +33 -0
- agno/db/schemas/knowledge.py +40 -0
- agno/db/schemas/memory.py +46 -0
- agno/db/singlestore/__init__.py +3 -0
- agno/db/singlestore/schemas.py +116 -0
- agno/db/singlestore/singlestore.py +1722 -0
- agno/db/singlestore/utils.py +327 -0
- agno/db/sqlite/__init__.py +3 -0
- agno/db/sqlite/schemas.py +119 -0
- agno/db/sqlite/sqlite.py +1680 -0
- agno/db/sqlite/utils.py +269 -0
- agno/db/utils.py +88 -0
- agno/eval/__init__.py +14 -0
- agno/eval/accuracy.py +142 -43
- agno/eval/performance.py +88 -23
- agno/eval/reliability.py +73 -20
- agno/eval/utils.py +23 -13
- agno/integrations/discord/__init__.py +3 -0
- agno/{app → integrations}/discord/client.py +10 -10
- agno/knowledge/__init__.py +2 -2
- agno/{document → knowledge}/chunking/agentic.py +2 -2
- agno/{document → knowledge}/chunking/document.py +2 -2
- agno/{document → knowledge}/chunking/fixed.py +3 -3
- agno/{document → knowledge}/chunking/markdown.py +2 -2
- agno/{document → knowledge}/chunking/recursive.py +2 -2
- agno/{document → knowledge}/chunking/row.py +2 -2
- agno/knowledge/chunking/semantic.py +59 -0
- agno/knowledge/chunking/strategy.py +121 -0
- agno/knowledge/content.py +74 -0
- agno/knowledge/document/__init__.py +5 -0
- agno/{document → knowledge/document}/base.py +12 -2
- agno/knowledge/embedder/__init__.py +5 -0
- agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
- agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
- agno/{embedder → knowledge/embedder}/base.py +6 -0
- agno/{embedder → knowledge/embedder}/cohere.py +72 -1
- agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
- agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
- agno/{embedder → knowledge/embedder}/google.py +74 -1
- agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
- agno/{embedder → knowledge/embedder}/jina.py +48 -2
- agno/knowledge/embedder/langdb.py +22 -0
- agno/knowledge/embedder/mistral.py +139 -0
- agno/{embedder → knowledge/embedder}/nebius.py +1 -1
- agno/{embedder → knowledge/embedder}/ollama.py +54 -3
- agno/knowledge/embedder/openai.py +223 -0
- agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
- agno/{embedder → knowledge/embedder}/together.py +1 -1
- agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
- agno/knowledge/knowledge.py +1515 -0
- agno/knowledge/reader/__init__.py +7 -0
- agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
- agno/knowledge/reader/base.py +88 -0
- agno/{document → knowledge}/reader/csv_reader.py +68 -15
- agno/knowledge/reader/docx_reader.py +83 -0
- agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
- agno/knowledge/reader/gcs_reader.py +67 -0
- agno/{document → knowledge}/reader/json_reader.py +30 -9
- agno/{document → knowledge}/reader/markdown_reader.py +36 -9
- agno/{document → knowledge}/reader/pdf_reader.py +79 -21
- agno/knowledge/reader/reader_factory.py +275 -0
- agno/knowledge/reader/s3_reader.py +171 -0
- agno/{document → knowledge}/reader/text_reader.py +31 -10
- agno/knowledge/reader/url_reader.py +84 -0
- agno/knowledge/reader/web_search_reader.py +389 -0
- agno/{document → knowledge}/reader/website_reader.py +37 -10
- agno/knowledge/reader/wikipedia_reader.py +59 -0
- agno/knowledge/reader/youtube_reader.py +78 -0
- agno/knowledge/remote_content/remote_content.py +88 -0
- agno/{reranker → knowledge/reranker}/base.py +1 -1
- agno/{reranker → knowledge/reranker}/cohere.py +2 -2
- agno/{reranker → knowledge/reranker}/infinity.py +2 -2
- agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
- agno/knowledge/types.py +30 -0
- agno/knowledge/utils.py +169 -0
- agno/media.py +2 -2
- agno/memory/__init__.py +2 -10
- agno/memory/manager.py +1003 -148
- agno/models/aimlapi/__init__.py +2 -2
- agno/models/aimlapi/aimlapi.py +6 -6
- agno/models/anthropic/claude.py +129 -82
- agno/models/aws/bedrock.py +107 -175
- agno/models/aws/claude.py +64 -18
- agno/models/azure/ai_foundry.py +73 -23
- agno/models/base.py +347 -287
- agno/models/cerebras/cerebras.py +84 -27
- agno/models/cohere/chat.py +106 -98
- agno/models/dashscope/dashscope.py +14 -5
- agno/models/google/gemini.py +123 -53
- agno/models/groq/groq.py +97 -35
- agno/models/huggingface/huggingface.py +92 -27
- agno/models/ibm/watsonx.py +72 -13
- agno/models/litellm/chat.py +85 -13
- agno/models/message.py +38 -144
- agno/models/meta/llama.py +85 -49
- agno/models/metrics.py +120 -0
- agno/models/mistral/mistral.py +90 -21
- agno/models/ollama/__init__.py +0 -2
- agno/models/ollama/chat.py +84 -46
- agno/models/openai/chat.py +135 -27
- agno/models/openai/responses.py +233 -115
- agno/models/perplexity/perplexity.py +26 -2
- agno/models/portkey/portkey.py +0 -7
- agno/models/response.py +14 -8
- agno/models/utils.py +20 -0
- agno/models/vercel/__init__.py +2 -2
- agno/models/vercel/v0.py +1 -1
- agno/models/vllm/__init__.py +2 -2
- agno/models/vllm/vllm.py +3 -3
- agno/models/xai/xai.py +10 -10
- agno/os/__init__.py +3 -0
- agno/os/app.py +393 -0
- agno/os/auth.py +47 -0
- agno/os/config.py +103 -0
- agno/os/interfaces/agui/__init__.py +3 -0
- agno/os/interfaces/agui/agui.py +31 -0
- agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
- agno/{app → os/interfaces}/agui/utils.py +65 -28
- agno/os/interfaces/base.py +21 -0
- agno/os/interfaces/slack/__init__.py +3 -0
- agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
- agno/os/interfaces/slack/slack.py +33 -0
- agno/os/interfaces/whatsapp/__init__.py +3 -0
- agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
- agno/os/interfaces/whatsapp/whatsapp.py +30 -0
- agno/os/router.py +843 -0
- agno/os/routers/__init__.py +3 -0
- agno/os/routers/evals/__init__.py +3 -0
- agno/os/routers/evals/evals.py +204 -0
- agno/os/routers/evals/schemas.py +142 -0
- agno/os/routers/evals/utils.py +161 -0
- agno/os/routers/knowledge/__init__.py +3 -0
- agno/os/routers/knowledge/knowledge.py +413 -0
- agno/os/routers/knowledge/schemas.py +118 -0
- agno/os/routers/memory/__init__.py +3 -0
- agno/os/routers/memory/memory.py +179 -0
- agno/os/routers/memory/schemas.py +58 -0
- agno/os/routers/metrics/__init__.py +3 -0
- agno/os/routers/metrics/metrics.py +58 -0
- agno/os/routers/metrics/schemas.py +47 -0
- agno/os/routers/session/__init__.py +3 -0
- agno/os/routers/session/session.py +163 -0
- agno/os/schema.py +892 -0
- agno/{app/playground → os}/settings.py +8 -15
- agno/os/utils.py +270 -0
- agno/reasoning/azure_ai_foundry.py +4 -4
- agno/reasoning/deepseek.py +4 -4
- agno/reasoning/default.py +6 -11
- agno/reasoning/groq.py +4 -4
- agno/reasoning/helpers.py +4 -6
- agno/reasoning/ollama.py +4 -4
- agno/reasoning/openai.py +4 -4
- agno/run/{response.py → agent.py} +144 -72
- agno/run/base.py +44 -58
- agno/run/cancel.py +83 -0
- agno/run/team.py +133 -77
- agno/run/workflow.py +537 -12
- agno/session/__init__.py +10 -0
- agno/session/agent.py +244 -0
- agno/session/summary.py +225 -0
- agno/session/team.py +262 -0
- agno/{storage/session/v2 → session}/workflow.py +47 -24
- agno/team/__init__.py +15 -16
- agno/team/team.py +2967 -4243
- agno/tools/agentql.py +14 -5
- agno/tools/airflow.py +9 -4
- agno/tools/api.py +7 -3
- agno/tools/apify.py +2 -46
- agno/tools/arxiv.py +8 -3
- agno/tools/aws_lambda.py +7 -5
- agno/tools/aws_ses.py +7 -1
- agno/tools/baidusearch.py +4 -1
- agno/tools/bitbucket.py +4 -4
- agno/tools/brandfetch.py +14 -11
- agno/tools/bravesearch.py +4 -1
- agno/tools/brightdata.py +42 -22
- agno/tools/browserbase.py +13 -4
- agno/tools/calcom.py +12 -10
- agno/tools/calculator.py +10 -27
- agno/tools/cartesia.py +18 -13
- agno/tools/{clickup_tool.py → clickup.py} +12 -25
- agno/tools/confluence.py +71 -18
- agno/tools/crawl4ai.py +7 -1
- agno/tools/csv_toolkit.py +9 -8
- agno/tools/dalle.py +18 -11
- agno/tools/daytona.py +13 -16
- agno/tools/decorator.py +6 -3
- agno/tools/desi_vocal.py +16 -7
- agno/tools/discord.py +11 -8
- agno/tools/docker.py +30 -42
- agno/tools/duckdb.py +34 -53
- agno/tools/duckduckgo.py +8 -7
- agno/tools/e2b.py +62 -62
- agno/tools/eleven_labs.py +35 -28
- agno/tools/email.py +4 -1
- agno/tools/evm.py +7 -1
- agno/tools/exa.py +19 -14
- agno/tools/fal.py +29 -29
- agno/tools/file.py +9 -8
- agno/tools/financial_datasets.py +25 -44
- agno/tools/firecrawl.py +22 -22
- agno/tools/function.py +68 -17
- agno/tools/giphy.py +22 -10
- agno/tools/github.py +48 -126
- agno/tools/gmail.py +46 -62
- agno/tools/google_bigquery.py +7 -6
- agno/tools/google_maps.py +11 -26
- agno/tools/googlesearch.py +7 -2
- agno/tools/googlesheets.py +21 -17
- agno/tools/hackernews.py +9 -5
- agno/tools/jina.py +5 -4
- agno/tools/jira.py +18 -9
- agno/tools/knowledge.py +31 -32
- agno/tools/linear.py +18 -33
- agno/tools/linkup.py +5 -1
- agno/tools/local_file_system.py +8 -5
- agno/tools/lumalab.py +31 -19
- agno/tools/mem0.py +18 -12
- agno/tools/memori.py +14 -10
- agno/tools/mlx_transcribe.py +3 -2
- agno/tools/models/azure_openai.py +32 -14
- agno/tools/models/gemini.py +58 -31
- agno/tools/models/groq.py +29 -20
- agno/tools/models/nebius.py +27 -11
- agno/tools/models_labs.py +39 -15
- agno/tools/moviepy_video.py +7 -6
- agno/tools/neo4j.py +134 -0
- agno/tools/newspaper.py +7 -2
- agno/tools/newspaper4k.py +8 -3
- agno/tools/openai.py +57 -26
- agno/tools/openbb.py +12 -11
- agno/tools/opencv.py +62 -46
- agno/tools/openweather.py +14 -12
- agno/tools/pandas.py +11 -3
- agno/tools/postgres.py +4 -12
- agno/tools/pubmed.py +4 -1
- agno/tools/python.py +9 -22
- agno/tools/reasoning.py +35 -27
- agno/tools/reddit.py +11 -26
- agno/tools/replicate.py +54 -41
- agno/tools/resend.py +4 -1
- agno/tools/scrapegraph.py +15 -14
- agno/tools/searxng.py +10 -23
- agno/tools/serpapi.py +6 -3
- agno/tools/serper.py +13 -4
- agno/tools/shell.py +9 -2
- agno/tools/slack.py +12 -11
- agno/tools/sleep.py +3 -2
- agno/tools/spider.py +24 -4
- agno/tools/sql.py +7 -6
- agno/tools/tavily.py +6 -4
- agno/tools/telegram.py +12 -4
- agno/tools/todoist.py +11 -31
- agno/tools/toolkit.py +1 -1
- agno/tools/trafilatura.py +22 -6
- agno/tools/trello.py +9 -22
- agno/tools/twilio.py +10 -3
- agno/tools/user_control_flow.py +6 -1
- agno/tools/valyu.py +34 -5
- agno/tools/visualization.py +19 -28
- agno/tools/webbrowser.py +4 -3
- agno/tools/webex.py +11 -7
- agno/tools/website.py +15 -46
- agno/tools/webtools.py +12 -4
- agno/tools/whatsapp.py +5 -9
- agno/tools/wikipedia.py +20 -13
- agno/tools/x.py +14 -13
- agno/tools/yfinance.py +13 -40
- agno/tools/youtube.py +26 -20
- agno/tools/zendesk.py +7 -2
- agno/tools/zep.py +10 -7
- agno/tools/zoom.py +10 -9
- agno/utils/common.py +1 -19
- agno/utils/events.py +95 -118
- agno/utils/knowledge.py +29 -0
- agno/utils/location.py +2 -2
- agno/utils/log.py +2 -2
- agno/utils/mcp.py +11 -5
- agno/utils/media.py +39 -0
- agno/utils/message.py +12 -1
- agno/utils/models/claude.py +6 -4
- agno/utils/models/mistral.py +8 -7
- agno/utils/models/schema_utils.py +3 -3
- agno/utils/pprint.py +33 -32
- agno/utils/print_response/agent.py +779 -0
- agno/utils/print_response/team.py +1565 -0
- agno/utils/print_response/workflow.py +1451 -0
- agno/utils/prompts.py +14 -14
- agno/utils/reasoning.py +87 -0
- agno/utils/response.py +42 -42
- agno/utils/string.py +8 -22
- agno/utils/team.py +50 -0
- agno/utils/timer.py +2 -2
- agno/vectordb/base.py +33 -21
- agno/vectordb/cassandra/cassandra.py +287 -23
- agno/vectordb/chroma/chromadb.py +482 -59
- agno/vectordb/clickhouse/clickhousedb.py +270 -63
- agno/vectordb/couchbase/couchbase.py +309 -29
- agno/vectordb/lancedb/lance_db.py +360 -21
- agno/vectordb/langchaindb/__init__.py +5 -0
- agno/vectordb/langchaindb/langchaindb.py +145 -0
- agno/vectordb/lightrag/__init__.py +5 -0
- agno/vectordb/lightrag/lightrag.py +374 -0
- agno/vectordb/llamaindex/llamaindexdb.py +127 -0
- agno/vectordb/milvus/milvus.py +242 -32
- agno/vectordb/mongodb/mongodb.py +200 -24
- agno/vectordb/pgvector/pgvector.py +319 -37
- agno/vectordb/pineconedb/pineconedb.py +221 -27
- agno/vectordb/qdrant/qdrant.py +356 -14
- agno/vectordb/singlestore/singlestore.py +286 -29
- agno/vectordb/surrealdb/surrealdb.py +187 -7
- agno/vectordb/upstashdb/upstashdb.py +342 -26
- agno/vectordb/weaviate/weaviate.py +227 -165
- agno/workflow/__init__.py +17 -13
- agno/workflow/{v2/condition.py → condition.py} +135 -32
- agno/workflow/{v2/loop.py → loop.py} +115 -28
- agno/workflow/{v2/parallel.py → parallel.py} +138 -108
- agno/workflow/{v2/router.py → router.py} +133 -32
- agno/workflow/{v2/step.py → step.py} +200 -42
- agno/workflow/{v2/steps.py → steps.py} +147 -66
- agno/workflow/types.py +482 -0
- agno/workflow/workflow.py +2394 -696
- agno-2.0.0a1.dist-info/METADATA +355 -0
- agno-2.0.0a1.dist-info/RECORD +514 -0
- agno/agent/metrics.py +0 -107
- agno/api/app.py +0 -35
- agno/api/playground.py +0 -92
- agno/api/schemas/app.py +0 -12
- agno/api/schemas/playground.py +0 -22
- agno/api/schemas/user.py +0 -35
- agno/api/schemas/workspace.py +0 -46
- agno/api/user.py +0 -160
- agno/api/workflows.py +0 -33
- agno/api/workspace.py +0 -175
- agno/app/agui/__init__.py +0 -3
- agno/app/agui/app.py +0 -17
- agno/app/agui/sync_router.py +0 -120
- agno/app/base.py +0 -186
- agno/app/discord/__init__.py +0 -3
- agno/app/fastapi/__init__.py +0 -3
- agno/app/fastapi/app.py +0 -107
- agno/app/fastapi/async_router.py +0 -457
- agno/app/fastapi/sync_router.py +0 -448
- agno/app/playground/app.py +0 -228
- agno/app/playground/async_router.py +0 -1050
- agno/app/playground/deploy.py +0 -249
- agno/app/playground/operator.py +0 -183
- agno/app/playground/schemas.py +0 -220
- agno/app/playground/serve.py +0 -55
- agno/app/playground/sync_router.py +0 -1042
- agno/app/playground/utils.py +0 -46
- agno/app/settings.py +0 -15
- agno/app/slack/__init__.py +0 -3
- agno/app/slack/app.py +0 -19
- agno/app/slack/sync_router.py +0 -92
- agno/app/utils.py +0 -54
- agno/app/whatsapp/__init__.py +0 -3
- agno/app/whatsapp/app.py +0 -15
- agno/app/whatsapp/sync_router.py +0 -197
- agno/cli/auth_server.py +0 -249
- agno/cli/config.py +0 -274
- agno/cli/console.py +0 -88
- agno/cli/credentials.py +0 -23
- agno/cli/entrypoint.py +0 -571
- agno/cli/operator.py +0 -357
- agno/cli/settings.py +0 -96
- agno/cli/ws/ws_cli.py +0 -817
- agno/constants.py +0 -13
- agno/document/__init__.py +0 -5
- agno/document/chunking/semantic.py +0 -45
- agno/document/chunking/strategy.py +0 -31
- agno/document/reader/__init__.py +0 -5
- agno/document/reader/base.py +0 -47
- agno/document/reader/docx_reader.py +0 -60
- agno/document/reader/gcs/pdf_reader.py +0 -44
- agno/document/reader/s3/pdf_reader.py +0 -59
- agno/document/reader/s3/text_reader.py +0 -63
- agno/document/reader/url_reader.py +0 -59
- agno/document/reader/youtube_reader.py +0 -58
- agno/embedder/__init__.py +0 -5
- agno/embedder/langdb.py +0 -80
- agno/embedder/mistral.py +0 -82
- agno/embedder/openai.py +0 -78
- agno/file/__init__.py +0 -5
- agno/file/file.py +0 -16
- agno/file/local/csv.py +0 -32
- agno/file/local/txt.py +0 -19
- agno/infra/app.py +0 -240
- agno/infra/base.py +0 -144
- agno/infra/context.py +0 -20
- agno/infra/db_app.py +0 -52
- agno/infra/resource.py +0 -205
- agno/infra/resources.py +0 -55
- agno/knowledge/agent.py +0 -698
- agno/knowledge/arxiv.py +0 -33
- agno/knowledge/combined.py +0 -36
- agno/knowledge/csv.py +0 -144
- agno/knowledge/csv_url.py +0 -124
- agno/knowledge/document.py +0 -223
- agno/knowledge/docx.py +0 -137
- agno/knowledge/firecrawl.py +0 -34
- agno/knowledge/gcs/__init__.py +0 -0
- agno/knowledge/gcs/base.py +0 -39
- agno/knowledge/gcs/pdf.py +0 -125
- agno/knowledge/json.py +0 -137
- agno/knowledge/langchain.py +0 -71
- agno/knowledge/light_rag.py +0 -273
- agno/knowledge/llamaindex.py +0 -66
- agno/knowledge/markdown.py +0 -154
- agno/knowledge/pdf.py +0 -164
- agno/knowledge/pdf_bytes.py +0 -42
- agno/knowledge/pdf_url.py +0 -148
- agno/knowledge/s3/__init__.py +0 -0
- agno/knowledge/s3/base.py +0 -64
- agno/knowledge/s3/pdf.py +0 -33
- agno/knowledge/s3/text.py +0 -34
- agno/knowledge/text.py +0 -141
- agno/knowledge/url.py +0 -46
- agno/knowledge/website.py +0 -179
- agno/knowledge/wikipedia.py +0 -32
- agno/knowledge/youtube.py +0 -35
- agno/memory/agent.py +0 -423
- agno/memory/classifier.py +0 -104
- agno/memory/db/__init__.py +0 -5
- agno/memory/db/base.py +0 -42
- agno/memory/db/mongodb.py +0 -189
- agno/memory/db/postgres.py +0 -203
- agno/memory/db/sqlite.py +0 -193
- agno/memory/memory.py +0 -22
- agno/memory/row.py +0 -36
- agno/memory/summarizer.py +0 -201
- agno/memory/summary.py +0 -19
- agno/memory/team.py +0 -415
- agno/memory/v2/__init__.py +0 -2
- agno/memory/v2/db/__init__.py +0 -1
- agno/memory/v2/db/base.py +0 -42
- agno/memory/v2/db/firestore.py +0 -339
- agno/memory/v2/db/mongodb.py +0 -196
- agno/memory/v2/db/postgres.py +0 -214
- agno/memory/v2/db/redis.py +0 -187
- agno/memory/v2/db/schema.py +0 -54
- agno/memory/v2/db/sqlite.py +0 -209
- agno/memory/v2/manager.py +0 -437
- agno/memory/v2/memory.py +0 -1097
- agno/memory/v2/schema.py +0 -55
- agno/memory/v2/summarizer.py +0 -215
- agno/memory/workflow.py +0 -38
- agno/models/ollama/tools.py +0 -430
- agno/models/qwen/__init__.py +0 -5
- agno/playground/__init__.py +0 -10
- agno/playground/deploy.py +0 -3
- agno/playground/playground.py +0 -3
- agno/playground/serve.py +0 -3
- agno/playground/settings.py +0 -3
- agno/reranker/__init__.py +0 -0
- agno/run/v2/__init__.py +0 -0
- agno/run/v2/workflow.py +0 -567
- agno/storage/__init__.py +0 -0
- agno/storage/agent/__init__.py +0 -0
- agno/storage/agent/dynamodb.py +0 -1
- agno/storage/agent/json.py +0 -1
- agno/storage/agent/mongodb.py +0 -1
- agno/storage/agent/postgres.py +0 -1
- agno/storage/agent/singlestore.py +0 -1
- agno/storage/agent/sqlite.py +0 -1
- agno/storage/agent/yaml.py +0 -1
- agno/storage/base.py +0 -60
- agno/storage/dynamodb.py +0 -673
- agno/storage/firestore.py +0 -297
- agno/storage/gcs_json.py +0 -261
- agno/storage/in_memory.py +0 -234
- agno/storage/json.py +0 -237
- agno/storage/mongodb.py +0 -328
- agno/storage/mysql.py +0 -685
- agno/storage/postgres.py +0 -682
- agno/storage/redis.py +0 -336
- agno/storage/session/__init__.py +0 -16
- agno/storage/session/agent.py +0 -64
- agno/storage/session/team.py +0 -63
- agno/storage/session/v2/__init__.py +0 -5
- agno/storage/session/workflow.py +0 -61
- agno/storage/singlestore.py +0 -606
- agno/storage/sqlite.py +0 -646
- agno/storage/workflow/__init__.py +0 -0
- agno/storage/workflow/mongodb.py +0 -1
- agno/storage/workflow/postgres.py +0 -1
- agno/storage/workflow/sqlite.py +0 -1
- agno/storage/yaml.py +0 -241
- agno/tools/thinking.py +0 -73
- agno/utils/defaults.py +0 -57
- agno/utils/filesystem.py +0 -39
- agno/utils/git.py +0 -52
- agno/utils/json_io.py +0 -30
- agno/utils/load_env.py +0 -19
- agno/utils/py_io.py +0 -19
- agno/utils/pyproject.py +0 -18
- agno/utils/resource_filter.py +0 -31
- agno/workflow/v2/__init__.py +0 -21
- agno/workflow/v2/types.py +0 -357
- agno/workflow/v2/workflow.py +0 -3312
- agno/workspace/__init__.py +0 -0
- agno/workspace/config.py +0 -325
- agno/workspace/enums.py +0 -6
- agno/workspace/helpers.py +0 -52
- agno/workspace/operator.py +0 -757
- agno/workspace/settings.py +0 -158
- agno-1.8.0.dist-info/METADATA +0 -979
- agno-1.8.0.dist-info/RECORD +0 -565
- agno-1.8.0.dist-info/entry_points.txt +0 -3
- /agno/{app → db/migrations}/__init__.py +0 -0
- /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
- /agno/{cli → integrations}/__init__.py +0 -0
- /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
- /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
- /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
- /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
- /agno/{app → os/interfaces}/slack/security.py +0 -0
- /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
- /agno/{file/local → utils/print_response}/__init__.py +0 -0
- /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
- {agno-1.8.0.dist-info → agno-2.0.0a1.dist-info}/WHEEL +0 -0
- {agno-1.8.0.dist-info → agno-2.0.0a1.dist-info}/licenses/LICENSE +0 -0
- {agno-1.8.0.dist-info → agno-2.0.0a1.dist-info}/top_level.txt +0 -0
agno/run/team.py
CHANGED
|
@@ -7,17 +7,19 @@ from pydantic import BaseModel
|
|
|
7
7
|
|
|
8
8
|
from agno.media import AudioArtifact, AudioResponse, ImageArtifact, VideoArtifact
|
|
9
9
|
from agno.models.message import Citations, Message
|
|
10
|
+
from agno.models.metrics import Metrics
|
|
10
11
|
from agno.models.response import ToolExecution
|
|
11
|
-
from agno.
|
|
12
|
-
from agno.run.
|
|
12
|
+
from agno.reasoning.step import ReasoningStep
|
|
13
|
+
from agno.run.agent import RunEvent, RunOutput, RunOutputEvent, run_output_event_from_dict
|
|
14
|
+
from agno.run.base import BaseRunOutputEvent, MessageReferences, RunStatus
|
|
13
15
|
|
|
14
16
|
|
|
15
17
|
class TeamRunEvent(str, Enum):
|
|
16
18
|
"""Events that can be sent by the run() functions"""
|
|
17
19
|
|
|
18
20
|
run_started = "TeamRunStarted"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
run_content = "TeamRunContent"
|
|
22
|
+
run_intermediate_content = "TeamRunIntermediateContent"
|
|
21
23
|
run_completed = "TeamRunCompleted"
|
|
22
24
|
run_error = "TeamRunError"
|
|
23
25
|
run_cancelled = "TeamRunCancelled"
|
|
@@ -40,30 +42,34 @@ class TeamRunEvent(str, Enum):
|
|
|
40
42
|
|
|
41
43
|
|
|
42
44
|
@dataclass
|
|
43
|
-
class
|
|
45
|
+
class BaseTeamRunEvent(BaseRunOutputEvent):
|
|
44
46
|
created_at: int = field(default_factory=lambda: int(time()))
|
|
45
47
|
event: str = ""
|
|
46
48
|
team_id: str = ""
|
|
47
49
|
team_name: str = ""
|
|
48
50
|
run_id: Optional[str] = None
|
|
49
51
|
session_id: Optional[str] = None
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
|
|
53
|
+
workflow_id: Optional[str] = None
|
|
54
|
+
workflow_run_id: Optional[str] = None # This is the workflow's run_id
|
|
55
|
+
step_id: Optional[str] = None
|
|
56
|
+
step_name: Optional[str] = None
|
|
57
|
+
step_index: Optional[int] = None
|
|
52
58
|
|
|
53
59
|
# For backwards compatibility
|
|
54
60
|
content: Optional[Any] = None
|
|
55
61
|
|
|
56
62
|
@classmethod
|
|
57
|
-
def from_dict(cls, data: Dict[str, Any]) -> "
|
|
63
|
+
def from_dict(cls, data: Dict[str, Any]) -> "BaseTeamRunEvent":
|
|
58
64
|
member_responses = data.pop("member_responses", None)
|
|
59
65
|
event = super().from_dict(data)
|
|
60
66
|
|
|
61
67
|
member_responses_final = []
|
|
62
68
|
for response in member_responses or []:
|
|
63
69
|
if "agent_id" in response:
|
|
64
|
-
run_response_parsed =
|
|
70
|
+
run_response_parsed = RunOutput.from_dict(response)
|
|
65
71
|
else:
|
|
66
|
-
run_response_parsed =
|
|
72
|
+
run_response_parsed = TeamRunOutput.from_dict(response) # type: ignore
|
|
67
73
|
member_responses_final.append(run_response_parsed)
|
|
68
74
|
|
|
69
75
|
if member_responses_final:
|
|
@@ -73,7 +79,7 @@ class BaseTeamRunResponseEvent(BaseRunResponseEvent):
|
|
|
73
79
|
|
|
74
80
|
|
|
75
81
|
@dataclass
|
|
76
|
-
class
|
|
82
|
+
class RunStartedEvent(BaseTeamRunEvent):
|
|
77
83
|
"""Event sent when the run starts"""
|
|
78
84
|
|
|
79
85
|
event: str = TeamRunEvent.run_started.value
|
|
@@ -82,71 +88,82 @@ class RunResponseStartedEvent(BaseTeamRunResponseEvent):
|
|
|
82
88
|
|
|
83
89
|
|
|
84
90
|
@dataclass
|
|
85
|
-
class
|
|
86
|
-
"""Main event for each delta of the
|
|
91
|
+
class RunContentEvent(BaseTeamRunEvent):
|
|
92
|
+
"""Main event for each delta of the RunOutput"""
|
|
87
93
|
|
|
88
|
-
event: str = TeamRunEvent.
|
|
94
|
+
event: str = TeamRunEvent.run_content.value
|
|
89
95
|
content: Optional[Any] = None
|
|
90
96
|
content_type: str = "str"
|
|
91
|
-
|
|
97
|
+
reasoning_content: Optional[str] = None
|
|
92
98
|
citations: Optional[Citations] = None
|
|
93
99
|
response_audio: Optional[AudioResponse] = None # Model audio response
|
|
94
100
|
image: Optional[ImageArtifact] = None # Image attached to the response
|
|
95
|
-
|
|
101
|
+
references: Optional[List[MessageReferences]] = None
|
|
102
|
+
additional_input: Optional[List[Message]] = None
|
|
103
|
+
reasoning_steps: Optional[List[ReasoningStep]] = None
|
|
104
|
+
reasoning_messages: Optional[List[Message]] = None
|
|
96
105
|
|
|
97
106
|
|
|
98
107
|
@dataclass
|
|
99
|
-
class
|
|
100
|
-
event: str = TeamRunEvent.
|
|
108
|
+
class IntermediateRunContentEvent(BaseTeamRunEvent):
|
|
109
|
+
event: str = TeamRunEvent.run_intermediate_content.value
|
|
101
110
|
content: Optional[Any] = None
|
|
102
111
|
content_type: str = "str"
|
|
103
112
|
|
|
104
113
|
|
|
105
114
|
@dataclass
|
|
106
|
-
class
|
|
115
|
+
class RunCompletedEvent(BaseTeamRunEvent):
|
|
107
116
|
event: str = TeamRunEvent.run_completed.value
|
|
108
117
|
content: Optional[Any] = None
|
|
109
118
|
content_type: str = "str"
|
|
110
119
|
reasoning_content: Optional[str] = None
|
|
111
|
-
thinking: Optional[str] = None
|
|
112
120
|
citations: Optional[Citations] = None
|
|
113
121
|
images: Optional[List[ImageArtifact]] = None # Images attached to the response
|
|
114
122
|
videos: Optional[List[VideoArtifact]] = None # Videos attached to the response
|
|
115
123
|
audio: Optional[List[AudioArtifact]] = None # Audio attached to the response
|
|
116
124
|
response_audio: Optional[AudioResponse] = None # Model audio response
|
|
117
|
-
|
|
118
|
-
|
|
125
|
+
references: Optional[List[MessageReferences]] = None
|
|
126
|
+
additional_input: Optional[List[Message]] = None
|
|
127
|
+
reasoning_steps: Optional[List[ReasoningStep]] = None
|
|
128
|
+
reasoning_messages: Optional[List[Message]] = None
|
|
129
|
+
member_responses: List[Union["TeamRunOutput", RunOutput]] = field(default_factory=list)
|
|
130
|
+
metadata: Optional[Dict[str, Any]] = None
|
|
131
|
+
metrics: Optional[Metrics] = None
|
|
119
132
|
|
|
120
133
|
|
|
121
134
|
@dataclass
|
|
122
|
-
class
|
|
135
|
+
class RunErrorEvent(BaseTeamRunEvent):
|
|
123
136
|
event: str = TeamRunEvent.run_error.value
|
|
124
137
|
content: Optional[str] = None
|
|
125
138
|
|
|
126
139
|
|
|
127
140
|
@dataclass
|
|
128
|
-
class
|
|
141
|
+
class RunCancelledEvent(BaseTeamRunEvent):
|
|
129
142
|
event: str = TeamRunEvent.run_cancelled.value
|
|
130
143
|
reason: Optional[str] = None
|
|
131
144
|
|
|
145
|
+
@property
|
|
146
|
+
def is_cancelled(self):
|
|
147
|
+
return True
|
|
148
|
+
|
|
132
149
|
|
|
133
150
|
@dataclass
|
|
134
|
-
class MemoryUpdateStartedEvent(
|
|
151
|
+
class MemoryUpdateStartedEvent(BaseTeamRunEvent):
|
|
135
152
|
event: str = TeamRunEvent.memory_update_started.value
|
|
136
153
|
|
|
137
154
|
|
|
138
155
|
@dataclass
|
|
139
|
-
class MemoryUpdateCompletedEvent(
|
|
156
|
+
class MemoryUpdateCompletedEvent(BaseTeamRunEvent):
|
|
140
157
|
event: str = TeamRunEvent.memory_update_completed.value
|
|
141
158
|
|
|
142
159
|
|
|
143
160
|
@dataclass
|
|
144
|
-
class ReasoningStartedEvent(
|
|
161
|
+
class ReasoningStartedEvent(BaseTeamRunEvent):
|
|
145
162
|
event: str = TeamRunEvent.reasoning_started.value
|
|
146
163
|
|
|
147
164
|
|
|
148
165
|
@dataclass
|
|
149
|
-
class ReasoningStepEvent(
|
|
166
|
+
class ReasoningStepEvent(BaseTeamRunEvent):
|
|
150
167
|
event: str = TeamRunEvent.reasoning_step.value
|
|
151
168
|
content: Optional[Any] = None
|
|
152
169
|
content_type: str = "str"
|
|
@@ -154,20 +171,20 @@ class ReasoningStepEvent(BaseTeamRunResponseEvent):
|
|
|
154
171
|
|
|
155
172
|
|
|
156
173
|
@dataclass
|
|
157
|
-
class ReasoningCompletedEvent(
|
|
174
|
+
class ReasoningCompletedEvent(BaseTeamRunEvent):
|
|
158
175
|
event: str = TeamRunEvent.reasoning_completed.value
|
|
159
176
|
content: Optional[Any] = None
|
|
160
177
|
content_type: str = "str"
|
|
161
178
|
|
|
162
179
|
|
|
163
180
|
@dataclass
|
|
164
|
-
class ToolCallStartedEvent(
|
|
181
|
+
class ToolCallStartedEvent(BaseTeamRunEvent):
|
|
165
182
|
event: str = TeamRunEvent.tool_call_started.value
|
|
166
183
|
tool: Optional[ToolExecution] = None
|
|
167
184
|
|
|
168
185
|
|
|
169
186
|
@dataclass
|
|
170
|
-
class ToolCallCompletedEvent(
|
|
187
|
+
class ToolCallCompletedEvent(BaseTeamRunEvent):
|
|
171
188
|
event: str = TeamRunEvent.tool_call_completed.value
|
|
172
189
|
tool: Optional[ToolExecution] = None
|
|
173
190
|
content: Optional[Any] = None
|
|
@@ -177,32 +194,32 @@ class ToolCallCompletedEvent(BaseTeamRunResponseEvent):
|
|
|
177
194
|
|
|
178
195
|
|
|
179
196
|
@dataclass
|
|
180
|
-
class ParserModelResponseStartedEvent(
|
|
197
|
+
class ParserModelResponseStartedEvent(BaseTeamRunEvent):
|
|
181
198
|
event: str = TeamRunEvent.parser_model_response_started.value
|
|
182
199
|
|
|
183
200
|
|
|
184
201
|
@dataclass
|
|
185
|
-
class ParserModelResponseCompletedEvent(
|
|
202
|
+
class ParserModelResponseCompletedEvent(BaseTeamRunEvent):
|
|
186
203
|
event: str = TeamRunEvent.parser_model_response_completed.value
|
|
187
204
|
|
|
188
205
|
|
|
189
206
|
@dataclass
|
|
190
|
-
class OutputModelResponseStartedEvent(
|
|
207
|
+
class OutputModelResponseStartedEvent(BaseTeamRunEvent):
|
|
191
208
|
event: str = TeamRunEvent.output_model_response_started.value
|
|
192
209
|
|
|
193
210
|
|
|
194
211
|
@dataclass
|
|
195
|
-
class OutputModelResponseCompletedEvent(
|
|
212
|
+
class OutputModelResponseCompletedEvent(BaseTeamRunEvent):
|
|
196
213
|
event: str = TeamRunEvent.output_model_response_completed.value
|
|
197
214
|
|
|
198
215
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
216
|
+
TeamRunOutputEvent = Union[
|
|
217
|
+
RunStartedEvent,
|
|
218
|
+
RunContentEvent,
|
|
219
|
+
IntermediateRunContentEvent,
|
|
220
|
+
RunCompletedEvent,
|
|
221
|
+
RunErrorEvent,
|
|
222
|
+
RunCancelledEvent,
|
|
206
223
|
ReasoningStartedEvent,
|
|
207
224
|
ReasoningStepEvent,
|
|
208
225
|
ReasoningCompletedEvent,
|
|
@@ -218,12 +235,12 @@ TeamRunResponseEvent = Union[
|
|
|
218
235
|
|
|
219
236
|
# Map event string to dataclass for team events
|
|
220
237
|
TEAM_RUN_EVENT_TYPE_REGISTRY = {
|
|
221
|
-
TeamRunEvent.run_started.value:
|
|
222
|
-
TeamRunEvent.
|
|
223
|
-
TeamRunEvent.
|
|
224
|
-
TeamRunEvent.run_completed.value:
|
|
225
|
-
TeamRunEvent.run_error.value:
|
|
226
|
-
TeamRunEvent.run_cancelled.value:
|
|
238
|
+
TeamRunEvent.run_started.value: RunStartedEvent,
|
|
239
|
+
TeamRunEvent.run_content.value: RunContentEvent,
|
|
240
|
+
TeamRunEvent.run_intermediate_content.value: IntermediateRunContentEvent,
|
|
241
|
+
TeamRunEvent.run_completed.value: RunCompletedEvent,
|
|
242
|
+
TeamRunEvent.run_error.value: RunErrorEvent,
|
|
243
|
+
TeamRunEvent.run_cancelled.value: RunCancelledEvent,
|
|
227
244
|
TeamRunEvent.reasoning_started.value: ReasoningStartedEvent,
|
|
228
245
|
TeamRunEvent.reasoning_step.value: ReasoningStepEvent,
|
|
229
246
|
TeamRunEvent.reasoning_completed.value: ReasoningCompletedEvent,
|
|
@@ -238,10 +255,10 @@ TEAM_RUN_EVENT_TYPE_REGISTRY = {
|
|
|
238
255
|
}
|
|
239
256
|
|
|
240
257
|
|
|
241
|
-
def
|
|
258
|
+
def team_run_output_event_from_dict(data: dict) -> BaseTeamRunEvent:
|
|
242
259
|
event_type = data.get("event", "")
|
|
243
260
|
if event_type in {e.value for e in RunEvent}:
|
|
244
|
-
return
|
|
261
|
+
return run_output_event_from_dict(data) # type: ignore
|
|
245
262
|
else:
|
|
246
263
|
event_class = TEAM_RUN_EVENT_TYPE_REGISTRY.get(event_type)
|
|
247
264
|
if not event_class:
|
|
@@ -250,28 +267,25 @@ def team_run_response_event_from_dict(data: dict) -> BaseTeamRunResponseEvent:
|
|
|
250
267
|
|
|
251
268
|
|
|
252
269
|
@dataclass
|
|
253
|
-
class
|
|
270
|
+
class TeamRunOutput:
|
|
254
271
|
"""Response returned by Team.run() functions"""
|
|
255
272
|
|
|
256
273
|
content: Optional[Any] = None
|
|
257
274
|
content_type: str = "str"
|
|
258
|
-
thinking: Optional[str] = None
|
|
259
275
|
messages: Optional[List[Message]] = None
|
|
260
|
-
metrics: Optional[
|
|
276
|
+
metrics: Optional[Metrics] = None
|
|
261
277
|
model: Optional[str] = None
|
|
262
278
|
model_provider: Optional[str] = None
|
|
263
279
|
|
|
264
|
-
member_responses: List[Union["
|
|
280
|
+
member_responses: List[Union["TeamRunOutput", RunOutput]] = field(default_factory=list)
|
|
265
281
|
|
|
266
282
|
run_id: Optional[str] = None
|
|
267
283
|
team_id: Optional[str] = None
|
|
268
284
|
team_name: Optional[str] = None
|
|
269
285
|
session_id: Optional[str] = None
|
|
270
|
-
|
|
271
|
-
team_session_id: Optional[str] = None
|
|
286
|
+
parent_run_id: Optional[str] = None
|
|
272
287
|
|
|
273
288
|
tools: Optional[List[ToolExecution]] = None
|
|
274
|
-
formatted_tool_calls: Optional[List[str]] = None
|
|
275
289
|
|
|
276
290
|
images: Optional[List[ImageArtifact]] = None # Images from member runs
|
|
277
291
|
videos: Optional[List[VideoArtifact]] = None # Videos from member runs
|
|
@@ -283,13 +297,23 @@ class TeamRunResponse:
|
|
|
283
297
|
|
|
284
298
|
citations: Optional[Citations] = None
|
|
285
299
|
|
|
286
|
-
|
|
300
|
+
metadata: Optional[Dict[str, Any]] = None
|
|
301
|
+
|
|
302
|
+
references: Optional[List[MessageReferences]] = None
|
|
303
|
+
additional_input: Optional[List[Message]] = None
|
|
304
|
+
reasoning_steps: Optional[List[ReasoningStep]] = None
|
|
305
|
+
reasoning_messages: Optional[List[Message]] = None
|
|
287
306
|
created_at: int = field(default_factory=lambda: int(time()))
|
|
288
307
|
|
|
289
|
-
events: Optional[List[Union[
|
|
308
|
+
events: Optional[List[Union[RunOutputEvent, TeamRunOutputEvent]]] = None
|
|
290
309
|
|
|
291
310
|
status: RunStatus = RunStatus.running
|
|
292
311
|
|
|
312
|
+
# === FOREIGN KEY RELATIONSHIPS ===
|
|
313
|
+
# These fields establish relationships to parent workflow/step structures
|
|
314
|
+
# and should be treated as foreign keys for data integrity
|
|
315
|
+
workflow_step_id: Optional[str] = None # FK: Points to StepOutput.step_id
|
|
316
|
+
|
|
293
317
|
@property
|
|
294
318
|
def is_paused(self):
|
|
295
319
|
return self.status == RunStatus.paused
|
|
@@ -308,13 +332,17 @@ class TeamRunResponse:
|
|
|
308
332
|
"messages",
|
|
309
333
|
"status",
|
|
310
334
|
"tools",
|
|
311
|
-
"
|
|
335
|
+
"metadata",
|
|
312
336
|
"images",
|
|
313
337
|
"videos",
|
|
314
338
|
"audio",
|
|
315
339
|
"response_audio",
|
|
316
340
|
"citations",
|
|
317
341
|
"events",
|
|
342
|
+
"additional_input",
|
|
343
|
+
"reasoning_steps",
|
|
344
|
+
"reasoning_messages",
|
|
345
|
+
"references",
|
|
318
346
|
]
|
|
319
347
|
}
|
|
320
348
|
if self.events is not None:
|
|
@@ -326,8 +354,20 @@ class TeamRunResponse:
|
|
|
326
354
|
if self.messages is not None:
|
|
327
355
|
_dict["messages"] = [m.to_dict() for m in self.messages]
|
|
328
356
|
|
|
329
|
-
if self.
|
|
330
|
-
_dict["
|
|
357
|
+
if self.metadata is not None:
|
|
358
|
+
_dict["metadata"] = self.metadata
|
|
359
|
+
|
|
360
|
+
if self.additional_input is not None:
|
|
361
|
+
_dict["additional_input"] = [m.to_dict() for m in self.additional_input]
|
|
362
|
+
|
|
363
|
+
if self.reasoning_messages is not None:
|
|
364
|
+
_dict["reasoning_messages"] = [m.to_dict() for m in self.reasoning_messages]
|
|
365
|
+
|
|
366
|
+
if self.reasoning_steps is not None:
|
|
367
|
+
_dict["reasoning_steps"] = [rs.model_dump() for rs in self.reasoning_steps]
|
|
368
|
+
|
|
369
|
+
if self.references is not None:
|
|
370
|
+
_dict["references"] = [r.model_dump() for r in self.references]
|
|
331
371
|
|
|
332
372
|
if self.images is not None:
|
|
333
373
|
_dict["images"] = [img.to_dict() for img in self.images]
|
|
@@ -371,17 +411,17 @@ class TeamRunResponse:
|
|
|
371
411
|
return json.dumps(_dict, indent=2)
|
|
372
412
|
|
|
373
413
|
@classmethod
|
|
374
|
-
def from_dict(cls, data: Dict[str, Any]) -> "
|
|
414
|
+
def from_dict(cls, data: Dict[str, Any]) -> "TeamRunOutput":
|
|
375
415
|
events = data.pop("events", None)
|
|
376
416
|
final_events = []
|
|
377
417
|
for event in events or []:
|
|
378
418
|
if "agent_id" in event:
|
|
379
419
|
# Use the factory from response.py for agent events
|
|
380
|
-
from agno.run.
|
|
420
|
+
from agno.run.agent import run_output_event_from_dict
|
|
381
421
|
|
|
382
|
-
event =
|
|
422
|
+
event = run_output_event_from_dict(event)
|
|
383
423
|
else:
|
|
384
|
-
event =
|
|
424
|
+
event = team_run_output_event_from_dict(event)
|
|
385
425
|
final_events.append(event)
|
|
386
426
|
events = final_events
|
|
387
427
|
|
|
@@ -389,17 +429,29 @@ class TeamRunResponse:
|
|
|
389
429
|
messages = [Message.model_validate(message) for message in messages] if messages else None
|
|
390
430
|
|
|
391
431
|
member_responses = data.pop("member_responses", [])
|
|
392
|
-
parsed_member_responses: List[Union["
|
|
432
|
+
parsed_member_responses: List[Union["TeamRunOutput", RunOutput]] = []
|
|
393
433
|
if member_responses:
|
|
394
434
|
for response in member_responses:
|
|
395
435
|
if "agent_id" in response:
|
|
396
|
-
parsed_member_responses.append(
|
|
436
|
+
parsed_member_responses.append(RunOutput.from_dict(response))
|
|
397
437
|
else:
|
|
398
438
|
parsed_member_responses.append(cls.from_dict(response))
|
|
399
439
|
|
|
400
|
-
|
|
401
|
-
if
|
|
402
|
-
|
|
440
|
+
additional_input = data.pop("additional_input", None)
|
|
441
|
+
if additional_input is not None:
|
|
442
|
+
additional_input = [Message.model_validate(message) for message in additional_input]
|
|
443
|
+
|
|
444
|
+
reasoning_steps = data.pop("reasoning_steps", None)
|
|
445
|
+
if reasoning_steps is not None:
|
|
446
|
+
reasoning_steps = [ReasoningStep.model_validate(step) for step in reasoning_steps]
|
|
447
|
+
|
|
448
|
+
reasoning_messages = data.pop("reasoning_messages", None)
|
|
449
|
+
if reasoning_messages is not None:
|
|
450
|
+
reasoning_messages = [Message.model_validate(message) for message in reasoning_messages]
|
|
451
|
+
|
|
452
|
+
references = data.pop("references", None)
|
|
453
|
+
if references is not None:
|
|
454
|
+
references = [MessageReferences.model_validate(reference) for reference in references]
|
|
403
455
|
|
|
404
456
|
images = data.pop("images", [])
|
|
405
457
|
images = [ImageArtifact.model_validate(image) for image in images] if images else None
|
|
@@ -416,17 +468,21 @@ class TeamRunResponse:
|
|
|
416
468
|
response_audio = data.pop("response_audio", None)
|
|
417
469
|
response_audio = AudioResponse.model_validate(response_audio) if response_audio else None
|
|
418
470
|
|
|
471
|
+
metrics = data.pop("metrics", None)
|
|
472
|
+
if metrics:
|
|
473
|
+
metrics = Metrics(**metrics)
|
|
474
|
+
|
|
419
475
|
citations = data.pop("citations", None)
|
|
420
476
|
citations = Citations.model_validate(citations) if citations else None
|
|
421
477
|
|
|
422
|
-
# To make it backwards compatible
|
|
423
|
-
if "event" in data:
|
|
424
|
-
data.pop("event")
|
|
425
|
-
|
|
426
478
|
return cls(
|
|
427
479
|
messages=messages,
|
|
480
|
+
metrics=metrics,
|
|
428
481
|
member_responses=parsed_member_responses,
|
|
429
|
-
|
|
482
|
+
additional_input=additional_input,
|
|
483
|
+
reasoning_steps=reasoning_steps,
|
|
484
|
+
reasoning_messages=reasoning_messages,
|
|
485
|
+
references=references,
|
|
430
486
|
images=images,
|
|
431
487
|
videos=videos,
|
|
432
488
|
audio=audio,
|
|
@@ -449,7 +505,7 @@ class TeamRunResponse:
|
|
|
449
505
|
else:
|
|
450
506
|
return json.dumps(self.content, **kwargs)
|
|
451
507
|
|
|
452
|
-
def add_member_run(self, run_response: Union["
|
|
508
|
+
def add_member_run(self, run_response: Union["TeamRunOutput", RunOutput]) -> None:
|
|
453
509
|
self.member_responses.append(run_response)
|
|
454
510
|
if run_response.images is not None:
|
|
455
511
|
if self.images is None:
|