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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import os
|
|
3
2
|
import re
|
|
3
|
+
from os import getenv
|
|
4
4
|
from typing import Any, Dict, List, Optional
|
|
5
5
|
|
|
6
6
|
from agno.tools import Toolkit
|
|
@@ -17,17 +17,10 @@ class ClickUpTools(Toolkit):
|
|
|
17
17
|
self,
|
|
18
18
|
api_key: Optional[str] = None,
|
|
19
19
|
master_space_id: Optional[str] = None,
|
|
20
|
-
list_tasks: bool = True,
|
|
21
|
-
create_task: bool = True,
|
|
22
|
-
get_task: bool = True,
|
|
23
|
-
update_task: bool = True,
|
|
24
|
-
delete_task: bool = True,
|
|
25
|
-
list_spaces: bool = True,
|
|
26
|
-
list_lists: bool = True,
|
|
27
20
|
**kwargs,
|
|
28
21
|
):
|
|
29
|
-
self.api_key = api_key or
|
|
30
|
-
self.master_space_id = master_space_id or
|
|
22
|
+
self.api_key = api_key or getenv("CLICKUP_API_KEY")
|
|
23
|
+
self.master_space_id = master_space_id or getenv("MASTER_SPACE_ID")
|
|
31
24
|
self.base_url = "https://api.clickup.com/api/v2"
|
|
32
25
|
self.headers = {"Authorization": self.api_key}
|
|
33
26
|
|
|
@@ -36,21 +29,15 @@ class ClickUpTools(Toolkit):
|
|
|
36
29
|
if not self.master_space_id:
|
|
37
30
|
raise ValueError("MASTER_SPACE_ID not set. Please set the MASTER_SPACE_ID environment variable.")
|
|
38
31
|
|
|
39
|
-
tools: List[Any] = [
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if delete_task:
|
|
49
|
-
tools.append(self.delete_task)
|
|
50
|
-
if list_spaces:
|
|
51
|
-
tools.append(self.list_spaces)
|
|
52
|
-
if list_lists:
|
|
53
|
-
tools.append(self.list_lists)
|
|
32
|
+
tools: List[Any] = [
|
|
33
|
+
self.list_tasks,
|
|
34
|
+
self.create_task,
|
|
35
|
+
self.get_task,
|
|
36
|
+
self.update_task,
|
|
37
|
+
self.delete_task,
|
|
38
|
+
self.list_spaces,
|
|
39
|
+
self.list_lists,
|
|
40
|
+
]
|
|
54
41
|
|
|
55
42
|
super().__init__(name="clickup", tools=tools, **kwargs)
|
|
56
43
|
|
agno/tools/confluence.py
CHANGED
|
@@ -39,7 +39,6 @@ class ConfluenceTools(Toolkit):
|
|
|
39
39
|
- CONFLUENCE_API_KEY
|
|
40
40
|
"""
|
|
41
41
|
|
|
42
|
-
super().__init__(name="confluence_tools", **kwargs)
|
|
43
42
|
self.url = url or getenv("CONFLUENCE_URL")
|
|
44
43
|
self.username = username or getenv("CONFLUENCE_USERNAME")
|
|
45
44
|
self.password = api_key or getenv("CONFLUENCE_API_KEY") or password or getenv("CONFLUENCE_PASSWORD")
|
|
@@ -73,13 +72,14 @@ class ConfluenceTools(Toolkit):
|
|
|
73
72
|
session=session,
|
|
74
73
|
)
|
|
75
74
|
|
|
76
|
-
tools: List[Any] = [
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
75
|
+
tools: List[Any] = [
|
|
76
|
+
self.get_page_content,
|
|
77
|
+
self.get_space_key,
|
|
78
|
+
self.create_page,
|
|
79
|
+
self.update_page,
|
|
80
|
+
self.get_all_space_detail,
|
|
81
|
+
self.get_all_page_from_space,
|
|
82
|
+
]
|
|
83
83
|
|
|
84
84
|
super().__init__(name="confluence_tools", tools=tools, **kwargs)
|
|
85
85
|
|
agno/tools/crawl4ai.py
CHANGED
|
@@ -20,9 +20,15 @@ class Crawl4aiTools(Toolkit):
|
|
|
20
20
|
bm25_threshold: float = 1.0,
|
|
21
21
|
headless: bool = True,
|
|
22
22
|
wait_until: str = "domcontentloaded",
|
|
23
|
+
enable_crawl: bool = True,
|
|
24
|
+
all: bool = False,
|
|
23
25
|
**kwargs,
|
|
24
26
|
):
|
|
25
|
-
|
|
27
|
+
tools = []
|
|
28
|
+
if all or enable_crawl:
|
|
29
|
+
tools.append(self.crawl)
|
|
30
|
+
|
|
31
|
+
super().__init__(name="crawl4ai_tools", tools=tools, **kwargs)
|
|
26
32
|
self.max_length = max_length
|
|
27
33
|
self.timeout = timeout
|
|
28
34
|
self.use_pruning = use_pruning
|
agno/tools/csv_toolkit.py
CHANGED
|
@@ -12,12 +12,13 @@ class CsvTools(Toolkit):
|
|
|
12
12
|
self,
|
|
13
13
|
csvs: Optional[List[Union[str, Path]]] = None,
|
|
14
14
|
row_limit: Optional[int] = None,
|
|
15
|
-
read_csvs: bool = True,
|
|
16
|
-
list_csvs: bool = True,
|
|
17
|
-
query_csvs: bool = True,
|
|
18
|
-
read_column_names: bool = True,
|
|
19
15
|
duckdb_connection: Optional[Any] = None,
|
|
20
16
|
duckdb_kwargs: Optional[Dict[str, Any]] = None,
|
|
17
|
+
enable_read_csv_file: bool = True,
|
|
18
|
+
enable_list_csv_files: bool = True,
|
|
19
|
+
enable_get_columns: bool = True,
|
|
20
|
+
enable_query_csv_file: bool = True,
|
|
21
|
+
all: bool = False,
|
|
21
22
|
**kwargs,
|
|
22
23
|
):
|
|
23
24
|
self.csvs: List[Path] = []
|
|
@@ -34,13 +35,13 @@ class CsvTools(Toolkit):
|
|
|
34
35
|
self.duckdb_kwargs: Optional[Dict[str, Any]] = duckdb_kwargs
|
|
35
36
|
|
|
36
37
|
tools: List[Any] = []
|
|
37
|
-
if
|
|
38
|
+
if all or enable_read_csv_file:
|
|
38
39
|
tools.append(self.read_csv_file)
|
|
39
|
-
if
|
|
40
|
+
if all or enable_list_csv_files:
|
|
40
41
|
tools.append(self.list_csv_files)
|
|
41
|
-
if
|
|
42
|
+
if all or enable_get_columns:
|
|
42
43
|
tools.append(self.get_columns)
|
|
43
|
-
if
|
|
44
|
+
if all or enable_query_csv_file:
|
|
44
45
|
try:
|
|
45
46
|
import duckdb # noqa: F401
|
|
46
47
|
|
agno/tools/dalle.py
CHANGED
|
@@ -6,6 +6,7 @@ from agno.agent import Agent
|
|
|
6
6
|
from agno.media import ImageArtifact
|
|
7
7
|
from agno.team.team import Team
|
|
8
8
|
from agno.tools import Toolkit
|
|
9
|
+
from agno.tools.function import ToolResult
|
|
9
10
|
from agno.utils.log import log_debug, logger
|
|
10
11
|
|
|
11
12
|
try:
|
|
@@ -24,6 +25,8 @@ class DalleTools(Toolkit):
|
|
|
24
25
|
quality: Literal["standard", "hd"] = "standard",
|
|
25
26
|
style: Literal["vivid", "natural"] = "vivid",
|
|
26
27
|
api_key: Optional[str] = None,
|
|
28
|
+
enable_create_image: bool = True,
|
|
29
|
+
all: bool = False,
|
|
27
30
|
**kwargs,
|
|
28
31
|
):
|
|
29
32
|
self.model = model
|
|
@@ -51,7 +54,8 @@ class DalleTools(Toolkit):
|
|
|
51
54
|
logger.error("OPENAI_API_KEY not set. Please set the OPENAI_API_KEY environment variable.")
|
|
52
55
|
|
|
53
56
|
tools: List[Any] = []
|
|
54
|
-
|
|
57
|
+
if all or enable_create_image:
|
|
58
|
+
tools.append(self.create_image)
|
|
55
59
|
|
|
56
60
|
super().__init__(name="dalle", tools=tools, **kwargs)
|
|
57
61
|
|
|
@@ -60,17 +64,17 @@ class DalleTools(Toolkit):
|
|
|
60
64
|
# - Add support for saving images
|
|
61
65
|
# - Add support for editing images
|
|
62
66
|
|
|
63
|
-
def create_image(self, agent: Union[Agent, Team], prompt: str) ->
|
|
67
|
+
def create_image(self, agent: Union[Agent, Team], prompt: str) -> ToolResult:
|
|
64
68
|
"""Use this function to generate an image for a prompt.
|
|
65
69
|
|
|
66
70
|
Args:
|
|
67
71
|
prompt (str): A text description of the desired image.
|
|
68
72
|
|
|
69
73
|
Returns:
|
|
70
|
-
|
|
74
|
+
ToolResult: Result containing the message and generated images.
|
|
71
75
|
"""
|
|
72
76
|
if not self.api_key:
|
|
73
|
-
return "Please set the OPENAI_API_KEY"
|
|
77
|
+
return ToolResult(content="Please set the OPENAI_API_KEY")
|
|
74
78
|
|
|
75
79
|
try:
|
|
76
80
|
client = OpenAI(api_key=self.api_key)
|
|
@@ -85,18 +89,21 @@ class DalleTools(Toolkit):
|
|
|
85
89
|
)
|
|
86
90
|
log_debug("Image generated successfully")
|
|
87
91
|
|
|
88
|
-
|
|
92
|
+
generated_images = []
|
|
89
93
|
response_str = ""
|
|
90
94
|
if response.data:
|
|
91
95
|
for img in response.data:
|
|
92
96
|
if img.url:
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
id=str(uuid4()), url=img.url, original_prompt=prompt, revised_prompt=img.revised_prompt
|
|
96
|
-
)
|
|
97
|
+
image_artifact = ImageArtifact(
|
|
98
|
+
id=str(uuid4()), url=img.url, original_prompt=prompt, revised_prompt=img.revised_prompt
|
|
97
99
|
)
|
|
100
|
+
generated_images.append(image_artifact)
|
|
98
101
|
response_str += f"Image has been generated at the URL {img.url}\n"
|
|
99
|
-
|
|
102
|
+
|
|
103
|
+
return ToolResult(
|
|
104
|
+
content=response_str or "No images were generated",
|
|
105
|
+
images=generated_images if generated_images else None,
|
|
106
|
+
)
|
|
100
107
|
except Exception as e:
|
|
101
108
|
logger.error(f"Failed to generate image: {e}")
|
|
102
|
-
return f"Error: {e}"
|
|
109
|
+
return ToolResult(content=f"Error: {e}")
|
agno/tools/daytona.py
CHANGED
|
@@ -2,7 +2,7 @@ import json
|
|
|
2
2
|
from os import getenv
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from textwrap import dedent
|
|
5
|
-
from typing import Dict, Optional, Union
|
|
5
|
+
from typing import Any, Dict, List, Optional, Union
|
|
6
6
|
|
|
7
7
|
from agno.agent import Agent
|
|
8
8
|
from agno.team import Team
|
|
@@ -24,7 +24,6 @@ except ImportError:
|
|
|
24
24
|
DEFAULT_INSTRUCTIONS = dedent(
|
|
25
25
|
"""\
|
|
26
26
|
You have access to a persistent Daytona sandbox for code execution. The sandbox maintains state across interactions.
|
|
27
|
-
|
|
28
27
|
Available tools:
|
|
29
28
|
- `run_code`: Execute code in the sandbox
|
|
30
29
|
- `run_shell_command`: Execute shell commands (bash)
|
|
@@ -33,21 +32,19 @@ DEFAULT_INSTRUCTIONS = dedent(
|
|
|
33
32
|
- `list_files`: List directory contents
|
|
34
33
|
- `delete_file`: Delete files or directories
|
|
35
34
|
- `change_directory`: Change the working directory
|
|
36
|
-
|
|
37
35
|
MANDATORY: When users ask for code (Python, JavaScript, TypeScript, etc.), you MUST:
|
|
38
36
|
1. Write the code
|
|
39
37
|
2. Execute it using run_code tool
|
|
40
38
|
3. Show the actual output/results
|
|
41
39
|
4. Never just provide code without executing it
|
|
42
|
-
|
|
43
40
|
CRITICAL WORKFLOW:
|
|
44
41
|
1. Before running Python scripts, check if required packages are installed
|
|
45
42
|
2. Install missing packages with: run_shell_command("pip install package1 package2")
|
|
46
43
|
3. When running scripts, capture both output AND errors
|
|
47
44
|
4. If a script produces no output, check for errors or add print statements
|
|
48
|
-
|
|
45
|
+
|
|
49
46
|
IMPORTANT: Always use single quotes for the content parameter when creating files
|
|
50
|
-
|
|
47
|
+
|
|
51
48
|
Remember: Your job is to provide working, executed code examples, not just code snippets!
|
|
52
49
|
"""
|
|
53
50
|
)
|
|
@@ -110,18 +107,18 @@ class DaytonaTools(Toolkit):
|
|
|
110
107
|
)
|
|
111
108
|
|
|
112
109
|
self.daytona = Daytona(self.config)
|
|
113
|
-
|
|
110
|
+
tools: List[Any] = [
|
|
111
|
+
self.run_code,
|
|
112
|
+
self.run_shell_command,
|
|
113
|
+
self.create_file,
|
|
114
|
+
self.read_file,
|
|
115
|
+
self.list_files,
|
|
116
|
+
self.delete_file,
|
|
117
|
+
self.change_directory,
|
|
118
|
+
]
|
|
114
119
|
super().__init__(
|
|
115
120
|
name="daytona_tools",
|
|
116
|
-
tools=
|
|
117
|
-
self.run_code,
|
|
118
|
-
self.run_shell_command,
|
|
119
|
-
self.create_file,
|
|
120
|
-
self.read_file,
|
|
121
|
-
self.list_files,
|
|
122
|
-
self.delete_file,
|
|
123
|
-
self.change_directory,
|
|
124
|
-
],
|
|
121
|
+
tools=tools,
|
|
125
122
|
instructions=self.instructions,
|
|
126
123
|
add_instructions=add_instructions,
|
|
127
124
|
**kwargs,
|
agno/tools/decorator.py
CHANGED
|
@@ -64,7 +64,6 @@ def tool(
|
|
|
64
64
|
strict: Optional[bool] = None,
|
|
65
65
|
instructions: Optional[str] = None,
|
|
66
66
|
add_instructions: bool = True,
|
|
67
|
-
sanitize_arguments: Optional[bool] = None,
|
|
68
67
|
show_result: Optional[bool] = None,
|
|
69
68
|
stop_after_tool_call: Optional[bool] = None,
|
|
70
69
|
requires_confirmation: Optional[bool] = None,
|
|
@@ -91,7 +90,6 @@ def tool(*args, **kwargs) -> Union[Function, Callable[[F], Function]]:
|
|
|
91
90
|
name: Optional[str] - Override for the function name
|
|
92
91
|
description: Optional[str] - Override for the function description
|
|
93
92
|
strict: Optional[bool] - Flag for strict parameter checking
|
|
94
|
-
sanitize_arguments: Optional[bool] - If True, arguments are sanitized before passing to function (Deprecated)
|
|
95
93
|
instructions: Optional[str] - Instructions for using the tool
|
|
96
94
|
add_instructions: bool - If True, add instructions to the system message
|
|
97
95
|
show_result: Optional[bool] - If True, shows the result after function call
|
|
@@ -131,7 +129,6 @@ def tool(*args, **kwargs) -> Union[Function, Callable[[F], Function]]:
|
|
|
131
129
|
"strict",
|
|
132
130
|
"instructions",
|
|
133
131
|
"add_instructions",
|
|
134
|
-
"sanitize_arguments",
|
|
135
132
|
"show_result",
|
|
136
133
|
"stop_after_tool_call",
|
|
137
134
|
"requires_confirmation",
|
|
@@ -248,6 +245,12 @@ def tool(*args, **kwargs) -> Union[Function, Callable[[F], Function]]:
|
|
|
248
245
|
and v is not None
|
|
249
246
|
},
|
|
250
247
|
}
|
|
248
|
+
|
|
249
|
+
# Automatically set show_result=True if stop_after_tool_call=True (unless explicitly set to False)
|
|
250
|
+
if kwargs.get("stop_after_tool_call") is True:
|
|
251
|
+
if "show_result" not in kwargs or kwargs.get("show_result") is None:
|
|
252
|
+
tool_config["show_result"] = True
|
|
253
|
+
|
|
251
254
|
return Function(**tool_config)
|
|
252
255
|
|
|
253
256
|
# Handle both @tool and @tool() cases
|
agno/tools/desi_vocal.py
CHANGED
|
@@ -8,6 +8,7 @@ from agno.agent import Agent
|
|
|
8
8
|
from agno.media import AudioArtifact
|
|
9
9
|
from agno.team.team import Team
|
|
10
10
|
from agno.tools import Toolkit
|
|
11
|
+
from agno.tools.function import ToolResult
|
|
11
12
|
from agno.utils.log import logger
|
|
12
13
|
|
|
13
14
|
|
|
@@ -16,6 +17,9 @@ class DesiVocalTools(Toolkit):
|
|
|
16
17
|
self,
|
|
17
18
|
api_key: Optional[str] = None,
|
|
18
19
|
voice_id: Optional[str] = "f27d74e5-ea71-4697-be3e-f04bbd80c1a8",
|
|
20
|
+
enable_get_voices: bool = True,
|
|
21
|
+
enable_text_to_speech: bool = True,
|
|
22
|
+
all: bool = False,
|
|
19
23
|
**kwargs,
|
|
20
24
|
):
|
|
21
25
|
self.api_key = api_key or getenv("DESI_VOCAL_API_KEY")
|
|
@@ -25,8 +29,10 @@ class DesiVocalTools(Toolkit):
|
|
|
25
29
|
self.voice_id = voice_id
|
|
26
30
|
|
|
27
31
|
tools: List[Any] = []
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
if all or enable_get_voices:
|
|
33
|
+
tools.append(self.get_voices)
|
|
34
|
+
if all or enable_text_to_speech:
|
|
35
|
+
tools.append(self.text_to_speech)
|
|
30
36
|
|
|
31
37
|
super().__init__(name="desi_vocal_tools", tools=tools, **kwargs)
|
|
32
38
|
|
|
@@ -63,13 +69,13 @@ class DesiVocalTools(Toolkit):
|
|
|
63
69
|
logger.error(f"Failed to get voices: {e}")
|
|
64
70
|
return f"Error: {e}"
|
|
65
71
|
|
|
66
|
-
def text_to_speech(self, agent: Union[Agent, Team], prompt: str, voice_id: Optional[str] = None) ->
|
|
72
|
+
def text_to_speech(self, agent: Union[Agent, Team], prompt: str, voice_id: Optional[str] = None) -> ToolResult:
|
|
67
73
|
"""
|
|
68
74
|
Use this function to generate audio from text.
|
|
69
75
|
Args:
|
|
70
76
|
prompt (str): The text to generate audio from.
|
|
71
77
|
Returns:
|
|
72
|
-
|
|
78
|
+
ToolResult: A ToolResult containing the generated audio or error message.
|
|
73
79
|
"""
|
|
74
80
|
try:
|
|
75
81
|
url = "https://prod-api2.desivocal.com/dv/api/v0/tts_api/generate"
|
|
@@ -91,9 +97,12 @@ class DesiVocalTools(Toolkit):
|
|
|
91
97
|
response_json = response.json()
|
|
92
98
|
audio_url = response_json["s3_path"]
|
|
93
99
|
|
|
94
|
-
|
|
100
|
+
audio_artifact = AudioArtifact(id=str(uuid4()), url=audio_url)
|
|
95
101
|
|
|
96
|
-
return
|
|
102
|
+
return ToolResult(
|
|
103
|
+
content=f"Audio generated successfully: {audio_url}",
|
|
104
|
+
audios=[audio_artifact],
|
|
105
|
+
)
|
|
97
106
|
except Exception as e:
|
|
98
107
|
logger.error(f"Failed to generate audio: {e}")
|
|
99
|
-
return f"Error: {e}"
|
|
108
|
+
return ToolResult(content=f"Error: {e}")
|
agno/tools/discord.py
CHANGED
|
@@ -14,10 +14,12 @@ class DiscordTools(Toolkit):
|
|
|
14
14
|
def __init__(
|
|
15
15
|
self,
|
|
16
16
|
bot_token: Optional[str] = None,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
enable_send_message: bool = True,
|
|
18
|
+
enable_get_channel_messages: bool = True,
|
|
19
|
+
enable_get_channel_info: bool = True,
|
|
20
|
+
enable_list_channels: bool = True,
|
|
21
|
+
enable_delete_message: bool = True,
|
|
22
|
+
all: bool = False,
|
|
21
23
|
**kwargs,
|
|
22
24
|
):
|
|
23
25
|
self.bot_token = bot_token or getenv("DISCORD_BOT_TOKEN")
|
|
@@ -32,14 +34,15 @@ class DiscordTools(Toolkit):
|
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
tools: List[Any] = []
|
|
35
|
-
if
|
|
37
|
+
if enable_send_message or all:
|
|
36
38
|
tools.append(self.send_message)
|
|
37
|
-
if
|
|
39
|
+
if enable_get_channel_messages or all:
|
|
38
40
|
tools.append(self.get_channel_messages)
|
|
39
|
-
if
|
|
41
|
+
if enable_get_channel_info or all:
|
|
40
42
|
tools.append(self.get_channel_info)
|
|
43
|
+
if enable_list_channels or all:
|
|
41
44
|
tools.append(self.list_channels)
|
|
42
|
-
if
|
|
45
|
+
if enable_delete_message or all:
|
|
43
46
|
tools.append(self.delete_message)
|
|
44
47
|
|
|
45
48
|
super().__init__(name="discord", tools=tools, **kwargs)
|
agno/tools/docker.py
CHANGED
|
@@ -58,10 +58,6 @@ except ImportError:
|
|
|
58
58
|
class DockerTools(Toolkit):
|
|
59
59
|
def __init__(
|
|
60
60
|
self,
|
|
61
|
-
enable_container_management: bool = True,
|
|
62
|
-
enable_image_management: bool = True,
|
|
63
|
-
enable_volume_management: bool = False,
|
|
64
|
-
enable_network_management: bool = False,
|
|
65
61
|
**kwargs,
|
|
66
62
|
):
|
|
67
63
|
self._check_docker_availability()
|
|
@@ -80,44 +76,36 @@ class DockerTools(Toolkit):
|
|
|
80
76
|
except Exception as e:
|
|
81
77
|
logger.error(f"Error connecting to Docker: {e}")
|
|
82
78
|
|
|
83
|
-
tools: List[Any] = [
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
self.list_networks,
|
|
114
|
-
self.create_network,
|
|
115
|
-
self.remove_network,
|
|
116
|
-
self.inspect_network,
|
|
117
|
-
self.connect_container_to_network,
|
|
118
|
-
self.disconnect_container_from_network,
|
|
119
|
-
]
|
|
120
|
-
)
|
|
79
|
+
tools: List[Any] = [
|
|
80
|
+
# Container management
|
|
81
|
+
self.list_containers,
|
|
82
|
+
self.start_container,
|
|
83
|
+
self.stop_container,
|
|
84
|
+
self.remove_container,
|
|
85
|
+
self.get_container_logs,
|
|
86
|
+
self.inspect_container,
|
|
87
|
+
self.run_container,
|
|
88
|
+
self.exec_in_container,
|
|
89
|
+
# Image management
|
|
90
|
+
self.list_images,
|
|
91
|
+
self.pull_image,
|
|
92
|
+
self.remove_image,
|
|
93
|
+
self.build_image,
|
|
94
|
+
self.tag_image,
|
|
95
|
+
self.inspect_image,
|
|
96
|
+
# Volume management
|
|
97
|
+
self.list_volumes,
|
|
98
|
+
self.create_volume,
|
|
99
|
+
self.remove_volume,
|
|
100
|
+
self.inspect_volume,
|
|
101
|
+
# Network management
|
|
102
|
+
self.list_networks,
|
|
103
|
+
self.create_network,
|
|
104
|
+
self.remove_network,
|
|
105
|
+
self.inspect_network,
|
|
106
|
+
self.connect_container_to_network,
|
|
107
|
+
self.disconnect_container_from_network,
|
|
108
|
+
]
|
|
121
109
|
|
|
122
110
|
super().__init__(name="docker_tools", tools=tools, **kwargs)
|
|
123
111
|
|
agno/tools/duckdb.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from pathlib import Path
|
|
1
2
|
from typing import Any, Dict, List, Optional, Tuple
|
|
2
3
|
|
|
3
4
|
from agno.tools import Toolkit
|
|
@@ -17,11 +18,6 @@ class DuckDbTools(Toolkit):
|
|
|
17
18
|
init_commands: Optional[List] = None,
|
|
18
19
|
read_only: bool = False,
|
|
19
20
|
config: Optional[dict] = None,
|
|
20
|
-
run_queries: bool = True,
|
|
21
|
-
inspect_queries: bool = False,
|
|
22
|
-
create_tables: bool = True,
|
|
23
|
-
summarize_tables: bool = True,
|
|
24
|
-
export_tables: bool = False,
|
|
25
21
|
**kwargs,
|
|
26
22
|
):
|
|
27
23
|
self.db_path: Optional[str] = db_path
|
|
@@ -30,26 +26,21 @@ class DuckDbTools(Toolkit):
|
|
|
30
26
|
self._connection: Optional[duckdb.DuckDBPyConnection] = connection
|
|
31
27
|
self.init_commands: Optional[List] = init_commands
|
|
32
28
|
|
|
33
|
-
tools: List[Any] = [
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
tools.append(self.load_local_csv_to_table)
|
|
49
|
-
tools.append(self.load_s3_path_to_table)
|
|
50
|
-
tools.append(self.load_s3_csv_to_table)
|
|
51
|
-
tools.append(self.create_fts_index)
|
|
52
|
-
tools.append(self.full_text_search)
|
|
29
|
+
tools: List[Any] = [
|
|
30
|
+
self.show_tables,
|
|
31
|
+
self.describe_table,
|
|
32
|
+
self.inspect_query,
|
|
33
|
+
self.run_query,
|
|
34
|
+
self.create_table_from_path,
|
|
35
|
+
self.summarize_table,
|
|
36
|
+
self.export_table_to_path,
|
|
37
|
+
self.load_local_path_to_table,
|
|
38
|
+
self.load_local_csv_to_table,
|
|
39
|
+
self.load_s3_path_to_table,
|
|
40
|
+
self.load_s3_csv_to_table,
|
|
41
|
+
self.create_fts_index,
|
|
42
|
+
self.full_text_search,
|
|
43
|
+
]
|
|
53
44
|
|
|
54
45
|
super().__init__(name="duckdb_tools", tools=tools, **kwargs)
|
|
55
46
|
|
|
@@ -177,12 +168,10 @@ class DuckDbTools(Toolkit):
|
|
|
177
168
|
:param path: Path to get the table name from
|
|
178
169
|
:return: Table name
|
|
179
170
|
"""
|
|
180
|
-
import os
|
|
181
|
-
|
|
182
171
|
# Get the file name from the path
|
|
183
|
-
|
|
172
|
+
path_obj = Path(path)
|
|
184
173
|
# Get the file name without extension from the path
|
|
185
|
-
table
|
|
174
|
+
table = path_obj.stem
|
|
186
175
|
# If the table isn't a valid SQL identifier, we'll need to use something else
|
|
187
176
|
table = table.replace("-", "_").replace(".", "_").replace(" ", "_").replace("/", "_")
|
|
188
177
|
|
|
@@ -246,15 +235,13 @@ class DuckDbTools(Toolkit):
|
|
|
246
235
|
:param table: Optional table name to use
|
|
247
236
|
:return: Table name, SQL statement used to load the file
|
|
248
237
|
"""
|
|
249
|
-
import os
|
|
250
|
-
|
|
251
238
|
log_debug(f"Loading {path} into duckdb")
|
|
252
239
|
|
|
253
240
|
if table is None:
|
|
254
|
-
# Get the file name from the
|
|
255
|
-
|
|
256
|
-
# Get the file name without extension from the
|
|
257
|
-
table
|
|
241
|
+
# Get the file name from the path
|
|
242
|
+
path_obj = Path(path)
|
|
243
|
+
# Get the file name without extension from the path
|
|
244
|
+
table = path_obj.stem
|
|
258
245
|
# If the table isn't a valid SQL identifier, we'll need to use something else
|
|
259
246
|
table = table.replace("-", "_").replace(".", "_").replace(" ", "_").replace("/", "_")
|
|
260
247
|
|
|
@@ -274,15 +261,13 @@ class DuckDbTools(Toolkit):
|
|
|
274
261
|
:param delimiter: Optional delimiter to use
|
|
275
262
|
:return: Table name, SQL statement used to load the file
|
|
276
263
|
"""
|
|
277
|
-
import os
|
|
278
|
-
|
|
279
264
|
log_debug(f"Loading {path} into duckdb")
|
|
280
265
|
|
|
281
266
|
if table is None:
|
|
282
|
-
# Get the file name from the
|
|
283
|
-
|
|
284
|
-
# Get the file name without extension from the
|
|
285
|
-
table
|
|
267
|
+
# Get the file name from the path
|
|
268
|
+
path_obj = Path(path)
|
|
269
|
+
# Get the file name without extension from the path
|
|
270
|
+
table = path_obj.stem
|
|
286
271
|
# If the table isn't a valid SQL identifier, we'll need to use something else
|
|
287
272
|
table = table.replace("-", "_").replace(".", "_").replace(" ", "_").replace("/", "_")
|
|
288
273
|
|
|
@@ -305,15 +290,13 @@ class DuckDbTools(Toolkit):
|
|
|
305
290
|
:param table: Optional table name to use
|
|
306
291
|
:return: Table name, SQL statement used to load the file
|
|
307
292
|
"""
|
|
308
|
-
import os
|
|
309
|
-
|
|
310
293
|
log_debug(f"Loading {path} into duckdb")
|
|
311
294
|
|
|
312
295
|
if table is None:
|
|
313
|
-
# Get the file name from the
|
|
314
|
-
|
|
315
|
-
# Get the file name without extension from the
|
|
316
|
-
table
|
|
296
|
+
# Get the file name from the path
|
|
297
|
+
path_obj = Path(path)
|
|
298
|
+
# Get the file name without extension from the path
|
|
299
|
+
table = path_obj.stem
|
|
317
300
|
# If the table isn't a valid SQL identifier, we'll need to use something else
|
|
318
301
|
table = table.replace("-", "_").replace(".", "_").replace(" ", "_").replace("/", "_")
|
|
319
302
|
|
|
@@ -332,15 +315,13 @@ class DuckDbTools(Toolkit):
|
|
|
332
315
|
:param table: Optional table name to use
|
|
333
316
|
:return: Table name, SQL statement used to load the file
|
|
334
317
|
"""
|
|
335
|
-
import os
|
|
336
|
-
|
|
337
318
|
log_debug(f"Loading {path} into duckdb")
|
|
338
319
|
|
|
339
320
|
if table is None:
|
|
340
|
-
# Get the file name from the
|
|
341
|
-
|
|
342
|
-
# Get the file name without extension from the
|
|
343
|
-
table
|
|
321
|
+
# Get the file name from the path
|
|
322
|
+
path_obj = Path(path)
|
|
323
|
+
# Get the file name without extension from the path
|
|
324
|
+
table = path_obj.stem
|
|
344
325
|
# If the table isn't a valid SQL identifier, we'll need to use something else
|
|
345
326
|
table = table.replace("-", "_").replace(".", "_").replace(" ", "_").replace("/", "_")
|
|
346
327
|
|