agno 1.8.1__py3-none-any.whl → 2.0.0a1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agno/__init__.py +8 -0
- agno/agent/__init__.py +19 -27
- agno/agent/agent.py +2778 -4123
- agno/api/agent.py +9 -65
- agno/api/api.py +5 -46
- agno/api/evals.py +6 -17
- agno/api/os.py +17 -0
- agno/api/routes.py +6 -41
- agno/api/schemas/__init__.py +9 -0
- agno/api/schemas/agent.py +5 -21
- agno/api/schemas/evals.py +7 -16
- agno/api/schemas/os.py +14 -0
- agno/api/schemas/team.py +5 -21
- agno/api/schemas/utils.py +21 -0
- agno/api/schemas/workflows.py +11 -7
- agno/api/settings.py +53 -0
- agno/api/team.py +9 -64
- agno/api/workflow.py +28 -0
- agno/cloud/aws/base.py +214 -0
- agno/cloud/aws/s3/__init__.py +2 -0
- agno/cloud/aws/s3/api_client.py +43 -0
- agno/cloud/aws/s3/bucket.py +195 -0
- agno/cloud/aws/s3/object.py +57 -0
- agno/db/__init__.py +24 -0
- agno/db/base.py +245 -0
- agno/db/dynamo/__init__.py +3 -0
- agno/db/dynamo/dynamo.py +1749 -0
- agno/db/dynamo/schemas.py +278 -0
- agno/db/dynamo/utils.py +684 -0
- agno/db/firestore/__init__.py +3 -0
- agno/db/firestore/firestore.py +1438 -0
- agno/db/firestore/schemas.py +130 -0
- agno/db/firestore/utils.py +278 -0
- agno/db/gcs_json/__init__.py +3 -0
- agno/db/gcs_json/gcs_json_db.py +1001 -0
- agno/db/gcs_json/utils.py +194 -0
- agno/db/in_memory/__init__.py +3 -0
- agno/db/in_memory/in_memory_db.py +888 -0
- agno/db/in_memory/utils.py +172 -0
- agno/db/json/__init__.py +3 -0
- agno/db/json/json_db.py +1051 -0
- agno/db/json/utils.py +196 -0
- agno/db/migrations/v1_to_v2.py +162 -0
- agno/db/mongo/__init__.py +3 -0
- agno/db/mongo/mongo.py +1417 -0
- agno/db/mongo/schemas.py +77 -0
- agno/db/mongo/utils.py +204 -0
- agno/db/mysql/__init__.py +3 -0
- agno/db/mysql/mysql.py +1719 -0
- agno/db/mysql/schemas.py +124 -0
- agno/db/mysql/utils.py +298 -0
- agno/db/postgres/__init__.py +3 -0
- agno/db/postgres/postgres.py +1720 -0
- agno/db/postgres/schemas.py +124 -0
- agno/db/postgres/utils.py +281 -0
- agno/db/redis/__init__.py +3 -0
- agno/db/redis/redis.py +1371 -0
- agno/db/redis/schemas.py +109 -0
- agno/db/redis/utils.py +288 -0
- agno/db/schemas/__init__.py +3 -0
- agno/db/schemas/evals.py +33 -0
- agno/db/schemas/knowledge.py +40 -0
- agno/db/schemas/memory.py +46 -0
- agno/db/singlestore/__init__.py +3 -0
- agno/db/singlestore/schemas.py +116 -0
- agno/db/singlestore/singlestore.py +1722 -0
- agno/db/singlestore/utils.py +327 -0
- agno/db/sqlite/__init__.py +3 -0
- agno/db/sqlite/schemas.py +119 -0
- agno/db/sqlite/sqlite.py +1680 -0
- agno/db/sqlite/utils.py +269 -0
- agno/db/utils.py +88 -0
- agno/eval/__init__.py +14 -0
- agno/eval/accuracy.py +142 -43
- agno/eval/performance.py +88 -23
- agno/eval/reliability.py +73 -20
- agno/eval/utils.py +23 -13
- agno/integrations/discord/__init__.py +3 -0
- agno/{app → integrations}/discord/client.py +10 -10
- agno/knowledge/__init__.py +2 -2
- agno/{document → knowledge}/chunking/agentic.py +2 -2
- agno/{document → knowledge}/chunking/document.py +2 -2
- agno/{document → knowledge}/chunking/fixed.py +3 -3
- agno/{document → knowledge}/chunking/markdown.py +2 -2
- agno/{document → knowledge}/chunking/recursive.py +2 -2
- agno/{document → knowledge}/chunking/row.py +2 -2
- agno/knowledge/chunking/semantic.py +59 -0
- agno/knowledge/chunking/strategy.py +121 -0
- agno/knowledge/content.py +74 -0
- agno/knowledge/document/__init__.py +5 -0
- agno/{document → knowledge/document}/base.py +12 -2
- agno/knowledge/embedder/__init__.py +5 -0
- agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
- agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
- agno/{embedder → knowledge/embedder}/base.py +6 -0
- agno/{embedder → knowledge/embedder}/cohere.py +72 -1
- agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
- agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
- agno/{embedder → knowledge/embedder}/google.py +74 -1
- agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
- agno/{embedder → knowledge/embedder}/jina.py +48 -2
- agno/knowledge/embedder/langdb.py +22 -0
- agno/knowledge/embedder/mistral.py +139 -0
- agno/{embedder → knowledge/embedder}/nebius.py +1 -1
- agno/{embedder → knowledge/embedder}/ollama.py +54 -3
- agno/knowledge/embedder/openai.py +223 -0
- agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
- agno/{embedder → knowledge/embedder}/together.py +1 -1
- agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
- agno/knowledge/knowledge.py +1515 -0
- agno/knowledge/reader/__init__.py +7 -0
- agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
- agno/knowledge/reader/base.py +88 -0
- agno/{document → knowledge}/reader/csv_reader.py +68 -15
- agno/knowledge/reader/docx_reader.py +83 -0
- agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
- agno/knowledge/reader/gcs_reader.py +67 -0
- agno/{document → knowledge}/reader/json_reader.py +30 -9
- agno/{document → knowledge}/reader/markdown_reader.py +36 -9
- agno/{document → knowledge}/reader/pdf_reader.py +79 -21
- agno/knowledge/reader/reader_factory.py +275 -0
- agno/knowledge/reader/s3_reader.py +171 -0
- agno/{document → knowledge}/reader/text_reader.py +31 -10
- agno/knowledge/reader/url_reader.py +84 -0
- agno/knowledge/reader/web_search_reader.py +389 -0
- agno/{document → knowledge}/reader/website_reader.py +37 -10
- agno/knowledge/reader/wikipedia_reader.py +59 -0
- agno/knowledge/reader/youtube_reader.py +78 -0
- agno/knowledge/remote_content/remote_content.py +88 -0
- agno/{reranker → knowledge/reranker}/base.py +1 -1
- agno/{reranker → knowledge/reranker}/cohere.py +2 -2
- agno/{reranker → knowledge/reranker}/infinity.py +2 -2
- agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
- agno/knowledge/types.py +30 -0
- agno/knowledge/utils.py +169 -0
- agno/memory/__init__.py +2 -10
- agno/memory/manager.py +1003 -148
- agno/models/aimlapi/__init__.py +2 -2
- agno/models/aimlapi/aimlapi.py +6 -6
- agno/models/anthropic/claude.py +129 -82
- agno/models/aws/bedrock.py +107 -175
- agno/models/aws/claude.py +64 -18
- agno/models/azure/ai_foundry.py +73 -23
- agno/models/base.py +347 -287
- agno/models/cerebras/cerebras.py +84 -27
- agno/models/cohere/chat.py +106 -98
- agno/models/google/gemini.py +100 -42
- agno/models/groq/groq.py +97 -35
- agno/models/huggingface/huggingface.py +92 -27
- agno/models/ibm/watsonx.py +72 -13
- agno/models/litellm/chat.py +85 -13
- agno/models/message.py +38 -144
- agno/models/meta/llama.py +85 -49
- agno/models/metrics.py +120 -0
- agno/models/mistral/mistral.py +90 -21
- agno/models/ollama/__init__.py +0 -2
- agno/models/ollama/chat.py +84 -46
- agno/models/openai/chat.py +121 -23
- agno/models/openai/responses.py +178 -105
- agno/models/perplexity/perplexity.py +26 -2
- agno/models/portkey/portkey.py +0 -7
- agno/models/response.py +14 -8
- agno/models/utils.py +20 -0
- agno/models/vercel/__init__.py +2 -2
- agno/models/vercel/v0.py +1 -1
- agno/models/vllm/__init__.py +2 -2
- agno/models/vllm/vllm.py +3 -3
- agno/models/xai/xai.py +10 -10
- agno/os/__init__.py +3 -0
- agno/os/app.py +393 -0
- agno/os/auth.py +47 -0
- agno/os/config.py +103 -0
- agno/os/interfaces/agui/__init__.py +3 -0
- agno/os/interfaces/agui/agui.py +31 -0
- agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
- agno/{app → os/interfaces}/agui/utils.py +65 -28
- agno/os/interfaces/base.py +21 -0
- agno/os/interfaces/slack/__init__.py +3 -0
- agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
- agno/os/interfaces/slack/slack.py +33 -0
- agno/os/interfaces/whatsapp/__init__.py +3 -0
- agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
- agno/os/interfaces/whatsapp/whatsapp.py +30 -0
- agno/os/router.py +843 -0
- agno/os/routers/__init__.py +3 -0
- agno/os/routers/evals/__init__.py +3 -0
- agno/os/routers/evals/evals.py +204 -0
- agno/os/routers/evals/schemas.py +142 -0
- agno/os/routers/evals/utils.py +161 -0
- agno/os/routers/knowledge/__init__.py +3 -0
- agno/os/routers/knowledge/knowledge.py +413 -0
- agno/os/routers/knowledge/schemas.py +118 -0
- agno/os/routers/memory/__init__.py +3 -0
- agno/os/routers/memory/memory.py +179 -0
- agno/os/routers/memory/schemas.py +58 -0
- agno/os/routers/metrics/__init__.py +3 -0
- agno/os/routers/metrics/metrics.py +58 -0
- agno/os/routers/metrics/schemas.py +47 -0
- agno/os/routers/session/__init__.py +3 -0
- agno/os/routers/session/session.py +163 -0
- agno/os/schema.py +892 -0
- agno/{app/playground → os}/settings.py +8 -15
- agno/os/utils.py +270 -0
- agno/reasoning/azure_ai_foundry.py +4 -4
- agno/reasoning/deepseek.py +4 -4
- agno/reasoning/default.py +6 -11
- agno/reasoning/groq.py +4 -4
- agno/reasoning/helpers.py +4 -6
- agno/reasoning/ollama.py +4 -4
- agno/reasoning/openai.py +4 -4
- agno/run/{response.py → agent.py} +144 -72
- agno/run/base.py +44 -58
- agno/run/cancel.py +83 -0
- agno/run/team.py +133 -77
- agno/run/workflow.py +537 -12
- agno/session/__init__.py +10 -0
- agno/session/agent.py +244 -0
- agno/session/summary.py +225 -0
- agno/session/team.py +262 -0
- agno/{storage/session/v2 → session}/workflow.py +47 -24
- agno/team/__init__.py +15 -16
- agno/team/team.py +2961 -4253
- agno/tools/agentql.py +14 -5
- agno/tools/airflow.py +9 -4
- agno/tools/api.py +7 -3
- agno/tools/apify.py +2 -46
- agno/tools/arxiv.py +8 -3
- agno/tools/aws_lambda.py +7 -5
- agno/tools/aws_ses.py +7 -1
- agno/tools/baidusearch.py +4 -1
- agno/tools/bitbucket.py +4 -4
- agno/tools/brandfetch.py +14 -11
- agno/tools/bravesearch.py +4 -1
- agno/tools/brightdata.py +42 -22
- agno/tools/browserbase.py +13 -4
- agno/tools/calcom.py +12 -10
- agno/tools/calculator.py +10 -27
- agno/tools/cartesia.py +18 -13
- agno/tools/{clickup_tool.py → clickup.py} +12 -25
- agno/tools/confluence.py +8 -8
- agno/tools/crawl4ai.py +7 -1
- agno/tools/csv_toolkit.py +9 -8
- agno/tools/dalle.py +18 -11
- agno/tools/daytona.py +13 -16
- agno/tools/decorator.py +6 -3
- agno/tools/desi_vocal.py +16 -7
- agno/tools/discord.py +11 -8
- agno/tools/docker.py +30 -42
- agno/tools/duckdb.py +34 -53
- agno/tools/duckduckgo.py +8 -7
- agno/tools/e2b.py +61 -61
- agno/tools/eleven_labs.py +35 -28
- agno/tools/email.py +4 -1
- agno/tools/evm.py +7 -1
- agno/tools/exa.py +19 -14
- agno/tools/fal.py +29 -29
- agno/tools/file.py +9 -8
- agno/tools/financial_datasets.py +25 -44
- agno/tools/firecrawl.py +22 -22
- agno/tools/function.py +68 -17
- agno/tools/giphy.py +22 -10
- agno/tools/github.py +48 -126
- agno/tools/gmail.py +45 -61
- agno/tools/google_bigquery.py +7 -6
- agno/tools/google_maps.py +11 -26
- agno/tools/googlesearch.py +7 -2
- agno/tools/googlesheets.py +21 -17
- agno/tools/hackernews.py +9 -5
- agno/tools/jina.py +5 -4
- agno/tools/jira.py +18 -9
- agno/tools/knowledge.py +31 -32
- agno/tools/linear.py +18 -33
- agno/tools/linkup.py +5 -1
- agno/tools/local_file_system.py +8 -5
- agno/tools/lumalab.py +31 -19
- agno/tools/mem0.py +18 -12
- agno/tools/memori.py +14 -10
- agno/tools/mlx_transcribe.py +3 -2
- agno/tools/models/azure_openai.py +32 -14
- agno/tools/models/gemini.py +58 -31
- agno/tools/models/groq.py +29 -20
- agno/tools/models/nebius.py +27 -11
- agno/tools/models_labs.py +39 -15
- agno/tools/moviepy_video.py +7 -6
- agno/tools/neo4j.py +10 -8
- agno/tools/newspaper.py +7 -2
- agno/tools/newspaper4k.py +8 -3
- agno/tools/openai.py +57 -26
- agno/tools/openbb.py +12 -11
- agno/tools/opencv.py +62 -46
- agno/tools/openweather.py +14 -12
- agno/tools/pandas.py +11 -3
- agno/tools/postgres.py +4 -12
- agno/tools/pubmed.py +4 -1
- agno/tools/python.py +9 -22
- agno/tools/reasoning.py +35 -27
- agno/tools/reddit.py +11 -26
- agno/tools/replicate.py +54 -41
- agno/tools/resend.py +4 -1
- agno/tools/scrapegraph.py +15 -14
- agno/tools/searxng.py +10 -23
- agno/tools/serpapi.py +6 -3
- agno/tools/serper.py +13 -4
- agno/tools/shell.py +9 -2
- agno/tools/slack.py +12 -11
- agno/tools/sleep.py +3 -2
- agno/tools/spider.py +24 -4
- agno/tools/sql.py +7 -6
- agno/tools/tavily.py +6 -4
- agno/tools/telegram.py +12 -4
- agno/tools/todoist.py +11 -31
- agno/tools/toolkit.py +1 -1
- agno/tools/trafilatura.py +22 -6
- agno/tools/trello.py +9 -22
- agno/tools/twilio.py +10 -3
- agno/tools/user_control_flow.py +6 -1
- agno/tools/valyu.py +34 -5
- agno/tools/visualization.py +19 -28
- agno/tools/webbrowser.py +4 -3
- agno/tools/webex.py +11 -7
- agno/tools/website.py +15 -46
- agno/tools/webtools.py +12 -4
- agno/tools/whatsapp.py +5 -9
- agno/tools/wikipedia.py +20 -13
- agno/tools/x.py +14 -13
- agno/tools/yfinance.py +13 -40
- agno/tools/youtube.py +26 -20
- agno/tools/zendesk.py +7 -2
- agno/tools/zep.py +10 -7
- agno/tools/zoom.py +10 -9
- agno/utils/common.py +1 -19
- agno/utils/events.py +95 -118
- agno/utils/knowledge.py +29 -0
- agno/utils/log.py +2 -2
- agno/utils/mcp.py +11 -5
- agno/utils/media.py +39 -0
- agno/utils/message.py +12 -1
- agno/utils/models/claude.py +6 -4
- agno/utils/models/mistral.py +8 -7
- agno/utils/models/schema_utils.py +3 -3
- agno/utils/pprint.py +33 -32
- agno/utils/print_response/agent.py +779 -0
- agno/utils/print_response/team.py +1565 -0
- agno/utils/print_response/workflow.py +1451 -0
- agno/utils/prompts.py +14 -14
- agno/utils/reasoning.py +87 -0
- agno/utils/response.py +42 -42
- agno/utils/string.py +8 -22
- agno/utils/team.py +50 -0
- agno/utils/timer.py +2 -2
- agno/vectordb/base.py +33 -21
- agno/vectordb/cassandra/cassandra.py +287 -23
- agno/vectordb/chroma/chromadb.py +482 -59
- agno/vectordb/clickhouse/clickhousedb.py +270 -63
- agno/vectordb/couchbase/couchbase.py +309 -29
- agno/vectordb/lancedb/lance_db.py +360 -21
- agno/vectordb/langchaindb/__init__.py +5 -0
- agno/vectordb/langchaindb/langchaindb.py +145 -0
- agno/vectordb/lightrag/__init__.py +5 -0
- agno/vectordb/lightrag/lightrag.py +374 -0
- agno/vectordb/llamaindex/llamaindexdb.py +127 -0
- agno/vectordb/milvus/milvus.py +242 -32
- agno/vectordb/mongodb/mongodb.py +200 -24
- agno/vectordb/pgvector/pgvector.py +319 -37
- agno/vectordb/pineconedb/pineconedb.py +221 -27
- agno/vectordb/qdrant/qdrant.py +334 -14
- agno/vectordb/singlestore/singlestore.py +286 -29
- agno/vectordb/surrealdb/surrealdb.py +187 -7
- agno/vectordb/upstashdb/upstashdb.py +342 -26
- agno/vectordb/weaviate/weaviate.py +227 -165
- agno/workflow/__init__.py +17 -13
- agno/workflow/{v2/condition.py → condition.py} +135 -32
- agno/workflow/{v2/loop.py → loop.py} +115 -28
- agno/workflow/{v2/parallel.py → parallel.py} +138 -108
- agno/workflow/{v2/router.py → router.py} +133 -32
- agno/workflow/{v2/step.py → step.py} +200 -42
- agno/workflow/{v2/steps.py → steps.py} +147 -66
- agno/workflow/types.py +482 -0
- agno/workflow/workflow.py +2394 -696
- agno-2.0.0a1.dist-info/METADATA +355 -0
- agno-2.0.0a1.dist-info/RECORD +514 -0
- agno/agent/metrics.py +0 -107
- agno/api/app.py +0 -35
- agno/api/playground.py +0 -92
- agno/api/schemas/app.py +0 -12
- agno/api/schemas/playground.py +0 -22
- agno/api/schemas/user.py +0 -35
- agno/api/schemas/workspace.py +0 -46
- agno/api/user.py +0 -160
- agno/api/workflows.py +0 -33
- agno/api/workspace.py +0 -175
- agno/app/agui/__init__.py +0 -3
- agno/app/agui/app.py +0 -17
- agno/app/agui/sync_router.py +0 -120
- agno/app/base.py +0 -186
- agno/app/discord/__init__.py +0 -3
- agno/app/fastapi/__init__.py +0 -3
- agno/app/fastapi/app.py +0 -107
- agno/app/fastapi/async_router.py +0 -457
- agno/app/fastapi/sync_router.py +0 -448
- agno/app/playground/app.py +0 -228
- agno/app/playground/async_router.py +0 -1050
- agno/app/playground/deploy.py +0 -249
- agno/app/playground/operator.py +0 -183
- agno/app/playground/schemas.py +0 -220
- agno/app/playground/serve.py +0 -55
- agno/app/playground/sync_router.py +0 -1042
- agno/app/playground/utils.py +0 -46
- agno/app/settings.py +0 -15
- agno/app/slack/__init__.py +0 -3
- agno/app/slack/app.py +0 -19
- agno/app/slack/sync_router.py +0 -92
- agno/app/utils.py +0 -54
- agno/app/whatsapp/__init__.py +0 -3
- agno/app/whatsapp/app.py +0 -15
- agno/app/whatsapp/sync_router.py +0 -197
- agno/cli/auth_server.py +0 -249
- agno/cli/config.py +0 -274
- agno/cli/console.py +0 -88
- agno/cli/credentials.py +0 -23
- agno/cli/entrypoint.py +0 -571
- agno/cli/operator.py +0 -357
- agno/cli/settings.py +0 -96
- agno/cli/ws/ws_cli.py +0 -817
- agno/constants.py +0 -13
- agno/document/__init__.py +0 -5
- agno/document/chunking/semantic.py +0 -45
- agno/document/chunking/strategy.py +0 -31
- agno/document/reader/__init__.py +0 -5
- agno/document/reader/base.py +0 -47
- agno/document/reader/docx_reader.py +0 -60
- agno/document/reader/gcs/pdf_reader.py +0 -44
- agno/document/reader/s3/pdf_reader.py +0 -59
- agno/document/reader/s3/text_reader.py +0 -63
- agno/document/reader/url_reader.py +0 -59
- agno/document/reader/youtube_reader.py +0 -58
- agno/embedder/__init__.py +0 -5
- agno/embedder/langdb.py +0 -80
- agno/embedder/mistral.py +0 -82
- agno/embedder/openai.py +0 -78
- agno/file/__init__.py +0 -5
- agno/file/file.py +0 -16
- agno/file/local/csv.py +0 -32
- agno/file/local/txt.py +0 -19
- agno/infra/app.py +0 -240
- agno/infra/base.py +0 -144
- agno/infra/context.py +0 -20
- agno/infra/db_app.py +0 -52
- agno/infra/resource.py +0 -205
- agno/infra/resources.py +0 -55
- agno/knowledge/agent.py +0 -702
- agno/knowledge/arxiv.py +0 -33
- agno/knowledge/combined.py +0 -36
- agno/knowledge/csv.py +0 -144
- agno/knowledge/csv_url.py +0 -124
- agno/knowledge/document.py +0 -223
- agno/knowledge/docx.py +0 -137
- agno/knowledge/firecrawl.py +0 -34
- agno/knowledge/gcs/__init__.py +0 -0
- agno/knowledge/gcs/base.py +0 -39
- agno/knowledge/gcs/pdf.py +0 -125
- agno/knowledge/json.py +0 -137
- agno/knowledge/langchain.py +0 -71
- agno/knowledge/light_rag.py +0 -273
- agno/knowledge/llamaindex.py +0 -66
- agno/knowledge/markdown.py +0 -154
- agno/knowledge/pdf.py +0 -164
- agno/knowledge/pdf_bytes.py +0 -42
- agno/knowledge/pdf_url.py +0 -148
- agno/knowledge/s3/__init__.py +0 -0
- agno/knowledge/s3/base.py +0 -64
- agno/knowledge/s3/pdf.py +0 -33
- agno/knowledge/s3/text.py +0 -34
- agno/knowledge/text.py +0 -141
- agno/knowledge/url.py +0 -46
- agno/knowledge/website.py +0 -179
- agno/knowledge/wikipedia.py +0 -32
- agno/knowledge/youtube.py +0 -35
- agno/memory/agent.py +0 -423
- agno/memory/classifier.py +0 -104
- agno/memory/db/__init__.py +0 -5
- agno/memory/db/base.py +0 -42
- agno/memory/db/mongodb.py +0 -189
- agno/memory/db/postgres.py +0 -203
- agno/memory/db/sqlite.py +0 -193
- agno/memory/memory.py +0 -22
- agno/memory/row.py +0 -36
- agno/memory/summarizer.py +0 -201
- agno/memory/summary.py +0 -19
- agno/memory/team.py +0 -415
- agno/memory/v2/__init__.py +0 -2
- agno/memory/v2/db/__init__.py +0 -1
- agno/memory/v2/db/base.py +0 -42
- agno/memory/v2/db/firestore.py +0 -339
- agno/memory/v2/db/mongodb.py +0 -196
- agno/memory/v2/db/postgres.py +0 -214
- agno/memory/v2/db/redis.py +0 -187
- agno/memory/v2/db/schema.py +0 -54
- agno/memory/v2/db/sqlite.py +0 -209
- agno/memory/v2/manager.py +0 -437
- agno/memory/v2/memory.py +0 -1097
- agno/memory/v2/schema.py +0 -55
- agno/memory/v2/summarizer.py +0 -215
- agno/memory/workflow.py +0 -38
- agno/models/ollama/tools.py +0 -430
- agno/models/qwen/__init__.py +0 -5
- agno/playground/__init__.py +0 -10
- agno/playground/deploy.py +0 -3
- agno/playground/playground.py +0 -3
- agno/playground/serve.py +0 -3
- agno/playground/settings.py +0 -3
- agno/reranker/__init__.py +0 -0
- agno/run/v2/__init__.py +0 -0
- agno/run/v2/workflow.py +0 -567
- agno/storage/__init__.py +0 -0
- agno/storage/agent/__init__.py +0 -0
- agno/storage/agent/dynamodb.py +0 -1
- agno/storage/agent/json.py +0 -1
- agno/storage/agent/mongodb.py +0 -1
- agno/storage/agent/postgres.py +0 -1
- agno/storage/agent/singlestore.py +0 -1
- agno/storage/agent/sqlite.py +0 -1
- agno/storage/agent/yaml.py +0 -1
- agno/storage/base.py +0 -60
- agno/storage/dynamodb.py +0 -673
- agno/storage/firestore.py +0 -297
- agno/storage/gcs_json.py +0 -261
- agno/storage/in_memory.py +0 -234
- agno/storage/json.py +0 -237
- agno/storage/mongodb.py +0 -328
- agno/storage/mysql.py +0 -685
- agno/storage/postgres.py +0 -682
- agno/storage/redis.py +0 -336
- agno/storage/session/__init__.py +0 -16
- agno/storage/session/agent.py +0 -64
- agno/storage/session/team.py +0 -63
- agno/storage/session/v2/__init__.py +0 -5
- agno/storage/session/workflow.py +0 -61
- agno/storage/singlestore.py +0 -606
- agno/storage/sqlite.py +0 -646
- agno/storage/workflow/__init__.py +0 -0
- agno/storage/workflow/mongodb.py +0 -1
- agno/storage/workflow/postgres.py +0 -1
- agno/storage/workflow/sqlite.py +0 -1
- agno/storage/yaml.py +0 -241
- agno/tools/thinking.py +0 -73
- agno/utils/defaults.py +0 -57
- agno/utils/filesystem.py +0 -39
- agno/utils/git.py +0 -52
- agno/utils/json_io.py +0 -30
- agno/utils/load_env.py +0 -19
- agno/utils/py_io.py +0 -19
- agno/utils/pyproject.py +0 -18
- agno/utils/resource_filter.py +0 -31
- agno/workflow/v2/__init__.py +0 -21
- agno/workflow/v2/types.py +0 -357
- agno/workflow/v2/workflow.py +0 -3312
- agno/workspace/__init__.py +0 -0
- agno/workspace/config.py +0 -325
- agno/workspace/enums.py +0 -6
- agno/workspace/helpers.py +0 -52
- agno/workspace/operator.py +0 -757
- agno/workspace/settings.py +0 -158
- agno-1.8.1.dist-info/METADATA +0 -982
- agno-1.8.1.dist-info/RECORD +0 -566
- agno-1.8.1.dist-info/entry_points.txt +0 -3
- /agno/{app → db/migrations}/__init__.py +0 -0
- /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
- /agno/{cli → integrations}/__init__.py +0 -0
- /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
- /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
- /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
- /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
- /agno/{app → os/interfaces}/slack/security.py +0 -0
- /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
- /agno/{file/local → utils/print_response}/__init__.py +0 -0
- /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/WHEEL +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/licenses/LICENSE +0 -0
- {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/top_level.txt +0 -0
agno/tools/github.py
CHANGED
|
@@ -7,7 +7,6 @@ from agno.utils.log import log_debug, logger
|
|
|
7
7
|
|
|
8
8
|
try:
|
|
9
9
|
from github import Auth, Github, GithubException
|
|
10
|
-
from github.GithubObject import NotSet
|
|
11
10
|
|
|
12
11
|
except ImportError:
|
|
13
12
|
raise ImportError("`PyGithub` not installed. Please install using `pip install pygithub`")
|
|
@@ -18,45 +17,6 @@ class GithubTools(Toolkit):
|
|
|
18
17
|
self,
|
|
19
18
|
access_token: Optional[str] = None,
|
|
20
19
|
base_url: Optional[str] = None,
|
|
21
|
-
search_repositories: bool = True,
|
|
22
|
-
list_repositories: bool = False,
|
|
23
|
-
get_repository: bool = False,
|
|
24
|
-
get_pull_request: bool = False,
|
|
25
|
-
get_pull_request_changes: bool = False,
|
|
26
|
-
create_issue: bool = False,
|
|
27
|
-
create_repository: bool = False,
|
|
28
|
-
delete_repository: bool = False,
|
|
29
|
-
get_repository_languages: bool = False,
|
|
30
|
-
list_branches: bool = False,
|
|
31
|
-
get_pull_request_count: bool = False,
|
|
32
|
-
get_repository_stars: bool = False,
|
|
33
|
-
get_pull_requests: bool = False,
|
|
34
|
-
get_pull_request_comments: bool = False,
|
|
35
|
-
create_pull_request_comment: bool = False,
|
|
36
|
-
edit_pull_request_comment: bool = False,
|
|
37
|
-
get_pull_request_with_details: bool = False,
|
|
38
|
-
get_repository_with_stats: bool = False,
|
|
39
|
-
list_issues: bool = False,
|
|
40
|
-
get_issue: bool = False,
|
|
41
|
-
comment_on_issue: bool = False,
|
|
42
|
-
close_issue: bool = False,
|
|
43
|
-
reopen_issue: bool = False,
|
|
44
|
-
assign_issue: bool = False,
|
|
45
|
-
label_issue: bool = False,
|
|
46
|
-
list_issue_comments: bool = False,
|
|
47
|
-
edit_issue: bool = False,
|
|
48
|
-
create_pull_request: bool = False,
|
|
49
|
-
create_file: bool = False,
|
|
50
|
-
get_file_content: bool = False,
|
|
51
|
-
update_file: bool = True,
|
|
52
|
-
delete_file: bool = False,
|
|
53
|
-
get_directory_content: bool = False,
|
|
54
|
-
get_branch_content: bool = False,
|
|
55
|
-
create_branch: bool = False,
|
|
56
|
-
set_default_branch: bool = False,
|
|
57
|
-
search_code: bool = False,
|
|
58
|
-
search_issues_and_prs: bool = False,
|
|
59
|
-
create_review_request: bool = False,
|
|
60
20
|
**kwargs,
|
|
61
21
|
):
|
|
62
22
|
self.access_token = access_token or getenv("GITHUB_ACCESS_TOKEN")
|
|
@@ -64,85 +24,47 @@ class GithubTools(Toolkit):
|
|
|
64
24
|
|
|
65
25
|
self.g = self.authenticate()
|
|
66
26
|
|
|
67
|
-
tools: List[Any] = [
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
if comment_on_issue:
|
|
109
|
-
tools.append(self.comment_on_issue)
|
|
110
|
-
if close_issue:
|
|
111
|
-
tools.append(self.close_issue)
|
|
112
|
-
if reopen_issue:
|
|
113
|
-
tools.append(self.reopen_issue)
|
|
114
|
-
if assign_issue:
|
|
115
|
-
tools.append(self.assign_issue)
|
|
116
|
-
if label_issue:
|
|
117
|
-
tools.append(self.label_issue)
|
|
118
|
-
if list_issue_comments:
|
|
119
|
-
tools.append(self.list_issue_comments)
|
|
120
|
-
if edit_issue:
|
|
121
|
-
tools.append(self.edit_issue)
|
|
122
|
-
if create_pull_request:
|
|
123
|
-
tools.append(self.create_pull_request)
|
|
124
|
-
if create_file:
|
|
125
|
-
tools.append(self.create_file)
|
|
126
|
-
if get_file_content:
|
|
127
|
-
tools.append(self.get_file_content)
|
|
128
|
-
if update_file:
|
|
129
|
-
tools.append(self.update_file)
|
|
130
|
-
if delete_file:
|
|
131
|
-
tools.append(self.delete_file)
|
|
132
|
-
if get_directory_content:
|
|
133
|
-
tools.append(self.get_directory_content)
|
|
134
|
-
if get_branch_content:
|
|
135
|
-
tools.append(self.get_branch_content)
|
|
136
|
-
if create_branch:
|
|
137
|
-
tools.append(self.create_branch)
|
|
138
|
-
if set_default_branch:
|
|
139
|
-
tools.append(self.set_default_branch)
|
|
140
|
-
if search_code:
|
|
141
|
-
tools.append(self.search_code)
|
|
142
|
-
if search_issues_and_prs:
|
|
143
|
-
tools.append(self.search_issues_and_prs)
|
|
144
|
-
if create_review_request:
|
|
145
|
-
tools.append(self.create_review_request)
|
|
27
|
+
tools: List[Any] = [
|
|
28
|
+
self.search_repositories,
|
|
29
|
+
self.list_repositories,
|
|
30
|
+
self.get_repository,
|
|
31
|
+
self.get_pull_request,
|
|
32
|
+
self.get_pull_request_changes,
|
|
33
|
+
self.create_issue,
|
|
34
|
+
self.create_repository,
|
|
35
|
+
self.delete_repository,
|
|
36
|
+
self.list_branches,
|
|
37
|
+
self.get_repository_languages,
|
|
38
|
+
self.get_pull_request_count,
|
|
39
|
+
self.get_repository_stars,
|
|
40
|
+
self.get_pull_requests,
|
|
41
|
+
self.get_pull_request_comments,
|
|
42
|
+
self.create_pull_request_comment,
|
|
43
|
+
self.edit_pull_request_comment,
|
|
44
|
+
self.get_pull_request_with_details,
|
|
45
|
+
self.get_repository_with_stats,
|
|
46
|
+
self.list_issues,
|
|
47
|
+
self.get_issue,
|
|
48
|
+
self.comment_on_issue,
|
|
49
|
+
self.close_issue,
|
|
50
|
+
self.reopen_issue,
|
|
51
|
+
self.assign_issue,
|
|
52
|
+
self.label_issue,
|
|
53
|
+
self.list_issue_comments,
|
|
54
|
+
self.edit_issue,
|
|
55
|
+
self.create_pull_request,
|
|
56
|
+
self.create_file,
|
|
57
|
+
self.get_file_content,
|
|
58
|
+
self.update_file,
|
|
59
|
+
self.delete_file,
|
|
60
|
+
self.get_directory_content,
|
|
61
|
+
self.get_branch_content,
|
|
62
|
+
self.create_branch,
|
|
63
|
+
self.set_default_branch,
|
|
64
|
+
self.search_code,
|
|
65
|
+
self.search_issues_and_prs,
|
|
66
|
+
self.create_review_request,
|
|
67
|
+
]
|
|
146
68
|
|
|
147
69
|
super().__init__(name="github", tools=tools, **kwargs)
|
|
148
70
|
|
|
@@ -428,7 +350,7 @@ class GithubTools(Toolkit):
|
|
|
428
350
|
logger.error(f"Error getting pull request changes: {e}")
|
|
429
351
|
return json.dumps({"error": str(e)})
|
|
430
352
|
|
|
431
|
-
def create_issue(self, repo_name: str, title: str, body: Optional[str] =
|
|
353
|
+
def create_issue(self, repo_name: str, title: str, body: Optional[str] = None) -> str:
|
|
432
354
|
"""Create an issue in a repository.
|
|
433
355
|
|
|
434
356
|
Args:
|
|
@@ -442,7 +364,7 @@ class GithubTools(Toolkit):
|
|
|
442
364
|
log_debug(f"Creating issue in repository: {repo_name}")
|
|
443
365
|
try:
|
|
444
366
|
repo = self.g.get_repo(repo_name)
|
|
445
|
-
issue = repo.create_issue(title=title, body=body)
|
|
367
|
+
issue = repo.create_issue(title=title, body=body) # type: ignore
|
|
446
368
|
issue_info = {
|
|
447
369
|
"id": issue.id,
|
|
448
370
|
"number": issue.number,
|
|
@@ -697,8 +619,8 @@ class GithubTools(Toolkit):
|
|
|
697
619
|
self,
|
|
698
620
|
repo_name: str,
|
|
699
621
|
issue_number: int,
|
|
700
|
-
title: Optional[str] =
|
|
701
|
-
body: Optional[str] =
|
|
622
|
+
title: Optional[str] = None,
|
|
623
|
+
body: Optional[str] = None,
|
|
702
624
|
) -> str:
|
|
703
625
|
"""Edit the title or body of an issue.
|
|
704
626
|
|
|
@@ -715,7 +637,7 @@ class GithubTools(Toolkit):
|
|
|
715
637
|
try:
|
|
716
638
|
repo = self.g.get_repo(repo_name)
|
|
717
639
|
issue = repo.get_issue(number=issue_number)
|
|
718
|
-
issue.edit(title=title, body=body)
|
|
640
|
+
issue.edit(title=title, body=body) # type: ignore
|
|
719
641
|
return json.dumps({"message": f"Issue #{issue_number} updated."}, indent=2)
|
|
720
642
|
except GithubException as e:
|
|
721
643
|
logger.error(f"Error editing issue: {e}")
|
|
@@ -1324,7 +1246,7 @@ class GithubTools(Toolkit):
|
|
|
1324
1246
|
path: str,
|
|
1325
1247
|
content: str,
|
|
1326
1248
|
message: str,
|
|
1327
|
-
branch: Optional[str] =
|
|
1249
|
+
branch: Optional[str] = None,
|
|
1328
1250
|
) -> str:
|
|
1329
1251
|
"""Create a new file in a repository.
|
|
1330
1252
|
|
|
@@ -1350,7 +1272,7 @@ class GithubTools(Toolkit):
|
|
|
1350
1272
|
|
|
1351
1273
|
# Extract relevant information
|
|
1352
1274
|
file_info = {
|
|
1353
|
-
"path": result["content"].path,
|
|
1275
|
+
"path": result["content"].path, # type: ignore
|
|
1354
1276
|
"sha": result["content"].sha,
|
|
1355
1277
|
"url": result["content"].html_url,
|
|
1356
1278
|
"commit": {
|
agno/tools/gmail.py
CHANGED
|
@@ -101,17 +101,6 @@ class GmailTools(Toolkit):
|
|
|
101
101
|
|
|
102
102
|
def __init__(
|
|
103
103
|
self,
|
|
104
|
-
get_latest_emails: bool = True,
|
|
105
|
-
get_emails_from_user: bool = True,
|
|
106
|
-
get_unread_emails: bool = True,
|
|
107
|
-
get_starred_emails: bool = True,
|
|
108
|
-
get_emails_by_context: bool = True,
|
|
109
|
-
get_emails_by_date: bool = True,
|
|
110
|
-
get_emails_by_thread: bool = True,
|
|
111
|
-
create_draft_email: bool = True,
|
|
112
|
-
send_email: bool = True,
|
|
113
|
-
send_email_reply: bool = True,
|
|
114
|
-
search_emails: bool = True,
|
|
115
104
|
creds: Optional[Credentials] = None,
|
|
116
105
|
credentials_path: Optional[str] = None,
|
|
117
106
|
token_path: Optional[str] = None,
|
|
@@ -122,17 +111,6 @@ class GmailTools(Toolkit):
|
|
|
122
111
|
"""Initialize GmailTools and authenticate with Gmail API
|
|
123
112
|
|
|
124
113
|
Args:
|
|
125
|
-
get_latest_emails (bool): Enable getting latest emails. Defaults to True.
|
|
126
|
-
get_emails_from_user (bool): Enable getting emails from specific user. Defaults to True.
|
|
127
|
-
get_unread_emails (bool): Enable getting unread emails. Defaults to True.
|
|
128
|
-
get_starred_emails (bool): Enable getting starred emails. Defaults to True.
|
|
129
|
-
get_emails_by_context (bool): Enable getting emails by context. Defaults to True.
|
|
130
|
-
get_emails_by_date (bool): Enable getting emails by date. Defaults to True.
|
|
131
|
-
get_emails_by_thread (bool): Enable getting emails by thread. Defaults to True.
|
|
132
|
-
create_draft_email (bool): Enable creating draft emails. Defaults to True.
|
|
133
|
-
send_email (bool): Enable sending emails. Defaults to True.
|
|
134
|
-
search_emails (bool): Enable searching emails. Defaults to True.
|
|
135
|
-
send_email_reply (bool): Enable sending email replies. Defaults to True.
|
|
136
114
|
creds (Optional[Credentials]): Pre-fetched OAuth credentials. Use this to skip a new auth flow. Defaults to None.
|
|
137
115
|
credentials_path (Optional[str]): Path to credentials file. Defaults to None.
|
|
138
116
|
token_path (Optional[str]): Path to token file. Defaults to None.
|
|
@@ -146,55 +124,61 @@ class GmailTools(Toolkit):
|
|
|
146
124
|
self.scopes = scopes or self.DEFAULT_SCOPES
|
|
147
125
|
self.port = port
|
|
148
126
|
|
|
149
|
-
|
|
150
|
-
|
|
127
|
+
""" tools functions:
|
|
128
|
+
enable_get_latest_emails (bool): Enable getting latest emails.
|
|
129
|
+
enable_get_emails_from_user (bool): Enable getting emails from specific user.
|
|
130
|
+
enable_get_unread_emails (bool): Enable getting unread emails.
|
|
131
|
+
enable_get_starred_emails (bool): Enable getting starred emails.
|
|
132
|
+
enable_get_emails_by_context (bool): Enable getting emails by context.
|
|
133
|
+
enable_get_emails_by_date (bool): Enable getting emails by date.
|
|
134
|
+
enable_get_emails_by_thread (bool): Enable getting emails by thread.
|
|
135
|
+
enable_create_draft_email (bool): Enable creating draft emails.
|
|
136
|
+
enable_send_email (bool): Enable sending emails.
|
|
137
|
+
enable_send_email_reply (bool): Enable sending email replies.
|
|
138
|
+
all (bool): Enable all tools.
|
|
139
|
+
"""
|
|
140
|
+
|
|
141
|
+
tools: List[Any] = [
|
|
142
|
+
# Reading emails
|
|
143
|
+
self.get_latest_emails,
|
|
144
|
+
self.get_emails_from_user,
|
|
145
|
+
self.get_unread_emails,
|
|
146
|
+
self.get_starred_emails,
|
|
147
|
+
self.get_emails_by_context,
|
|
148
|
+
self.get_emails_by_date,
|
|
149
|
+
self.get_emails_by_thread,
|
|
150
|
+
self.search_emails,
|
|
151
|
+
# Composing emails
|
|
152
|
+
self.create_draft_email,
|
|
153
|
+
self.send_email,
|
|
154
|
+
self.send_email_reply,
|
|
155
|
+
]
|
|
156
|
+
|
|
157
|
+
super().__init__(name="gmail_tools", tools=tools, **kwargs)
|
|
158
|
+
|
|
159
|
+
# Validate that required scopes are present for requested operations (only check registered functions)
|
|
160
|
+
if (
|
|
161
|
+
"create_draft_email" in self.functions or "send_email" in self.functions
|
|
162
|
+
) and "https://www.googleapis.com/auth/gmail.compose" not in self.scopes:
|
|
151
163
|
raise ValueError(
|
|
152
164
|
"The scope https://www.googleapis.com/auth/gmail.compose is required for email composition operations"
|
|
153
165
|
)
|
|
154
|
-
|
|
155
166
|
read_operations = [
|
|
156
|
-
get_latest_emails,
|
|
157
|
-
get_emails_from_user,
|
|
158
|
-
get_unread_emails,
|
|
159
|
-
get_starred_emails,
|
|
160
|
-
get_emails_by_context,
|
|
161
|
-
get_emails_by_date,
|
|
162
|
-
get_emails_by_thread,
|
|
163
|
-
search_emails,
|
|
167
|
+
"get_latest_emails",
|
|
168
|
+
"get_emails_from_user",
|
|
169
|
+
"get_unread_emails",
|
|
170
|
+
"get_starred_emails",
|
|
171
|
+
"get_emails_by_context",
|
|
172
|
+
"get_emails_by_date",
|
|
173
|
+
"get_emails_by_thread",
|
|
174
|
+
"search_emails",
|
|
164
175
|
]
|
|
165
|
-
|
|
166
|
-
if any(read_operations):
|
|
176
|
+
if any(read_operation in self.functions for read_operation in read_operations):
|
|
167
177
|
read_scope = "https://www.googleapis.com/auth/gmail.readonly"
|
|
168
178
|
write_scope = "https://www.googleapis.com/auth/gmail.modify"
|
|
169
179
|
if read_scope not in self.scopes and write_scope not in self.scopes:
|
|
170
180
|
raise ValueError(f"The scope {read_scope} is required for email reading operations")
|
|
171
181
|
|
|
172
|
-
tools: List[Any] = []
|
|
173
|
-
if get_latest_emails:
|
|
174
|
-
tools.append(self.get_latest_emails)
|
|
175
|
-
if get_emails_from_user:
|
|
176
|
-
tools.append(self.get_emails_from_user)
|
|
177
|
-
if get_unread_emails:
|
|
178
|
-
tools.append(self.get_unread_emails)
|
|
179
|
-
if get_starred_emails:
|
|
180
|
-
tools.append(self.get_starred_emails)
|
|
181
|
-
if get_emails_by_context:
|
|
182
|
-
tools.append(self.get_emails_by_context)
|
|
183
|
-
if get_emails_by_date:
|
|
184
|
-
tools.append(self.get_emails_by_date)
|
|
185
|
-
if get_emails_by_thread:
|
|
186
|
-
tools.append(self.get_emails_by_thread)
|
|
187
|
-
if create_draft_email:
|
|
188
|
-
tools.append(self.create_draft_email)
|
|
189
|
-
if send_email:
|
|
190
|
-
tools.append(self.send_email)
|
|
191
|
-
if send_email_reply:
|
|
192
|
-
tools.append(self.send_email_reply)
|
|
193
|
-
if search_emails:
|
|
194
|
-
tools.append(self.search_emails)
|
|
195
|
-
|
|
196
|
-
super().__init__(name="gmail_tools", tools=tools, **kwargs)
|
|
197
|
-
|
|
198
182
|
def _auth(self) -> None:
|
|
199
183
|
"""Authenticate with Gmail API"""
|
|
200
184
|
token_file = Path(self.token_path or "token.json")
|
agno/tools/google_bigquery.py
CHANGED
|
@@ -17,10 +17,11 @@ class GoogleBigQueryTools(Toolkit):
|
|
|
17
17
|
dataset: str,
|
|
18
18
|
project: Optional[str] = None,
|
|
19
19
|
location: Optional[str] = None,
|
|
20
|
-
list_tables: Optional[bool] = True,
|
|
21
|
-
describe_table: Optional[bool] = True,
|
|
22
|
-
run_sql_query: Optional[bool] = True,
|
|
23
20
|
credentials: Optional[Any] = None,
|
|
21
|
+
enable_list_tables: bool = True,
|
|
22
|
+
enable_describe_table: bool = True,
|
|
23
|
+
enable_run_sql_query: bool = True,
|
|
24
|
+
all: bool = False,
|
|
24
25
|
**kwargs,
|
|
25
26
|
):
|
|
26
27
|
self.project = project or getenv("GOOGLE_CLOUD_PROJECT")
|
|
@@ -37,11 +38,11 @@ class GoogleBigQueryTools(Toolkit):
|
|
|
37
38
|
self.client = bigquery.Client(project=self.project, credentials=credentials)
|
|
38
39
|
|
|
39
40
|
tools: List[Any] = []
|
|
40
|
-
if
|
|
41
|
+
if all or enable_list_tables:
|
|
41
42
|
tools.append(self.list_tables)
|
|
42
|
-
if
|
|
43
|
+
if all or enable_describe_table:
|
|
43
44
|
tools.append(self.describe_table)
|
|
44
|
-
if
|
|
45
|
+
if all or enable_run_sql_query:
|
|
45
46
|
tools.append(self.run_sql_query)
|
|
46
47
|
|
|
47
48
|
super().__init__(name="google_bigquery_tools", tools=tools, **kwargs)
|
agno/tools/google_maps.py
CHANGED
|
@@ -6,7 +6,7 @@ Prerequisites:
|
|
|
6
6
|
You can obtain the API key from the Google Cloud Console:
|
|
7
7
|
https://console.cloud.google.com/projectselector2/google/maps-apis/credentials
|
|
8
8
|
|
|
9
|
-
- You also need to activate the Address Validation API for your .
|
|
9
|
+
- You also need to activate the Address Validation API for your project.
|
|
10
10
|
https://console.developers.google.com/apis/api/addressvalidation.googleapis.com
|
|
11
11
|
|
|
12
12
|
"""
|
|
@@ -29,14 +29,6 @@ class GoogleMapTools(Toolkit):
|
|
|
29
29
|
def __init__(
|
|
30
30
|
self,
|
|
31
31
|
key: Optional[str] = None,
|
|
32
|
-
search_places: bool = True,
|
|
33
|
-
get_directions: bool = True,
|
|
34
|
-
validate_address: bool = True,
|
|
35
|
-
geocode_address: bool = True,
|
|
36
|
-
reverse_geocode: bool = True,
|
|
37
|
-
get_distance_matrix: bool = True,
|
|
38
|
-
get_elevation: bool = True,
|
|
39
|
-
get_timezone: bool = True,
|
|
40
32
|
**kwargs,
|
|
41
33
|
):
|
|
42
34
|
self.api_key = key or getenv("GOOGLE_MAPS_API_KEY")
|
|
@@ -46,23 +38,16 @@ class GoogleMapTools(Toolkit):
|
|
|
46
38
|
|
|
47
39
|
self.places_client = places_v1.PlacesClient()
|
|
48
40
|
|
|
49
|
-
tools: List[Any] = [
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
tools.append(self.reverse_geocode)
|
|
60
|
-
if get_distance_matrix:
|
|
61
|
-
tools.append(self.get_distance_matrix)
|
|
62
|
-
if get_elevation:
|
|
63
|
-
tools.append(self.get_elevation)
|
|
64
|
-
if get_timezone:
|
|
65
|
-
tools.append(self.get_timezone)
|
|
41
|
+
tools: List[Any] = [
|
|
42
|
+
self.search_places,
|
|
43
|
+
self.get_directions,
|
|
44
|
+
self.validate_address,
|
|
45
|
+
self.geocode_address,
|
|
46
|
+
self.reverse_geocode,
|
|
47
|
+
self.get_distance_matrix,
|
|
48
|
+
self.get_elevation,
|
|
49
|
+
self.get_timezone,
|
|
50
|
+
]
|
|
66
51
|
|
|
67
52
|
super().__init__(name="google_maps", tools=tools, **kwargs)
|
|
68
53
|
|
agno/tools/googlesearch.py
CHANGED
|
@@ -29,6 +29,8 @@ class GoogleSearchTools(Toolkit):
|
|
|
29
29
|
cache_results (bool): Enable caching of search results.
|
|
30
30
|
cache_ttl (int): Time-to-live for cached results in seconds.
|
|
31
31
|
cache_dir (Optional[str]): Directory to store cache files.
|
|
32
|
+
enable_google_search (bool): Enable Google search.
|
|
33
|
+
all (bool): Enable all tools.
|
|
32
34
|
"""
|
|
33
35
|
|
|
34
36
|
def __init__(
|
|
@@ -38,6 +40,8 @@ class GoogleSearchTools(Toolkit):
|
|
|
38
40
|
headers: Optional[Any] = None,
|
|
39
41
|
proxy: Optional[str] = None,
|
|
40
42
|
timeout: Optional[int] = 10,
|
|
43
|
+
enable_google_search: bool = True,
|
|
44
|
+
all: bool = False,
|
|
41
45
|
**kwargs,
|
|
42
46
|
):
|
|
43
47
|
self.fixed_max_results: Optional[int] = fixed_max_results
|
|
@@ -47,7 +51,8 @@ class GoogleSearchTools(Toolkit):
|
|
|
47
51
|
self.timeout: Optional[int] = timeout
|
|
48
52
|
|
|
49
53
|
tools = []
|
|
50
|
-
|
|
54
|
+
if all or enable_google_search:
|
|
55
|
+
tools.append(self.google_search)
|
|
51
56
|
|
|
52
57
|
super().__init__(name="google_search_tools", tools=tools, **kwargs)
|
|
53
58
|
|
|
@@ -77,7 +82,7 @@ class GoogleSearchTools(Toolkit):
|
|
|
77
82
|
log_debug(f"Searching Google [{language}] for: {query}")
|
|
78
83
|
|
|
79
84
|
# Perform Google search using the googlesearch-python package
|
|
80
|
-
results = list(search(query,
|
|
85
|
+
results = list(search(query, num=max_results, lang=language))
|
|
81
86
|
|
|
82
87
|
# Collect the search results
|
|
83
88
|
res: List[Dict[str, str]] = []
|
agno/tools/googlesheets.py
CHANGED
|
@@ -94,27 +94,29 @@ class GoogleSheetsTools(Toolkit):
|
|
|
94
94
|
creds: Optional[Credentials] = None,
|
|
95
95
|
creds_path: Optional[str] = None,
|
|
96
96
|
token_path: Optional[str] = None,
|
|
97
|
-
read: bool = True,
|
|
98
|
-
create: bool = False,
|
|
99
|
-
update: bool = False,
|
|
100
|
-
duplicate: bool = False,
|
|
101
97
|
oauth_port: int = 0,
|
|
98
|
+
enable_read_sheet: bool = True,
|
|
99
|
+
enable_create_sheet: bool = False,
|
|
100
|
+
enable_update_sheet: bool = False,
|
|
101
|
+
enable_create_duplicate_sheet: bool = False,
|
|
102
|
+
all: bool = False,
|
|
102
103
|
**kwargs,
|
|
103
104
|
):
|
|
104
105
|
"""Initialize GoogleSheetsTools with the specified configuration.
|
|
105
106
|
|
|
106
107
|
Args:
|
|
107
|
-
scopes (Optional[List[str]]): Custom OAuth scopes. If None,
|
|
108
|
+
scopes (Optional[List[str]]): Custom OAuth scopes. If None, uses write scope by default.
|
|
108
109
|
spreadsheet_id (Optional[str]): ID of the target spreadsheet.
|
|
109
110
|
spreadsheet_range (Optional[str]): Range within the spreadsheet.
|
|
110
111
|
creds (Optional[Credentials]): Pre-existing credentials.
|
|
111
112
|
creds_path (Optional[str]): Path to credentials file.
|
|
112
113
|
token_path (Optional[str]): Path to token file.
|
|
113
|
-
read (bool): Enable read operations. Defaults to True.
|
|
114
|
-
create (bool): Enable create operations. Defaults to False.
|
|
115
|
-
update (bool): Enable update operations. Defaults to False.
|
|
116
|
-
duplicate (bool): Enable duplicate operations. Defaults to False.
|
|
117
114
|
oauth_port (int): Port to use for OAuth authentication. Defaults to 0.
|
|
115
|
+
enable_read_sheet (bool): Enable reading from a sheet.
|
|
116
|
+
enable_create_sheet (bool): Enable creating a sheet.
|
|
117
|
+
enable_update_sheet (bool): Enable updating a sheet.
|
|
118
|
+
enable_create_duplicate_sheet (bool): Enable creating a duplicate sheet.
|
|
119
|
+
all (bool): Enable all tools.
|
|
118
120
|
"""
|
|
119
121
|
|
|
120
122
|
self.spreadsheet_id = spreadsheet_id
|
|
@@ -128,19 +130,21 @@ class GoogleSheetsTools(Toolkit):
|
|
|
128
130
|
# Determine required scopes based on operations if no custom scopes provided
|
|
129
131
|
if scopes is None:
|
|
130
132
|
self.scopes = []
|
|
131
|
-
if
|
|
133
|
+
if enable_read_sheet:
|
|
132
134
|
self.scopes.append(self.DEFAULT_SCOPES["read"])
|
|
133
|
-
if
|
|
135
|
+
if enable_create_sheet or enable_update_sheet or enable_create_duplicate_sheet:
|
|
134
136
|
self.scopes.append(self.DEFAULT_SCOPES["write"])
|
|
135
137
|
# Remove duplicates while preserving order
|
|
136
138
|
self.scopes = list(dict.fromkeys(self.scopes))
|
|
137
139
|
else:
|
|
138
140
|
self.scopes = scopes
|
|
139
141
|
# Validate that required scopes are present for requested operations
|
|
140
|
-
if (
|
|
142
|
+
if (enable_create_sheet or enable_update_sheet or enable_create_duplicate_sheet) and self.DEFAULT_SCOPES[
|
|
143
|
+
"write"
|
|
144
|
+
] not in self.scopes:
|
|
141
145
|
raise ValueError(f"The scope {self.DEFAULT_SCOPES['write']} is required for write operations")
|
|
142
146
|
if (
|
|
143
|
-
|
|
147
|
+
enable_read_sheet
|
|
144
148
|
and self.DEFAULT_SCOPES["read"] not in self.scopes
|
|
145
149
|
and self.DEFAULT_SCOPES["write"] not in self.scopes
|
|
146
150
|
):
|
|
@@ -149,13 +153,13 @@ class GoogleSheetsTools(Toolkit):
|
|
|
149
153
|
)
|
|
150
154
|
|
|
151
155
|
tools: List[Any] = []
|
|
152
|
-
if
|
|
156
|
+
if all or enable_read_sheet:
|
|
153
157
|
tools.append(self.read_sheet)
|
|
154
|
-
if
|
|
158
|
+
if all or enable_create_sheet:
|
|
155
159
|
tools.append(self.create_sheet)
|
|
156
|
-
if
|
|
160
|
+
if all or enable_update_sheet:
|
|
157
161
|
tools.append(self.update_sheet)
|
|
158
|
-
if
|
|
162
|
+
if all or enable_create_duplicate_sheet:
|
|
159
163
|
tools.append(self.create_duplicate_sheet)
|
|
160
164
|
|
|
161
165
|
super().__init__(name="google_sheets_tools", tools=tools, **kwargs)
|
agno/tools/hackernews.py
CHANGED
|
@@ -10,16 +10,20 @@ from agno.utils.log import log_debug, logger
|
|
|
10
10
|
class HackerNewsTools(Toolkit):
|
|
11
11
|
"""
|
|
12
12
|
HackerNews is a tool for getting top stories from Hacker News.
|
|
13
|
+
|
|
13
14
|
Args:
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
enable_get_top_stories (bool): Enable getting top stories from Hacker News. Default is True.
|
|
16
|
+
enable_get_user_details (bool): Enable getting user details from Hacker News. Default is True.
|
|
17
|
+
all (bool): Enable all tools. Overrides individual flags when True. Default is False.
|
|
16
18
|
"""
|
|
17
19
|
|
|
18
|
-
def __init__(
|
|
20
|
+
def __init__(
|
|
21
|
+
self, enable_get_top_stories: bool = True, enable_get_user_details: bool = True, all: bool = False, **kwargs
|
|
22
|
+
):
|
|
19
23
|
tools: List[Any] = []
|
|
20
|
-
if
|
|
24
|
+
if all or enable_get_top_stories:
|
|
21
25
|
tools.append(self.get_top_hackernews_stories)
|
|
22
|
-
if
|
|
26
|
+
if all or enable_get_user_details:
|
|
23
27
|
tools.append(self.get_user_details)
|
|
24
28
|
|
|
25
29
|
super().__init__(name="hackers_news", tools=tools, **kwargs)
|
agno/tools/jina.py
CHANGED
|
@@ -25,9 +25,10 @@ class JinaReaderTools(Toolkit):
|
|
|
25
25
|
search_url: str = "https://s.jina.ai/",
|
|
26
26
|
max_content_length: int = 10000,
|
|
27
27
|
timeout: Optional[int] = None,
|
|
28
|
-
read_url: bool = True,
|
|
29
|
-
search_query: bool = False,
|
|
30
28
|
search_query_content: bool = True,
|
|
29
|
+
enable_read_url: bool = True,
|
|
30
|
+
enable_search_query: bool = False,
|
|
31
|
+
all: bool = False,
|
|
31
32
|
**kwargs,
|
|
32
33
|
):
|
|
33
34
|
self.api_key = api_key or getenv("JINA_API_KEY")
|
|
@@ -41,9 +42,9 @@ class JinaReaderTools(Toolkit):
|
|
|
41
42
|
)
|
|
42
43
|
|
|
43
44
|
tools: List[Any] = []
|
|
44
|
-
if
|
|
45
|
+
if all or enable_read_url:
|
|
45
46
|
tools.append(self.read_url)
|
|
46
|
-
if
|
|
47
|
+
if all or enable_search_query:
|
|
47
48
|
tools.append(self.search_query)
|
|
48
49
|
|
|
49
50
|
super().__init__(name="jina_reader_tools", tools=tools, **kwargs)
|