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/workflow/v2/types.py
DELETED
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
|
-
from typing import Any, Dict, List, Optional, Union
|
|
3
|
-
|
|
4
|
-
from pydantic import BaseModel
|
|
5
|
-
|
|
6
|
-
from agno.media import AudioArtifact, File, ImageArtifact, VideoArtifact
|
|
7
|
-
from agno.run.response import RunResponse
|
|
8
|
-
from agno.run.team import TeamRunResponse
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
@dataclass
|
|
12
|
-
class WorkflowExecutionInput:
|
|
13
|
-
"""Input data for a step execution"""
|
|
14
|
-
|
|
15
|
-
message: Optional[Union[str, Dict[str, Any], List[Any], BaseModel]] = None
|
|
16
|
-
|
|
17
|
-
additional_data: Optional[Dict[str, Any]] = None
|
|
18
|
-
|
|
19
|
-
# Media inputs
|
|
20
|
-
images: Optional[List[ImageArtifact]] = None
|
|
21
|
-
videos: Optional[List[VideoArtifact]] = None
|
|
22
|
-
audio: Optional[List[AudioArtifact]] = None
|
|
23
|
-
files: Optional[List[File]] = None
|
|
24
|
-
|
|
25
|
-
def get_message_as_string(self) -> Optional[str]:
|
|
26
|
-
"""Convert message to string representation"""
|
|
27
|
-
if self.message is None:
|
|
28
|
-
return None
|
|
29
|
-
|
|
30
|
-
if isinstance(self.message, str):
|
|
31
|
-
return self.message
|
|
32
|
-
elif isinstance(self.message, BaseModel):
|
|
33
|
-
return self.message.model_dump_json(indent=2, exclude_none=True)
|
|
34
|
-
elif isinstance(self.message, (dict, list)):
|
|
35
|
-
import json
|
|
36
|
-
|
|
37
|
-
return json.dumps(self.message, indent=2, default=str)
|
|
38
|
-
else:
|
|
39
|
-
return str(self.message)
|
|
40
|
-
|
|
41
|
-
def to_dict(self) -> Dict[str, Any]:
|
|
42
|
-
"""Convert to dictionary"""
|
|
43
|
-
message_dict: Optional[Union[str, Dict[str, Any], List[Any]]] = None
|
|
44
|
-
if self.message is not None:
|
|
45
|
-
if isinstance(self.message, BaseModel):
|
|
46
|
-
message_dict = self.message.model_dump(exclude_none=True)
|
|
47
|
-
elif isinstance(self.message, (dict, list)):
|
|
48
|
-
message_dict = self.message
|
|
49
|
-
else:
|
|
50
|
-
message_dict = str(self.message)
|
|
51
|
-
|
|
52
|
-
return {
|
|
53
|
-
"message": message_dict,
|
|
54
|
-
"additional_data": self.additional_data,
|
|
55
|
-
"images": [img.to_dict() for img in self.images] if self.images else None,
|
|
56
|
-
"videos": [vid.to_dict() for vid in self.videos] if self.videos else None,
|
|
57
|
-
"audio": [aud.to_dict() for aud in self.audio] if self.audio else None,
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
@dataclass
|
|
62
|
-
class StepInput:
|
|
63
|
-
"""Input data for a step execution"""
|
|
64
|
-
|
|
65
|
-
message: Optional[Union[str, Dict[str, Any], List[Any], BaseModel]] = None
|
|
66
|
-
|
|
67
|
-
previous_step_content: Optional[Any] = None
|
|
68
|
-
previous_step_outputs: Optional[Dict[str, "StepOutput"]] = None
|
|
69
|
-
|
|
70
|
-
additional_data: Optional[Dict[str, Any]] = None
|
|
71
|
-
|
|
72
|
-
# Media inputs
|
|
73
|
-
images: Optional[List[ImageArtifact]] = None
|
|
74
|
-
videos: Optional[List[VideoArtifact]] = None
|
|
75
|
-
audio: Optional[List[AudioArtifact]] = None
|
|
76
|
-
files: Optional[List[File]] = None
|
|
77
|
-
|
|
78
|
-
def get_message_as_string(self) -> Optional[str]:
|
|
79
|
-
"""Convert message to string representation"""
|
|
80
|
-
if self.message is None:
|
|
81
|
-
return None
|
|
82
|
-
|
|
83
|
-
if isinstance(self.message, str):
|
|
84
|
-
return self.message
|
|
85
|
-
elif isinstance(self.message, BaseModel):
|
|
86
|
-
return self.message.model_dump_json(indent=2, exclude_none=True)
|
|
87
|
-
elif isinstance(self.message, (dict, list)):
|
|
88
|
-
import json
|
|
89
|
-
|
|
90
|
-
return json.dumps(self.message, indent=2, default=str)
|
|
91
|
-
else:
|
|
92
|
-
return str(self.message)
|
|
93
|
-
|
|
94
|
-
def get_step_output(self, step_name: str) -> Optional["StepOutput"]:
|
|
95
|
-
"""Get output from a specific previous step by name"""
|
|
96
|
-
if not self.previous_step_outputs:
|
|
97
|
-
return None
|
|
98
|
-
return self.previous_step_outputs.get(step_name)
|
|
99
|
-
|
|
100
|
-
def get_step_content(self, step_name: str) -> Optional[Union[str, Dict[str, str]]]:
|
|
101
|
-
"""Get content from a specific previous step by name
|
|
102
|
-
|
|
103
|
-
For parallel steps, if you ask for the parallel step name, returns a dict
|
|
104
|
-
with {step_name: content} for each sub-step.
|
|
105
|
-
"""
|
|
106
|
-
step_output = self.get_step_output(step_name)
|
|
107
|
-
if not step_output:
|
|
108
|
-
return None
|
|
109
|
-
|
|
110
|
-
# If this is a parallel step with sub-outputs, return structured dict
|
|
111
|
-
if step_output.parallel_step_outputs:
|
|
112
|
-
return {
|
|
113
|
-
sub_step_name: sub_output.content # type: ignore[misc]
|
|
114
|
-
for sub_step_name, sub_output in step_output.parallel_step_outputs.items()
|
|
115
|
-
if sub_output.content
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
# Regular step, return content directly
|
|
119
|
-
return step_output.content # type: ignore[return-value]
|
|
120
|
-
|
|
121
|
-
def get_all_previous_content(self) -> str:
|
|
122
|
-
"""Get concatenated content from all previous steps"""
|
|
123
|
-
if not self.previous_step_outputs:
|
|
124
|
-
return ""
|
|
125
|
-
|
|
126
|
-
content_parts = []
|
|
127
|
-
for step_name, output in self.previous_step_outputs.items():
|
|
128
|
-
if output.content:
|
|
129
|
-
content_parts.append(f"=== {step_name} ===\n{output.content}")
|
|
130
|
-
|
|
131
|
-
return "\n\n".join(content_parts)
|
|
132
|
-
|
|
133
|
-
def get_last_step_content(self) -> Optional[str]:
|
|
134
|
-
"""Get content from the most recent step (for backward compatibility)"""
|
|
135
|
-
if not self.previous_step_outputs:
|
|
136
|
-
return None
|
|
137
|
-
|
|
138
|
-
last_output = list(self.previous_step_outputs.values())[-1] if self.previous_step_outputs else None
|
|
139
|
-
return last_output.content if last_output else None # type: ignore[return-value]
|
|
140
|
-
|
|
141
|
-
def to_dict(self) -> Dict[str, Any]:
|
|
142
|
-
"""Convert to dictionary"""
|
|
143
|
-
# Handle the unified message field
|
|
144
|
-
message_dict: Optional[Union[str, Dict[str, Any], List[Any]]] = None
|
|
145
|
-
if self.message is not None:
|
|
146
|
-
if isinstance(self.message, BaseModel):
|
|
147
|
-
message_dict = self.message.model_dump(exclude_none=True)
|
|
148
|
-
elif isinstance(self.message, (dict, list)):
|
|
149
|
-
message_dict = self.message
|
|
150
|
-
else:
|
|
151
|
-
message_dict = str(self.message)
|
|
152
|
-
|
|
153
|
-
previous_step_content_str: Optional[str] = None
|
|
154
|
-
# Handle previous_step_content (keep existing logic)
|
|
155
|
-
if isinstance(self.previous_step_content, BaseModel):
|
|
156
|
-
previous_step_content_str = self.previous_step_content.model_dump_json(indent=2, exclude_none=True)
|
|
157
|
-
elif isinstance(self.previous_step_content, dict):
|
|
158
|
-
import json
|
|
159
|
-
|
|
160
|
-
previous_step_content_str = json.dumps(self.previous_step_content, indent=2, default=str)
|
|
161
|
-
elif self.previous_step_content:
|
|
162
|
-
previous_step_content_str = str(self.previous_step_content)
|
|
163
|
-
|
|
164
|
-
# Convert previous_step_outputs to serializable format (keep existing logic)
|
|
165
|
-
previous_steps_dict = {}
|
|
166
|
-
if self.previous_step_outputs:
|
|
167
|
-
for step_name, output in self.previous_step_outputs.items():
|
|
168
|
-
previous_steps_dict[step_name] = output.to_dict()
|
|
169
|
-
|
|
170
|
-
return {
|
|
171
|
-
"message": message_dict,
|
|
172
|
-
"previous_step_outputs": previous_steps_dict,
|
|
173
|
-
"previous_step_content": previous_step_content_str,
|
|
174
|
-
"additional_data": self.additional_data,
|
|
175
|
-
"images": [img.to_dict() for img in self.images] if self.images else None,
|
|
176
|
-
"videos": [vid.to_dict() for vid in self.videos] if self.videos else None,
|
|
177
|
-
"audio": [aud.to_dict() for aud in self.audio] if self.audio else None,
|
|
178
|
-
"files": [file for file in self.files] if self.files else None,
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
@dataclass
|
|
183
|
-
class StepOutput:
|
|
184
|
-
"""Output data from a step execution"""
|
|
185
|
-
|
|
186
|
-
step_name: Optional[str] = None
|
|
187
|
-
step_id: Optional[str] = None
|
|
188
|
-
executor_type: Optional[str] = None
|
|
189
|
-
executor_name: Optional[str] = None
|
|
190
|
-
|
|
191
|
-
# Primary output
|
|
192
|
-
content: Optional[Union[str, Dict[str, Any], List[Any], BaseModel, Any]] = None
|
|
193
|
-
|
|
194
|
-
# For parallel steps: store individual step outputs
|
|
195
|
-
parallel_step_outputs: Optional[Dict[str, "StepOutput"]] = None
|
|
196
|
-
|
|
197
|
-
# Execution response
|
|
198
|
-
response: Optional[Union[RunResponse, TeamRunResponse]] = None
|
|
199
|
-
|
|
200
|
-
# Media outputs
|
|
201
|
-
images: Optional[List[ImageArtifact]] = None
|
|
202
|
-
videos: Optional[List[VideoArtifact]] = None
|
|
203
|
-
audio: Optional[List[AudioArtifact]] = None
|
|
204
|
-
files: Optional[List[File]] = None
|
|
205
|
-
|
|
206
|
-
# Metrics for this step execution
|
|
207
|
-
metrics: Optional[Dict[str, Any]] = None
|
|
208
|
-
|
|
209
|
-
success: bool = True
|
|
210
|
-
error: Optional[str] = None
|
|
211
|
-
|
|
212
|
-
stop: bool = False
|
|
213
|
-
|
|
214
|
-
def to_dict(self) -> Dict[str, Any]:
|
|
215
|
-
"""Convert to dictionary"""
|
|
216
|
-
# Handle the unified content field
|
|
217
|
-
content_dict: Optional[Union[str, Dict[str, Any], List[Any]]] = None
|
|
218
|
-
if self.content is not None:
|
|
219
|
-
if isinstance(self.content, BaseModel):
|
|
220
|
-
content_dict = self.content.model_dump(exclude_none=True)
|
|
221
|
-
elif isinstance(self.content, (dict, list)):
|
|
222
|
-
content_dict = self.content
|
|
223
|
-
else:
|
|
224
|
-
content_dict = str(self.content)
|
|
225
|
-
|
|
226
|
-
return {
|
|
227
|
-
"content": content_dict,
|
|
228
|
-
"response": self.response.to_dict() if self.response else None,
|
|
229
|
-
"images": [img.to_dict() for img in self.images] if self.images else None,
|
|
230
|
-
"videos": [vid.to_dict() for vid in self.videos] if self.videos else None,
|
|
231
|
-
"audio": [aud.to_dict() for aud in self.audio] if self.audio else None,
|
|
232
|
-
"metrics": self.metrics,
|
|
233
|
-
"success": self.success,
|
|
234
|
-
"error": self.error,
|
|
235
|
-
"stop": self.stop,
|
|
236
|
-
"files": [file for file in self.files] if self.files else None,
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
@classmethod
|
|
240
|
-
def from_dict(cls, data: Dict[str, Any]) -> "StepOutput":
|
|
241
|
-
"""Create StepOutput from dictionary"""
|
|
242
|
-
from agno.run.response import RunResponse
|
|
243
|
-
from agno.run.team import TeamRunResponse
|
|
244
|
-
|
|
245
|
-
# Reconstruct response if present
|
|
246
|
-
response_data = data.get("response")
|
|
247
|
-
response: Optional[Union[RunResponse, TeamRunResponse]] = None
|
|
248
|
-
if response_data:
|
|
249
|
-
# Determine if it's RunResponse or TeamRunResponse based on structure
|
|
250
|
-
if "team_id" in response_data or "team_name" in response_data:
|
|
251
|
-
response = TeamRunResponse.from_dict(response_data)
|
|
252
|
-
else:
|
|
253
|
-
response = RunResponse.from_dict(response_data)
|
|
254
|
-
|
|
255
|
-
# Reconstruct media artifacts
|
|
256
|
-
images = data.get("images")
|
|
257
|
-
if images:
|
|
258
|
-
images = [ImageArtifact.model_validate(img) for img in images]
|
|
259
|
-
|
|
260
|
-
videos = data.get("videos")
|
|
261
|
-
if videos:
|
|
262
|
-
videos = [VideoArtifact.model_validate(vid) for vid in videos]
|
|
263
|
-
|
|
264
|
-
audio = data.get("audio")
|
|
265
|
-
if audio:
|
|
266
|
-
audio = [AudioArtifact.model_validate(aud) for aud in audio]
|
|
267
|
-
|
|
268
|
-
files = data.get("files")
|
|
269
|
-
if files:
|
|
270
|
-
files = [File.model_validate(file) for file in files]
|
|
271
|
-
|
|
272
|
-
return cls(
|
|
273
|
-
content=data.get("content"),
|
|
274
|
-
response=response,
|
|
275
|
-
images=images,
|
|
276
|
-
videos=videos,
|
|
277
|
-
audio=audio,
|
|
278
|
-
metrics=data.get("metrics"),
|
|
279
|
-
success=data.get("success", True),
|
|
280
|
-
error=data.get("error"),
|
|
281
|
-
stop=data.get("stop", False),
|
|
282
|
-
files=files,
|
|
283
|
-
)
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
@dataclass
|
|
287
|
-
class StepMetrics:
|
|
288
|
-
"""Metrics for a single step execution"""
|
|
289
|
-
|
|
290
|
-
step_name: str
|
|
291
|
-
executor_type: str # "agent", "team", etc.
|
|
292
|
-
executor_name: str
|
|
293
|
-
|
|
294
|
-
# For regular steps: actual metrics data
|
|
295
|
-
metrics: Optional[Dict[str, Any]] = None
|
|
296
|
-
|
|
297
|
-
# For parallel steps: nested step metrics
|
|
298
|
-
parallel_steps: Optional[Dict[str, "StepMetrics"]] = None
|
|
299
|
-
|
|
300
|
-
def to_dict(self) -> Dict[str, Any]:
|
|
301
|
-
"""Convert to dictionary - only include relevant fields"""
|
|
302
|
-
result = {
|
|
303
|
-
"step_name": self.step_name,
|
|
304
|
-
"executor_type": self.executor_type,
|
|
305
|
-
"executor_name": self.executor_name,
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
# Only include the relevant field based on executor type
|
|
309
|
-
if self.executor_type == "parallel" and self.parallel_steps:
|
|
310
|
-
result["parallel_steps"] = {name: step.to_dict() for name, step in self.parallel_steps.items()} # type: ignore[assignment]
|
|
311
|
-
elif self.executor_type != "parallel":
|
|
312
|
-
# For non-parallel steps, include metrics (even if None)
|
|
313
|
-
result["metrics"] = self.metrics # type: ignore[assignment]
|
|
314
|
-
|
|
315
|
-
return result
|
|
316
|
-
|
|
317
|
-
@classmethod
|
|
318
|
-
def from_dict(cls, data: Dict[str, Any]) -> "StepMetrics":
|
|
319
|
-
"""Create StepMetrics from dictionary"""
|
|
320
|
-
|
|
321
|
-
# Parse nested parallel steps if they exist
|
|
322
|
-
parallel_steps = None
|
|
323
|
-
if "parallel_steps" in data and data["parallel_steps"] is not None:
|
|
324
|
-
parallel_steps = {name: cls.from_dict(step_data) for name, step_data in data["parallel_steps"].items()}
|
|
325
|
-
|
|
326
|
-
return cls(
|
|
327
|
-
step_name=data["step_name"],
|
|
328
|
-
executor_type=data["executor_type"],
|
|
329
|
-
executor_name=data["executor_name"],
|
|
330
|
-
metrics=data.get("metrics") if data.get("executor_type") != "parallel" else None,
|
|
331
|
-
parallel_steps=parallel_steps,
|
|
332
|
-
)
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
@dataclass
|
|
336
|
-
class WorkflowMetrics:
|
|
337
|
-
"""Complete metrics for a workflow execution"""
|
|
338
|
-
|
|
339
|
-
total_steps: int
|
|
340
|
-
steps: Dict[str, StepMetrics]
|
|
341
|
-
|
|
342
|
-
def to_dict(self) -> Dict[str, Any]:
|
|
343
|
-
"""Convert to dictionary"""
|
|
344
|
-
return {
|
|
345
|
-
"total_steps": self.total_steps,
|
|
346
|
-
"steps": {name: step.to_dict() for name, step in self.steps.items()},
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
@classmethod
|
|
350
|
-
def from_dict(cls, data: Dict[str, Any]) -> "WorkflowMetrics":
|
|
351
|
-
"""Create WorkflowMetrics from dictionary"""
|
|
352
|
-
steps = {name: StepMetrics.from_dict(step_data) for name, step_data in data["steps"].items()}
|
|
353
|
-
|
|
354
|
-
return cls(
|
|
355
|
-
total_steps=data["total_steps"],
|
|
356
|
-
steps=steps,
|
|
357
|
-
)
|