agno 1.8.0__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 +2781 -4126
- 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/media.py +2 -2
- 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/dashscope/dashscope.py +14 -5
- agno/models/google/gemini.py +123 -53
- 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 +135 -27
- agno/models/openai/responses.py +233 -115
- 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 +2967 -4243
- 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 +71 -18
- 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 +62 -62
- 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 +46 -62
- 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 +134 -0
- 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/location.py +2 -2
- 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 +356 -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 -698
- 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.0.dist-info/METADATA +0 -979
- agno-1.8.0.dist-info/RECORD +0 -565
- agno-1.8.0.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.0.dist-info → agno-2.0.0a1.dist-info}/WHEEL +0 -0
- {agno-1.8.0.dist-info → agno-2.0.0a1.dist-info}/licenses/LICENSE +0 -0
- {agno-1.8.0.dist-info → agno-2.0.0a1.dist-info}/top_level.txt +0 -0
agno/tools/website.py
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
import json
|
|
2
|
-
from typing import Any, List, Optional
|
|
2
|
+
from typing import Any, List, Optional
|
|
3
3
|
|
|
4
|
-
from agno.document import Document
|
|
5
|
-
from agno.knowledge.
|
|
6
|
-
from agno.knowledge.website import WebsiteKnowledgeBase
|
|
4
|
+
from agno.knowledge.document import Document
|
|
5
|
+
from agno.knowledge.knowledge import Knowledge
|
|
7
6
|
from agno.tools import Toolkit
|
|
8
7
|
from agno.utils.log import log_debug
|
|
9
8
|
|
|
10
9
|
|
|
11
10
|
class WebsiteTools(Toolkit):
|
|
12
|
-
def __init__(
|
|
13
|
-
self
|
|
11
|
+
def __init__(
|
|
12
|
+
self,
|
|
13
|
+
knowledge: Optional[Knowledge] = None,
|
|
14
|
+
**kwargs,
|
|
15
|
+
):
|
|
16
|
+
self.knowledge: Optional[Knowledge] = knowledge
|
|
14
17
|
|
|
15
18
|
tools: List[Any] = []
|
|
16
|
-
if self.
|
|
17
|
-
|
|
18
|
-
tools.append(self.add_website_to_knowledge_base)
|
|
19
|
-
elif isinstance(self.knowledge_base, CombinedKnowledgeBase):
|
|
20
|
-
tools.append(self.add_website_to_combined_knowledge_base)
|
|
19
|
+
if self.knowledge is not None:
|
|
20
|
+
tools.append(self.add_website_to_knowledge)
|
|
21
21
|
else:
|
|
22
22
|
tools.append(self.read_url)
|
|
23
23
|
|
|
24
24
|
super().__init__(name="website_tools", tools=tools, **kwargs)
|
|
25
25
|
|
|
26
|
-
def
|
|
26
|
+
def add_website_to_knowledge(self, url: str) -> str:
|
|
27
27
|
"""This function adds a websites content to the knowledge base.
|
|
28
28
|
NOTE: The website must start with https:// and should be a valid website.
|
|
29
29
|
|
|
@@ -32,42 +32,11 @@ class WebsiteTools(Toolkit):
|
|
|
32
32
|
:param url: The url of the website to add.
|
|
33
33
|
:return: 'Success' if the website was added to the knowledge base.
|
|
34
34
|
"""
|
|
35
|
-
self.
|
|
36
|
-
if self.knowledge_base is None:
|
|
35
|
+
if self.knowledge is None:
|
|
37
36
|
return "Knowledge base not provided"
|
|
38
37
|
|
|
39
38
|
log_debug(f"Adding to knowledge base: {url}")
|
|
40
|
-
self.
|
|
41
|
-
log_debug("Loading knowledge base.")
|
|
42
|
-
self.knowledge_base.load(recreate=False)
|
|
43
|
-
return "Success"
|
|
44
|
-
|
|
45
|
-
def add_website_to_combined_knowledge_base(self, url: str) -> str:
|
|
46
|
-
"""This function adds a websites content to the knowledge base.
|
|
47
|
-
NOTE: The website must start with https:// and should be a valid website.
|
|
48
|
-
|
|
49
|
-
USE THIS FUNCTION TO GET INFORMATION ABOUT PRODUCTS FROM THE INTERNET.
|
|
50
|
-
|
|
51
|
-
:param url: The url of the website to add.
|
|
52
|
-
:return: 'Success' if the website was added to the knowledge base.
|
|
53
|
-
"""
|
|
54
|
-
self.knowledge_base = cast(CombinedKnowledgeBase, self.knowledge_base)
|
|
55
|
-
if self.knowledge_base is None:
|
|
56
|
-
return "Knowledge base not provided"
|
|
57
|
-
|
|
58
|
-
website_knowledge_base = None
|
|
59
|
-
for knowledge_base in self.knowledge_base.sources:
|
|
60
|
-
if isinstance(knowledge_base, WebsiteKnowledgeBase):
|
|
61
|
-
website_knowledge_base = knowledge_base
|
|
62
|
-
break
|
|
63
|
-
|
|
64
|
-
if website_knowledge_base is None:
|
|
65
|
-
return "Website knowledge base not found"
|
|
66
|
-
|
|
67
|
-
log_debug(f"Adding to knowledge base: {url}")
|
|
68
|
-
website_knowledge_base.urls.append(url)
|
|
69
|
-
log_debug("Loading knowledge base.")
|
|
70
|
-
website_knowledge_base.load(recreate=False)
|
|
39
|
+
self.knowledge.add_content(url=url)
|
|
71
40
|
return "Success"
|
|
72
41
|
|
|
73
42
|
def read_url(self, url: str) -> str:
|
|
@@ -76,7 +45,7 @@ class WebsiteTools(Toolkit):
|
|
|
76
45
|
:param url: The url of the website to read.
|
|
77
46
|
:return: Relevant documents from the website.
|
|
78
47
|
"""
|
|
79
|
-
from agno.
|
|
48
|
+
from agno.knowledge.reader.website_reader import WebsiteReader
|
|
80
49
|
|
|
81
50
|
website = WebsiteReader()
|
|
82
51
|
|
agno/tools/webtools.py
CHANGED
|
@@ -9,12 +9,20 @@ class WebTools(Toolkit):
|
|
|
9
9
|
A toolkit for working with web-related tools.
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
-
def __init__(
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
def __init__(
|
|
13
|
+
self,
|
|
14
|
+
retries: int = 3,
|
|
15
|
+
enable_expand_url: bool = True,
|
|
16
|
+
all: bool = False,
|
|
17
|
+
**kwargs,
|
|
18
|
+
):
|
|
15
19
|
self.retries = retries
|
|
16
20
|
|
|
17
|
-
|
|
21
|
+
tools = []
|
|
22
|
+
if all or enable_expand_url:
|
|
23
|
+
tools.append(self.expand_url)
|
|
24
|
+
|
|
25
|
+
super().__init__(name="web_tools", tools=tools, **kwargs)
|
|
18
26
|
|
|
19
27
|
def expand_url(self, url: str) -> str:
|
|
20
28
|
"""
|
agno/tools/whatsapp.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
from os import getenv
|
|
2
2
|
from typing import Any, Dict, List, Optional
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
@@ -30,25 +30,21 @@ class WhatsAppTools(Toolkit):
|
|
|
30
30
|
async_mode: Whether to use async methods (default: False)
|
|
31
31
|
"""
|
|
32
32
|
# Core credentials
|
|
33
|
-
self.access_token = access_token or
|
|
33
|
+
self.access_token = access_token or getenv("WHATSAPP_ACCESS_TOKEN")
|
|
34
34
|
if not self.access_token:
|
|
35
35
|
logger.error("WHATSAPP_ACCESS_TOKEN not set. Please set the WHATSAPP_ACCESS_TOKEN environment variable.")
|
|
36
36
|
|
|
37
|
-
self.phone_number_id = (
|
|
38
|
-
phone_number_id or os.getenv("WHATSAPP_PHONE_NUMBER_ID") or os.getenv("WHATSAPP_PHONE_NUMBER_ID")
|
|
39
|
-
)
|
|
37
|
+
self.phone_number_id = phone_number_id or getenv("WHATSAPP_PHONE_NUMBER_ID")
|
|
40
38
|
if not self.phone_number_id:
|
|
41
39
|
logger.error(
|
|
42
40
|
"WHATSAPP_PHONE_NUMBER_ID not set. Please set the WHATSAPP_PHONE_NUMBER_ID environment variable."
|
|
43
41
|
)
|
|
44
42
|
|
|
45
43
|
# Optional default recipient
|
|
46
|
-
self.default_recipient = (
|
|
47
|
-
recipient_waid or os.getenv("WHATSAPP_RECIPIENT_WAID") or os.getenv("WHATSAPP_RECIPIENT_WAID")
|
|
48
|
-
)
|
|
44
|
+
self.default_recipient = recipient_waid or getenv("WHATSAPP_RECIPIENT_WAID")
|
|
49
45
|
|
|
50
46
|
# API version and mode
|
|
51
|
-
self.version = version or
|
|
47
|
+
self.version = version or getenv("WHATSAPP_VERSION", "v22.0")
|
|
52
48
|
self.async_mode = async_mode
|
|
53
49
|
|
|
54
50
|
tools: List[Any] = []
|
agno/tools/wikipedia.py
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
import json
|
|
2
2
|
from typing import List, Optional
|
|
3
3
|
|
|
4
|
-
from agno.document import Document
|
|
5
|
-
from agno.knowledge.
|
|
4
|
+
from agno.knowledge.document import Document
|
|
5
|
+
from agno.knowledge.knowledge import Knowledge
|
|
6
|
+
from agno.knowledge.reader.wikipedia_reader import WikipediaReader
|
|
6
7
|
from agno.tools import Toolkit
|
|
7
8
|
from agno.utils.log import log_debug, log_info
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
class WikipediaTools(Toolkit):
|
|
11
|
-
def __init__(
|
|
12
|
+
def __init__(
|
|
13
|
+
self,
|
|
14
|
+
knowledge: Optional[Knowledge] = None,
|
|
15
|
+
all: bool = False,
|
|
16
|
+
**kwargs,
|
|
17
|
+
):
|
|
12
18
|
tools = []
|
|
13
19
|
|
|
14
|
-
self.
|
|
15
|
-
if self.
|
|
20
|
+
self.knowledge: Optional[Knowledge] = knowledge
|
|
21
|
+
if self.knowledge is not None and isinstance(self.knowledge, Knowledge):
|
|
16
22
|
tools.append(self.search_wikipedia_and_update_knowledge_base)
|
|
17
23
|
else:
|
|
18
24
|
tools.append(self.search_wikipedia) # type: ignore
|
|
@@ -28,15 +34,16 @@ class WikipediaTools(Toolkit):
|
|
|
28
34
|
:return: Relevant documents from Wikipedia knowledge base.
|
|
29
35
|
"""
|
|
30
36
|
|
|
31
|
-
if self.
|
|
32
|
-
return "Knowledge
|
|
37
|
+
if self.knowledge is None:
|
|
38
|
+
return "Knowledge not provided"
|
|
33
39
|
|
|
34
|
-
log_debug(f"Adding to knowledge
|
|
35
|
-
self.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
log_debug(f"Adding to knowledge: {topic}")
|
|
41
|
+
self.knowledge.add_content(
|
|
42
|
+
topics=[topic],
|
|
43
|
+
reader=WikipediaReader(),
|
|
44
|
+
)
|
|
45
|
+
log_debug(f"Searching knowledge: {topic}")
|
|
46
|
+
relevant_docs: List[Document] = self.knowledge.search(query=topic)
|
|
40
47
|
return json.dumps([doc.to_dict() for doc in relevant_docs])
|
|
41
48
|
|
|
42
49
|
def search_wikipedia(self, query: str) -> str:
|
agno/tools/x.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import
|
|
2
|
+
from os import getenv
|
|
3
3
|
from typing import Any, List, Optional
|
|
4
4
|
|
|
5
5
|
from agno.tools import Toolkit
|
|
@@ -35,11 +35,11 @@ class XTools(Toolkit):
|
|
|
35
35
|
include_post_metrics Optional[bool]: Whether to include post metrics in the search results.
|
|
36
36
|
wait_on_rate_limit Optional[bool]: Whether to wait on rate limit.
|
|
37
37
|
"""
|
|
38
|
-
self.bearer_token = bearer_token or
|
|
39
|
-
self.consumer_key = consumer_key or
|
|
40
|
-
self.consumer_secret = consumer_secret or
|
|
41
|
-
self.access_token = access_token or
|
|
42
|
-
self.access_token_secret = access_token_secret or
|
|
38
|
+
self.bearer_token = bearer_token or getenv("X_BEARER_TOKEN")
|
|
39
|
+
self.consumer_key = consumer_key or getenv("X_CONSUMER_KEY")
|
|
40
|
+
self.consumer_secret = consumer_secret or getenv("X_CONSUMER_SECRET")
|
|
41
|
+
self.access_token = access_token or getenv("X_ACCESS_TOKEN")
|
|
42
|
+
self.access_token_secret = access_token_secret or getenv("X_ACCESS_TOKEN_SECRET")
|
|
43
43
|
self.wait_on_rate_limit = wait_on_rate_limit
|
|
44
44
|
self.client = tweepy.Client(
|
|
45
45
|
bearer_token=self.bearer_token,
|
|
@@ -51,13 +51,14 @@ class XTools(Toolkit):
|
|
|
51
51
|
)
|
|
52
52
|
self.include_post_metrics = include_post_metrics
|
|
53
53
|
|
|
54
|
-
tools: List[Any] = [
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
tools: List[Any] = [
|
|
55
|
+
self.create_post,
|
|
56
|
+
self.reply_to_post,
|
|
57
|
+
self.send_dm,
|
|
58
|
+
self.get_user_info,
|
|
59
|
+
self.get_home_timeline,
|
|
60
|
+
self.search_posts,
|
|
61
|
+
]
|
|
61
62
|
|
|
62
63
|
super().__init__(name="x", tools=tools, **kwargs)
|
|
63
64
|
|
agno/tools/yfinance.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
+
from typing import Any, List
|
|
2
3
|
|
|
3
4
|
from agno.tools import Toolkit
|
|
4
5
|
from agno.utils.log import log_debug
|
|
@@ -12,52 +13,24 @@ except ImportError:
|
|
|
12
13
|
class YFinanceTools(Toolkit):
|
|
13
14
|
"""
|
|
14
15
|
YFinanceTools is a toolkit for getting financial data from Yahoo Finance.
|
|
15
|
-
|
|
16
|
-
stock_price (bool): Whether to get the current stock price.
|
|
17
|
-
company_info (bool): Whether to get company information.
|
|
18
|
-
stock_fundamentals (bool): Whether to get stock fundamentals.
|
|
19
|
-
income_statements (bool): Whether to get income statements.
|
|
20
|
-
key_financial_ratios (bool): Whether to get key financial ratios.
|
|
21
|
-
analyst_recommendations (bool): Whether to get analyst recommendations.
|
|
22
|
-
company_news (bool): Whether to get company news.
|
|
23
|
-
technical_indicators (bool): Whether to get technical indicators.
|
|
24
|
-
historical_prices (bool): Whether to get historical prices.
|
|
25
|
-
enable_all (bool): Whether to enable all tools.
|
|
16
|
+
Includes all available financial data tools.
|
|
26
17
|
"""
|
|
27
18
|
|
|
28
19
|
def __init__(
|
|
29
20
|
self,
|
|
30
|
-
stock_price: bool = True,
|
|
31
|
-
company_info: bool = False,
|
|
32
|
-
stock_fundamentals: bool = False,
|
|
33
|
-
income_statements: bool = False,
|
|
34
|
-
key_financial_ratios: bool = False,
|
|
35
|
-
analyst_recommendations: bool = False,
|
|
36
|
-
company_news: bool = False,
|
|
37
|
-
technical_indicators: bool = False,
|
|
38
|
-
historical_prices: bool = False,
|
|
39
|
-
enable_all: bool = False,
|
|
40
21
|
**kwargs,
|
|
41
22
|
):
|
|
42
|
-
tools = [
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if analyst_recommendations or enable_all:
|
|
54
|
-
tools.append(self.get_analyst_recommendations)
|
|
55
|
-
if company_news or enable_all:
|
|
56
|
-
tools.append(self.get_company_news)
|
|
57
|
-
if technical_indicators or enable_all:
|
|
58
|
-
tools.append(self.get_technical_indicators)
|
|
59
|
-
if historical_prices or enable_all:
|
|
60
|
-
tools.append(self.get_historical_stock_prices)
|
|
23
|
+
tools: List[Any] = [
|
|
24
|
+
self.get_current_stock_price,
|
|
25
|
+
self.get_company_info,
|
|
26
|
+
self.get_stock_fundamentals,
|
|
27
|
+
self.get_income_statements,
|
|
28
|
+
self.get_key_financial_ratios,
|
|
29
|
+
self.get_analyst_recommendations,
|
|
30
|
+
self.get_company_news,
|
|
31
|
+
self.get_technical_indicators,
|
|
32
|
+
self.get_historical_stock_prices,
|
|
33
|
+
]
|
|
61
34
|
|
|
62
35
|
super().__init__(name="yfinance_tools", tools=tools, **kwargs)
|
|
63
36
|
|
agno/tools/youtube.py
CHANGED
|
@@ -17,9 +17,10 @@ except ImportError:
|
|
|
17
17
|
class YouTubeTools(Toolkit):
|
|
18
18
|
def __init__(
|
|
19
19
|
self,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
enable_get_video_captions: bool = True,
|
|
21
|
+
enable_get_video_data: bool = True,
|
|
22
|
+
enable_get_video_timestamps: bool = True,
|
|
23
|
+
all: bool = False,
|
|
23
24
|
languages: Optional[List[str]] = None,
|
|
24
25
|
proxies: Optional[Dict[str, Any]] = None,
|
|
25
26
|
**kwargs,
|
|
@@ -28,11 +29,11 @@ class YouTubeTools(Toolkit):
|
|
|
28
29
|
self.proxies: Optional[Dict[str, Any]] = proxies
|
|
29
30
|
|
|
30
31
|
tools: List[Any] = []
|
|
31
|
-
if
|
|
32
|
+
if all or enable_get_video_captions:
|
|
32
33
|
tools.append(self.get_youtube_video_captions)
|
|
33
|
-
if
|
|
34
|
+
if all or enable_get_video_data:
|
|
34
35
|
tools.append(self.get_youtube_video_data)
|
|
35
|
-
if
|
|
36
|
+
if all or enable_get_video_timestamps:
|
|
36
37
|
tools.append(self.get_video_timestamps)
|
|
37
38
|
|
|
38
39
|
super().__init__(name="youtube_tools", tools=tools, **kwargs)
|
|
@@ -126,17 +127,19 @@ class YouTubeTools(Toolkit):
|
|
|
126
127
|
return "Error getting video ID from URL, please provide a valid YouTube url"
|
|
127
128
|
|
|
128
129
|
try:
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
130
|
+
captions = None
|
|
131
|
+
kwargs: Dict = {}
|
|
132
|
+
if self.languages:
|
|
133
|
+
kwargs["languages"] = self.languages or ["en"]
|
|
134
|
+
if self.proxies:
|
|
135
|
+
kwargs["proxies"] = self.proxies
|
|
136
|
+
if video_id is not None:
|
|
137
|
+
captions = YouTubeTranscriptApi().fetch(video_id, **kwargs)
|
|
138
|
+
else:
|
|
139
|
+
return "No video ID found"
|
|
140
|
+
if captions:
|
|
141
|
+
return " ".join(line.text for line in captions)
|
|
142
|
+
return "No captions found for video"
|
|
140
143
|
except Exception as e:
|
|
141
144
|
# log_info(f"Error getting captions for video {video_id}: {e}")
|
|
142
145
|
return f"Error getting captions for video: {e}"
|
|
@@ -160,6 +163,9 @@ class YouTubeTools(Toolkit):
|
|
|
160
163
|
except Exception:
|
|
161
164
|
return "Error getting video ID from URL, please provide a valid YouTube url"
|
|
162
165
|
|
|
166
|
+
if video_id is None:
|
|
167
|
+
return "No video ID found"
|
|
168
|
+
|
|
163
169
|
try:
|
|
164
170
|
kwargs: Dict = {}
|
|
165
171
|
if self.languages:
|
|
@@ -167,12 +173,12 @@ class YouTubeTools(Toolkit):
|
|
|
167
173
|
if self.proxies:
|
|
168
174
|
kwargs["proxies"] = self.proxies
|
|
169
175
|
|
|
170
|
-
captions = YouTubeTranscriptApi.
|
|
176
|
+
captions = YouTubeTranscriptApi().fetch(video_id, **kwargs)
|
|
171
177
|
timestamps = []
|
|
172
178
|
for line in captions:
|
|
173
|
-
start = int(line
|
|
179
|
+
start = int(line.start)
|
|
174
180
|
minutes, seconds = divmod(start, 60)
|
|
175
|
-
timestamps.append(f"{minutes}:{seconds:02d} - {line
|
|
181
|
+
timestamps.append(f"{minutes}:{seconds:02d} - {line.text}")
|
|
176
182
|
return "\n".join(timestamps)
|
|
177
183
|
except Exception as e:
|
|
178
184
|
return f"Error generating timestamps: {e}"
|
agno/tools/zendesk.py
CHANGED
|
@@ -23,6 +23,8 @@ class ZendeskTools(Toolkit):
|
|
|
23
23
|
username: Optional[str] = None,
|
|
24
24
|
password: Optional[str] = None,
|
|
25
25
|
company_name: Optional[str] = None,
|
|
26
|
+
enable_search_zendesk: bool = True,
|
|
27
|
+
all: bool = False,
|
|
26
28
|
**kwargs,
|
|
27
29
|
):
|
|
28
30
|
"""
|
|
@@ -33,16 +35,19 @@ class ZendeskTools(Toolkit):
|
|
|
33
35
|
username (str): The username for Zendesk API authentication.
|
|
34
36
|
password (str): The password for Zendesk API authentication.
|
|
35
37
|
company_name (str): The company name to form the base URL for API requests.
|
|
38
|
+
enable_search_zendesk (bool): Whether to enable the search functionality.
|
|
39
|
+
all (bool): Enable all functions.
|
|
36
40
|
"""
|
|
37
41
|
self.username = username or getenv("ZENDESK_USERNAME")
|
|
38
|
-
self.password = password or getenv("
|
|
42
|
+
self.password = password or getenv("ZENDESK_PASSWORD")
|
|
39
43
|
self.company_name = company_name or getenv("ZENDESK_COMPANY_NAME")
|
|
40
44
|
|
|
41
45
|
if not self.username or not self.password or not self.company_name:
|
|
42
46
|
logger.error("Username, password, or company name not provided.")
|
|
43
47
|
|
|
44
48
|
tools: List[Any] = []
|
|
45
|
-
|
|
49
|
+
if all or enable_search_zendesk:
|
|
50
|
+
tools.append(self.search_zendesk)
|
|
46
51
|
|
|
47
52
|
super().__init__(name="zendesk_tools", tools=tools, **kwargs)
|
|
48
53
|
|
agno/tools/zep.py
CHANGED
|
@@ -40,11 +40,12 @@ class ZepTools(Toolkit):
|
|
|
40
40
|
user_id: Optional[str] = None,
|
|
41
41
|
api_key: Optional[str] = None,
|
|
42
42
|
ignore_assistant_messages: bool = False,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
enable_add_zep_message: bool = True,
|
|
44
|
+
enable_get_zep_memory: bool = True,
|
|
45
|
+
enable_search_zep_memory: bool = True,
|
|
46
46
|
instructions: Optional[str] = None,
|
|
47
47
|
add_instructions: bool = False,
|
|
48
|
+
all: bool = False,
|
|
48
49
|
**kwargs,
|
|
49
50
|
):
|
|
50
51
|
self._api_key = api_key or getenv("ZEP_API_KEY")
|
|
@@ -71,11 +72,11 @@ class ZepTools(Toolkit):
|
|
|
71
72
|
self.initialize()
|
|
72
73
|
|
|
73
74
|
tools: List[Any] = []
|
|
74
|
-
if
|
|
75
|
+
if enable_add_zep_message or all:
|
|
75
76
|
tools.append(self.add_zep_message)
|
|
76
|
-
if
|
|
77
|
+
if enable_get_zep_memory or all:
|
|
77
78
|
tools.append(self.get_zep_memory)
|
|
78
|
-
if
|
|
79
|
+
if enable_search_zep_memory or all:
|
|
79
80
|
tools.append(self.search_zep_memory)
|
|
80
81
|
|
|
81
82
|
super().__init__(
|
|
@@ -118,7 +119,7 @@ class ZepTools(Toolkit):
|
|
|
118
119
|
|
|
119
120
|
# Create session associated with the user
|
|
120
121
|
try:
|
|
121
|
-
self.zep_client.thread.create(thread_id=self.session_id, user_id=self.user_id)
|
|
122
|
+
self.zep_client.thread.create(thread_id=self.session_id, user_id=self.user_id) # type: ignore
|
|
122
123
|
log_debug(f"Created session {self.session_id} for user {self.user_id}")
|
|
123
124
|
except Exception as e:
|
|
124
125
|
log_debug(f"Session may already exist: {e}")
|
|
@@ -150,6 +151,7 @@ class ZepTools(Toolkit):
|
|
|
150
151
|
zep_message = ZepMessage(
|
|
151
152
|
role=role,
|
|
152
153
|
content=content,
|
|
154
|
+
role_type=role,
|
|
153
155
|
)
|
|
154
156
|
|
|
155
157
|
# Prepare ignore_roles if needed
|
|
@@ -358,6 +360,7 @@ class ZepAsyncTools(Toolkit):
|
|
|
358
360
|
zep_message = ZepMessage(
|
|
359
361
|
role=role,
|
|
360
362
|
content=content,
|
|
363
|
+
role_type=role,
|
|
361
364
|
)
|
|
362
365
|
|
|
363
366
|
# Prepare ignore_roles if needed
|
agno/tools/zoom.py
CHANGED
|
@@ -6,7 +6,7 @@ from typing import Any, List, Optional
|
|
|
6
6
|
|
|
7
7
|
import requests
|
|
8
8
|
|
|
9
|
-
from agno.tools
|
|
9
|
+
from agno.tools import Toolkit
|
|
10
10
|
from agno.utils.log import log_debug, log_info, logger
|
|
11
11
|
|
|
12
12
|
|
|
@@ -39,14 +39,15 @@ class ZoomTools(Toolkit):
|
|
|
39
39
|
"ZOOM_ACCOUNT_ID, ZOOM_CLIENT_ID, and ZOOM_CLIENT_SECRET must be set either through parameters or environment variables."
|
|
40
40
|
)
|
|
41
41
|
|
|
42
|
-
tools: List[Any] = [
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
42
|
+
tools: List[Any] = [
|
|
43
|
+
self.get_access_token,
|
|
44
|
+
self.schedule_meeting,
|
|
45
|
+
self.get_upcoming_meetings,
|
|
46
|
+
self.list_meetings,
|
|
47
|
+
self.get_meeting_recordings,
|
|
48
|
+
self.delete_meeting,
|
|
49
|
+
self.get_meeting,
|
|
50
|
+
]
|
|
50
51
|
|
|
51
52
|
super().__init__(name="zoom_tool", tools=tools, **kwargs)
|
|
52
53
|
|
agno/utils/common.py
CHANGED
|
@@ -10,24 +10,6 @@ def isinstanceany(obj: Any, class_list: List[Type]) -> bool:
|
|
|
10
10
|
return False
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
def str_to_int(inp: Optional[str]) -> Optional[int]:
|
|
14
|
-
"""
|
|
15
|
-
Safely converts a string value to integer.
|
|
16
|
-
Args:
|
|
17
|
-
inp: input string
|
|
18
|
-
|
|
19
|
-
Returns: input string as int if possible, None if not
|
|
20
|
-
"""
|
|
21
|
-
if inp is None:
|
|
22
|
-
return None
|
|
23
|
-
|
|
24
|
-
try:
|
|
25
|
-
val = int(inp)
|
|
26
|
-
return val
|
|
27
|
-
except Exception:
|
|
28
|
-
return None
|
|
29
|
-
|
|
30
|
-
|
|
31
13
|
def is_empty(val: Any) -> bool:
|
|
32
14
|
"""Returns True if val is None or empty"""
|
|
33
15
|
if val is None or len(val) == 0 or val == "":
|
|
@@ -43,7 +25,7 @@ def dataclass_to_dict(dataclass_object, exclude: Optional[set[str]] = None, excl
|
|
|
43
25
|
final_dict = asdict(dataclass_object)
|
|
44
26
|
if exclude:
|
|
45
27
|
for key in exclude:
|
|
46
|
-
final_dict.pop(key)
|
|
28
|
+
final_dict.pop(key, None)
|
|
47
29
|
if exclude_none:
|
|
48
30
|
final_dict = {k: v for k, v in final_dict.items() if v is not None}
|
|
49
31
|
return final_dict
|