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
|
@@ -11,8 +11,8 @@ except ImportError as e:
|
|
|
11
11
|
msg = "The `surrealdb` package is not installed. Please install it via `pip install surrealdb`."
|
|
12
12
|
raise ImportError(msg) from e
|
|
13
13
|
|
|
14
|
-
from agno.document import Document
|
|
15
|
-
from agno.embedder import Embedder
|
|
14
|
+
from agno.knowledge.document import Document
|
|
15
|
+
from agno.knowledge.embedder import Embedder
|
|
16
16
|
from agno.utils.log import log_debug, log_error, log_info
|
|
17
17
|
from agno.vectordb.base import VectorDb
|
|
18
18
|
from agno.vectordb.distance import Distance
|
|
@@ -48,6 +48,32 @@ class SurrealDb(VectorDb):
|
|
|
48
48
|
LIMIT 1
|
|
49
49
|
"""
|
|
50
50
|
|
|
51
|
+
CONTENT_HASH_EXISTS_QUERY: Final[str] = """
|
|
52
|
+
SELECT * FROM {collection}
|
|
53
|
+
WHERE meta_data.content_hash = $content_hash
|
|
54
|
+
LIMIT 1
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
DELETE_BY_ID_QUERY: Final[str] = """
|
|
58
|
+
DELETE FROM {collection}
|
|
59
|
+
WHERE id = $id
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
DELETE_BY_NAME_QUERY: Final[str] = """
|
|
63
|
+
DELETE FROM {collection}
|
|
64
|
+
WHERE meta_data.name = $name
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
DELETE_BY_METADATA_QUERY: Final[str] = """
|
|
68
|
+
DELETE FROM {collection}
|
|
69
|
+
WHERE {conditions}
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
DELETE_BY_CONTENT_ID_QUERY: Final[str] = """
|
|
73
|
+
DELETE FROM {collection}
|
|
74
|
+
WHERE content_id = $content_id
|
|
75
|
+
"""
|
|
76
|
+
|
|
51
77
|
UPSERT_QUERY: Final[str] = """
|
|
52
78
|
UPSERT {thing}
|
|
53
79
|
SET content = $content,
|
|
@@ -98,7 +124,7 @@ class SurrealDb(VectorDb):
|
|
|
98
124
|
"""
|
|
99
125
|
# Embedder for embedding the document contents
|
|
100
126
|
if embedder is None:
|
|
101
|
-
from agno.embedder.openai import OpenAIEmbedder
|
|
127
|
+
from agno.knowledge.embedder.openai import OpenAIEmbedder
|
|
102
128
|
|
|
103
129
|
embedder = OpenAIEmbedder()
|
|
104
130
|
log_info("Embedder not provided, using OpenAIEmbedder as default.")
|
|
@@ -213,10 +239,41 @@ class SurrealDb(VectorDb):
|
|
|
213
239
|
result = self.client.query(self.NAME_EXISTS_QUERY.format(collection=self.collection), {"name": name})
|
|
214
240
|
return bool(self._extract_result(result))
|
|
215
241
|
|
|
216
|
-
def
|
|
242
|
+
def id_exists(self, id: str) -> bool:
|
|
243
|
+
"""Check if a document exists by its ID.
|
|
244
|
+
|
|
245
|
+
Args:
|
|
246
|
+
id: The ID of the document to check.
|
|
247
|
+
|
|
248
|
+
Returns:
|
|
249
|
+
True if the document exists, False otherwise.
|
|
250
|
+
|
|
251
|
+
"""
|
|
252
|
+
log_debug(f"Checking if document exists by ID: {id}")
|
|
253
|
+
result = self.client.query(self.ID_EXISTS_QUERY.format(collection=self.collection), {"id": id})
|
|
254
|
+
return bool(self._extract_result(result))
|
|
255
|
+
|
|
256
|
+
def content_hash_exists(self, content_hash: str) -> bool:
|
|
257
|
+
"""Check if a document exists by its content hash.
|
|
258
|
+
|
|
259
|
+
Args:
|
|
260
|
+
content_hash: The content hash of the document to check.
|
|
261
|
+
|
|
262
|
+
Returns:
|
|
263
|
+
True if the document exists, False otherwise.
|
|
264
|
+
|
|
265
|
+
"""
|
|
266
|
+
log_debug(f"Checking if document exists by content hash: {content_hash}")
|
|
267
|
+
result = self.client.query(
|
|
268
|
+
self.CONTENT_HASH_EXISTS_QUERY.format(collection=self.collection), {"content_hash": content_hash}
|
|
269
|
+
)
|
|
270
|
+
return bool(self._extract_result(result))
|
|
271
|
+
|
|
272
|
+
def insert(self, content_hash: str, documents: List[Document], filters: Optional[Dict[str, Any]] = None) -> None:
|
|
217
273
|
"""Insert documents into the vector store.
|
|
218
274
|
|
|
219
275
|
Args:
|
|
276
|
+
content_hash: The content hash for the documents.
|
|
220
277
|
documents: A list of documents to insert.
|
|
221
278
|
filters: A dictionary of filters to apply to the query.
|
|
222
279
|
|
|
@@ -224,15 +281,17 @@ class SurrealDb(VectorDb):
|
|
|
224
281
|
for doc in documents:
|
|
225
282
|
doc.embed(embedder=self.embedder)
|
|
226
283
|
meta_data: Dict[str, Any] = doc.meta_data if isinstance(doc.meta_data, dict) else {}
|
|
284
|
+
meta_data["content_hash"] = content_hash
|
|
227
285
|
data: Dict[str, Any] = {"content": doc.content, "embedding": doc.embedding, "meta_data": meta_data}
|
|
228
286
|
if filters:
|
|
229
287
|
data["meta_data"].update(filters)
|
|
230
288
|
self.client.create(self.collection, data)
|
|
231
289
|
|
|
232
|
-
def upsert(self, documents: List[Document], filters: Optional[Dict[str, Any]] = None) -> None:
|
|
290
|
+
def upsert(self, content_hash: str, documents: List[Document], filters: Optional[Dict[str, Any]] = None) -> None:
|
|
233
291
|
"""Upsert documents into the vector store.
|
|
234
292
|
|
|
235
293
|
Args:
|
|
294
|
+
content_hash: The content hash for the documents.
|
|
236
295
|
documents: A list of documents to upsert.
|
|
237
296
|
filters: A dictionary of filters to apply to the query.
|
|
238
297
|
|
|
@@ -240,6 +299,7 @@ class SurrealDb(VectorDb):
|
|
|
240
299
|
for doc in documents:
|
|
241
300
|
doc.embed(embedder=self.embedder)
|
|
242
301
|
meta_data: Dict[str, Any] = doc.meta_data if isinstance(doc.meta_data, dict) else {}
|
|
302
|
+
meta_data["content_hash"] = content_hash
|
|
243
303
|
data: Dict[str, Any] = {"content": doc.content, "embedding": doc.embedding, "meta_data": meta_data}
|
|
244
304
|
if filters:
|
|
245
305
|
data["meta_data"].update(filters)
|
|
@@ -321,6 +381,67 @@ class SurrealDb(VectorDb):
|
|
|
321
381
|
self.client.query(self.DELETE_ALL_QUERY.format(collection=self.collection))
|
|
322
382
|
return True
|
|
323
383
|
|
|
384
|
+
def delete_by_id(self, id: str) -> bool:
|
|
385
|
+
"""Delete a document by its ID.
|
|
386
|
+
|
|
387
|
+
Args:
|
|
388
|
+
id: The ID of the document to delete.
|
|
389
|
+
|
|
390
|
+
Returns:
|
|
391
|
+
True if the document was deleted, False otherwise.
|
|
392
|
+
|
|
393
|
+
"""
|
|
394
|
+
log_debug(f"Deleting document by ID: {id}")
|
|
395
|
+
result = self.client.query(self.DELETE_BY_ID_QUERY.format(collection=self.collection), {"id": id})
|
|
396
|
+
return bool(result)
|
|
397
|
+
|
|
398
|
+
def delete_by_name(self, name: str) -> bool:
|
|
399
|
+
"""Delete documents by their name.
|
|
400
|
+
|
|
401
|
+
Args:
|
|
402
|
+
name: The name of the documents to delete.
|
|
403
|
+
|
|
404
|
+
Returns:
|
|
405
|
+
True if documents were deleted, False otherwise.
|
|
406
|
+
|
|
407
|
+
"""
|
|
408
|
+
log_debug(f"Deleting documents by name: {name}")
|
|
409
|
+
result = self.client.query(self.DELETE_BY_NAME_QUERY.format(collection=self.collection), {"name": name})
|
|
410
|
+
return bool(result)
|
|
411
|
+
|
|
412
|
+
def delete_by_metadata(self, metadata: Dict[str, Any]) -> bool:
|
|
413
|
+
"""Delete documents by their metadata.
|
|
414
|
+
|
|
415
|
+
Args:
|
|
416
|
+
metadata: The metadata to match for deletion.
|
|
417
|
+
|
|
418
|
+
Returns:
|
|
419
|
+
True if documents were deleted, False otherwise.
|
|
420
|
+
|
|
421
|
+
"""
|
|
422
|
+
log_debug(f"Deleting documents by metadata: {metadata}")
|
|
423
|
+
conditions = [f"meta_data.{key} = ${key}" for key in metadata.keys()]
|
|
424
|
+
conditions_str = " AND ".join(conditions)
|
|
425
|
+
query = self.DELETE_BY_METADATA_QUERY.format(collection=self.collection, conditions=conditions_str)
|
|
426
|
+
result = self.client.query(query, metadata)
|
|
427
|
+
return bool(result)
|
|
428
|
+
|
|
429
|
+
def delete_by_content_id(self, content_id: str) -> bool:
|
|
430
|
+
"""Delete documents by their content ID.
|
|
431
|
+
|
|
432
|
+
Args:
|
|
433
|
+
content_id: The content ID of the documents to delete.
|
|
434
|
+
|
|
435
|
+
Returns:
|
|
436
|
+
True if documents were deleted, False otherwise.
|
|
437
|
+
|
|
438
|
+
"""
|
|
439
|
+
log_debug(f"Deleting documents by content ID: {content_id}")
|
|
440
|
+
result = self.client.query(
|
|
441
|
+
self.DELETE_BY_CONTENT_ID_QUERY.format(collection=self.collection), {"content_id": content_id}
|
|
442
|
+
)
|
|
443
|
+
return bool(result)
|
|
444
|
+
|
|
324
445
|
@staticmethod
|
|
325
446
|
def _extract_result(query_result: Union[List[Dict[str, Any]], Dict[str, Any]]) -> Union[List[Any], Dict[str, Any]]:
|
|
326
447
|
"""Extract the actual result from SurrealDB query response.
|
|
@@ -380,10 +501,13 @@ class SurrealDb(VectorDb):
|
|
|
380
501
|
)
|
|
381
502
|
return bool(self._extract_result(response))
|
|
382
503
|
|
|
383
|
-
async def async_insert(
|
|
504
|
+
async def async_insert(
|
|
505
|
+
self, content_hash: str, documents: List[Document], filters: Optional[Dict[str, Any]] = None
|
|
506
|
+
) -> None:
|
|
384
507
|
"""Insert documents into the vector store asynchronously.
|
|
385
508
|
|
|
386
509
|
Args:
|
|
510
|
+
content_hash: The content hash for the documents.
|
|
387
511
|
documents: A list of documents to insert.
|
|
388
512
|
filters: A dictionary of filters to apply to the query.
|
|
389
513
|
|
|
@@ -391,16 +515,20 @@ class SurrealDb(VectorDb):
|
|
|
391
515
|
for doc in documents:
|
|
392
516
|
doc.embed(embedder=self.embedder)
|
|
393
517
|
meta_data: Dict[str, Any] = doc.meta_data if isinstance(doc.meta_data, dict) else {}
|
|
518
|
+
meta_data["content_hash"] = content_hash
|
|
394
519
|
data: Dict[str, Any] = {"content": doc.content, "embedding": doc.embedding, "meta_data": meta_data}
|
|
395
520
|
if filters:
|
|
396
521
|
data["meta_data"].update(filters)
|
|
397
522
|
log_debug(f"Inserting document asynchronously: {doc.name} ({doc.meta_data})")
|
|
398
523
|
await self.async_client.create(self.collection, data)
|
|
399
524
|
|
|
400
|
-
async def async_upsert(
|
|
525
|
+
async def async_upsert(
|
|
526
|
+
self, content_hash: str, documents: List[Document], filters: Optional[Dict[str, Any]] = None
|
|
527
|
+
) -> None:
|
|
401
528
|
"""Upsert documents into the vector store asynchronously.
|
|
402
529
|
|
|
403
530
|
Args:
|
|
531
|
+
content_hash: The content hash for the documents.
|
|
404
532
|
documents: A list of documents to upsert.
|
|
405
533
|
filters: A dictionary of filters to apply to the query.
|
|
406
534
|
|
|
@@ -408,6 +536,7 @@ class SurrealDb(VectorDb):
|
|
|
408
536
|
for doc in documents:
|
|
409
537
|
doc.embed(embedder=self.embedder)
|
|
410
538
|
meta_data: Dict[str, Any] = doc.meta_data if isinstance(doc.meta_data, dict) else {}
|
|
539
|
+
meta_data["content_hash"] = content_hash
|
|
411
540
|
data: Dict[str, Any] = {"content": doc.content, "embedding": doc.embedding, "meta_data": meta_data}
|
|
412
541
|
if filters:
|
|
413
542
|
data["meta_data"].update(filters)
|
|
@@ -491,3 +620,54 @@ class SurrealDb(VectorDb):
|
|
|
491
620
|
|
|
492
621
|
"""
|
|
493
622
|
return True
|
|
623
|
+
|
|
624
|
+
def update_metadata(self, content_id: str, metadata: Dict[str, Any]) -> None:
|
|
625
|
+
"""
|
|
626
|
+
Update the metadata for documents with the given content_id.
|
|
627
|
+
|
|
628
|
+
Args:
|
|
629
|
+
content_id (str): The content ID to update
|
|
630
|
+
metadata (Dict[str, Any]): The metadata to update
|
|
631
|
+
"""
|
|
632
|
+
try:
|
|
633
|
+
# Query for documents with the given content_id
|
|
634
|
+
query = f"SELECT * FROM {self.collection} WHERE content_id = $content_id"
|
|
635
|
+
result = self.client.query(query, {"content_id": content_id})
|
|
636
|
+
|
|
637
|
+
if not result or not result[0].get("result"):
|
|
638
|
+
log_debug(f"No documents found with content_id: {content_id}")
|
|
639
|
+
return
|
|
640
|
+
|
|
641
|
+
documents = result[0]["result"]
|
|
642
|
+
updated_count = 0
|
|
643
|
+
|
|
644
|
+
# Update each matching document
|
|
645
|
+
for doc in documents:
|
|
646
|
+
doc_id = doc["id"]
|
|
647
|
+
current_metadata = doc.get("meta_data", {})
|
|
648
|
+
current_filters = doc.get("filters", {})
|
|
649
|
+
|
|
650
|
+
# Merge existing metadata with new metadata
|
|
651
|
+
if isinstance(current_metadata, dict):
|
|
652
|
+
updated_metadata = current_metadata.copy()
|
|
653
|
+
updated_metadata.update(metadata)
|
|
654
|
+
else:
|
|
655
|
+
updated_metadata = metadata
|
|
656
|
+
|
|
657
|
+
# Merge existing filters with new metadata
|
|
658
|
+
if isinstance(current_filters, dict):
|
|
659
|
+
updated_filters = current_filters.copy()
|
|
660
|
+
updated_filters.update(metadata)
|
|
661
|
+
else:
|
|
662
|
+
updated_filters = metadata
|
|
663
|
+
|
|
664
|
+
# Update the document
|
|
665
|
+
update_query = f"UPDATE {doc_id} SET meta_data = $metadata, filters = $filters"
|
|
666
|
+
self.client.query(update_query, {"metadata": updated_metadata, "filters": updated_filters})
|
|
667
|
+
updated_count += 1
|
|
668
|
+
|
|
669
|
+
log_debug(f"Updated metadata for {updated_count} documents with content_id: {content_id}")
|
|
670
|
+
|
|
671
|
+
except Exception as e:
|
|
672
|
+
log_error(f"Error updating metadata for content_id '{content_id}': {e}")
|
|
673
|
+
raise
|