agno 1.8.1__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/__init__.py +8 -0
- 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 +15 -11
- 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 +131 -131
- agno/models/aws/bedrock.py +110 -182
- 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 +77 -33
- 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 +22 -22
- 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 +19 -34
- 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 +32 -2
- 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 +47 -4
- 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 -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/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 -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-1.8.1.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.1.dist-info → agno-2.0.0.dist-info}/WHEEL +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0.dist-info}/top_level.txt +0 -0
agno/tools/agentql.py
CHANGED
|
@@ -12,7 +12,15 @@ except ImportError:
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class AgentQLTools(Toolkit):
|
|
15
|
-
def __init__(
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
api_key: Optional[str] = None,
|
|
18
|
+
enable_scrape_website: bool = True,
|
|
19
|
+
enable_custom_scrape_website: bool = False,
|
|
20
|
+
all: bool = False,
|
|
21
|
+
agentql_query: str = "",
|
|
22
|
+
**kwargs,
|
|
23
|
+
):
|
|
16
24
|
self.api_key = api_key or getenv("AGENTQL_API_KEY")
|
|
17
25
|
if not self.api_key:
|
|
18
26
|
raise ValueError("AGENTQL_API_KEY not set. Please set the AGENTQL_API_KEY environment variable.")
|
|
@@ -20,11 +28,12 @@ class AgentQLTools(Toolkit):
|
|
|
20
28
|
self.agentql_query = agentql_query
|
|
21
29
|
|
|
22
30
|
tools: List[Any] = []
|
|
23
|
-
if
|
|
31
|
+
if all or enable_scrape_website:
|
|
24
32
|
tools.append(self.scrape_website)
|
|
25
|
-
if agentql_query:
|
|
26
|
-
|
|
27
|
-
|
|
33
|
+
if all or enable_custom_scrape_website or (agentql_query and not all and not enable_custom_scrape_website):
|
|
34
|
+
if agentql_query:
|
|
35
|
+
log_info("Custom AgentQL query provided. Registering custom scrape function.")
|
|
36
|
+
tools.append(self.custom_scrape_website)
|
|
28
37
|
|
|
29
38
|
super().__init__(name="agentql_tools", tools=tools, **kwargs)
|
|
30
39
|
|
agno/tools/airflow.py
CHANGED
|
@@ -7,7 +7,12 @@ from agno.utils.log import log_debug, log_info, logger
|
|
|
7
7
|
|
|
8
8
|
class AirflowTools(Toolkit):
|
|
9
9
|
def __init__(
|
|
10
|
-
self,
|
|
10
|
+
self,
|
|
11
|
+
dags_dir: Optional[Union[Path, str]] = None,
|
|
12
|
+
enable_save_dag_file: bool = True,
|
|
13
|
+
enable_read_dag_file: bool = True,
|
|
14
|
+
all: bool = False,
|
|
15
|
+
**kwargs,
|
|
11
16
|
):
|
|
12
17
|
"""
|
|
13
18
|
quick start to work with airflow : https://airflow.apache.org/docs/apache-airflow/stable/start.html
|
|
@@ -22,9 +27,9 @@ class AirflowTools(Toolkit):
|
|
|
22
27
|
self.dags_dir: Path = _dags_dir or Path.cwd()
|
|
23
28
|
|
|
24
29
|
tools: List[Any] = []
|
|
25
|
-
if
|
|
30
|
+
if all or enable_save_dag_file:
|
|
26
31
|
tools.append(self.save_dag_file)
|
|
27
|
-
if
|
|
32
|
+
if all or enable_read_dag_file:
|
|
28
33
|
tools.append(self.read_dag_file)
|
|
29
34
|
|
|
30
35
|
super().__init__(name="AirflowTools", tools=tools, **kwargs)
|
|
@@ -43,7 +48,7 @@ class AirflowTools(Toolkit):
|
|
|
43
48
|
file_path.parent.mkdir(parents=True, exist_ok=True)
|
|
44
49
|
file_path.write_text(contents)
|
|
45
50
|
log_info(f"Saved: {file_path}")
|
|
46
|
-
return str(
|
|
51
|
+
return str(file_path)
|
|
47
52
|
except Exception as e:
|
|
48
53
|
logger.error(f"Error saving to file: {e}")
|
|
49
54
|
return f"Error saving to file: {e}"
|
agno/tools/api.py
CHANGED
|
@@ -21,7 +21,8 @@ class CustomApiTools(Toolkit):
|
|
|
21
21
|
headers: Optional[Dict[str, str]] = None,
|
|
22
22
|
verify_ssl: bool = True,
|
|
23
23
|
timeout: int = 30,
|
|
24
|
-
|
|
24
|
+
enable_make_request: bool = True,
|
|
25
|
+
all: bool = False,
|
|
25
26
|
**kwargs,
|
|
26
27
|
):
|
|
27
28
|
self.base_url = base_url
|
|
@@ -33,7 +34,7 @@ class CustomApiTools(Toolkit):
|
|
|
33
34
|
self.timeout = timeout
|
|
34
35
|
|
|
35
36
|
tools: List[Any] = []
|
|
36
|
-
if
|
|
37
|
+
if all or enable_make_request:
|
|
37
38
|
tools.append(self.make_request)
|
|
38
39
|
|
|
39
40
|
super().__init__(name="api_tools", tools=tools, **kwargs)
|
|
@@ -76,7 +77,10 @@ class CustomApiTools(Toolkit):
|
|
|
76
77
|
str: JSON string containing response data or error message
|
|
77
78
|
"""
|
|
78
79
|
try:
|
|
79
|
-
|
|
80
|
+
if self.base_url:
|
|
81
|
+
url = f"{self.base_url.rstrip('/')}/{endpoint.lstrip('/')}"
|
|
82
|
+
else:
|
|
83
|
+
url = endpoint
|
|
80
84
|
log_debug(f"Making {method} request to {url}")
|
|
81
85
|
|
|
82
86
|
response = requests.request(
|
agno/tools/apify.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import os
|
|
3
2
|
import string
|
|
3
|
+
from os import getenv
|
|
4
4
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
5
5
|
|
|
6
6
|
import requests
|
|
@@ -21,53 +21,9 @@ class ApifyTools(Toolkit):
|
|
|
21
21
|
Args:
|
|
22
22
|
actors (Optional[Union[str, List[str]]]): Single Actor ID as string or list of Actor IDs to register as individual tools
|
|
23
23
|
apify_api_token (Optional[str]): Apify API token (defaults to APIFY_API_TOKEN env variable)
|
|
24
|
-
|
|
25
|
-
Examples:
|
|
26
|
-
Configuration Instructions:
|
|
27
|
-
1. Install required dependencies:
|
|
28
|
-
pip install agno apify-client
|
|
29
|
-
|
|
30
|
-
2. Set the APIFY_API_TOKEN environment variable:
|
|
31
|
-
Add a .env file with APIFY_API_TOKEN=your_apify_api_key
|
|
32
|
-
|
|
33
|
-
Import necessary components:
|
|
34
|
-
|
|
35
|
-
from agno.agent import Agent
|
|
36
|
-
from agno.tools.apify import ApifyTools
|
|
37
|
-
|
|
38
|
-
# Create an agent with ApifyTools
|
|
39
|
-
agent = Agent(
|
|
40
|
-
tools=[
|
|
41
|
-
ApifyTools(actors=["apify/rag-web-browser"])
|
|
42
|
-
],
|
|
43
|
-
markdown=True
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
# Ask the agent to process web content
|
|
47
|
-
agent.print_response("Summarize the content from https://docs.agno.com/introduction", markdown=True)
|
|
48
|
-
|
|
49
|
-
# Using multiple actors with the agent
|
|
50
|
-
agent = Agent(
|
|
51
|
-
tools=[
|
|
52
|
-
ApifyTools(actors=[
|
|
53
|
-
"apify/rag-web-browser",
|
|
54
|
-
"compass/crawler-google-places"
|
|
55
|
-
])
|
|
56
|
-
],
|
|
57
|
-
show_tool_calls=True
|
|
58
|
-
)
|
|
59
|
-
agent.print_response(
|
|
60
|
-
'''
|
|
61
|
-
I'm traveling to Tokyo next month.
|
|
62
|
-
1. Research the best time to visit and major attractions
|
|
63
|
-
2. Find one good rated sushi restaurant near Shinjuku
|
|
64
|
-
Compile a comprehensive travel guide with this information.
|
|
65
|
-
''',
|
|
66
|
-
markdown=True
|
|
67
|
-
)
|
|
68
24
|
"""
|
|
69
25
|
# Get API token from args or environment
|
|
70
|
-
self.apify_api_token = apify_api_token or
|
|
26
|
+
self.apify_api_token = apify_api_token or getenv("APIFY_API_TOKEN")
|
|
71
27
|
if not self.apify_api_token:
|
|
72
28
|
raise ValueError("APIFY_API_TOKEN environment variable or apify_api_token parameter must be set")
|
|
73
29
|
|
agno/tools/arxiv.py
CHANGED
|
@@ -18,15 +18,20 @@ except ImportError:
|
|
|
18
18
|
|
|
19
19
|
class ArxivTools(Toolkit):
|
|
20
20
|
def __init__(
|
|
21
|
-
self,
|
|
21
|
+
self,
|
|
22
|
+
enable_search_arxiv: bool = True,
|
|
23
|
+
enable_read_arxiv_papers: bool = True,
|
|
24
|
+
all: bool = False,
|
|
25
|
+
download_dir: Optional[Path] = None,
|
|
26
|
+
**kwargs,
|
|
22
27
|
):
|
|
23
28
|
self.client: arxiv.Client = arxiv.Client()
|
|
24
29
|
self.download_dir: Path = download_dir or Path(__file__).parent.joinpath("arxiv_pdfs")
|
|
25
30
|
|
|
26
31
|
tools: List[Any] = []
|
|
27
|
-
if
|
|
32
|
+
if all or enable_search_arxiv:
|
|
28
33
|
tools.append(self.search_arxiv_and_return_articles)
|
|
29
|
-
if
|
|
34
|
+
if all or enable_read_arxiv_papers:
|
|
30
35
|
tools.append(self.read_arxiv_papers)
|
|
31
36
|
|
|
32
37
|
super().__init__(name="arxiv_tools", tools=tools, **kwargs)
|
agno/tools/aws_lambda.py
CHANGED
|
@@ -9,19 +9,21 @@ except ImportError:
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class AWSLambdaTools(Toolkit):
|
|
12
|
-
name: str = "AWSLambdaTool"
|
|
13
|
-
description: str = "A tool for interacting with AWS Lambda functions"
|
|
14
|
-
|
|
15
12
|
def __init__(
|
|
16
13
|
self,
|
|
17
14
|
region_name: str = "us-east-1",
|
|
15
|
+
enable_list_functions: bool = True,
|
|
16
|
+
enable_invoke_function: bool = True,
|
|
17
|
+
all: bool = False,
|
|
18
18
|
**kwargs,
|
|
19
19
|
):
|
|
20
20
|
self.client = boto3.client("lambda", region_name=region_name)
|
|
21
21
|
|
|
22
22
|
tools: List[Any] = []
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
if all or enable_list_functions:
|
|
24
|
+
tools.append(self.list_functions)
|
|
25
|
+
if all or enable_invoke_function:
|
|
26
|
+
tools.append(self.invoke_function)
|
|
25
27
|
|
|
26
28
|
super().__init__(name="aws-lambda", tools=tools, **kwargs)
|
|
27
29
|
|
agno/tools/aws_ses.py
CHANGED
|
@@ -15,8 +15,14 @@ class AWSSESTool(Toolkit):
|
|
|
15
15
|
sender_email: Optional[str] = None,
|
|
16
16
|
sender_name: Optional[str] = None,
|
|
17
17
|
region_name: str = "us-east-1",
|
|
18
|
+
enable_send_email: bool = True,
|
|
19
|
+
all: bool = False,
|
|
20
|
+
**kwargs,
|
|
18
21
|
):
|
|
19
|
-
|
|
22
|
+
tools = []
|
|
23
|
+
if all or enable_send_email:
|
|
24
|
+
tools.append(self.send_email)
|
|
25
|
+
super().__init__(name="aws_ses_tool", tools=tools, **kwargs)
|
|
20
26
|
self.client = boto3.client("ses", region_name=region_name)
|
|
21
27
|
self.sender_email = sender_email
|
|
22
28
|
self.sender_name = sender_name
|
agno/tools/baidusearch.py
CHANGED
|
@@ -35,6 +35,8 @@ class BaiduSearchTools(Toolkit):
|
|
|
35
35
|
proxy: Optional[str] = None,
|
|
36
36
|
timeout: Optional[int] = 10,
|
|
37
37
|
debug: Optional[bool] = False,
|
|
38
|
+
enable_baidu_search: bool = True,
|
|
39
|
+
all: bool = False,
|
|
38
40
|
**kwargs,
|
|
39
41
|
):
|
|
40
42
|
self.fixed_max_results = fixed_max_results
|
|
@@ -45,7 +47,8 @@ class BaiduSearchTools(Toolkit):
|
|
|
45
47
|
self.debug = debug
|
|
46
48
|
|
|
47
49
|
tools = []
|
|
48
|
-
|
|
50
|
+
if all or enable_baidu_search:
|
|
51
|
+
tools.append(self.baidu_search)
|
|
49
52
|
|
|
50
53
|
super().__init__(name="baidusearch", tools=tools, **kwargs)
|
|
51
54
|
|
agno/tools/bitbucket.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
import json
|
|
3
|
-
import
|
|
3
|
+
from os import getenv
|
|
4
4
|
from typing import Any, Dict, Optional, Union
|
|
5
5
|
|
|
6
6
|
import requests
|
|
@@ -21,9 +21,9 @@ class BitbucketTools(Toolkit):
|
|
|
21
21
|
api_version: str = "2.0",
|
|
22
22
|
**kwargs,
|
|
23
23
|
):
|
|
24
|
-
self.username = username or
|
|
25
|
-
self.password = password or
|
|
26
|
-
self.token = token or
|
|
24
|
+
self.username = username or getenv("BITBUCKET_USERNAME")
|
|
25
|
+
self.password = password or getenv("BITBUCKET_PASSWORD")
|
|
26
|
+
self.token = token or getenv("BITBUCKET_TOKEN")
|
|
27
27
|
self.auth_password = self.token or self.password
|
|
28
28
|
self.server_url = server_url or "api.bitbucket.org"
|
|
29
29
|
self.api_version = api_version or "2.0"
|
agno/tools/brandfetch.py
CHANGED
|
@@ -28,9 +28,11 @@ class BrandfetchTools(Toolkit):
|
|
|
28
28
|
|
|
29
29
|
client_id: str - your Brandfetch Client ID
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
all: bool - if True, will use all tools
|
|
32
|
+
enable_search_by_identifier: bool - if True, will use search by identifier
|
|
33
|
+
enable_search_by_brand: bool - if True, will use search by brand
|
|
34
|
+
enable_asearch_by_identifier: bool - if True, will use async search by identifier
|
|
35
|
+
enable_asearch_by_brand: bool - if True, will use async search by brand
|
|
34
36
|
"""
|
|
35
37
|
|
|
36
38
|
def __init__(
|
|
@@ -39,29 +41,30 @@ class BrandfetchTools(Toolkit):
|
|
|
39
41
|
client_id: Optional[str] = None,
|
|
40
42
|
base_url: str = "https://api.brandfetch.io/v2",
|
|
41
43
|
timeout: Optional[float] = 20.0,
|
|
44
|
+
enable_search_by_identifier: bool = True,
|
|
45
|
+
enable_search_by_brand: bool = False,
|
|
46
|
+
all: bool = False,
|
|
42
47
|
async_tools: bool = False,
|
|
43
|
-
brand: bool = True,
|
|
44
|
-
search: bool = False,
|
|
45
48
|
**kwargs,
|
|
46
49
|
):
|
|
47
50
|
self.api_key = api_key or getenv("BRANDFETCH_API_KEY")
|
|
48
51
|
self.client_id = client_id or getenv("BRANDFETCH_CLIENT_ID")
|
|
49
52
|
self.base_url = base_url
|
|
50
53
|
self.timeout = httpx.Timeout(timeout)
|
|
51
|
-
self.async_tools = async_tools
|
|
52
54
|
self.search_url = f"{self.base_url}/search"
|
|
53
55
|
self.brand_url = f"{self.base_url}/brands"
|
|
54
56
|
|
|
55
57
|
tools: list[Any] = []
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
# Backward-compat mapping: prefer new enable_* flags, but honor legacy toggles
|
|
59
|
+
if async_tools:
|
|
60
|
+
if all or enable_search_by_identifier:
|
|
58
61
|
tools.append(self.asearch_by_identifier)
|
|
59
|
-
if
|
|
62
|
+
if all or enable_search_by_brand:
|
|
60
63
|
tools.append(self.asearch_by_brand)
|
|
61
64
|
else:
|
|
62
|
-
if
|
|
65
|
+
if all or enable_search_by_identifier:
|
|
63
66
|
tools.append(self.search_by_identifier)
|
|
64
|
-
if
|
|
67
|
+
if all or enable_search_by_brand:
|
|
65
68
|
tools.append(self.search_by_brand)
|
|
66
69
|
name = kwargs.pop("name", "brandfetch_tools")
|
|
67
70
|
super().__init__(name=name, tools=tools, **kwargs)
|
agno/tools/bravesearch.py
CHANGED
|
@@ -26,6 +26,8 @@ class BraveSearchTools(Toolkit):
|
|
|
26
26
|
api_key: Optional[str] = None,
|
|
27
27
|
fixed_max_results: Optional[int] = None,
|
|
28
28
|
fixed_language: Optional[str] = None,
|
|
29
|
+
enable_brave_search: bool = True,
|
|
30
|
+
all: bool = False,
|
|
29
31
|
**kwargs,
|
|
30
32
|
):
|
|
31
33
|
self.api_key = api_key or getenv("BRAVE_API_KEY")
|
|
@@ -38,7 +40,8 @@ class BraveSearchTools(Toolkit):
|
|
|
38
40
|
self.brave_client = Brave(api_key=self.api_key)
|
|
39
41
|
|
|
40
42
|
tools = []
|
|
41
|
-
|
|
43
|
+
if all or enable_brave_search:
|
|
44
|
+
tools.append(self.brave_search)
|
|
42
45
|
|
|
43
46
|
super().__init__(
|
|
44
47
|
name="brave_search",
|
agno/tools/brightdata.py
CHANGED
|
@@ -5,8 +5,9 @@ from typing import Any, Dict, List, Optional
|
|
|
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
|
|
9
9
|
from agno.tools import Toolkit
|
|
10
|
+
from agno.tools.function import ToolResult
|
|
10
11
|
from agno.utils.log import log_debug, log_error, log_info
|
|
11
12
|
|
|
12
13
|
try:
|
|
@@ -16,15 +17,32 @@ except ImportError:
|
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
class BrightDataTools(Toolkit):
|
|
20
|
+
"""
|
|
21
|
+
BrightData is a toolkit for web scraping, screenshots, search engines, and web data feeds.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
api_key (Optional[str]): Bright Data API key. Retrieved from BRIGHT_DATA_API_KEY env variable if not provided.
|
|
25
|
+
enable_scrape_markdown (bool): Enable webpage scraping as Markdown. Default is True.
|
|
26
|
+
enable_screenshot (bool): Enable website screenshot capture. Default is True.
|
|
27
|
+
enable_search_engine (bool): Enable search engine functionality. Default is True.
|
|
28
|
+
enable_web_data_feed (bool): Enable web data feed retrieval. Default is True.
|
|
29
|
+
all (bool): Enable all tools. Overrides individual flags when True. Default is False.
|
|
30
|
+
serp_zone (str): SERP zone for search operations. Default is "serp_api".
|
|
31
|
+
web_unlocker_zone (str): Web unlocker zone for scraping operations. Default is "web_unlocker1".
|
|
32
|
+
verbose (bool): Enable verbose logging. Default is False.
|
|
33
|
+
timeout (int): Timeout in seconds for operations. Default is 600.
|
|
34
|
+
"""
|
|
35
|
+
|
|
19
36
|
def __init__(
|
|
20
37
|
self,
|
|
21
38
|
api_key: Optional[str] = None,
|
|
39
|
+
enable_scrape_markdown: bool = True,
|
|
40
|
+
enable_screenshot: bool = True,
|
|
41
|
+
enable_search_engine: bool = True,
|
|
42
|
+
enable_web_data_feed: bool = True,
|
|
43
|
+
all: bool = False,
|
|
22
44
|
serp_zone: str = "serp_api",
|
|
23
45
|
web_unlocker_zone: str = "web_unlocker1",
|
|
24
|
-
scrape_as_markdown: bool = True,
|
|
25
|
-
get_screenshot: bool = False,
|
|
26
|
-
search_engine: bool = True,
|
|
27
|
-
web_data_feed: bool = True,
|
|
28
46
|
verbose: bool = False,
|
|
29
47
|
timeout: int = 600,
|
|
30
48
|
**kwargs,
|
|
@@ -47,14 +65,13 @@ class BrightDataTools(Toolkit):
|
|
|
47
65
|
self.timeout = timeout
|
|
48
66
|
|
|
49
67
|
tools: List[Any] = []
|
|
50
|
-
|
|
51
|
-
if scrape_as_markdown:
|
|
68
|
+
if all or enable_scrape_markdown:
|
|
52
69
|
tools.append(self.scrape_as_markdown)
|
|
53
|
-
if
|
|
70
|
+
if all or enable_screenshot:
|
|
54
71
|
tools.append(self.get_screenshot)
|
|
55
|
-
if
|
|
72
|
+
if all or enable_search_engine:
|
|
56
73
|
tools.append(self.search_engine)
|
|
57
|
-
if
|
|
74
|
+
if all or enable_web_data_feed:
|
|
58
75
|
tools.append(self.web_data_feed)
|
|
59
76
|
|
|
60
77
|
super().__init__(name="brightdata_tools", tools=tools, **kwargs)
|
|
@@ -104,21 +121,22 @@ class BrightDataTools(Toolkit):
|
|
|
104
121
|
except Exception as e:
|
|
105
122
|
return f"Error scraping URL {url}: {e}"
|
|
106
123
|
|
|
107
|
-
def get_screenshot(self, agent: Agent, url: str, output_path: str = "screenshot.png") ->
|
|
124
|
+
def get_screenshot(self, agent: Agent, url: str, output_path: str = "screenshot.png") -> ToolResult:
|
|
108
125
|
"""
|
|
109
126
|
Capture a screenshot of a webpage
|
|
110
127
|
|
|
111
128
|
Args:
|
|
112
129
|
url (str): URL to screenshot
|
|
130
|
+
output_path (str): Output path for the screenshot (not used, kept for compatibility)
|
|
113
131
|
|
|
114
132
|
Returns:
|
|
115
|
-
|
|
133
|
+
ToolResult: Contains the screenshot image or error message.
|
|
116
134
|
"""
|
|
117
135
|
try:
|
|
118
136
|
if not self.api_key:
|
|
119
|
-
return "Please provide a Bright Data API key"
|
|
137
|
+
return ToolResult(content="Please provide a Bright Data API key")
|
|
120
138
|
if not url:
|
|
121
|
-
return "Please provide a URL to screenshot"
|
|
139
|
+
return ToolResult(content="Please provide a URL to screenshot")
|
|
122
140
|
|
|
123
141
|
log_info(f"Taking screenshot of: {url}")
|
|
124
142
|
|
|
@@ -140,18 +158,20 @@ class BrightDataTools(Toolkit):
|
|
|
140
158
|
|
|
141
159
|
media_id = str(uuid4())
|
|
142
160
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
)
|
|
161
|
+
# Create Image for the screenshot
|
|
162
|
+
image_artifact = Image(
|
|
163
|
+
id=media_id,
|
|
164
|
+
content=base64_encoded_image.encode("utf-8"),
|
|
165
|
+
mime_type="image/png",
|
|
166
|
+
original_prompt=f"Screenshot of {url}",
|
|
150
167
|
)
|
|
168
|
+
|
|
151
169
|
log_debug(f"Screenshot captured and added as artifact with ID: {media_id}")
|
|
152
|
-
return
|
|
170
|
+
return ToolResult(
|
|
171
|
+
content=f"Screenshot captured and added as artifact with ID: {media_id}", images=[image_artifact]
|
|
172
|
+
)
|
|
153
173
|
except Exception as e:
|
|
154
|
-
return f"Error taking screenshot of {url}: {e}"
|
|
174
|
+
return ToolResult(content=f"Error taking screenshot of {url}: {e}")
|
|
155
175
|
|
|
156
176
|
def search_engine(
|
|
157
177
|
self,
|
agno/tools/browserbase.py
CHANGED
|
@@ -24,6 +24,11 @@ class BrowserbaseTools(Toolkit):
|
|
|
24
24
|
api_key: Optional[str] = None,
|
|
25
25
|
project_id: Optional[str] = None,
|
|
26
26
|
base_url: Optional[str] = None,
|
|
27
|
+
enable_navigate_to: bool = True,
|
|
28
|
+
enable_screenshot: bool = True,
|
|
29
|
+
enable_get_page_content: bool = True,
|
|
30
|
+
enable_close_session: bool = True,
|
|
31
|
+
all: bool = False,
|
|
27
32
|
**kwargs,
|
|
28
33
|
):
|
|
29
34
|
"""Initialize BrowserbaseTools.
|
|
@@ -61,10 +66,14 @@ class BrowserbaseTools(Toolkit):
|
|
|
61
66
|
self._connect_url = None
|
|
62
67
|
|
|
63
68
|
tools: List[Any] = []
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
69
|
+
if all or enable_navigate_to:
|
|
70
|
+
tools.append(self.navigate_to)
|
|
71
|
+
if all or enable_screenshot:
|
|
72
|
+
tools.append(self.screenshot)
|
|
73
|
+
if all or enable_get_page_content:
|
|
74
|
+
tools.append(self.get_page_content)
|
|
75
|
+
if all or enable_close_session:
|
|
76
|
+
tools.append(self.close_session)
|
|
68
77
|
|
|
69
78
|
super().__init__(name="browserbase_tools", tools=tools, **kwargs)
|
|
70
79
|
|
agno/tools/calcom.py
CHANGED
|
@@ -18,11 +18,13 @@ class CalComTools(Toolkit):
|
|
|
18
18
|
api_key: Optional[str] = None,
|
|
19
19
|
event_type_id: Optional[int] = None,
|
|
20
20
|
user_timezone: Optional[str] = None,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
# Enable flags for <6 functions
|
|
22
|
+
enable_get_available_slots: bool = True,
|
|
23
|
+
enable_create_booking: bool = True,
|
|
24
|
+
enable_get_upcoming_bookings: bool = True,
|
|
25
|
+
enable_reschedule_booking: bool = True,
|
|
26
|
+
enable_cancel_booking: bool = True,
|
|
27
|
+
all: bool = False,
|
|
26
28
|
**kwargs,
|
|
27
29
|
):
|
|
28
30
|
"""Initialize the Cal.com toolkit.
|
|
@@ -49,15 +51,15 @@ class CalComTools(Toolkit):
|
|
|
49
51
|
self.user_timezone = user_timezone or "America/New_York"
|
|
50
52
|
|
|
51
53
|
tools: List[Any] = []
|
|
52
|
-
if
|
|
54
|
+
if all or enable_get_available_slots:
|
|
53
55
|
tools.append(self.get_available_slots)
|
|
54
|
-
if
|
|
56
|
+
if all or enable_create_booking:
|
|
55
57
|
tools.append(self.create_booking)
|
|
56
|
-
if
|
|
58
|
+
if all or enable_get_upcoming_bookings:
|
|
57
59
|
tools.append(self.get_upcoming_bookings)
|
|
58
|
-
if
|
|
60
|
+
if all or enable_reschedule_booking:
|
|
59
61
|
tools.append(self.reschedule_booking)
|
|
60
|
-
if
|
|
62
|
+
if all or enable_cancel_booking:
|
|
61
63
|
tools.append(self.cancel_booking)
|
|
62
64
|
|
|
63
65
|
super().__init__(name="calcom", tools=tools, **kwargs)
|
agno/tools/calculator.py
CHANGED
|
@@ -9,35 +9,18 @@ from agno.utils.log import log_debug, logger
|
|
|
9
9
|
class CalculatorTools(Toolkit):
|
|
10
10
|
def __init__(
|
|
11
11
|
self,
|
|
12
|
-
add: bool = True,
|
|
13
|
-
subtract: bool = True,
|
|
14
|
-
multiply: bool = True,
|
|
15
|
-
divide: bool = True,
|
|
16
|
-
exponentiate: bool = False,
|
|
17
|
-
factorial: bool = False,
|
|
18
|
-
is_prime: bool = False,
|
|
19
|
-
square_root: bool = False,
|
|
20
|
-
enable_all: bool = False,
|
|
21
12
|
**kwargs,
|
|
22
13
|
):
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
if exponentiate or enable_all:
|
|
34
|
-
tools.append(self.exponentiate)
|
|
35
|
-
if factorial or enable_all:
|
|
36
|
-
tools.append(self.factorial)
|
|
37
|
-
if is_prime or enable_all:
|
|
38
|
-
tools.append(self.is_prime)
|
|
39
|
-
if square_root or enable_all:
|
|
40
|
-
tools.append(self.square_root)
|
|
14
|
+
tools: List[Callable] = [
|
|
15
|
+
self.add,
|
|
16
|
+
self.subtract,
|
|
17
|
+
self.multiply,
|
|
18
|
+
self.divide,
|
|
19
|
+
self.exponentiate,
|
|
20
|
+
self.factorial,
|
|
21
|
+
self.is_prime,
|
|
22
|
+
self.square_root,
|
|
23
|
+
]
|
|
41
24
|
|
|
42
25
|
# Initialize the toolkit with auto-registration enabled
|
|
43
26
|
super().__init__(name="calculator", tools=tools, **kwargs)
|