agno 1.8.2__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/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 +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 +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 +128 -72
- 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 +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 +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 +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 +17 -18
- 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 +18 -33
- 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 +1 -1
- 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 +6 -12
- 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 -110
- 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 -1053
- agno/app/playground/deploy.py +0 -249
- agno/app/playground/operator.py +0 -183
- agno/app/playground/schemas.py +0 -223
- agno/app/playground/serve.py +0 -55
- agno/app/playground/sync_router.py +0 -1045
- 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 -3313
- 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.2.dist-info/METADATA +0 -982
- agno-1.8.2.dist-info/RECORD +0 -566
- agno-1.8.2.dist-info/entry_points.txt +0 -3
- agno-1.8.2.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.2.dist-info → agno-2.0.0.dist-info}/WHEEL +0 -0
- {agno-1.8.2.dist-info → agno-2.0.0.dist-info}/top_level.txt +0 -0
agno/storage/mongodb.py
DELETED
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
from datetime import datetime, timezone
|
|
2
|
-
from typing import List, Literal, Optional
|
|
3
|
-
from uuid import UUID
|
|
4
|
-
|
|
5
|
-
from agno.storage.base import Storage
|
|
6
|
-
from agno.storage.session import Session
|
|
7
|
-
from agno.storage.session.agent import AgentSession
|
|
8
|
-
from agno.storage.session.team import TeamSession
|
|
9
|
-
from agno.storage.session.v2.workflow import WorkflowSession as WorkflowSessionV2
|
|
10
|
-
from agno.storage.session.workflow import WorkflowSession
|
|
11
|
-
from agno.utils.log import log_debug, logger
|
|
12
|
-
|
|
13
|
-
try:
|
|
14
|
-
from pymongo import MongoClient
|
|
15
|
-
from pymongo.collection import Collection
|
|
16
|
-
from pymongo.database import Database
|
|
17
|
-
from pymongo.errors import PyMongoError
|
|
18
|
-
except ImportError:
|
|
19
|
-
raise ImportError("`pymongo` not installed. Please install it with `pip install pymongo`")
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class MongoDbStorage(Storage):
|
|
23
|
-
def __init__(
|
|
24
|
-
self,
|
|
25
|
-
collection_name: str,
|
|
26
|
-
db_url: Optional[str] = None,
|
|
27
|
-
db_name: str = "agno",
|
|
28
|
-
client: Optional[MongoClient] = None,
|
|
29
|
-
mode: Optional[Literal["agent", "team", "workflow", "workflow_v2"]] = "agent",
|
|
30
|
-
):
|
|
31
|
-
"""
|
|
32
|
-
This class provides agent storage using MongoDB.
|
|
33
|
-
|
|
34
|
-
Args:
|
|
35
|
-
collection_name: Name of the collection to store agent sessions
|
|
36
|
-
db_url: MongoDB connection URL
|
|
37
|
-
db_name: Name of the database
|
|
38
|
-
client: Optional existing MongoDB client
|
|
39
|
-
"""
|
|
40
|
-
super().__init__(mode)
|
|
41
|
-
self._client: Optional[MongoClient] = client
|
|
42
|
-
if self._client is None and db_url is not None:
|
|
43
|
-
self._client = MongoClient(db_url)
|
|
44
|
-
elif self._client is None:
|
|
45
|
-
self._client = MongoClient()
|
|
46
|
-
|
|
47
|
-
if self._client is None:
|
|
48
|
-
raise ValueError("Must provide either db_url or client")
|
|
49
|
-
|
|
50
|
-
self.collection_name: str = collection_name
|
|
51
|
-
self.db_name: str = db_name
|
|
52
|
-
self.db: Database = self._client[self.db_name]
|
|
53
|
-
self.collection: Collection = self.db[self.collection_name]
|
|
54
|
-
|
|
55
|
-
def create(self) -> None:
|
|
56
|
-
"""Create necessary indexes for the collection"""
|
|
57
|
-
try:
|
|
58
|
-
# Create indexes
|
|
59
|
-
self.collection.create_index("session_id", unique=True)
|
|
60
|
-
self.collection.create_index("user_id")
|
|
61
|
-
self.collection.create_index("created_at")
|
|
62
|
-
if self.mode == "agent":
|
|
63
|
-
self.collection.create_index("agent_id")
|
|
64
|
-
elif self.mode == "team":
|
|
65
|
-
self.collection.create_index("team_id")
|
|
66
|
-
elif self.mode == "workflow":
|
|
67
|
-
self.collection.create_index("workflow_id")
|
|
68
|
-
elif self.mode == "workflow_v2":
|
|
69
|
-
self.collection.create_index("workflow_id")
|
|
70
|
-
except PyMongoError as e:
|
|
71
|
-
logger.error(f"Error creating indexes: {e}")
|
|
72
|
-
raise
|
|
73
|
-
|
|
74
|
-
def read(self, session_id: str, user_id: Optional[str] = None) -> Optional[Session]:
|
|
75
|
-
"""Read a Session from MongoDB
|
|
76
|
-
Args:
|
|
77
|
-
session_id: ID of the session to read
|
|
78
|
-
user_id: ID of the user to read
|
|
79
|
-
Returns:
|
|
80
|
-
Optional[Session]: The session if found, otherwise None
|
|
81
|
-
"""
|
|
82
|
-
try:
|
|
83
|
-
query = {"session_id": session_id}
|
|
84
|
-
if user_id:
|
|
85
|
-
query["user_id"] = user_id
|
|
86
|
-
|
|
87
|
-
doc = self.collection.find_one(query)
|
|
88
|
-
if doc:
|
|
89
|
-
# Remove MongoDB _id before converting to AgentSession
|
|
90
|
-
doc.pop("_id", None)
|
|
91
|
-
if self.mode == "agent":
|
|
92
|
-
return AgentSession.from_dict(doc)
|
|
93
|
-
elif self.mode == "team":
|
|
94
|
-
return TeamSession.from_dict(doc)
|
|
95
|
-
elif self.mode == "workflow":
|
|
96
|
-
return WorkflowSession.from_dict(doc)
|
|
97
|
-
elif self.mode == "workflow_v2":
|
|
98
|
-
return WorkflowSessionV2.from_dict(doc)
|
|
99
|
-
return None
|
|
100
|
-
except PyMongoError as e:
|
|
101
|
-
logger.error(f"Error reading session: {e}")
|
|
102
|
-
return None
|
|
103
|
-
|
|
104
|
-
def get_all_session_ids(self, user_id: Optional[str] = None, entity_id: Optional[str] = None) -> List[str]:
|
|
105
|
-
"""Get all session IDs matching the criteria
|
|
106
|
-
Args:
|
|
107
|
-
user_id: ID of the user to read
|
|
108
|
-
entity_id: ID of the entity to read
|
|
109
|
-
Returns:
|
|
110
|
-
List[str]: List of session IDs
|
|
111
|
-
"""
|
|
112
|
-
try:
|
|
113
|
-
query = {}
|
|
114
|
-
if user_id is not None:
|
|
115
|
-
query["user_id"] = user_id
|
|
116
|
-
if entity_id is not None:
|
|
117
|
-
if self.mode == "agent":
|
|
118
|
-
query["agent_id"] = entity_id
|
|
119
|
-
elif self.mode == "team":
|
|
120
|
-
query["team_id"] = entity_id
|
|
121
|
-
elif self.mode == "workflow":
|
|
122
|
-
query["workflow_id"] = entity_id
|
|
123
|
-
elif self.mode == "workflow_v2":
|
|
124
|
-
query["workflow_id"] = entity_id
|
|
125
|
-
cursor = self.collection.find(query, {"session_id": 1}).sort("created_at", -1)
|
|
126
|
-
|
|
127
|
-
return [str(doc["session_id"]) for doc in cursor]
|
|
128
|
-
except PyMongoError as e:
|
|
129
|
-
logger.error(f"Error getting session IDs: {e}")
|
|
130
|
-
return []
|
|
131
|
-
|
|
132
|
-
def get_all_sessions(self, user_id: Optional[str] = None, entity_id: Optional[str] = None) -> List[Session]:
|
|
133
|
-
"""Get all sessions matching the criteria
|
|
134
|
-
Args:
|
|
135
|
-
user_id: ID of the user to read
|
|
136
|
-
entity_id: ID of the agent / workflow to read
|
|
137
|
-
Returns:
|
|
138
|
-
List[Session]: List of sessions
|
|
139
|
-
"""
|
|
140
|
-
try:
|
|
141
|
-
query = {}
|
|
142
|
-
if user_id is not None:
|
|
143
|
-
query["user_id"] = user_id
|
|
144
|
-
if entity_id is not None:
|
|
145
|
-
if self.mode == "agent":
|
|
146
|
-
query["agent_id"] = entity_id
|
|
147
|
-
elif self.mode == "team":
|
|
148
|
-
query["team_id"] = entity_id
|
|
149
|
-
elif self.mode == "workflow":
|
|
150
|
-
query["workflow_id"] = entity_id
|
|
151
|
-
elif self.mode == "workflow_v2":
|
|
152
|
-
query["workflow_id"] = entity_id
|
|
153
|
-
cursor = self.collection.find(query).sort("created_at", -1)
|
|
154
|
-
sessions: List[Session] = []
|
|
155
|
-
for doc in cursor:
|
|
156
|
-
# Remove MongoDB _id before converting to AgentSession
|
|
157
|
-
doc.pop("_id", None)
|
|
158
|
-
if self.mode == "agent":
|
|
159
|
-
_agent_session = AgentSession.from_dict(doc)
|
|
160
|
-
if _agent_session is not None:
|
|
161
|
-
sessions.append(_agent_session)
|
|
162
|
-
elif self.mode == "team":
|
|
163
|
-
_team_session = TeamSession.from_dict(doc)
|
|
164
|
-
if _team_session is not None:
|
|
165
|
-
sessions.append(_team_session)
|
|
166
|
-
elif self.mode == "workflow":
|
|
167
|
-
_workflow_session = WorkflowSession.from_dict(doc)
|
|
168
|
-
if _workflow_session is not None:
|
|
169
|
-
sessions.append(_workflow_session)
|
|
170
|
-
return sessions
|
|
171
|
-
except PyMongoError as e:
|
|
172
|
-
logger.error(f"Error getting sessions: {e}")
|
|
173
|
-
return []
|
|
174
|
-
|
|
175
|
-
def get_recent_sessions(
|
|
176
|
-
self,
|
|
177
|
-
user_id: Optional[str] = None,
|
|
178
|
-
entity_id: Optional[str] = None,
|
|
179
|
-
limit: Optional[int] = 2,
|
|
180
|
-
) -> List[Session]:
|
|
181
|
-
"""Get the last N sessions, ordered by created_at descending.
|
|
182
|
-
|
|
183
|
-
Args:
|
|
184
|
-
num_history_sessions: Number of most recent sessions to return
|
|
185
|
-
user_id: Filter by user ID
|
|
186
|
-
entity_id: Filter by entity ID (agent_id, team_id, or workflow_id)
|
|
187
|
-
|
|
188
|
-
Returns:
|
|
189
|
-
List[Session]: List of most recent sessions
|
|
190
|
-
"""
|
|
191
|
-
try:
|
|
192
|
-
# Build the query
|
|
193
|
-
query = {}
|
|
194
|
-
if user_id is not None:
|
|
195
|
-
query["user_id"] = user_id
|
|
196
|
-
if entity_id is not None:
|
|
197
|
-
if self.mode == "agent":
|
|
198
|
-
query["agent_id"] = entity_id
|
|
199
|
-
elif self.mode == "team":
|
|
200
|
-
query["team_id"] = entity_id
|
|
201
|
-
elif self.mode == "workflow":
|
|
202
|
-
query["workflow_id"] = entity_id
|
|
203
|
-
elif self.mode == "workflow_v2":
|
|
204
|
-
query["workflow_id"] = entity_id
|
|
205
|
-
# Execute query with sort and limit
|
|
206
|
-
cursor = self.collection.find(query)
|
|
207
|
-
cursor = cursor.sort("created_at", -1) # Sort by created_at descending
|
|
208
|
-
if limit is not None:
|
|
209
|
-
cursor = cursor.limit(limit)
|
|
210
|
-
|
|
211
|
-
sessions: List[Session] = []
|
|
212
|
-
for doc in cursor:
|
|
213
|
-
# Remove MongoDB _id before converting to Session object
|
|
214
|
-
doc.pop("_id", None)
|
|
215
|
-
session: Optional[Session] = None
|
|
216
|
-
|
|
217
|
-
if self.mode == "agent":
|
|
218
|
-
session = AgentSession.from_dict(doc)
|
|
219
|
-
elif self.mode == "team":
|
|
220
|
-
session = TeamSession.from_dict(doc)
|
|
221
|
-
elif self.mode == "workflow":
|
|
222
|
-
session = WorkflowSession.from_dict(doc)
|
|
223
|
-
elif self.mode == "workflow_v2":
|
|
224
|
-
session = WorkflowSessionV2.from_dict(doc)
|
|
225
|
-
if session is not None:
|
|
226
|
-
sessions.append(session)
|
|
227
|
-
|
|
228
|
-
return sessions
|
|
229
|
-
|
|
230
|
-
except PyMongoError as e:
|
|
231
|
-
logger.error(f"Error getting last {limit} sessions: {e}")
|
|
232
|
-
return []
|
|
233
|
-
|
|
234
|
-
def upsert(self, session: Session, create_and_retry: bool = True) -> Optional[Session]:
|
|
235
|
-
"""Upsert a session
|
|
236
|
-
Args:
|
|
237
|
-
session (Session): The session to upsert
|
|
238
|
-
create_and_retry (bool): Whether to create a new session if the session_id already exists
|
|
239
|
-
Returns:
|
|
240
|
-
Optional[Session]: The upserted session, otherwise None
|
|
241
|
-
"""
|
|
242
|
-
try:
|
|
243
|
-
# Convert session to dict and add timestamps
|
|
244
|
-
session_dict = session.to_dict()
|
|
245
|
-
now = datetime.now(timezone.utc)
|
|
246
|
-
timestamp = int(now.timestamp())
|
|
247
|
-
|
|
248
|
-
# Handle UUID serialization
|
|
249
|
-
if isinstance(session.session_id, UUID):
|
|
250
|
-
session_dict["session_id"] = str(session.session_id)
|
|
251
|
-
|
|
252
|
-
# Add version field for optimistic locking
|
|
253
|
-
if "_version" not in session_dict:
|
|
254
|
-
session_dict["_version"] = 1
|
|
255
|
-
else:
|
|
256
|
-
session_dict["_version"] += 1
|
|
257
|
-
|
|
258
|
-
update_data = {**session_dict, "updated_at": timestamp}
|
|
259
|
-
|
|
260
|
-
# For new documents, set created_at
|
|
261
|
-
query = {"session_id": session_dict["session_id"]}
|
|
262
|
-
|
|
263
|
-
doc = self.collection.find_one(query)
|
|
264
|
-
if not doc:
|
|
265
|
-
update_data["created_at"] = timestamp
|
|
266
|
-
|
|
267
|
-
result = self.collection.update_one(query, {"$set": update_data}, upsert=True)
|
|
268
|
-
|
|
269
|
-
if result.acknowledged:
|
|
270
|
-
return self.read(session_id=session_dict["session_id"])
|
|
271
|
-
return None
|
|
272
|
-
|
|
273
|
-
except PyMongoError as e:
|
|
274
|
-
logger.warning(f"Error upserting session: {e}")
|
|
275
|
-
return None
|
|
276
|
-
|
|
277
|
-
def delete_session(self, session_id: Optional[str] = None) -> None:
|
|
278
|
-
"""Delete an agent session
|
|
279
|
-
Args:
|
|
280
|
-
session_id: ID of the session to delete
|
|
281
|
-
Returns:
|
|
282
|
-
None
|
|
283
|
-
"""
|
|
284
|
-
if session_id is None:
|
|
285
|
-
logger.warning("No session_id provided for deletion")
|
|
286
|
-
return
|
|
287
|
-
|
|
288
|
-
try:
|
|
289
|
-
result = self.collection.delete_one({"session_id": session_id})
|
|
290
|
-
if result.deleted_count == 0:
|
|
291
|
-
log_debug(f"No session found with session_id: {session_id}")
|
|
292
|
-
else:
|
|
293
|
-
log_debug(f"Successfully deleted session with session_id: {session_id}")
|
|
294
|
-
except PyMongoError as e:
|
|
295
|
-
logger.error(f"Error deleting session: {e}")
|
|
296
|
-
|
|
297
|
-
def drop(self) -> None:
|
|
298
|
-
"""Drop the collection
|
|
299
|
-
Returns:
|
|
300
|
-
None
|
|
301
|
-
"""
|
|
302
|
-
try:
|
|
303
|
-
self.collection.drop()
|
|
304
|
-
except PyMongoError as e:
|
|
305
|
-
logger.error(f"Error dropping collection: {e}")
|
|
306
|
-
|
|
307
|
-
def upgrade_schema(self) -> None:
|
|
308
|
-
"""Placeholder for schema upgrades"""
|
|
309
|
-
pass
|
|
310
|
-
|
|
311
|
-
def __deepcopy__(self, memo):
|
|
312
|
-
"""Create a deep copy of the MongoDbStorage instance"""
|
|
313
|
-
from copy import deepcopy
|
|
314
|
-
|
|
315
|
-
# Create a new instance without calling __init__
|
|
316
|
-
cls = self.__class__
|
|
317
|
-
copied_obj = cls.__new__(cls)
|
|
318
|
-
memo[id(self)] = copied_obj
|
|
319
|
-
|
|
320
|
-
# Deep copy attributes
|
|
321
|
-
for k, v in self.__dict__.items():
|
|
322
|
-
if k in {"_client", "db", "collection"}:
|
|
323
|
-
# Reuse MongoDB connections without copying
|
|
324
|
-
setattr(copied_obj, k, v)
|
|
325
|
-
else:
|
|
326
|
-
setattr(copied_obj, k, deepcopy(v, memo))
|
|
327
|
-
|
|
328
|
-
return copied_obj
|