agno 1.8.1__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 +2778 -4123
- 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/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/google/gemini.py +100 -42
- 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 +121 -23
- 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 +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 +2961 -4253
- 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 +8 -8
- 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 +61 -61
- 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 +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 +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 +10 -8
- 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/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 +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} +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 -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/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/{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.0a1.dist-info}/WHEEL +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/licenses/LICENSE +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/top_level.txt +0 -0
agno/utils/mcp.py
CHANGED
|
@@ -12,6 +12,7 @@ except (ImportError, ModuleNotFoundError):
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
from agno.media import ImageArtifact
|
|
15
|
+
from agno.tools.function import ToolResult
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
def get_entrypoint_for_tool(tool: MCPTool, session: ClientSession):
|
|
@@ -27,17 +28,19 @@ def get_entrypoint_for_tool(tool: MCPTool, session: ClientSession):
|
|
|
27
28
|
"""
|
|
28
29
|
from agno.agent import Agent
|
|
29
30
|
|
|
30
|
-
async def call_tool(agent: Agent, tool_name: str, **kwargs) ->
|
|
31
|
+
async def call_tool(agent: Agent, tool_name: str, **kwargs) -> ToolResult:
|
|
31
32
|
try:
|
|
32
33
|
log_debug(f"Calling MCP Tool '{tool_name}' with args: {kwargs}")
|
|
33
34
|
result: CallToolResult = await session.call_tool(tool_name, kwargs) # type: ignore
|
|
34
35
|
|
|
35
36
|
# Return an error if the tool call failed
|
|
36
37
|
if result.isError:
|
|
37
|
-
|
|
38
|
+
return ToolResult(content=f"Error from MCP tool '{tool_name}': {result.content}")
|
|
38
39
|
|
|
39
40
|
# Process the result content
|
|
40
41
|
response_str = ""
|
|
42
|
+
images = []
|
|
43
|
+
|
|
41
44
|
for content_item in result.content:
|
|
42
45
|
if isinstance(content_item, TextContent):
|
|
43
46
|
response_str += content_item.text + "\n"
|
|
@@ -49,7 +52,7 @@ def get_entrypoint_for_tool(tool: MCPTool, session: ClientSession):
|
|
|
49
52
|
content=getattr(content_item, "data", None),
|
|
50
53
|
mime_type=getattr(content_item, "mimeType", "image/png"),
|
|
51
54
|
)
|
|
52
|
-
|
|
55
|
+
images.append(img_artifact)
|
|
53
56
|
response_str += "Image has been generated and added to the response.\n"
|
|
54
57
|
elif isinstance(content_item, EmbeddedResource):
|
|
55
58
|
# Handle embedded resources
|
|
@@ -58,9 +61,12 @@ def get_entrypoint_for_tool(tool: MCPTool, session: ClientSession):
|
|
|
58
61
|
# Handle other content types
|
|
59
62
|
response_str += f"[Unsupported content type: {content_item.type}]\n"
|
|
60
63
|
|
|
61
|
-
return
|
|
64
|
+
return ToolResult(
|
|
65
|
+
content=response_str.strip(),
|
|
66
|
+
images=images if images else None,
|
|
67
|
+
)
|
|
62
68
|
except Exception as e:
|
|
63
69
|
log_exception(f"Failed to call MCP tool '{tool_name}': {e}")
|
|
64
|
-
return f"Error: {e}"
|
|
70
|
+
return ToolResult(content=f"Error: {e}")
|
|
65
71
|
|
|
66
72
|
return partial(call_tool, tool_name=tool.name)
|
agno/utils/media.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import base64
|
|
2
|
+
import time
|
|
2
3
|
from enum import Enum
|
|
3
4
|
from pathlib import Path
|
|
4
5
|
from typing import List
|
|
@@ -114,6 +115,44 @@ def save_base64_data(base64_data: str, output_path: str) -> bool:
|
|
|
114
115
|
raise Exception(f"An unexpected error occurred while saving data to '{output_path}': {e}")
|
|
115
116
|
|
|
116
117
|
|
|
118
|
+
def wait_for_media_ready(url: str, timeout: int = 120, interval: int = 5, verbose: bool = True) -> bool:
|
|
119
|
+
"""
|
|
120
|
+
Wait for media to be ready at URL by polling with HEAD requests.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
url (str): The URL to check for media availability
|
|
124
|
+
timeout (int): Maximum time to wait in seconds (default: 120)
|
|
125
|
+
interval (int): Seconds between each check (default: 5)
|
|
126
|
+
verbose (bool): Whether to print progress messages (default: True)
|
|
127
|
+
|
|
128
|
+
Returns:
|
|
129
|
+
bool: True if media is ready, False if timeout reached
|
|
130
|
+
"""
|
|
131
|
+
max_attempts = timeout // interval
|
|
132
|
+
|
|
133
|
+
if verbose:
|
|
134
|
+
print("Media generated! Waiting for upload to complete...")
|
|
135
|
+
|
|
136
|
+
for attempt in range(max_attempts):
|
|
137
|
+
try:
|
|
138
|
+
response = httpx.head(url, timeout=10)
|
|
139
|
+
response.raise_for_status()
|
|
140
|
+
if verbose:
|
|
141
|
+
print(f"Media ready: {url}")
|
|
142
|
+
return True
|
|
143
|
+
except httpx.HTTPError:
|
|
144
|
+
pass
|
|
145
|
+
|
|
146
|
+
if verbose and (attempt + 1) % 3 == 0:
|
|
147
|
+
print(f"Still processing... ({(attempt + 1) * interval}s elapsed)")
|
|
148
|
+
|
|
149
|
+
time.sleep(interval)
|
|
150
|
+
|
|
151
|
+
if verbose:
|
|
152
|
+
print(f"Timeout waiting for media. Try this URL later: {url}")
|
|
153
|
+
return False
|
|
154
|
+
|
|
155
|
+
|
|
117
156
|
def download_knowledge_filters_sample_data(
|
|
118
157
|
num_files: int = 5, file_extension: SampleDataFileExtension = SampleDataFileExtension.DOCX
|
|
119
158
|
) -> List[str]:
|
agno/utils/message.py
CHANGED
|
@@ -7,6 +7,7 @@ from agno.models.message import Message
|
|
|
7
7
|
|
|
8
8
|
def get_text_from_message(message: Union[List, Dict, str, Message, BaseModel]) -> str:
|
|
9
9
|
"""Return the user texts from the message"""
|
|
10
|
+
import json
|
|
10
11
|
|
|
11
12
|
if isinstance(message, str):
|
|
12
13
|
return message
|
|
@@ -17,7 +18,15 @@ def get_text_from_message(message: Union[List, Dict, str, Message, BaseModel]) -
|
|
|
17
18
|
if len(message) == 0:
|
|
18
19
|
return ""
|
|
19
20
|
|
|
20
|
-
if
|
|
21
|
+
# Check if it's a list of Message objects
|
|
22
|
+
if isinstance(message[0], Message):
|
|
23
|
+
for m in message:
|
|
24
|
+
if isinstance(m, Message) and m.role == "user" and m.content is not None:
|
|
25
|
+
# Recursively extract text from the message content
|
|
26
|
+
content_text = get_text_from_message(m.content)
|
|
27
|
+
if content_text:
|
|
28
|
+
text_messages.append(content_text)
|
|
29
|
+
elif "type" in message[0]:
|
|
21
30
|
for m in message:
|
|
22
31
|
m_type = m.get("type")
|
|
23
32
|
if m_type is not None and isinstance(m_type, str):
|
|
@@ -42,6 +51,8 @@ def get_text_from_message(message: Union[List, Dict, str, Message, BaseModel]) -
|
|
|
42
51
|
if isinstance(message, dict):
|
|
43
52
|
if "content" in message:
|
|
44
53
|
return get_text_from_message(message["content"])
|
|
54
|
+
else:
|
|
55
|
+
return json.dumps(message, indent=2)
|
|
45
56
|
if isinstance(message, Message) and message.content is not None:
|
|
46
57
|
return get_text_from_message(message.content)
|
|
47
58
|
return ""
|
agno/utils/models/claude.py
CHANGED
|
@@ -246,21 +246,23 @@ def format_messages(messages: List[Message]) -> Tuple[List[Dict[str, str]], str]
|
|
|
246
246
|
elif message.role == "assistant":
|
|
247
247
|
content = []
|
|
248
248
|
|
|
249
|
-
if message.
|
|
249
|
+
if message.reasoning_content is not None and message.provider_data is not None:
|
|
250
250
|
from anthropic.types import RedactedThinkingBlock, ThinkingBlock
|
|
251
251
|
|
|
252
252
|
content.append(
|
|
253
253
|
ThinkingBlock(
|
|
254
|
-
thinking=message.
|
|
254
|
+
thinking=message.reasoning_content,
|
|
255
255
|
signature=message.provider_data.get("signature"),
|
|
256
256
|
type="thinking",
|
|
257
257
|
)
|
|
258
258
|
)
|
|
259
259
|
|
|
260
|
-
if message.
|
|
260
|
+
if message.redacted_reasoning_content is not None:
|
|
261
261
|
from anthropic.types import RedactedThinkingBlock
|
|
262
262
|
|
|
263
|
-
content.append(
|
|
263
|
+
content.append(
|
|
264
|
+
RedactedThinkingBlock(data=message.redacted_reasoning_content, type="redacted_reasoning_content")
|
|
265
|
+
)
|
|
264
266
|
|
|
265
267
|
if isinstance(message.content, str) and message.content and len(message.content.strip()) > 0:
|
|
266
268
|
content.append(TextBlock(text=message.content, type="text"))
|
agno/utils/models/mistral.py
CHANGED
|
@@ -5,13 +5,14 @@ from agno.models.message import Message
|
|
|
5
5
|
from agno.utils.log import log_error, log_warning
|
|
6
6
|
|
|
7
7
|
try:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
# TODO: Adapt these imports to the new Mistral SDK versions
|
|
9
|
+
from mistralai.models import ( # type: ignore
|
|
10
|
+
AssistantMessage, # type: ignore
|
|
11
|
+
ImageURLChunk, # type: ignore
|
|
12
|
+
SystemMessage, # type: ignore
|
|
13
|
+
TextChunk, # type: ignore
|
|
14
|
+
ToolMessage, # type: ignore
|
|
15
|
+
UserMessage, # type: ignore
|
|
15
16
|
)
|
|
16
17
|
|
|
17
18
|
MistralMessage = Union[UserMessage, AssistantMessage, SystemMessage, ToolMessage]
|
|
@@ -135,19 +135,19 @@ def _normalize_generic(schema: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
135
135
|
return schema
|
|
136
136
|
|
|
137
137
|
|
|
138
|
-
def get_response_schema_for_provider(
|
|
138
|
+
def get_response_schema_for_provider(output_schema: Type[BaseModel], provider: str) -> Dict[str, Any]:
|
|
139
139
|
"""
|
|
140
140
|
Get a properly formatted response schema for a specific model provider.
|
|
141
141
|
|
|
142
142
|
Args:
|
|
143
|
-
|
|
143
|
+
output_schema: Pydantic BaseModel class
|
|
144
144
|
provider: Model provider name
|
|
145
145
|
|
|
146
146
|
Returns:
|
|
147
147
|
Dict[str, Any]: Provider-specific schema
|
|
148
148
|
"""
|
|
149
149
|
# Generate the base schema
|
|
150
|
-
base_schema =
|
|
150
|
+
base_schema = output_schema.model_json_schema()
|
|
151
151
|
|
|
152
152
|
# Normalize for the specific provider
|
|
153
153
|
return normalize_schema_for_provider(base_schema, provider)
|
agno/utils/pprint.py
CHANGED
|
@@ -3,39 +3,40 @@ from typing import AsyncIterable, Iterable, Union, get_args
|
|
|
3
3
|
|
|
4
4
|
from pydantic import BaseModel
|
|
5
5
|
|
|
6
|
-
from agno.run.
|
|
7
|
-
from agno.run.team import
|
|
8
|
-
from agno.run.
|
|
6
|
+
from agno.run.agent import RunOutput, RunOutputEvent
|
|
7
|
+
from agno.run.team import TeamRunOutput, TeamRunOutputEvent
|
|
8
|
+
from agno.run.workflow import WorkflowRunOutput, WorkflowRunOutputEvent
|
|
9
9
|
from agno.utils.log import logger
|
|
10
10
|
from agno.utils.timer import Timer
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def pprint_run_response(
|
|
14
14
|
run_response: Union[
|
|
15
|
-
|
|
16
|
-
Iterable[
|
|
17
|
-
|
|
18
|
-
Iterable[
|
|
19
|
-
|
|
20
|
-
Iterable[
|
|
15
|
+
RunOutput,
|
|
16
|
+
Iterable[RunOutputEvent],
|
|
17
|
+
TeamRunOutput,
|
|
18
|
+
Iterable[TeamRunOutputEvent],
|
|
19
|
+
WorkflowRunOutput,
|
|
20
|
+
Iterable[WorkflowRunOutputEvent],
|
|
21
21
|
],
|
|
22
22
|
markdown: bool = False,
|
|
23
23
|
show_time: bool = False,
|
|
24
24
|
) -> None:
|
|
25
25
|
from rich.box import ROUNDED
|
|
26
|
+
from rich.console import Console
|
|
26
27
|
from rich.json import JSON
|
|
27
28
|
from rich.live import Live
|
|
28
29
|
from rich.markdown import Markdown
|
|
29
30
|
from rich.status import Status
|
|
30
31
|
from rich.table import Table
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
console = Console()
|
|
33
34
|
|
|
34
|
-
# If run_response is a single
|
|
35
|
+
# If run_response is a single RunOutput, wrap it in a list to make it iterable
|
|
35
36
|
if (
|
|
36
|
-
isinstance(run_response,
|
|
37
|
-
or isinstance(run_response,
|
|
38
|
-
or isinstance(run_response,
|
|
37
|
+
isinstance(run_response, RunOutput)
|
|
38
|
+
or isinstance(run_response, TeamRunOutput)
|
|
39
|
+
or isinstance(run_response, WorkflowRunOutput)
|
|
39
40
|
):
|
|
40
41
|
single_response_content: Union[str, JSON, Markdown] = ""
|
|
41
42
|
if isinstance(run_response.content, str):
|
|
@@ -66,9 +67,9 @@ def pprint_run_response(
|
|
|
66
67
|
for resp in run_response:
|
|
67
68
|
if (
|
|
68
69
|
(
|
|
69
|
-
isinstance(resp, tuple(get_args(
|
|
70
|
-
or isinstance(resp, tuple(get_args(
|
|
71
|
-
or isinstance(resp, tuple(get_args(
|
|
70
|
+
isinstance(resp, tuple(get_args(RunOutputEvent)))
|
|
71
|
+
or isinstance(resp, tuple(get_args(TeamRunOutputEvent)))
|
|
72
|
+
or isinstance(resp, tuple(get_args(WorkflowRunOutputEvent)))
|
|
72
73
|
)
|
|
73
74
|
and hasattr(resp, "content")
|
|
74
75
|
and resp.content is not None
|
|
@@ -95,30 +96,30 @@ def pprint_run_response(
|
|
|
95
96
|
|
|
96
97
|
async def apprint_run_response(
|
|
97
98
|
run_response: Union[
|
|
98
|
-
|
|
99
|
-
AsyncIterable[
|
|
100
|
-
|
|
101
|
-
AsyncIterable[
|
|
102
|
-
|
|
103
|
-
AsyncIterable[
|
|
99
|
+
RunOutput,
|
|
100
|
+
AsyncIterable[RunOutput],
|
|
101
|
+
TeamRunOutput,
|
|
102
|
+
AsyncIterable[TeamRunOutput],
|
|
103
|
+
WorkflowRunOutput,
|
|
104
|
+
AsyncIterable[WorkflowRunOutputEvent],
|
|
104
105
|
],
|
|
105
106
|
markdown: bool = False,
|
|
106
107
|
show_time: bool = False,
|
|
107
108
|
) -> None:
|
|
108
109
|
from rich.box import ROUNDED
|
|
110
|
+
from rich.console import Console
|
|
109
111
|
from rich.json import JSON
|
|
110
112
|
from rich.live import Live
|
|
111
113
|
from rich.markdown import Markdown
|
|
112
114
|
from rich.status import Status
|
|
113
115
|
from rich.table import Table
|
|
114
116
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
# If run_response is a single RunResponse, wrap it in a list to make it iterable
|
|
117
|
+
console = Console()
|
|
118
|
+
# If run_response is a single RunOutput, wrap it in a list to make it iterable
|
|
118
119
|
if (
|
|
119
|
-
isinstance(run_response,
|
|
120
|
-
or isinstance(run_response,
|
|
121
|
-
or isinstance(run_response,
|
|
120
|
+
isinstance(run_response, RunOutput)
|
|
121
|
+
or isinstance(run_response, TeamRunOutput)
|
|
122
|
+
or isinstance(run_response, WorkflowRunOutput)
|
|
122
123
|
):
|
|
123
124
|
single_response_content: Union[str, JSON, Markdown] = ""
|
|
124
125
|
if isinstance(run_response.content, str):
|
|
@@ -150,9 +151,9 @@ async def apprint_run_response(
|
|
|
150
151
|
async for resp in run_response:
|
|
151
152
|
if (
|
|
152
153
|
(
|
|
153
|
-
isinstance(resp, tuple(get_args(
|
|
154
|
-
or isinstance(resp, tuple(get_args(
|
|
155
|
-
or isinstance(resp, tuple(get_args(
|
|
154
|
+
isinstance(resp, tuple(get_args(RunOutputEvent)))
|
|
155
|
+
or isinstance(resp, tuple(get_args(TeamRunOutputEvent)))
|
|
156
|
+
or isinstance(resp, tuple(get_args(WorkflowRunOutputEvent)))
|
|
156
157
|
)
|
|
157
158
|
and hasattr(resp, "content")
|
|
158
159
|
and resp.content is not None
|