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/tools/replicate.py
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import os
|
|
2
1
|
from os import getenv
|
|
3
|
-
from
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Any, Iterable, Iterator, List, Optional, Tuple, Union
|
|
4
4
|
from urllib.parse import urlparse
|
|
5
5
|
from uuid import uuid4
|
|
6
6
|
|
|
7
7
|
from agno.agent import Agent
|
|
8
|
-
from agno.media import
|
|
8
|
+
from agno.media import Image, Video
|
|
9
9
|
from agno.team.team import Team
|
|
10
10
|
from agno.tools import Toolkit
|
|
11
|
+
from agno.tools.function import ToolResult
|
|
11
12
|
from agno.utils.log import logger
|
|
12
13
|
|
|
13
14
|
try:
|
|
@@ -22,83 +23,95 @@ class ReplicateTools(Toolkit):
|
|
|
22
23
|
self,
|
|
23
24
|
api_key: Optional[str] = None,
|
|
24
25
|
model: str = "minimax/video-01",
|
|
26
|
+
enable_generate_media: bool = True,
|
|
27
|
+
all: bool = False,
|
|
25
28
|
**kwargs,
|
|
26
29
|
):
|
|
27
|
-
self.api_key = api_key or getenv("
|
|
30
|
+
self.api_key = api_key or getenv("REPLICATE_API_KEY")
|
|
28
31
|
if not self.api_key:
|
|
29
|
-
logger.error("
|
|
32
|
+
logger.error("REPLICATE_API_KEY not set. Please set the REPLICATE_API_KEY environment variable.")
|
|
30
33
|
self.model = model
|
|
31
34
|
|
|
32
35
|
tools: List[Any] = []
|
|
33
|
-
|
|
36
|
+
if all or enable_generate_media:
|
|
37
|
+
tools.append(self.generate_media)
|
|
34
38
|
|
|
35
39
|
super().__init__(name="replicate_toolkit", tools=tools, **kwargs)
|
|
36
40
|
|
|
37
|
-
def generate_media(self, agent: Union[Agent, Team], prompt: str) ->
|
|
41
|
+
def generate_media(self, agent: Union[Agent, Team], prompt: str) -> ToolResult:
|
|
38
42
|
"""
|
|
39
43
|
Use this function to generate an image or a video using a replicate model.
|
|
40
44
|
Args:
|
|
41
45
|
prompt (str): A text description of the content.
|
|
42
46
|
Returns:
|
|
43
|
-
|
|
47
|
+
ToolResult: A ToolResult containing the generated media or error message.
|
|
44
48
|
"""
|
|
45
49
|
if not self.api_key:
|
|
46
50
|
logger.error("API key is not set. Please provide a valid API key.")
|
|
47
|
-
return "API key is not set."
|
|
51
|
+
return ToolResult(content="API key is not set.")
|
|
48
52
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
outputs
|
|
52
|
-
|
|
53
|
-
outputs
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
try:
|
|
54
|
+
outputs = replicate.run(ref=self.model, input={"prompt": prompt})
|
|
55
|
+
if isinstance(outputs, FileOutput):
|
|
56
|
+
outputs = [outputs]
|
|
57
|
+
elif isinstance(outputs, (Iterable, Iterator)) and not isinstance(outputs, str):
|
|
58
|
+
outputs = list(outputs)
|
|
59
|
+
else:
|
|
60
|
+
logger.error(f"Unexpected output type: {type(outputs)}")
|
|
61
|
+
return ToolResult(content=f"Unexpected output type: {type(outputs)}")
|
|
62
|
+
|
|
63
|
+
images = []
|
|
64
|
+
videos = []
|
|
65
|
+
results = []
|
|
57
66
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return f"Unexpected output type: {type(output)}"
|
|
67
|
+
for output in outputs:
|
|
68
|
+
if not isinstance(output, FileOutput):
|
|
69
|
+
logger.error(f"Unexpected output type: {type(output)}")
|
|
70
|
+
return ToolResult(content=f"Unexpected output type: {type(output)}")
|
|
63
71
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return "\n".join(results)
|
|
72
|
+
result_msg, media_artifact = self._parse_output(output)
|
|
73
|
+
results.append(result_msg)
|
|
67
74
|
|
|
68
|
-
|
|
75
|
+
if isinstance(media_artifact, Image):
|
|
76
|
+
images.append(media_artifact)
|
|
77
|
+
elif isinstance(media_artifact, Video):
|
|
78
|
+
videos.append(media_artifact)
|
|
79
|
+
|
|
80
|
+
content = "\n".join(results)
|
|
81
|
+
return ToolResult(
|
|
82
|
+
content=content,
|
|
83
|
+
images=images if images else None,
|
|
84
|
+
videos=videos if videos else None,
|
|
85
|
+
)
|
|
86
|
+
except Exception as e:
|
|
87
|
+
logger.error(f"Failed to generate media: {e}")
|
|
88
|
+
return ToolResult(content=f"Error: {e}")
|
|
89
|
+
|
|
90
|
+
def _parse_output(self, output: FileOutput) -> Tuple[str, Union[Image, Video]]:
|
|
69
91
|
"""
|
|
70
92
|
Parse the outputs from the replicate model.
|
|
71
93
|
"""
|
|
72
94
|
# Parse the URL to extract the file extension
|
|
73
95
|
parsed_url = urlparse(output.url)
|
|
74
96
|
path = parsed_url.path
|
|
75
|
-
|
|
76
|
-
ext = ext.lower()
|
|
97
|
+
ext = Path(path).suffix.lower()
|
|
77
98
|
|
|
78
99
|
# Define supported extensions
|
|
79
100
|
image_extensions = {".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".webp"}
|
|
80
101
|
video_extensions = {".mp4", ".mov", ".avi", ".mkv", ".flv", ".wmv", ".webm"}
|
|
81
102
|
|
|
82
103
|
media_id = str(uuid4())
|
|
104
|
+
artifact: Union[Image, Video]
|
|
105
|
+
media_type: str
|
|
83
106
|
|
|
84
107
|
if ext in image_extensions:
|
|
85
|
-
|
|
86
|
-
ImageArtifact(
|
|
87
|
-
id=media_id,
|
|
88
|
-
url=output.url,
|
|
89
|
-
)
|
|
90
|
-
)
|
|
108
|
+
artifact = Image(id=media_id, url=output.url)
|
|
91
109
|
media_type = "image"
|
|
92
110
|
elif ext in video_extensions:
|
|
93
|
-
|
|
94
|
-
VideoArtifact(
|
|
95
|
-
id=media_id,
|
|
96
|
-
url=output.url,
|
|
97
|
-
)
|
|
98
|
-
)
|
|
111
|
+
artifact = Video(id=media_id, url=output.url)
|
|
99
112
|
media_type = "video"
|
|
100
113
|
else:
|
|
101
114
|
logger.error(f"Unsupported media type with extension '{ext}' for URL: {output.url}")
|
|
102
|
-
|
|
115
|
+
raise ValueError(f"Unsupported media type with extension '{ext}'.")
|
|
103
116
|
|
|
104
|
-
return f"{media_type.capitalize()} generated successfully at {output.url}"
|
|
117
|
+
return f"{media_type.capitalize()} generated successfully at {output.url}", artifact
|
agno/tools/resend.py
CHANGED
|
@@ -15,6 +15,8 @@ class ResendTools(Toolkit):
|
|
|
15
15
|
self,
|
|
16
16
|
api_key: Optional[str] = None,
|
|
17
17
|
from_email: Optional[str] = None,
|
|
18
|
+
enable_send_email: bool = True,
|
|
19
|
+
all: bool = False,
|
|
18
20
|
**kwargs,
|
|
19
21
|
):
|
|
20
22
|
self.from_email = from_email
|
|
@@ -23,7 +25,8 @@ class ResendTools(Toolkit):
|
|
|
23
25
|
logger.error("No Resend API key provided")
|
|
24
26
|
|
|
25
27
|
tools: List[Any] = []
|
|
26
|
-
|
|
28
|
+
if all or enable_send_email:
|
|
29
|
+
tools.append(self.send_email)
|
|
27
30
|
|
|
28
31
|
super().__init__(name="resend_tools", tools=tools, **kwargs)
|
|
29
32
|
|
agno/tools/scrapegraph.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import
|
|
2
|
+
from os import getenv
|
|
3
3
|
from typing import Any, List, Optional
|
|
4
4
|
|
|
5
5
|
from agno.tools import Toolkit
|
|
@@ -18,31 +18,32 @@ class ScrapeGraphTools(Toolkit):
|
|
|
18
18
|
def __init__(
|
|
19
19
|
self,
|
|
20
20
|
api_key: Optional[str] = None,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
enable_smartscraper: bool = True,
|
|
22
|
+
enable_markdownify: bool = False,
|
|
23
|
+
enable_crawl: bool = False,
|
|
24
|
+
enable_searchscraper: bool = False,
|
|
25
|
+
enable_agentic_crawler: bool = False,
|
|
26
|
+
all: bool = False,
|
|
26
27
|
**kwargs,
|
|
27
28
|
):
|
|
28
|
-
self.api_key: Optional[str] = api_key or
|
|
29
|
+
self.api_key: Optional[str] = api_key or getenv("SGAI_API_KEY")
|
|
29
30
|
self.client = Client(api_key=self.api_key)
|
|
30
31
|
|
|
31
32
|
# Start with smartscraper by default
|
|
32
33
|
# Only enable markdownify if smartscraper is False
|
|
33
|
-
if not
|
|
34
|
-
|
|
34
|
+
if not enable_smartscraper and not all:
|
|
35
|
+
enable_markdownify = True
|
|
35
36
|
|
|
36
37
|
tools: List[Any] = []
|
|
37
|
-
if
|
|
38
|
+
if enable_smartscraper or all:
|
|
38
39
|
tools.append(self.smartscraper)
|
|
39
|
-
if
|
|
40
|
+
if enable_markdownify or all:
|
|
40
41
|
tools.append(self.markdownify)
|
|
41
|
-
if
|
|
42
|
+
if enable_crawl or all:
|
|
42
43
|
tools.append(self.crawl)
|
|
43
|
-
if
|
|
44
|
+
if enable_searchscraper or all:
|
|
44
45
|
tools.append(self.searchscraper)
|
|
45
|
-
if
|
|
46
|
+
if enable_agentic_crawler or all:
|
|
46
47
|
tools.append(self.agentic_crawler)
|
|
47
48
|
|
|
48
49
|
super().__init__(name="scrapegraph_tools", tools=tools, **kwargs)
|
agno/tools/searxng.py
CHANGED
|
@@ -14,35 +14,22 @@ class Searxng(Toolkit):
|
|
|
14
14
|
host: str,
|
|
15
15
|
engines: List[str] = [],
|
|
16
16
|
fixed_max_results: Optional[int] = None,
|
|
17
|
-
images: bool = False,
|
|
18
|
-
it: bool = False,
|
|
19
|
-
map: bool = False,
|
|
20
|
-
music: bool = False,
|
|
21
|
-
news: bool = False,
|
|
22
|
-
science: bool = False,
|
|
23
|
-
videos: bool = False,
|
|
24
17
|
**kwargs,
|
|
25
18
|
):
|
|
26
19
|
self.host = host
|
|
27
20
|
self.engines = engines
|
|
28
21
|
self.fixed_max_results = fixed_max_results
|
|
29
22
|
|
|
30
|
-
tools: List[Any] = [
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if news:
|
|
41
|
-
tools.append(self.news_search)
|
|
42
|
-
if science:
|
|
43
|
-
tools.append(self.science_search)
|
|
44
|
-
if videos:
|
|
45
|
-
tools.append(self.video_search)
|
|
23
|
+
tools: List[Any] = [
|
|
24
|
+
self.search,
|
|
25
|
+
self.image_search,
|
|
26
|
+
self.it_search,
|
|
27
|
+
self.map_search,
|
|
28
|
+
self.music_search,
|
|
29
|
+
self.news_search,
|
|
30
|
+
self.science_search,
|
|
31
|
+
self.video_search,
|
|
32
|
+
]
|
|
46
33
|
|
|
47
34
|
super().__init__(name="searxng", tools=tools, **kwargs)
|
|
48
35
|
|
agno/tools/serpapi.py
CHANGED
|
@@ -15,7 +15,9 @@ class SerpApiTools(Toolkit):
|
|
|
15
15
|
def __init__(
|
|
16
16
|
self,
|
|
17
17
|
api_key: Optional[str] = None,
|
|
18
|
-
|
|
18
|
+
enable_search_google: bool = True,
|
|
19
|
+
enable_search_youtube: bool = False,
|
|
20
|
+
all: bool = False,
|
|
19
21
|
**kwargs,
|
|
20
22
|
):
|
|
21
23
|
self.api_key = api_key or getenv("SERP_API_KEY")
|
|
@@ -23,8 +25,9 @@ class SerpApiTools(Toolkit):
|
|
|
23
25
|
logger.warning("No Serpapi API key provided")
|
|
24
26
|
|
|
25
27
|
tools: List[Any] = []
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
if all or enable_search_google:
|
|
29
|
+
tools.append(self.search_google)
|
|
30
|
+
if all or enable_search_youtube:
|
|
28
31
|
tools.append(self.search_youtube)
|
|
29
32
|
|
|
30
33
|
super().__init__(name="serpapi_tools", tools=tools, **kwargs)
|
agno/tools/serper.py
CHANGED
|
@@ -16,6 +16,11 @@ class SerperTools(Toolkit):
|
|
|
16
16
|
language: str = "en",
|
|
17
17
|
num_results: int = 10,
|
|
18
18
|
date_range: Optional[str] = None,
|
|
19
|
+
enable_search: bool = True,
|
|
20
|
+
enable_search_news: bool = True,
|
|
21
|
+
enable_search_scholar: bool = True,
|
|
22
|
+
enable_scrape_webpage: bool = True,
|
|
23
|
+
all: bool = False,
|
|
19
24
|
**kwargs,
|
|
20
25
|
):
|
|
21
26
|
"""
|
|
@@ -38,10 +43,14 @@ class SerperTools(Toolkit):
|
|
|
38
43
|
self.date_range = date_range
|
|
39
44
|
|
|
40
45
|
tools: List[Any] = []
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
if all or enable_search:
|
|
47
|
+
tools.append(self.search)
|
|
48
|
+
if all or enable_search_news:
|
|
49
|
+
tools.append(self.search_news)
|
|
50
|
+
if all or enable_search_scholar:
|
|
51
|
+
tools.append(self.search_scholar)
|
|
52
|
+
if all or enable_scrape_webpage:
|
|
53
|
+
tools.append(self.scrape_webpage)
|
|
45
54
|
|
|
46
55
|
super().__init__(name="serper_tools", tools=tools, **kwargs)
|
|
47
56
|
|
agno/tools/shell.py
CHANGED
|
@@ -6,13 +6,20 @@ from agno.utils.log import log_debug, log_info, logger
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class ShellTools(Toolkit):
|
|
9
|
-
def __init__(
|
|
9
|
+
def __init__(
|
|
10
|
+
self,
|
|
11
|
+
base_dir: Optional[Union[Path, str]] = None,
|
|
12
|
+
enable_run_shell_command: bool = True,
|
|
13
|
+
all: bool = False,
|
|
14
|
+
**kwargs,
|
|
15
|
+
):
|
|
10
16
|
self.base_dir: Optional[Path] = None
|
|
11
17
|
if base_dir is not None:
|
|
12
18
|
self.base_dir = Path(base_dir) if isinstance(base_dir, str) else base_dir
|
|
13
19
|
|
|
14
20
|
tools = []
|
|
15
|
-
|
|
21
|
+
if all or enable_run_shell_command:
|
|
22
|
+
tools.append(self.run_shell_command)
|
|
16
23
|
|
|
17
24
|
super().__init__(name="shell_tools", tools=tools, **kwargs)
|
|
18
25
|
|
agno/tools/slack.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import
|
|
2
|
+
from os import getenv
|
|
3
3
|
from typing import Any, Dict, List, Optional
|
|
4
4
|
|
|
5
|
-
from agno.tools
|
|
5
|
+
from agno.tools import Toolkit
|
|
6
6
|
from agno.utils.log import logger
|
|
7
7
|
|
|
8
8
|
try:
|
|
@@ -16,25 +16,26 @@ class SlackTools(Toolkit):
|
|
|
16
16
|
def __init__(
|
|
17
17
|
self,
|
|
18
18
|
token: Optional[str] = None,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
enable_send_message: bool = True,
|
|
20
|
+
enable_send_message_thread: bool = True,
|
|
21
|
+
enable_list_channels: bool = True,
|
|
22
|
+
enable_get_channel_history: bool = True,
|
|
23
|
+
all: bool = False,
|
|
23
24
|
**kwargs,
|
|
24
25
|
):
|
|
25
|
-
self.token: Optional[str] = token or
|
|
26
|
+
self.token: Optional[str] = token or getenv("SLACK_TOKEN")
|
|
26
27
|
if self.token is None or self.token == "":
|
|
27
28
|
raise ValueError("SLACK_TOKEN is not set")
|
|
28
29
|
self.client = WebClient(token=self.token)
|
|
29
30
|
|
|
30
31
|
tools: List[Any] = []
|
|
31
|
-
if
|
|
32
|
+
if enable_send_message or all:
|
|
32
33
|
tools.append(self.send_message)
|
|
33
|
-
if
|
|
34
|
+
if enable_send_message_thread or all:
|
|
34
35
|
tools.append(self.send_message_thread)
|
|
35
|
-
if
|
|
36
|
+
if enable_list_channels or all:
|
|
36
37
|
tools.append(self.list_channels)
|
|
37
|
-
if
|
|
38
|
+
if enable_get_channel_history or all:
|
|
38
39
|
tools.append(self.get_channel_history)
|
|
39
40
|
|
|
40
41
|
super().__init__(name="slack", tools=tools, **kwargs)
|
agno/tools/sleep.py
CHANGED
|
@@ -5,9 +5,10 @@ from agno.utils.log import log_info
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
class SleepTools(Toolkit):
|
|
8
|
-
def __init__(self, **kwargs):
|
|
8
|
+
def __init__(self, enable_sleep: bool = True, all: bool = False, **kwargs):
|
|
9
9
|
tools = []
|
|
10
|
-
|
|
10
|
+
if all or enable_sleep:
|
|
11
|
+
tools.append(self.sleep)
|
|
11
12
|
|
|
12
13
|
super().__init__(name="sleep", tools=tools, **kwargs)
|
|
13
14
|
|
agno/tools/spider.py
CHANGED
|
@@ -7,16 +7,33 @@ except ImportError:
|
|
|
7
7
|
|
|
8
8
|
from typing import Any, List, Optional
|
|
9
9
|
|
|
10
|
-
from agno.tools
|
|
10
|
+
from agno.tools import Toolkit
|
|
11
11
|
from agno.utils.log import log_info, logger
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class SpiderTools(Toolkit):
|
|
15
|
+
"""
|
|
16
|
+
Spider is a toolkit for web searching, scraping, and crawling.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
enable_search (bool): Enable web search functionality. Default is True.
|
|
20
|
+
enable_scrape (bool): Enable web scraping functionality. Default is True.
|
|
21
|
+
enable_crawl (bool): Enable web crawling functionality. Default is True.
|
|
22
|
+
all (bool): Enable all tools. Overrides individual flags when True. Default is False.
|
|
23
|
+
max_results (Optional[int]): Default maximum number of results.
|
|
24
|
+
url (Optional[str]): Default URL for operations.
|
|
25
|
+
optional_params (Optional[dict]): Additional parameters for operations.
|
|
26
|
+
"""
|
|
27
|
+
|
|
15
28
|
def __init__(
|
|
16
29
|
self,
|
|
17
30
|
max_results: Optional[int] = None,
|
|
18
31
|
url: Optional[str] = None,
|
|
19
32
|
optional_params: Optional[dict] = None,
|
|
33
|
+
enable_search: bool = True,
|
|
34
|
+
enable_scrape: bool = True,
|
|
35
|
+
enable_crawl: bool = True,
|
|
36
|
+
all: bool = False,
|
|
20
37
|
**kwargs,
|
|
21
38
|
):
|
|
22
39
|
self.max_results = max_results
|
|
@@ -24,9 +41,12 @@ class SpiderTools(Toolkit):
|
|
|
24
41
|
self.optional_params = optional_params or {}
|
|
25
42
|
|
|
26
43
|
tools: List[Any] = []
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
44
|
+
if enable_search or all:
|
|
45
|
+
tools.append(self.search)
|
|
46
|
+
if enable_scrape or all:
|
|
47
|
+
tools.append(self.scrape)
|
|
48
|
+
if enable_crawl or all:
|
|
49
|
+
tools.append(self.crawl)
|
|
30
50
|
|
|
31
51
|
super().__init__(name="spider", tools=tools, **kwargs)
|
|
32
52
|
|
agno/tools/sql.py
CHANGED
|
@@ -25,9 +25,10 @@ class SQLTools(Toolkit):
|
|
|
25
25
|
schema: Optional[str] = None,
|
|
26
26
|
dialect: Optional[str] = None,
|
|
27
27
|
tables: Optional[Dict[str, Any]] = None,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
enable_list_tables: bool = True,
|
|
29
|
+
enable_describe_table: bool = True,
|
|
30
|
+
enable_run_sql_query: bool = True,
|
|
31
|
+
all: bool = False,
|
|
31
32
|
**kwargs,
|
|
32
33
|
):
|
|
33
34
|
# Get the database engine
|
|
@@ -53,11 +54,11 @@ class SQLTools(Toolkit):
|
|
|
53
54
|
self.tables: Optional[Dict[str, Any]] = tables
|
|
54
55
|
|
|
55
56
|
tools: List[Any] = []
|
|
56
|
-
if
|
|
57
|
+
if enable_list_tables or all:
|
|
57
58
|
tools.append(self.list_tables)
|
|
58
|
-
if
|
|
59
|
+
if enable_describe_table or all:
|
|
59
60
|
tools.append(self.describe_table)
|
|
60
|
-
if
|
|
61
|
+
if enable_run_sql_query or all:
|
|
61
62
|
tools.append(self.run_sql_query)
|
|
62
63
|
|
|
63
64
|
super().__init__(name="sql_tools", tools=tools, **kwargs)
|
agno/tools/tavily.py
CHANGED
|
@@ -15,12 +15,13 @@ class TavilyTools(Toolkit):
|
|
|
15
15
|
def __init__(
|
|
16
16
|
self,
|
|
17
17
|
api_key: Optional[str] = None,
|
|
18
|
-
|
|
18
|
+
enable_search: bool = True,
|
|
19
|
+
enable_search_context: bool = False,
|
|
20
|
+
all: bool = False,
|
|
19
21
|
max_tokens: int = 6000,
|
|
20
22
|
include_answer: bool = True,
|
|
21
23
|
search_depth: Literal["basic", "advanced"] = "advanced",
|
|
22
24
|
format: Literal["json", "markdown"] = "markdown",
|
|
23
|
-
use_search_context: bool = False,
|
|
24
25
|
**kwargs,
|
|
25
26
|
):
|
|
26
27
|
self.api_key = api_key or getenv("TAVILY_API_KEY")
|
|
@@ -34,8 +35,9 @@ class TavilyTools(Toolkit):
|
|
|
34
35
|
self.format: Literal["json", "markdown"] = format
|
|
35
36
|
|
|
36
37
|
tools: List[Any] = []
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
|
|
39
|
+
if enable_search or all:
|
|
40
|
+
if enable_search_context:
|
|
39
41
|
tools.append(self.web_search_with_tavily)
|
|
40
42
|
else:
|
|
41
43
|
tools.append(self.web_search_using_tavily)
|
agno/tools/telegram.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
from os import getenv
|
|
2
2
|
from typing import Any, List, Optional, Union
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
@@ -10,15 +10,23 @@ from agno.utils.log import log_debug, logger
|
|
|
10
10
|
class TelegramTools(Toolkit):
|
|
11
11
|
base_url = "https://api.telegram.org"
|
|
12
12
|
|
|
13
|
-
def __init__(
|
|
14
|
-
self
|
|
13
|
+
def __init__(
|
|
14
|
+
self,
|
|
15
|
+
chat_id: Union[str, int],
|
|
16
|
+
token: Optional[str] = None,
|
|
17
|
+
enable_send_message: bool = True,
|
|
18
|
+
all: bool = False,
|
|
19
|
+
**kwargs,
|
|
20
|
+
):
|
|
21
|
+
self.token = token or getenv("TELEGRAM_TOKEN")
|
|
15
22
|
if not self.token:
|
|
16
23
|
logger.error("TELEGRAM_TOKEN not set. Please set the TELEGRAM_TOKEN environment variable.")
|
|
17
24
|
|
|
18
25
|
self.chat_id = chat_id
|
|
19
26
|
|
|
20
27
|
tools: List[Any] = []
|
|
21
|
-
|
|
28
|
+
if all or enable_send_message:
|
|
29
|
+
tools.append(self.send_message)
|
|
22
30
|
|
|
23
31
|
super().__init__(name="telegram", tools=tools, **kwargs)
|
|
24
32
|
|
agno/tools/todoist.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import
|
|
2
|
+
from os import getenv
|
|
3
3
|
from typing import Any, Dict, List, Optional
|
|
4
4
|
|
|
5
5
|
from agno.tools import Toolkit
|
|
@@ -17,48 +17,28 @@ class TodoistTools(Toolkit):
|
|
|
17
17
|
def __init__(
|
|
18
18
|
self,
|
|
19
19
|
api_token: Optional[str] = None,
|
|
20
|
-
create_task: bool = True,
|
|
21
|
-
get_task: bool = True,
|
|
22
|
-
update_task: bool = True,
|
|
23
|
-
close_task: bool = True,
|
|
24
|
-
delete_task: bool = True,
|
|
25
|
-
get_active_tasks: bool = True,
|
|
26
|
-
get_projects: bool = True,
|
|
27
20
|
**kwargs,
|
|
28
21
|
):
|
|
29
22
|
"""Initialize the Todoist toolkit.
|
|
30
23
|
|
|
31
24
|
Args:
|
|
32
25
|
api_token: Optional Todoist API token. If not provided, will look for TODOIST_API_TOKEN env var
|
|
33
|
-
create_task: Whether to register the create_task function
|
|
34
|
-
get_task: Whether to register the get_task function
|
|
35
|
-
update_task: Whether to register the update_task function
|
|
36
|
-
close_task: Whether to register the close_task function
|
|
37
|
-
delete_task: Whether to register the delete_task function
|
|
38
|
-
get_active_tasks: Whether to register the get_active_tasks function
|
|
39
|
-
get_projects: Whether to register the get_projects function
|
|
40
26
|
"""
|
|
41
|
-
self.api_token = api_token or
|
|
27
|
+
self.api_token = api_token or getenv("TODOIST_API_TOKEN")
|
|
42
28
|
if not self.api_token:
|
|
43
29
|
raise ValueError("TODOIST_API_TOKEN not set. Please set the TODOIST_API_TOKEN environment variable.")
|
|
44
30
|
|
|
45
31
|
self.api = TodoistAPI(self.api_token)
|
|
46
32
|
|
|
47
|
-
tools: List[Any] = [
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if delete_task:
|
|
57
|
-
tools.append(self.delete_task)
|
|
58
|
-
if get_active_tasks:
|
|
59
|
-
tools.append(self.get_active_tasks)
|
|
60
|
-
if get_projects:
|
|
61
|
-
tools.append(self.get_projects)
|
|
33
|
+
tools: List[Any] = [
|
|
34
|
+
self.create_task,
|
|
35
|
+
self.get_task,
|
|
36
|
+
self.update_task,
|
|
37
|
+
self.close_task,
|
|
38
|
+
self.delete_task,
|
|
39
|
+
self.get_active_tasks,
|
|
40
|
+
self.get_projects,
|
|
41
|
+
]
|
|
62
42
|
|
|
63
43
|
super().__init__(name="todoist", tools=tools, **kwargs)
|
|
64
44
|
|
agno/tools/toolkit.py
CHANGED
|
@@ -131,7 +131,7 @@ class Toolkit:
|
|
|
131
131
|
requires_confirmation=tool_name in self.requires_confirmation_tools,
|
|
132
132
|
external_execution=tool_name in self.external_execution_required_tools,
|
|
133
133
|
stop_after_tool_call=tool_name in self.stop_after_tool_call_tools,
|
|
134
|
-
show_result=tool_name in self.show_result_tools,
|
|
134
|
+
show_result=tool_name in self.show_result_tools or tool_name in self.stop_after_tool_call_tools,
|
|
135
135
|
)
|
|
136
136
|
self.functions[f.name] = f
|
|
137
137
|
log_debug(f"Function: {f.name} registered with {self.name}")
|