agno 1.8.1__py3-none-any.whl → 2.0.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/__init__.py +8 -0
- agno/agent/__init__.py +19 -27
- agno/agent/agent.py +3143 -4170
- agno/api/agent.py +11 -67
- agno/api/api.py +5 -46
- agno/api/evals.py +8 -19
- 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 +11 -66
- 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 +1743 -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 +1432 -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 +882 -0
- agno/db/in_memory/utils.py +172 -0
- agno/db/json/__init__.py +3 -0
- agno/db/json/json_db.py +1045 -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 +1416 -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 +297 -0
- agno/db/postgres/__init__.py +3 -0
- agno/db/postgres/postgres.py +1710 -0
- agno/db/postgres/schemas.py +124 -0
- agno/db/postgres/utils.py +280 -0
- agno/db/redis/__init__.py +3 -0
- agno/db/redis/redis.py +1367 -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 +1712 -0
- agno/db/singlestore/utils.py +326 -0
- agno/db/sqlite/__init__.py +3 -0
- agno/db/sqlite/schemas.py +119 -0
- agno/db/sqlite/sqlite.py +1676 -0
- agno/db/sqlite/utils.py +268 -0
- agno/db/utils.py +88 -0
- agno/eval/__init__.py +14 -0
- agno/eval/accuracy.py +154 -48
- 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 +15 -11
- 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 +1551 -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 +47 -65
- agno/knowledge/reader/docx_reader.py +83 -0
- agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
- agno/{document → knowledge}/reader/json_reader.py +30 -9
- agno/{document → knowledge}/reader/markdown_reader.py +58 -9
- agno/{document → knowledge}/reader/pdf_reader.py +71 -126
- agno/knowledge/reader/reader_factory.py +268 -0
- agno/knowledge/reader/s3_reader.py +101 -0
- agno/{document → knowledge}/reader/text_reader.py +31 -10
- agno/knowledge/reader/url_reader.py +128 -0
- agno/knowledge/reader/web_search_reader.py +366 -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 +269 -268
- 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 +131 -131
- agno/models/aws/bedrock.py +110 -182
- agno/models/aws/claude.py +64 -18
- agno/models/azure/ai_foundry.py +73 -23
- agno/models/base.py +346 -290
- agno/models/cerebras/cerebras.py +84 -27
- agno/models/cohere/chat.py +106 -98
- agno/models/google/gemini.py +105 -46
- 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 +46 -151
- 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 +85 -47
- agno/models/openai/chat.py +154 -37
- agno/models/openai/responses.py +178 -105
- agno/models/perplexity/perplexity.py +26 -2
- agno/models/portkey/portkey.py +0 -7
- agno/models/response.py +15 -9
- 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 +497 -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 +77 -33
- 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 +32 -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 +29 -0
- agno/os/mcp.py +235 -0
- agno/os/router.py +1400 -0
- agno/os/routers/__init__.py +3 -0
- agno/os/routers/evals/__init__.py +3 -0
- agno/os/routers/evals/evals.py +393 -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 +850 -0
- agno/os/routers/knowledge/schemas.py +118 -0
- agno/os/routers/memory/__init__.py +3 -0
- agno/os/routers/memory/memory.py +410 -0
- agno/os/routers/memory/schemas.py +58 -0
- agno/os/routers/metrics/__init__.py +3 -0
- agno/os/routers/metrics/metrics.py +178 -0
- agno/os/routers/metrics/schemas.py +47 -0
- agno/os/routers/session/__init__.py +3 -0
- agno/os/routers/session/session.py +536 -0
- agno/os/schema.py +945 -0
- agno/{app/playground → os}/settings.py +7 -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/agent.py +633 -0
- agno/run/base.py +53 -77
- agno/run/cancel.py +81 -0
- agno/run/team.py +243 -96
- agno/run/workflow.py +550 -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 +3260 -4824
- 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 +43 -23
- agno/tools/browserbase.py +13 -4
- agno/tools/calcom.py +12 -10
- agno/tools/calculator.py +10 -27
- agno/tools/cartesia.py +20 -17
- agno/tools/{clickup_tool.py → clickup.py} +12 -25
- agno/tools/confluence.py +8 -8
- agno/tools/crawl4ai.py +7 -1
- agno/tools/csv_toolkit.py +9 -8
- agno/tools/dalle.py +22 -12
- agno/tools/daytona.py +13 -16
- agno/tools/decorator.py +6 -3
- agno/tools/desi_vocal.py +17 -8
- 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 +36 -29
- agno/tools/email.py +4 -1
- agno/tools/evm.py +7 -1
- agno/tools/exa.py +19 -14
- agno/tools/fal.py +30 -30
- agno/tools/file.py +9 -8
- agno/tools/financial_datasets.py +25 -44
- agno/tools/firecrawl.py +22 -22
- agno/tools/function.py +127 -18
- agno/tools/giphy.py +23 -11
- agno/tools/github.py +48 -126
- agno/tools/gmail.py +45 -61
- 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 +19 -34
- agno/tools/linkup.py +5 -1
- agno/tools/local_file_system.py +8 -5
- agno/tools/lumalab.py +32 -20
- agno/tools/mcp.py +1 -2
- 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 +33 -15
- agno/tools/models/gemini.py +59 -32
- agno/tools/models/groq.py +30 -23
- agno/tools/models/nebius.py +28 -12
- agno/tools/models_labs.py +40 -16
- agno/tools/moviepy_video.py +7 -6
- agno/tools/neo4j.py +10 -8
- agno/tools/newspaper.py +7 -2
- agno/tools/newspaper4k.py +8 -3
- agno/tools/openai.py +58 -32
- agno/tools/openbb.py +12 -11
- agno/tools/opencv.py +63 -47
- 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 +55 -42
- 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 +100 -123
- agno/utils/gemini.py +32 -2
- agno/utils/knowledge.py +29 -0
- agno/utils/log.py +54 -4
- agno/utils/mcp.py +68 -10
- agno/utils/media.py +39 -0
- agno/utils/message.py +12 -1
- agno/utils/models/aws_claude.py +1 -1
- agno/utils/models/claude.py +47 -4
- agno/utils/models/cohere.py +1 -1
- agno/utils/models/mistral.py +8 -7
- agno/utils/models/schema_utils.py +3 -3
- agno/utils/models/watsonx.py +1 -1
- agno/utils/openai.py +1 -1
- agno/utils/pprint.py +33 -32
- agno/utils/print_response/agent.py +779 -0
- agno/utils/print_response/team.py +1669 -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/streamlit.py +481 -0
- 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 +334 -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} +207 -49
- agno/workflow/{v2/steps.py → steps.py} +147 -66
- agno/workflow/types.py +482 -0
- agno/workflow/workflow.py +2410 -696
- agno-2.0.0.dist-info/METADATA +494 -0
- agno-2.0.0.dist-info/RECORD +515 -0
- agno-2.0.0.dist-info/licenses/LICENSE +201 -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 -702
- 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/response.py +0 -467
- 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.1.dist-info/METADATA +0 -982
- agno-1.8.1.dist-info/RECORD +0 -566
- agno-1.8.1.dist-info/entry_points.txt +0 -3
- agno-1.8.1.dist-info/licenses/LICENSE +0 -375
- /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.1.dist-info → agno-2.0.0.dist-info}/WHEEL +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0.dist-info}/top_level.txt +0 -0
agno/run/base.py
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
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
|
|
4
4
|
|
|
5
5
|
from pydantic import BaseModel
|
|
6
6
|
|
|
7
|
-
from agno.media import
|
|
7
|
+
from agno.media import Audio, Image, Video
|
|
8
8
|
from agno.models.message import Citations, Message, MessageReferences
|
|
9
|
+
from agno.models.metrics import Metrics
|
|
9
10
|
from agno.models.response import ToolExecution
|
|
10
11
|
from agno.reasoning.step import ReasoningStep
|
|
11
12
|
from agno.utils.log import log_error
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
@dataclass
|
|
15
|
-
class
|
|
16
|
+
class BaseRunOutputEvent:
|
|
16
17
|
def to_dict(self) -> Dict[str, Any]:
|
|
17
18
|
_dict = {
|
|
18
19
|
k: v
|
|
@@ -22,7 +23,7 @@ class BaseRunResponseEvent:
|
|
|
22
23
|
not in [
|
|
23
24
|
"tools",
|
|
24
25
|
"tool",
|
|
25
|
-
"
|
|
26
|
+
"metadata",
|
|
26
27
|
"image",
|
|
27
28
|
"images",
|
|
28
29
|
"videos",
|
|
@@ -30,13 +31,28 @@ class BaseRunResponseEvent:
|
|
|
30
31
|
"response_audio",
|
|
31
32
|
"citations",
|
|
32
33
|
"member_responses",
|
|
34
|
+
"reasoning_messages",
|
|
35
|
+
"reasoning_steps",
|
|
36
|
+
"references",
|
|
37
|
+
"additional_input",
|
|
38
|
+
"metrics",
|
|
33
39
|
]
|
|
34
40
|
}
|
|
35
41
|
|
|
36
|
-
if hasattr(self, "
|
|
37
|
-
_dict["
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
if hasattr(self, "metadata") and self.metadata is not None:
|
|
43
|
+
_dict["metadata"] = self.metadata
|
|
44
|
+
|
|
45
|
+
if hasattr(self, "additional_input") and self.additional_input is not None:
|
|
46
|
+
_dict["additional_input"] = [m.to_dict() for m in self.additional_input]
|
|
47
|
+
|
|
48
|
+
if hasattr(self, "reasoning_messages") and self.reasoning_messages is not None:
|
|
49
|
+
_dict["reasoning_messages"] = [m.to_dict() for m in self.reasoning_messages]
|
|
50
|
+
|
|
51
|
+
if hasattr(self, "reasoning_steps") and self.reasoning_steps is not None:
|
|
52
|
+
_dict["reasoning_steps"] = [rs.model_dump() for rs in self.reasoning_steps]
|
|
53
|
+
|
|
54
|
+
if hasattr(self, "references") and self.references is not None:
|
|
55
|
+
_dict["references"] = [r.model_dump() for r in self.references]
|
|
40
56
|
|
|
41
57
|
if hasattr(self, "member_responses") and self.member_responses:
|
|
42
58
|
_dict["member_responses"] = [response.to_dict() for response in self.member_responses]
|
|
@@ -44,21 +60,15 @@ class BaseRunResponseEvent:
|
|
|
44
60
|
if hasattr(self, "images") and self.images is not None:
|
|
45
61
|
_dict["images"] = []
|
|
46
62
|
for img in self.images:
|
|
47
|
-
if isinstance(img,
|
|
63
|
+
if isinstance(img, Image):
|
|
48
64
|
_dict["images"].append(img.to_dict())
|
|
49
65
|
else:
|
|
50
66
|
_dict["images"].append(img)
|
|
51
67
|
|
|
52
|
-
if hasattr(self, "image") and self.image is not None:
|
|
53
|
-
if isinstance(self.image, ImageArtifact):
|
|
54
|
-
_dict["image"] = self.image.to_dict()
|
|
55
|
-
else:
|
|
56
|
-
_dict["image"] = self.image
|
|
57
|
-
|
|
58
68
|
if hasattr(self, "videos") and self.videos is not None:
|
|
59
69
|
_dict["videos"] = []
|
|
60
70
|
for vid in self.videos:
|
|
61
|
-
if isinstance(vid,
|
|
71
|
+
if isinstance(vid, Video):
|
|
62
72
|
_dict["videos"].append(vid.to_dict())
|
|
63
73
|
else:
|
|
64
74
|
_dict["videos"].append(vid)
|
|
@@ -66,13 +76,13 @@ class BaseRunResponseEvent:
|
|
|
66
76
|
if hasattr(self, "audio") and self.audio is not None:
|
|
67
77
|
_dict["audio"] = []
|
|
68
78
|
for aud in self.audio:
|
|
69
|
-
if isinstance(aud,
|
|
79
|
+
if isinstance(aud, Audio):
|
|
70
80
|
_dict["audio"].append(aud.to_dict())
|
|
71
81
|
else:
|
|
72
82
|
_dict["audio"].append(aud)
|
|
73
83
|
|
|
74
84
|
if hasattr(self, "response_audio") and self.response_audio is not None:
|
|
75
|
-
if isinstance(self.response_audio,
|
|
85
|
+
if isinstance(self.response_audio, Audio):
|
|
76
86
|
_dict["response_audio"] = self.response_audio.to_dict()
|
|
77
87
|
else:
|
|
78
88
|
_dict["response_audio"] = self.response_audio
|
|
@@ -100,6 +110,9 @@ class BaseRunResponseEvent:
|
|
|
100
110
|
else:
|
|
101
111
|
_dict["tool"] = self.tool
|
|
102
112
|
|
|
113
|
+
if hasattr(self, "metrics") and self.metrics is not None:
|
|
114
|
+
_dict["metrics"] = self.metrics.to_dict()
|
|
115
|
+
|
|
103
116
|
return _dict
|
|
104
117
|
|
|
105
118
|
def to_json(self) -> str:
|
|
@@ -121,31 +134,39 @@ class BaseRunResponseEvent:
|
|
|
121
134
|
|
|
122
135
|
images = data.pop("images", None)
|
|
123
136
|
if images:
|
|
124
|
-
data["images"] = [
|
|
125
|
-
|
|
126
|
-
image = data.pop("image", None)
|
|
127
|
-
if image:
|
|
128
|
-
data["image"] = ImageArtifact.model_validate(image)
|
|
137
|
+
data["images"] = [Image.model_validate(image) for image in images]
|
|
129
138
|
|
|
130
139
|
videos = data.pop("videos", None)
|
|
131
140
|
if videos:
|
|
132
|
-
data["videos"] = [
|
|
141
|
+
data["videos"] = [Video.model_validate(video) for video in videos]
|
|
133
142
|
|
|
134
143
|
audio = data.pop("audio", None)
|
|
135
144
|
if audio:
|
|
136
|
-
data["audio"] = [
|
|
145
|
+
data["audio"] = [Audio.model_validate(audio) for audio in audio]
|
|
137
146
|
|
|
138
147
|
response_audio = data.pop("response_audio", None)
|
|
139
148
|
if response_audio:
|
|
140
|
-
data["response_audio"] =
|
|
149
|
+
data["response_audio"] = Audio.model_validate(response_audio)
|
|
150
|
+
|
|
151
|
+
additional_input = data.pop("additional_input", None)
|
|
152
|
+
if additional_input is not None:
|
|
153
|
+
data["additional_input"] = [Message.model_validate(message) for message in additional_input]
|
|
154
|
+
|
|
155
|
+
reasoning_steps = data.pop("reasoning_steps", None)
|
|
156
|
+
if reasoning_steps is not None:
|
|
157
|
+
data["reasoning_steps"] = [ReasoningStep.model_validate(step) for step in reasoning_steps]
|
|
141
158
|
|
|
142
|
-
|
|
143
|
-
if
|
|
144
|
-
data["
|
|
159
|
+
reasoning_messages = data.pop("reasoning_messages", None)
|
|
160
|
+
if reasoning_messages is not None:
|
|
161
|
+
data["reasoning_messages"] = [Message.model_validate(message) for message in reasoning_messages]
|
|
162
|
+
|
|
163
|
+
references = data.pop("references", None)
|
|
164
|
+
if references is not None:
|
|
165
|
+
data["references"] = [MessageReferences.model_validate(reference) for reference in references]
|
|
145
166
|
|
|
146
|
-
|
|
147
|
-
if
|
|
148
|
-
data
|
|
167
|
+
metrics = data.pop("metrics", None)
|
|
168
|
+
if metrics:
|
|
169
|
+
data["metrics"] = Metrics(**metrics)
|
|
149
170
|
|
|
150
171
|
return cls(**data)
|
|
151
172
|
|
|
@@ -158,51 +179,6 @@ class BaseRunResponseEvent:
|
|
|
158
179
|
return False
|
|
159
180
|
|
|
160
181
|
|
|
161
|
-
@dataclass
|
|
162
|
-
class RunResponseExtraData:
|
|
163
|
-
references: Optional[List[MessageReferences]] = None
|
|
164
|
-
add_messages: Optional[List[Message]] = None
|
|
165
|
-
reasoning_steps: Optional[List[ReasoningStep]] = None
|
|
166
|
-
reasoning_messages: Optional[List[Message]] = None
|
|
167
|
-
|
|
168
|
-
def to_dict(self) -> Dict[str, Any]:
|
|
169
|
-
_dict = {}
|
|
170
|
-
if self.add_messages is not None:
|
|
171
|
-
_dict["add_messages"] = [m.to_dict() for m in self.add_messages]
|
|
172
|
-
if self.reasoning_messages is not None:
|
|
173
|
-
_dict["reasoning_messages"] = [m.to_dict() for m in self.reasoning_messages]
|
|
174
|
-
if self.reasoning_steps is not None:
|
|
175
|
-
_dict["reasoning_steps"] = [rs.model_dump() for rs in self.reasoning_steps]
|
|
176
|
-
if self.references is not None:
|
|
177
|
-
_dict["references"] = [r.model_dump() for r in self.references]
|
|
178
|
-
return _dict
|
|
179
|
-
|
|
180
|
-
@classmethod
|
|
181
|
-
def from_dict(cls, data: Dict[str, Any]) -> "RunResponseExtraData":
|
|
182
|
-
add_messages = data.pop("add_messages", None)
|
|
183
|
-
if add_messages is not None:
|
|
184
|
-
add_messages = [Message.model_validate(message) for message in add_messages]
|
|
185
|
-
|
|
186
|
-
reasoning_steps = data.pop("reasoning_steps", None)
|
|
187
|
-
if reasoning_steps is not None:
|
|
188
|
-
reasoning_steps = [ReasoningStep.model_validate(step) for step in reasoning_steps]
|
|
189
|
-
|
|
190
|
-
reasoning_messages = data.pop("reasoning_messages", None)
|
|
191
|
-
if reasoning_messages is not None:
|
|
192
|
-
reasoning_messages = [Message.model_validate(message) for message in reasoning_messages]
|
|
193
|
-
|
|
194
|
-
references = data.pop("references", None)
|
|
195
|
-
if references is not None:
|
|
196
|
-
references = [MessageReferences.model_validate(reference) for reference in references]
|
|
197
|
-
|
|
198
|
-
return cls(
|
|
199
|
-
add_messages=add_messages,
|
|
200
|
-
reasoning_steps=reasoning_steps,
|
|
201
|
-
reasoning_messages=reasoning_messages,
|
|
202
|
-
references=references,
|
|
203
|
-
)
|
|
204
|
-
|
|
205
|
-
|
|
206
182
|
class RunStatus(str, Enum):
|
|
207
183
|
"""State of the main run response"""
|
|
208
184
|
|
agno/run/cancel.py
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"""Run cancellation management."""
|
|
2
|
+
|
|
3
|
+
import threading
|
|
4
|
+
from typing import Dict
|
|
5
|
+
|
|
6
|
+
from agno.exceptions import RunCancelledException
|
|
7
|
+
from agno.utils.log import logger
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class RunCancellationManager:
|
|
11
|
+
"""Manages cancellation state for agent runs."""
|
|
12
|
+
|
|
13
|
+
def __init__(self):
|
|
14
|
+
self._cancelled_runs: Dict[str, bool] = {}
|
|
15
|
+
self._lock = threading.Lock()
|
|
16
|
+
|
|
17
|
+
def register_run(self, run_id: str) -> None:
|
|
18
|
+
"""Register a new run as not cancelled."""
|
|
19
|
+
with self._lock:
|
|
20
|
+
self._cancelled_runs[run_id] = False
|
|
21
|
+
|
|
22
|
+
def cancel_run(self, run_id: str) -> bool:
|
|
23
|
+
"""Cancel a run by marking it as cancelled.
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
bool: True if run was found and cancelled, False if run not found.
|
|
27
|
+
"""
|
|
28
|
+
with self._lock:
|
|
29
|
+
if run_id in self._cancelled_runs:
|
|
30
|
+
self._cancelled_runs[run_id] = True
|
|
31
|
+
logger.info(f"Run {run_id} marked for cancellation")
|
|
32
|
+
return True
|
|
33
|
+
else:
|
|
34
|
+
logger.warning(f"Attempted to cancel unknown run {run_id}")
|
|
35
|
+
return False
|
|
36
|
+
|
|
37
|
+
def is_cancelled(self, run_id: str) -> bool:
|
|
38
|
+
"""Check if a run is cancelled."""
|
|
39
|
+
with self._lock:
|
|
40
|
+
return self._cancelled_runs.get(run_id, False)
|
|
41
|
+
|
|
42
|
+
def cleanup_run(self, run_id: str) -> None:
|
|
43
|
+
"""Remove a run from tracking (called when run completes)."""
|
|
44
|
+
with self._lock:
|
|
45
|
+
if run_id in self._cancelled_runs:
|
|
46
|
+
del self._cancelled_runs[run_id]
|
|
47
|
+
|
|
48
|
+
def raise_if_cancelled(self, run_id: str) -> None:
|
|
49
|
+
"""Check if a run should be cancelled and raise exception if so."""
|
|
50
|
+
if self.is_cancelled(run_id):
|
|
51
|
+
logger.info(f"Cancelling run {run_id}")
|
|
52
|
+
raise RunCancelledException(f"Run {run_id} was cancelled")
|
|
53
|
+
|
|
54
|
+
def get_active_runs(self) -> Dict[str, bool]:
|
|
55
|
+
"""Get all currently tracked runs and their cancellation status."""
|
|
56
|
+
with self._lock:
|
|
57
|
+
return self._cancelled_runs.copy()
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# Global cancellation manager instance
|
|
61
|
+
_cancellation_manager = RunCancellationManager()
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def register_run(run_id: str) -> None:
|
|
65
|
+
"""Register a new run for cancellation tracking."""
|
|
66
|
+
_cancellation_manager.register_run(run_id)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def cancel_run(run_id: str) -> bool:
|
|
70
|
+
"""Cancel a run."""
|
|
71
|
+
return _cancellation_manager.cancel_run(run_id)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def cleanup_run(run_id: str) -> None:
|
|
75
|
+
"""Clean up cancellation tracking for a completed run."""
|
|
76
|
+
_cancellation_manager.cleanup_run(run_id)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def raise_if_cancelled(run_id: str) -> None:
|
|
80
|
+
"""Check if a run should be cancelled and raise exception if so."""
|
|
81
|
+
_cancellation_manager.raise_if_cancelled(run_id)
|