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/memory/v2/schema.py
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
|
-
from datetime import datetime
|
|
3
|
-
from typing import Any, Dict, List, Optional
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
@dataclass
|
|
7
|
-
class UserMemory:
|
|
8
|
-
"""Model for User Memories"""
|
|
9
|
-
|
|
10
|
-
memory: str
|
|
11
|
-
topics: Optional[List[str]] = None
|
|
12
|
-
input: Optional[str] = None
|
|
13
|
-
last_updated: Optional[datetime] = None
|
|
14
|
-
memory_id: Optional[str] = None
|
|
15
|
-
|
|
16
|
-
def to_dict(self) -> Dict[str, Any]:
|
|
17
|
-
_dict = {
|
|
18
|
-
"memory_id": self.memory_id,
|
|
19
|
-
"memory": self.memory,
|
|
20
|
-
"topics": self.topics,
|
|
21
|
-
"last_updated": self.last_updated.isoformat() if self.last_updated else None,
|
|
22
|
-
"input": self.input,
|
|
23
|
-
}
|
|
24
|
-
return {k: v for k, v in _dict.items() if v is not None}
|
|
25
|
-
|
|
26
|
-
@classmethod
|
|
27
|
-
def from_dict(cls, data: Dict[str, Any]) -> "UserMemory":
|
|
28
|
-
last_updated = data.get("last_updated")
|
|
29
|
-
if last_updated:
|
|
30
|
-
data["last_updated"] = datetime.fromisoformat(last_updated)
|
|
31
|
-
return cls(**data)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
@dataclass
|
|
35
|
-
class SessionSummary:
|
|
36
|
-
"""Model for Session Summary."""
|
|
37
|
-
|
|
38
|
-
summary: str
|
|
39
|
-
topics: Optional[List[str]] = None
|
|
40
|
-
last_updated: Optional[datetime] = None
|
|
41
|
-
|
|
42
|
-
def to_dict(self) -> Dict[str, Any]:
|
|
43
|
-
_dict = {
|
|
44
|
-
"summary": self.summary,
|
|
45
|
-
"topics": self.topics,
|
|
46
|
-
"last_updated": self.last_updated.isoformat() if self.last_updated else None,
|
|
47
|
-
}
|
|
48
|
-
return {k: v for k, v in _dict.items() if v is not None}
|
|
49
|
-
|
|
50
|
-
@classmethod
|
|
51
|
-
def from_dict(cls, data: Dict[str, Any]) -> "SessionSummary":
|
|
52
|
-
last_updated = data.get("last_updated")
|
|
53
|
-
if last_updated:
|
|
54
|
-
data["last_updated"] = datetime.fromisoformat(last_updated)
|
|
55
|
-
return cls(**data)
|
agno/memory/v2/summarizer.py
DELETED
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
from copy import deepcopy
|
|
2
|
-
from dataclasses import dataclass
|
|
3
|
-
from textwrap import dedent
|
|
4
|
-
from typing import Any, Dict, List, Optional, Type, Union
|
|
5
|
-
|
|
6
|
-
from pydantic import BaseModel, Field
|
|
7
|
-
|
|
8
|
-
from agno.models.base import Model
|
|
9
|
-
from agno.models.message import Message
|
|
10
|
-
from agno.utils.log import log_debug, log_error, log_info, log_warning
|
|
11
|
-
from agno.utils.prompts import get_json_output_prompt
|
|
12
|
-
from agno.utils.string import parse_response_model_str
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class SessionSummaryResponse(BaseModel):
|
|
16
|
-
"""Model for Session Summary."""
|
|
17
|
-
|
|
18
|
-
summary: str = Field(
|
|
19
|
-
...,
|
|
20
|
-
description="Summary of the session. Be concise and focus on only important information. Do not make anything up.",
|
|
21
|
-
)
|
|
22
|
-
topics: Optional[List[str]] = Field(None, description="Topics discussed in the session.")
|
|
23
|
-
|
|
24
|
-
def to_dict(self) -> Dict[str, Any]:
|
|
25
|
-
return self.model_dump(exclude_none=True)
|
|
26
|
-
|
|
27
|
-
def to_json(self) -> str:
|
|
28
|
-
return self.model_dump_json(exclude_none=True, indent=2)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
@dataclass
|
|
32
|
-
class SessionSummarizer:
|
|
33
|
-
# Model used for summarization
|
|
34
|
-
model: Optional[Model] = None
|
|
35
|
-
|
|
36
|
-
# System message for the summarizer. If not provided, a default prompt will be used.
|
|
37
|
-
system_message: Optional[str] = None
|
|
38
|
-
|
|
39
|
-
# Additional instructions for the summarizer. If not provided, a default prompt will be used.
|
|
40
|
-
additional_instructions: Optional[str] = None
|
|
41
|
-
|
|
42
|
-
# Whether the summarizer has created a summary
|
|
43
|
-
summary_updated: bool = False
|
|
44
|
-
|
|
45
|
-
def __init__(
|
|
46
|
-
self,
|
|
47
|
-
model: Optional[Model] = None,
|
|
48
|
-
system_message: Optional[str] = None,
|
|
49
|
-
additional_instructions: Optional[str] = None,
|
|
50
|
-
):
|
|
51
|
-
self.model = model
|
|
52
|
-
if self.model is not None and isinstance(self.model, str):
|
|
53
|
-
raise ValueError("Model must be a Model object, not a string")
|
|
54
|
-
self.system_message = system_message
|
|
55
|
-
self.additional_instructions = additional_instructions
|
|
56
|
-
|
|
57
|
-
def get_response_format(self, model: Model) -> Union[Dict[str, Any], Type[BaseModel]]:
|
|
58
|
-
if model.supports_native_structured_outputs:
|
|
59
|
-
return SessionSummaryResponse
|
|
60
|
-
|
|
61
|
-
elif model.supports_json_schema_outputs:
|
|
62
|
-
return {
|
|
63
|
-
"type": "json_schema",
|
|
64
|
-
"json_schema": {
|
|
65
|
-
"name": SessionSummaryResponse.__name__,
|
|
66
|
-
"schema": SessionSummaryResponse.model_json_schema(),
|
|
67
|
-
},
|
|
68
|
-
}
|
|
69
|
-
else:
|
|
70
|
-
return {"type": "json_object"}
|
|
71
|
-
|
|
72
|
-
def get_system_message(
|
|
73
|
-
self, conversation: List[Message], response_format: Union[Dict[str, Any], Type[BaseModel]]
|
|
74
|
-
) -> Message:
|
|
75
|
-
if self.system_message is not None:
|
|
76
|
-
return Message(role="system", content=self.system_message)
|
|
77
|
-
|
|
78
|
-
# -*- Return a system message for summarization
|
|
79
|
-
system_prompt = dedent("""\
|
|
80
|
-
Analyze the following conversation between a user and an assistant, and extract the following details:
|
|
81
|
-
- Summary (str): Provide a concise summary of the session, focusing on important information that would be helpful for future interactions.
|
|
82
|
-
- Topics (Optional[List[str]]): List the topics discussed in the session.
|
|
83
|
-
Keep the summary concise and to the point. Only include relevant information.
|
|
84
|
-
|
|
85
|
-
<conversation>
|
|
86
|
-
""")
|
|
87
|
-
conversation_messages = []
|
|
88
|
-
for message in conversation:
|
|
89
|
-
if message.role == "user":
|
|
90
|
-
conversation_messages.append(f"User: {message.content}")
|
|
91
|
-
elif message.role in ["assistant", "model"]:
|
|
92
|
-
conversation_messages.append(f"Assistant: {message.content}\n")
|
|
93
|
-
system_prompt += "\n".join(conversation_messages)
|
|
94
|
-
system_prompt += "</conversation>"
|
|
95
|
-
|
|
96
|
-
if self.additional_instructions:
|
|
97
|
-
system_prompt += "\n" + self.additional_instructions
|
|
98
|
-
|
|
99
|
-
if response_format == {"type": "json_object"}:
|
|
100
|
-
system_prompt += "\n" + get_json_output_prompt(SessionSummaryResponse) # type: ignore
|
|
101
|
-
|
|
102
|
-
return Message(role="system", content=system_prompt)
|
|
103
|
-
|
|
104
|
-
def run(
|
|
105
|
-
self,
|
|
106
|
-
conversation: List[Message],
|
|
107
|
-
) -> Optional[SessionSummaryResponse]:
|
|
108
|
-
if self.model is None:
|
|
109
|
-
log_error("No model provided for summary_manager")
|
|
110
|
-
return None
|
|
111
|
-
|
|
112
|
-
log_debug("SessionSummarizer Start", center=True)
|
|
113
|
-
|
|
114
|
-
if conversation is None or len(conversation) == 0:
|
|
115
|
-
log_info("No conversation provided for summarization.")
|
|
116
|
-
return None
|
|
117
|
-
|
|
118
|
-
model_copy = deepcopy(self.model)
|
|
119
|
-
response_format = self.get_response_format(model_copy)
|
|
120
|
-
|
|
121
|
-
# Prepare the List of messages to send to the Model
|
|
122
|
-
messages_for_model: List[Message] = [
|
|
123
|
-
self.get_system_message(conversation, response_format=response_format),
|
|
124
|
-
# For models that require a non-system message
|
|
125
|
-
Message(role="user", content="Provide the summary of the conversation."),
|
|
126
|
-
]
|
|
127
|
-
|
|
128
|
-
# Generate a response from the Model (includes running function calls)
|
|
129
|
-
response = model_copy.response(messages=messages_for_model, response_format=response_format)
|
|
130
|
-
|
|
131
|
-
if response.content is not None:
|
|
132
|
-
self.summary_updated = True
|
|
133
|
-
|
|
134
|
-
log_debug("SessionSummarizer End", center=True)
|
|
135
|
-
|
|
136
|
-
# If the model natively supports structured outputs, the parsed value is already in the structured format
|
|
137
|
-
if (
|
|
138
|
-
model_copy.supports_native_structured_outputs
|
|
139
|
-
and response.parsed is not None
|
|
140
|
-
and isinstance(response.parsed, SessionSummaryResponse)
|
|
141
|
-
):
|
|
142
|
-
return response.parsed
|
|
143
|
-
|
|
144
|
-
# Otherwise convert the response to the structured format
|
|
145
|
-
if isinstance(response.content, str):
|
|
146
|
-
try:
|
|
147
|
-
session_summary: Optional[SessionSummaryResponse] = parse_response_model_str( # type: ignore
|
|
148
|
-
response.content, SessionSummaryResponse
|
|
149
|
-
)
|
|
150
|
-
|
|
151
|
-
# Update RunResponse
|
|
152
|
-
if session_summary is not None:
|
|
153
|
-
return session_summary
|
|
154
|
-
else:
|
|
155
|
-
log_warning("Failed to convert session_summary response to SessionSummaryResponse")
|
|
156
|
-
except Exception as e:
|
|
157
|
-
log_warning(f"Failed to convert session_summary response to SessionSummaryResponse: {e}")
|
|
158
|
-
|
|
159
|
-
return None
|
|
160
|
-
|
|
161
|
-
async def arun(
|
|
162
|
-
self,
|
|
163
|
-
conversation: List[Message],
|
|
164
|
-
) -> Optional[SessionSummaryResponse]:
|
|
165
|
-
if self.model is None:
|
|
166
|
-
log_error("No model provided for summary_manager")
|
|
167
|
-
return None
|
|
168
|
-
|
|
169
|
-
log_debug("SessionSummarizer Start", center=True)
|
|
170
|
-
|
|
171
|
-
if conversation is None or len(conversation) == 0:
|
|
172
|
-
log_info("No conversation provided for summarization.")
|
|
173
|
-
return None
|
|
174
|
-
|
|
175
|
-
model_copy = deepcopy(self.model)
|
|
176
|
-
response_format = self.get_response_format(model_copy)
|
|
177
|
-
|
|
178
|
-
# Prepare the List of messages to send to the Model
|
|
179
|
-
messages_for_model: List[Message] = [
|
|
180
|
-
self.get_system_message(conversation, response_format=response_format),
|
|
181
|
-
# For models that require a non-system message
|
|
182
|
-
Message(role="user", content="Provide the summary of the conversation."),
|
|
183
|
-
]
|
|
184
|
-
|
|
185
|
-
# Generate a response from the Model (includes running function calls)
|
|
186
|
-
response = await model_copy.aresponse(messages=messages_for_model, response_format=response_format)
|
|
187
|
-
|
|
188
|
-
if response.content is not None:
|
|
189
|
-
self.summary_updated = True
|
|
190
|
-
|
|
191
|
-
log_debug("SessionSummarizer End", center=True)
|
|
192
|
-
|
|
193
|
-
# If the model natively supports structured outputs, the parsed value is already in the structured format
|
|
194
|
-
if (
|
|
195
|
-
model_copy.supports_native_structured_outputs
|
|
196
|
-
and response.parsed is not None
|
|
197
|
-
and isinstance(response.parsed, SessionSummaryResponse)
|
|
198
|
-
):
|
|
199
|
-
return response.parsed
|
|
200
|
-
|
|
201
|
-
# Otherwise convert the response to the structured format
|
|
202
|
-
if isinstance(response.content, str):
|
|
203
|
-
try:
|
|
204
|
-
session_summary: Optional[SessionSummaryResponse] = parse_response_model_str( # type: ignore
|
|
205
|
-
response.content, SessionSummaryResponse
|
|
206
|
-
)
|
|
207
|
-
|
|
208
|
-
# Update RunResponse
|
|
209
|
-
if session_summary is not None:
|
|
210
|
-
return session_summary
|
|
211
|
-
else:
|
|
212
|
-
log_warning("Failed to convert session_summary response to SessionSummaryResponse")
|
|
213
|
-
except Exception as e:
|
|
214
|
-
log_warning(f"Failed to convert session_summary response to SessionSummaryResponse: {e}")
|
|
215
|
-
return None
|
agno/memory/workflow.py
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
from typing import Any, Dict, List, Optional
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel, ConfigDict
|
|
4
|
-
|
|
5
|
-
from agno.run.response import RunResponse
|
|
6
|
-
from agno.utils.log import log_debug
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class WorkflowRun(BaseModel):
|
|
10
|
-
input: Optional[Dict[str, Any]] = None
|
|
11
|
-
response: Optional[RunResponse] = None
|
|
12
|
-
|
|
13
|
-
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class WorkflowMemory(BaseModel):
|
|
17
|
-
runs: List[WorkflowRun] = []
|
|
18
|
-
|
|
19
|
-
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
20
|
-
|
|
21
|
-
def to_dict(self) -> Dict[str, Any]:
|
|
22
|
-
return self.model_dump(exclude_none=True)
|
|
23
|
-
|
|
24
|
-
def add_run(self, workflow_run: WorkflowRun) -> None:
|
|
25
|
-
"""Adds a WorkflowRun to the runs list."""
|
|
26
|
-
self.runs.append(workflow_run)
|
|
27
|
-
log_debug("Added WorkflowRun to WorkflowMemory")
|
|
28
|
-
|
|
29
|
-
def clear(self) -> None:
|
|
30
|
-
"""Clear the WorkflowMemory"""
|
|
31
|
-
|
|
32
|
-
self.runs = []
|
|
33
|
-
|
|
34
|
-
def deep_copy(self, *, update: Optional[Dict[str, Any]] = None) -> "WorkflowMemory":
|
|
35
|
-
new_memory = self.model_copy(deep=True, update=update)
|
|
36
|
-
# clear the new memory to remove any references to the old memory
|
|
37
|
-
new_memory.clear()
|
|
38
|
-
return new_memory
|