agno 1.8.2__py3-none-any.whl → 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agno/agent/__init__.py +19 -27
- agno/agent/agent.py +3143 -4170
- agno/api/agent.py +11 -67
- agno/api/api.py +5 -46
- agno/api/evals.py +8 -19
- agno/api/os.py +17 -0
- agno/api/routes.py +6 -41
- agno/api/schemas/__init__.py +9 -0
- agno/api/schemas/agent.py +5 -21
- agno/api/schemas/evals.py +7 -16
- agno/api/schemas/os.py +14 -0
- agno/api/schemas/team.py +5 -21
- agno/api/schemas/utils.py +21 -0
- agno/api/schemas/workflows.py +11 -7
- agno/api/settings.py +53 -0
- agno/api/team.py +11 -66
- agno/api/workflow.py +28 -0
- agno/cloud/aws/base.py +214 -0
- agno/cloud/aws/s3/__init__.py +2 -0
- agno/cloud/aws/s3/api_client.py +43 -0
- agno/cloud/aws/s3/bucket.py +195 -0
- agno/cloud/aws/s3/object.py +57 -0
- agno/db/__init__.py +24 -0
- agno/db/base.py +245 -0
- agno/db/dynamo/__init__.py +3 -0
- agno/db/dynamo/dynamo.py +1743 -0
- agno/db/dynamo/schemas.py +278 -0
- agno/db/dynamo/utils.py +684 -0
- agno/db/firestore/__init__.py +3 -0
- agno/db/firestore/firestore.py +1432 -0
- agno/db/firestore/schemas.py +130 -0
- agno/db/firestore/utils.py +278 -0
- agno/db/gcs_json/__init__.py +3 -0
- agno/db/gcs_json/gcs_json_db.py +1001 -0
- agno/db/gcs_json/utils.py +194 -0
- agno/db/in_memory/__init__.py +3 -0
- agno/db/in_memory/in_memory_db.py +882 -0
- agno/db/in_memory/utils.py +172 -0
- agno/db/json/__init__.py +3 -0
- agno/db/json/json_db.py +1045 -0
- agno/db/json/utils.py +196 -0
- agno/db/migrations/v1_to_v2.py +162 -0
- agno/db/mongo/__init__.py +3 -0
- agno/db/mongo/mongo.py +1416 -0
- agno/db/mongo/schemas.py +77 -0
- agno/db/mongo/utils.py +204 -0
- agno/db/mysql/__init__.py +3 -0
- agno/db/mysql/mysql.py +1719 -0
- agno/db/mysql/schemas.py +124 -0
- agno/db/mysql/utils.py +297 -0
- agno/db/postgres/__init__.py +3 -0
- agno/db/postgres/postgres.py +1710 -0
- agno/db/postgres/schemas.py +124 -0
- agno/db/postgres/utils.py +280 -0
- agno/db/redis/__init__.py +3 -0
- agno/db/redis/redis.py +1367 -0
- agno/db/redis/schemas.py +109 -0
- agno/db/redis/utils.py +288 -0
- agno/db/schemas/__init__.py +3 -0
- agno/db/schemas/evals.py +33 -0
- agno/db/schemas/knowledge.py +40 -0
- agno/db/schemas/memory.py +46 -0
- agno/db/singlestore/__init__.py +3 -0
- agno/db/singlestore/schemas.py +116 -0
- agno/db/singlestore/singlestore.py +1712 -0
- agno/db/singlestore/utils.py +326 -0
- agno/db/sqlite/__init__.py +3 -0
- agno/db/sqlite/schemas.py +119 -0
- agno/db/sqlite/sqlite.py +1676 -0
- agno/db/sqlite/utils.py +268 -0
- agno/db/utils.py +88 -0
- agno/eval/__init__.py +14 -0
- agno/eval/accuracy.py +154 -48
- agno/eval/performance.py +88 -23
- agno/eval/reliability.py +73 -20
- agno/eval/utils.py +23 -13
- agno/integrations/discord/__init__.py +3 -0
- agno/{app → integrations}/discord/client.py +10 -10
- agno/knowledge/__init__.py +2 -2
- agno/{document → knowledge}/chunking/agentic.py +2 -2
- agno/{document → knowledge}/chunking/document.py +2 -2
- agno/{document → knowledge}/chunking/fixed.py +3 -3
- agno/{document → knowledge}/chunking/markdown.py +2 -2
- agno/{document → knowledge}/chunking/recursive.py +2 -2
- agno/{document → knowledge}/chunking/row.py +2 -2
- agno/knowledge/chunking/semantic.py +59 -0
- agno/knowledge/chunking/strategy.py +121 -0
- agno/knowledge/content.py +74 -0
- agno/knowledge/document/__init__.py +5 -0
- agno/{document → knowledge/document}/base.py +12 -2
- agno/knowledge/embedder/__init__.py +5 -0
- agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
- agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
- agno/{embedder → knowledge/embedder}/base.py +6 -0
- agno/{embedder → knowledge/embedder}/cohere.py +72 -1
- agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
- agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
- agno/{embedder → knowledge/embedder}/google.py +74 -1
- agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
- agno/{embedder → knowledge/embedder}/jina.py +48 -2
- agno/knowledge/embedder/langdb.py +22 -0
- agno/knowledge/embedder/mistral.py +139 -0
- agno/{embedder → knowledge/embedder}/nebius.py +1 -1
- agno/{embedder → knowledge/embedder}/ollama.py +54 -3
- agno/knowledge/embedder/openai.py +223 -0
- agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
- agno/{embedder → knowledge/embedder}/together.py +1 -1
- agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
- agno/knowledge/knowledge.py +1551 -0
- agno/knowledge/reader/__init__.py +7 -0
- agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
- agno/knowledge/reader/base.py +88 -0
- agno/{document → knowledge}/reader/csv_reader.py +47 -65
- agno/knowledge/reader/docx_reader.py +83 -0
- agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
- agno/{document → knowledge}/reader/json_reader.py +30 -9
- agno/{document → knowledge}/reader/markdown_reader.py +58 -9
- agno/{document → knowledge}/reader/pdf_reader.py +71 -126
- agno/knowledge/reader/reader_factory.py +268 -0
- agno/knowledge/reader/s3_reader.py +101 -0
- agno/{document → knowledge}/reader/text_reader.py +31 -10
- agno/knowledge/reader/url_reader.py +128 -0
- agno/knowledge/reader/web_search_reader.py +366 -0
- agno/{document → knowledge}/reader/website_reader.py +37 -10
- agno/knowledge/reader/wikipedia_reader.py +59 -0
- agno/knowledge/reader/youtube_reader.py +78 -0
- agno/knowledge/remote_content/remote_content.py +88 -0
- agno/{reranker → knowledge/reranker}/base.py +1 -1
- agno/{reranker → knowledge/reranker}/cohere.py +2 -2
- agno/{reranker → knowledge/reranker}/infinity.py +2 -2
- agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
- agno/knowledge/types.py +30 -0
- agno/knowledge/utils.py +169 -0
- agno/media.py +269 -268
- agno/memory/__init__.py +2 -10
- agno/memory/manager.py +1003 -148
- agno/models/aimlapi/__init__.py +2 -2
- agno/models/aimlapi/aimlapi.py +6 -6
- agno/models/anthropic/claude.py +128 -72
- agno/models/aws/bedrock.py +107 -175
- agno/models/aws/claude.py +64 -18
- agno/models/azure/ai_foundry.py +73 -23
- agno/models/base.py +346 -290
- agno/models/cerebras/cerebras.py +84 -27
- agno/models/cohere/chat.py +106 -98
- agno/models/google/gemini.py +105 -46
- agno/models/groq/groq.py +97 -35
- agno/models/huggingface/huggingface.py +92 -27
- agno/models/ibm/watsonx.py +72 -13
- agno/models/litellm/chat.py +85 -13
- agno/models/message.py +46 -151
- agno/models/meta/llama.py +85 -49
- agno/models/metrics.py +120 -0
- agno/models/mistral/mistral.py +90 -21
- agno/models/ollama/__init__.py +0 -2
- agno/models/ollama/chat.py +85 -47
- agno/models/openai/chat.py +154 -37
- agno/models/openai/responses.py +178 -105
- agno/models/perplexity/perplexity.py +26 -2
- agno/models/portkey/portkey.py +0 -7
- agno/models/response.py +15 -9
- agno/models/utils.py +20 -0
- agno/models/vercel/__init__.py +2 -2
- agno/models/vercel/v0.py +1 -1
- agno/models/vllm/__init__.py +2 -2
- agno/models/vllm/vllm.py +3 -3
- agno/models/xai/xai.py +10 -10
- agno/os/__init__.py +3 -0
- agno/os/app.py +497 -0
- agno/os/auth.py +47 -0
- agno/os/config.py +103 -0
- agno/os/interfaces/agui/__init__.py +3 -0
- agno/os/interfaces/agui/agui.py +31 -0
- agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
- agno/{app → os/interfaces}/agui/utils.py +65 -28
- agno/os/interfaces/base.py +21 -0
- agno/os/interfaces/slack/__init__.py +3 -0
- agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
- agno/os/interfaces/slack/slack.py +32 -0
- agno/os/interfaces/whatsapp/__init__.py +3 -0
- agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
- agno/os/interfaces/whatsapp/whatsapp.py +29 -0
- agno/os/mcp.py +235 -0
- agno/os/router.py +1400 -0
- agno/os/routers/__init__.py +3 -0
- agno/os/routers/evals/__init__.py +3 -0
- agno/os/routers/evals/evals.py +393 -0
- agno/os/routers/evals/schemas.py +142 -0
- agno/os/routers/evals/utils.py +161 -0
- agno/os/routers/knowledge/__init__.py +3 -0
- agno/os/routers/knowledge/knowledge.py +850 -0
- agno/os/routers/knowledge/schemas.py +118 -0
- agno/os/routers/memory/__init__.py +3 -0
- agno/os/routers/memory/memory.py +410 -0
- agno/os/routers/memory/schemas.py +58 -0
- agno/os/routers/metrics/__init__.py +3 -0
- agno/os/routers/metrics/metrics.py +178 -0
- agno/os/routers/metrics/schemas.py +47 -0
- agno/os/routers/session/__init__.py +3 -0
- agno/os/routers/session/session.py +536 -0
- agno/os/schema.py +945 -0
- agno/{app/playground → os}/settings.py +7 -15
- agno/os/utils.py +270 -0
- agno/reasoning/azure_ai_foundry.py +4 -4
- agno/reasoning/deepseek.py +4 -4
- agno/reasoning/default.py +6 -11
- agno/reasoning/groq.py +4 -4
- agno/reasoning/helpers.py +4 -6
- agno/reasoning/ollama.py +4 -4
- agno/reasoning/openai.py +4 -4
- agno/run/agent.py +633 -0
- agno/run/base.py +53 -77
- agno/run/cancel.py +81 -0
- agno/run/team.py +243 -96
- agno/run/workflow.py +550 -12
- agno/session/__init__.py +10 -0
- agno/session/agent.py +244 -0
- agno/session/summary.py +225 -0
- agno/session/team.py +262 -0
- agno/{storage/session/v2 → session}/workflow.py +47 -24
- agno/team/__init__.py +15 -16
- agno/team/team.py +3260 -4824
- agno/tools/agentql.py +14 -5
- agno/tools/airflow.py +9 -4
- agno/tools/api.py +7 -3
- agno/tools/apify.py +2 -46
- agno/tools/arxiv.py +8 -3
- agno/tools/aws_lambda.py +7 -5
- agno/tools/aws_ses.py +7 -1
- agno/tools/baidusearch.py +4 -1
- agno/tools/bitbucket.py +4 -4
- agno/tools/brandfetch.py +14 -11
- agno/tools/bravesearch.py +4 -1
- agno/tools/brightdata.py +43 -23
- agno/tools/browserbase.py +13 -4
- agno/tools/calcom.py +12 -10
- agno/tools/calculator.py +10 -27
- agno/tools/cartesia.py +20 -17
- agno/tools/{clickup_tool.py → clickup.py} +12 -25
- agno/tools/confluence.py +8 -8
- agno/tools/crawl4ai.py +7 -1
- agno/tools/csv_toolkit.py +9 -8
- agno/tools/dalle.py +22 -12
- agno/tools/daytona.py +13 -16
- agno/tools/decorator.py +6 -3
- agno/tools/desi_vocal.py +17 -8
- agno/tools/discord.py +11 -8
- agno/tools/docker.py +30 -42
- agno/tools/duckdb.py +34 -53
- agno/tools/duckduckgo.py +8 -7
- agno/tools/e2b.py +62 -62
- agno/tools/eleven_labs.py +36 -29
- agno/tools/email.py +4 -1
- agno/tools/evm.py +7 -1
- agno/tools/exa.py +19 -14
- agno/tools/fal.py +30 -30
- agno/tools/file.py +9 -8
- agno/tools/financial_datasets.py +25 -44
- agno/tools/firecrawl.py +17 -18
- agno/tools/function.py +127 -18
- agno/tools/giphy.py +23 -11
- agno/tools/github.py +48 -126
- agno/tools/gmail.py +45 -61
- agno/tools/google_bigquery.py +7 -6
- agno/tools/google_maps.py +11 -26
- agno/tools/googlesearch.py +7 -2
- agno/tools/googlesheets.py +21 -17
- agno/tools/hackernews.py +9 -5
- agno/tools/jina.py +5 -4
- agno/tools/jira.py +18 -9
- agno/tools/knowledge.py +31 -32
- agno/tools/linear.py +18 -33
- agno/tools/linkup.py +5 -1
- agno/tools/local_file_system.py +8 -5
- agno/tools/lumalab.py +32 -20
- agno/tools/mcp.py +1 -2
- agno/tools/mem0.py +18 -12
- agno/tools/memori.py +14 -10
- agno/tools/mlx_transcribe.py +3 -2
- agno/tools/models/azure_openai.py +33 -15
- agno/tools/models/gemini.py +59 -32
- agno/tools/models/groq.py +30 -23
- agno/tools/models/nebius.py +28 -12
- agno/tools/models_labs.py +40 -16
- agno/tools/moviepy_video.py +7 -6
- agno/tools/neo4j.py +10 -8
- agno/tools/newspaper.py +7 -2
- agno/tools/newspaper4k.py +8 -3
- agno/tools/openai.py +58 -32
- agno/tools/openbb.py +12 -11
- agno/tools/opencv.py +63 -47
- agno/tools/openweather.py +14 -12
- agno/tools/pandas.py +11 -3
- agno/tools/postgres.py +4 -12
- agno/tools/pubmed.py +4 -1
- agno/tools/python.py +9 -22
- agno/tools/reasoning.py +35 -27
- agno/tools/reddit.py +11 -26
- agno/tools/replicate.py +55 -42
- agno/tools/resend.py +4 -1
- agno/tools/scrapegraph.py +15 -14
- agno/tools/searxng.py +10 -23
- agno/tools/serpapi.py +6 -3
- agno/tools/serper.py +13 -4
- agno/tools/shell.py +9 -2
- agno/tools/slack.py +12 -11
- agno/tools/sleep.py +3 -2
- agno/tools/spider.py +24 -4
- agno/tools/sql.py +7 -6
- agno/tools/tavily.py +6 -4
- agno/tools/telegram.py +12 -4
- agno/tools/todoist.py +11 -31
- agno/tools/toolkit.py +1 -1
- agno/tools/trafilatura.py +22 -6
- agno/tools/trello.py +9 -22
- agno/tools/twilio.py +10 -3
- agno/tools/user_control_flow.py +6 -1
- agno/tools/valyu.py +34 -5
- agno/tools/visualization.py +19 -28
- agno/tools/webbrowser.py +4 -3
- agno/tools/webex.py +11 -7
- agno/tools/website.py +15 -46
- agno/tools/webtools.py +12 -4
- agno/tools/whatsapp.py +5 -9
- agno/tools/wikipedia.py +20 -13
- agno/tools/x.py +14 -13
- agno/tools/yfinance.py +13 -40
- agno/tools/youtube.py +26 -20
- agno/tools/zendesk.py +7 -2
- agno/tools/zep.py +10 -7
- agno/tools/zoom.py +10 -9
- agno/utils/common.py +1 -19
- agno/utils/events.py +100 -123
- agno/utils/gemini.py +1 -1
- agno/utils/knowledge.py +29 -0
- agno/utils/log.py +54 -4
- agno/utils/mcp.py +68 -10
- agno/utils/media.py +39 -0
- agno/utils/message.py +12 -1
- agno/utils/models/aws_claude.py +1 -1
- agno/utils/models/claude.py +6 -12
- agno/utils/models/cohere.py +1 -1
- agno/utils/models/mistral.py +8 -7
- agno/utils/models/schema_utils.py +3 -3
- agno/utils/models/watsonx.py +1 -1
- agno/utils/openai.py +1 -1
- agno/utils/pprint.py +33 -32
- agno/utils/print_response/agent.py +779 -0
- agno/utils/print_response/team.py +1669 -0
- agno/utils/print_response/workflow.py +1451 -0
- agno/utils/prompts.py +14 -14
- agno/utils/reasoning.py +87 -0
- agno/utils/response.py +42 -42
- agno/utils/streamlit.py +481 -0
- agno/utils/string.py +8 -22
- agno/utils/team.py +50 -0
- agno/utils/timer.py +2 -2
- agno/vectordb/base.py +33 -21
- agno/vectordb/cassandra/cassandra.py +287 -23
- agno/vectordb/chroma/chromadb.py +482 -59
- agno/vectordb/clickhouse/clickhousedb.py +270 -63
- agno/vectordb/couchbase/couchbase.py +309 -29
- agno/vectordb/lancedb/lance_db.py +360 -21
- agno/vectordb/langchaindb/__init__.py +5 -0
- agno/vectordb/langchaindb/langchaindb.py +145 -0
- agno/vectordb/lightrag/__init__.py +5 -0
- agno/vectordb/lightrag/lightrag.py +374 -0
- agno/vectordb/llamaindex/llamaindexdb.py +127 -0
- agno/vectordb/milvus/milvus.py +242 -32
- agno/vectordb/mongodb/mongodb.py +200 -24
- agno/vectordb/pgvector/pgvector.py +319 -37
- agno/vectordb/pineconedb/pineconedb.py +221 -27
- agno/vectordb/qdrant/qdrant.py +334 -14
- agno/vectordb/singlestore/singlestore.py +286 -29
- agno/vectordb/surrealdb/surrealdb.py +187 -7
- agno/vectordb/upstashdb/upstashdb.py +342 -26
- agno/vectordb/weaviate/weaviate.py +227 -165
- agno/workflow/__init__.py +17 -13
- agno/workflow/{v2/condition.py → condition.py} +135 -32
- agno/workflow/{v2/loop.py → loop.py} +115 -28
- agno/workflow/{v2/parallel.py → parallel.py} +138 -108
- agno/workflow/{v2/router.py → router.py} +133 -32
- agno/workflow/{v2/step.py → step.py} +207 -49
- agno/workflow/{v2/steps.py → steps.py} +147 -66
- agno/workflow/types.py +482 -0
- agno/workflow/workflow.py +2410 -696
- agno-2.0.0.dist-info/METADATA +494 -0
- agno-2.0.0.dist-info/RECORD +515 -0
- agno-2.0.0.dist-info/licenses/LICENSE +201 -0
- agno/agent/metrics.py +0 -110
- agno/api/app.py +0 -35
- agno/api/playground.py +0 -92
- agno/api/schemas/app.py +0 -12
- agno/api/schemas/playground.py +0 -22
- agno/api/schemas/user.py +0 -35
- agno/api/schemas/workspace.py +0 -46
- agno/api/user.py +0 -160
- agno/api/workflows.py +0 -33
- agno/api/workspace.py +0 -175
- agno/app/agui/__init__.py +0 -3
- agno/app/agui/app.py +0 -17
- agno/app/agui/sync_router.py +0 -120
- agno/app/base.py +0 -186
- agno/app/discord/__init__.py +0 -3
- agno/app/fastapi/__init__.py +0 -3
- agno/app/fastapi/app.py +0 -107
- agno/app/fastapi/async_router.py +0 -457
- agno/app/fastapi/sync_router.py +0 -448
- agno/app/playground/app.py +0 -228
- agno/app/playground/async_router.py +0 -1053
- agno/app/playground/deploy.py +0 -249
- agno/app/playground/operator.py +0 -183
- agno/app/playground/schemas.py +0 -223
- agno/app/playground/serve.py +0 -55
- agno/app/playground/sync_router.py +0 -1045
- agno/app/playground/utils.py +0 -46
- agno/app/settings.py +0 -15
- agno/app/slack/__init__.py +0 -3
- agno/app/slack/app.py +0 -19
- agno/app/slack/sync_router.py +0 -92
- agno/app/utils.py +0 -54
- agno/app/whatsapp/__init__.py +0 -3
- agno/app/whatsapp/app.py +0 -15
- agno/app/whatsapp/sync_router.py +0 -197
- agno/cli/auth_server.py +0 -249
- agno/cli/config.py +0 -274
- agno/cli/console.py +0 -88
- agno/cli/credentials.py +0 -23
- agno/cli/entrypoint.py +0 -571
- agno/cli/operator.py +0 -357
- agno/cli/settings.py +0 -96
- agno/cli/ws/ws_cli.py +0 -817
- agno/constants.py +0 -13
- agno/document/__init__.py +0 -5
- agno/document/chunking/semantic.py +0 -45
- agno/document/chunking/strategy.py +0 -31
- agno/document/reader/__init__.py +0 -5
- agno/document/reader/base.py +0 -47
- agno/document/reader/docx_reader.py +0 -60
- agno/document/reader/gcs/pdf_reader.py +0 -44
- agno/document/reader/s3/pdf_reader.py +0 -59
- agno/document/reader/s3/text_reader.py +0 -63
- agno/document/reader/url_reader.py +0 -59
- agno/document/reader/youtube_reader.py +0 -58
- agno/embedder/__init__.py +0 -5
- agno/embedder/langdb.py +0 -80
- agno/embedder/mistral.py +0 -82
- agno/embedder/openai.py +0 -78
- agno/file/__init__.py +0 -5
- agno/file/file.py +0 -16
- agno/file/local/csv.py +0 -32
- agno/file/local/txt.py +0 -19
- agno/infra/app.py +0 -240
- agno/infra/base.py +0 -144
- agno/infra/context.py +0 -20
- agno/infra/db_app.py +0 -52
- agno/infra/resource.py +0 -205
- agno/infra/resources.py +0 -55
- agno/knowledge/agent.py +0 -702
- agno/knowledge/arxiv.py +0 -33
- agno/knowledge/combined.py +0 -36
- agno/knowledge/csv.py +0 -144
- agno/knowledge/csv_url.py +0 -124
- agno/knowledge/document.py +0 -223
- agno/knowledge/docx.py +0 -137
- agno/knowledge/firecrawl.py +0 -34
- agno/knowledge/gcs/__init__.py +0 -0
- agno/knowledge/gcs/base.py +0 -39
- agno/knowledge/gcs/pdf.py +0 -125
- agno/knowledge/json.py +0 -137
- agno/knowledge/langchain.py +0 -71
- agno/knowledge/light_rag.py +0 -273
- agno/knowledge/llamaindex.py +0 -66
- agno/knowledge/markdown.py +0 -154
- agno/knowledge/pdf.py +0 -164
- agno/knowledge/pdf_bytes.py +0 -42
- agno/knowledge/pdf_url.py +0 -148
- agno/knowledge/s3/__init__.py +0 -0
- agno/knowledge/s3/base.py +0 -64
- agno/knowledge/s3/pdf.py +0 -33
- agno/knowledge/s3/text.py +0 -34
- agno/knowledge/text.py +0 -141
- agno/knowledge/url.py +0 -46
- agno/knowledge/website.py +0 -179
- agno/knowledge/wikipedia.py +0 -32
- agno/knowledge/youtube.py +0 -35
- agno/memory/agent.py +0 -423
- agno/memory/classifier.py +0 -104
- agno/memory/db/__init__.py +0 -5
- agno/memory/db/base.py +0 -42
- agno/memory/db/mongodb.py +0 -189
- agno/memory/db/postgres.py +0 -203
- agno/memory/db/sqlite.py +0 -193
- agno/memory/memory.py +0 -22
- agno/memory/row.py +0 -36
- agno/memory/summarizer.py +0 -201
- agno/memory/summary.py +0 -19
- agno/memory/team.py +0 -415
- agno/memory/v2/__init__.py +0 -2
- agno/memory/v2/db/__init__.py +0 -1
- agno/memory/v2/db/base.py +0 -42
- agno/memory/v2/db/firestore.py +0 -339
- agno/memory/v2/db/mongodb.py +0 -196
- agno/memory/v2/db/postgres.py +0 -214
- agno/memory/v2/db/redis.py +0 -187
- agno/memory/v2/db/schema.py +0 -54
- agno/memory/v2/db/sqlite.py +0 -209
- agno/memory/v2/manager.py +0 -437
- agno/memory/v2/memory.py +0 -1097
- agno/memory/v2/schema.py +0 -55
- agno/memory/v2/summarizer.py +0 -215
- agno/memory/workflow.py +0 -38
- agno/models/ollama/tools.py +0 -430
- agno/models/qwen/__init__.py +0 -5
- agno/playground/__init__.py +0 -10
- agno/playground/deploy.py +0 -3
- agno/playground/playground.py +0 -3
- agno/playground/serve.py +0 -3
- agno/playground/settings.py +0 -3
- agno/reranker/__init__.py +0 -0
- agno/run/response.py +0 -467
- agno/run/v2/__init__.py +0 -0
- agno/run/v2/workflow.py +0 -567
- agno/storage/__init__.py +0 -0
- agno/storage/agent/__init__.py +0 -0
- agno/storage/agent/dynamodb.py +0 -1
- agno/storage/agent/json.py +0 -1
- agno/storage/agent/mongodb.py +0 -1
- agno/storage/agent/postgres.py +0 -1
- agno/storage/agent/singlestore.py +0 -1
- agno/storage/agent/sqlite.py +0 -1
- agno/storage/agent/yaml.py +0 -1
- agno/storage/base.py +0 -60
- agno/storage/dynamodb.py +0 -673
- agno/storage/firestore.py +0 -297
- agno/storage/gcs_json.py +0 -261
- agno/storage/in_memory.py +0 -234
- agno/storage/json.py +0 -237
- agno/storage/mongodb.py +0 -328
- agno/storage/mysql.py +0 -685
- agno/storage/postgres.py +0 -682
- agno/storage/redis.py +0 -336
- agno/storage/session/__init__.py +0 -16
- agno/storage/session/agent.py +0 -64
- agno/storage/session/team.py +0 -63
- agno/storage/session/v2/__init__.py +0 -5
- agno/storage/session/workflow.py +0 -61
- agno/storage/singlestore.py +0 -606
- agno/storage/sqlite.py +0 -646
- agno/storage/workflow/__init__.py +0 -0
- agno/storage/workflow/mongodb.py +0 -1
- agno/storage/workflow/postgres.py +0 -1
- agno/storage/workflow/sqlite.py +0 -1
- agno/storage/yaml.py +0 -241
- agno/tools/thinking.py +0 -73
- agno/utils/defaults.py +0 -57
- agno/utils/filesystem.py +0 -39
- agno/utils/git.py +0 -52
- agno/utils/json_io.py +0 -30
- agno/utils/load_env.py +0 -19
- agno/utils/py_io.py +0 -19
- agno/utils/pyproject.py +0 -18
- agno/utils/resource_filter.py +0 -31
- agno/workflow/v2/__init__.py +0 -21
- agno/workflow/v2/types.py +0 -357
- agno/workflow/v2/workflow.py +0 -3313
- agno/workspace/__init__.py +0 -0
- agno/workspace/config.py +0 -325
- agno/workspace/enums.py +0 -6
- agno/workspace/helpers.py +0 -52
- agno/workspace/operator.py +0 -757
- agno/workspace/settings.py +0 -158
- agno-1.8.2.dist-info/METADATA +0 -982
- agno-1.8.2.dist-info/RECORD +0 -566
- agno-1.8.2.dist-info/entry_points.txt +0 -3
- agno-1.8.2.dist-info/licenses/LICENSE +0 -375
- /agno/{app → db/migrations}/__init__.py +0 -0
- /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
- /agno/{cli → integrations}/__init__.py +0 -0
- /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
- /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
- /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
- /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
- /agno/{app → os/interfaces}/slack/security.py +0 -0
- /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
- /agno/{file/local → utils/print_response}/__init__.py +0 -0
- /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
- {agno-1.8.2.dist-info → agno-2.0.0.dist-info}/WHEEL +0 -0
- {agno-1.8.2.dist-info → agno-2.0.0.dist-info}/top_level.txt +0 -0
agno/tools/trafilatura.py
CHANGED
|
@@ -63,6 +63,13 @@ class TrafilaturaTools(Toolkit):
|
|
|
63
63
|
max_tree_size: Optional[int] = None,
|
|
64
64
|
max_crawl_urls: int = 10,
|
|
65
65
|
max_known_urls: int = 100000,
|
|
66
|
+
# Tool enable flags for <6 functions
|
|
67
|
+
enable_extract_text: bool = True,
|
|
68
|
+
enable_extract_metadata_only: bool = True,
|
|
69
|
+
enable_html_to_text: bool = True,
|
|
70
|
+
enable_extract_batch: bool = True,
|
|
71
|
+
enable_crawl_website: bool = True,
|
|
72
|
+
all: bool = False,
|
|
66
73
|
**kwargs,
|
|
67
74
|
):
|
|
68
75
|
self.output_format = output_format
|
|
@@ -80,12 +87,21 @@ class TrafilaturaTools(Toolkit):
|
|
|
80
87
|
self.max_crawl_urls = max_crawl_urls
|
|
81
88
|
self.max_known_urls = max_known_urls
|
|
82
89
|
|
|
83
|
-
tools: List[Callable] = [
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
90
|
+
tools: List[Callable] = []
|
|
91
|
+
if all or enable_extract_text:
|
|
92
|
+
tools.append(self.extract_text)
|
|
93
|
+
if all or enable_extract_metadata_only:
|
|
94
|
+
tools.append(self.extract_metadata_only)
|
|
95
|
+
if all or enable_html_to_text:
|
|
96
|
+
tools.append(self.html_to_text)
|
|
97
|
+
if all or enable_extract_batch:
|
|
98
|
+
tools.append(self.extract_batch)
|
|
99
|
+
|
|
100
|
+
if all or enable_crawl_website:
|
|
101
|
+
if not SPIDER_AVAILABLE:
|
|
102
|
+
logger.warning("Web crawling requested but spider module not available. Skipping crawler tool.")
|
|
103
|
+
else:
|
|
104
|
+
tools.append(self.crawl_website)
|
|
89
105
|
|
|
90
106
|
super().__init__(name="trafilatura_tools", tools=tools, **kwargs)
|
|
91
107
|
|
agno/tools/trello.py
CHANGED
|
@@ -17,13 +17,6 @@ class TrelloTools(Toolkit):
|
|
|
17
17
|
api_key: Optional[str] = None,
|
|
18
18
|
api_secret: Optional[str] = None,
|
|
19
19
|
token: Optional[str] = None,
|
|
20
|
-
create_card: bool = True,
|
|
21
|
-
get_board_lists: bool = True,
|
|
22
|
-
move_card: bool = True,
|
|
23
|
-
get_cards: bool = True,
|
|
24
|
-
create_board: bool = True,
|
|
25
|
-
create_list: bool = True,
|
|
26
|
-
list_boards: bool = True,
|
|
27
20
|
**kwargs,
|
|
28
21
|
):
|
|
29
22
|
self.api_key = api_key or getenv("TRELLO_API_KEY")
|
|
@@ -39,21 +32,15 @@ class TrelloTools(Toolkit):
|
|
|
39
32
|
logger.error(f"Error initializing Trello client: {e}")
|
|
40
33
|
self.client = None
|
|
41
34
|
|
|
42
|
-
tools: List[Any] = [
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if create_board:
|
|
52
|
-
tools.append(self.create_board)
|
|
53
|
-
if create_list:
|
|
54
|
-
tools.append(self.create_list)
|
|
55
|
-
if list_boards:
|
|
56
|
-
tools.append(self.list_boards)
|
|
35
|
+
tools: List[Any] = [
|
|
36
|
+
self.create_card,
|
|
37
|
+
self.get_board_lists,
|
|
38
|
+
self.move_card,
|
|
39
|
+
self.get_cards,
|
|
40
|
+
self.create_board,
|
|
41
|
+
self.create_list,
|
|
42
|
+
self.list_boards,
|
|
43
|
+
]
|
|
57
44
|
|
|
58
45
|
super().__init__(name="trello", tools=tools, **kwargs)
|
|
59
46
|
|
agno/tools/twilio.py
CHANGED
|
@@ -22,6 +22,10 @@ class TwilioTools(Toolkit):
|
|
|
22
22
|
region: Optional[str] = None,
|
|
23
23
|
edge: Optional[str] = None,
|
|
24
24
|
debug: bool = False,
|
|
25
|
+
enable_send_sms: bool = True,
|
|
26
|
+
enable_get_call_details: bool = True,
|
|
27
|
+
enable_list_messages: bool = True,
|
|
28
|
+
all: bool = False,
|
|
25
29
|
**kwargs,
|
|
26
30
|
):
|
|
27
31
|
"""Initialize the Twilio toolkit.
|
|
@@ -84,9 +88,12 @@ class TwilioTools(Toolkit):
|
|
|
84
88
|
self.client.http_client.logger.setLevel(logging.INFO)
|
|
85
89
|
|
|
86
90
|
tools: List[Any] = []
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
91
|
+
if all or enable_send_sms:
|
|
92
|
+
tools.append(self.send_sms)
|
|
93
|
+
if all or enable_get_call_details:
|
|
94
|
+
tools.append(self.get_call_details)
|
|
95
|
+
if all or enable_list_messages:
|
|
96
|
+
tools.append(self.list_messages)
|
|
90
97
|
|
|
91
98
|
super().__init__(name="twilio", tools=tools, **kwargs)
|
|
92
99
|
|
agno/tools/user_control_flow.py
CHANGED
|
@@ -9,6 +9,8 @@ class UserControlFlowTools(Toolkit):
|
|
|
9
9
|
self,
|
|
10
10
|
instructions: Optional[str] = None,
|
|
11
11
|
add_instructions: bool = True,
|
|
12
|
+
enable_get_user_input: bool = True,
|
|
13
|
+
all: bool = False,
|
|
12
14
|
**kwargs,
|
|
13
15
|
):
|
|
14
16
|
"""A toolkit that provides the ability for the agent to interrupt the agent run and interact with the user."""
|
|
@@ -17,7 +19,10 @@ class UserControlFlowTools(Toolkit):
|
|
|
17
19
|
self.instructions = self.DEFAULT_INSTRUCTIONS
|
|
18
20
|
else:
|
|
19
21
|
self.instructions = instructions
|
|
20
|
-
|
|
22
|
+
|
|
23
|
+
tools = []
|
|
24
|
+
if all or enable_get_user_input:
|
|
25
|
+
tools.append(self.get_user_input)
|
|
21
26
|
|
|
22
27
|
super().__init__(
|
|
23
28
|
name="user_control_flow_tools",
|
agno/tools/valyu.py
CHANGED
|
@@ -12,9 +12,34 @@ except ImportError:
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class ValyuTools(Toolkit):
|
|
15
|
+
"""
|
|
16
|
+
Valyu is a toolkit for academic and web search capabilities.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
api_key (Optional[str]): Valyu API key. Retrieved from VALYU_API_KEY env variable if not provided.
|
|
20
|
+
enable_academic_search (bool): Enable academic sources search functionality. Default is True.
|
|
21
|
+
enable_web_search (bool): Enable web search functionality. Default is True.
|
|
22
|
+
enable_paper_search (bool): Enable search within paper functionality. Default is True.
|
|
23
|
+
all (bool): Enable all tools. Overrides individual flags when True. Default is False.
|
|
24
|
+
text_length (int): Maximum length of text content per result. Default is 1000.
|
|
25
|
+
max_results (int): Maximum number of results to return. Default is 10.
|
|
26
|
+
relevance_threshold (float): Minimum relevance score for results. Default is 0.5.
|
|
27
|
+
content_category (Optional[str]): Content category for filtering.
|
|
28
|
+
search_start_date (Optional[str]): Start date for search filtering (YYYY-MM-DD).
|
|
29
|
+
search_end_date (Optional[str]): End date for search filtering (YYYY-MM-DD).
|
|
30
|
+
search_domains (Optional[List[str]]): List of domains to search within.
|
|
31
|
+
sources (Optional[List[str]]): List of specific sources to search.
|
|
32
|
+
max_price (float): Maximum price for API calls. Default is 30.0.
|
|
33
|
+
tool_call_mode (bool): Enable tool call mode. Default is False.
|
|
34
|
+
"""
|
|
35
|
+
|
|
15
36
|
def __init__(
|
|
16
37
|
self,
|
|
17
38
|
api_key: Optional[str] = None,
|
|
39
|
+
enable_academic_search: bool = True,
|
|
40
|
+
enable_web_search: bool = True,
|
|
41
|
+
enable_paper_search: bool = True,
|
|
42
|
+
all: bool = False,
|
|
18
43
|
text_length: int = 1000,
|
|
19
44
|
max_results: int = 10,
|
|
20
45
|
relevance_threshold: float = 0.5,
|
|
@@ -43,11 +68,15 @@ class ValyuTools(Toolkit):
|
|
|
43
68
|
self.sources = sources
|
|
44
69
|
self.tool_call_mode = tool_call_mode
|
|
45
70
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
tools
|
|
49
|
-
|
|
50
|
-
|
|
71
|
+
tools: List[Any] = []
|
|
72
|
+
if all or enable_academic_search:
|
|
73
|
+
tools.append(self.search_academic_sources)
|
|
74
|
+
if all or enable_web_search:
|
|
75
|
+
tools.append(self.search_web)
|
|
76
|
+
if all or enable_paper_search:
|
|
77
|
+
tools.append(self.search_within_paper)
|
|
78
|
+
|
|
79
|
+
super().__init__(name="valyu_search", tools=tools, **kwargs)
|
|
51
80
|
|
|
52
81
|
def _parse_results(self, results: List[Any]) -> str:
|
|
53
82
|
parsed_results = []
|
agno/tools/visualization.py
CHANGED
|
@@ -9,29 +9,21 @@ from agno.utils.log import log_info, logger
|
|
|
9
9
|
class VisualizationTools(Toolkit):
|
|
10
10
|
def __init__(
|
|
11
11
|
self,
|
|
12
|
-
bar_chart: bool = True,
|
|
13
|
-
line_chart: bool = True,
|
|
14
|
-
pie_chart: bool = True,
|
|
15
|
-
scatter_plot: bool = True,
|
|
16
|
-
histogram: bool = True,
|
|
17
|
-
enable_all: bool = False,
|
|
18
12
|
output_dir: str = "charts",
|
|
13
|
+
enable_create_bar_chart: bool = True,
|
|
14
|
+
enable_create_line_chart: bool = True,
|
|
15
|
+
enable_create_pie_chart: bool = True,
|
|
16
|
+
enable_create_scatter_plot: bool = True,
|
|
17
|
+
enable_create_histogram: bool = True,
|
|
18
|
+
all: bool = False,
|
|
19
19
|
**kwargs,
|
|
20
20
|
):
|
|
21
21
|
"""
|
|
22
22
|
Initialize the VisualizationTools toolkit.
|
|
23
23
|
|
|
24
24
|
Args:
|
|
25
|
-
bar_chart (bool): Enable bar chart creation. Default is True.
|
|
26
|
-
line_chart (bool): Enable line chart creation. Default is True.
|
|
27
|
-
pie_chart (bool): Enable pie chart creation. Default is True.
|
|
28
|
-
scatter_plot (bool): Enable scatter plot creation. Default is True.
|
|
29
|
-
histogram (bool): Enable histogram creation. Default is True.
|
|
30
|
-
enable_all (bool): Enable all chart types. Default is False.
|
|
31
25
|
output_dir (str): Directory to save charts. Default is "charts".
|
|
32
26
|
"""
|
|
33
|
-
super().__init__(**kwargs)
|
|
34
|
-
|
|
35
27
|
# Check if matplotlib is available
|
|
36
28
|
try:
|
|
37
29
|
import matplotlib
|
|
@@ -47,20 +39,19 @@ class VisualizationTools(Toolkit):
|
|
|
47
39
|
|
|
48
40
|
self.output_dir = output_dir
|
|
49
41
|
|
|
50
|
-
|
|
51
|
-
if
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
self.register(self.create_histogram)
|
|
42
|
+
tools: List[Any] = []
|
|
43
|
+
if enable_create_bar_chart or all:
|
|
44
|
+
tools.append(self.create_bar_chart)
|
|
45
|
+
if enable_create_line_chart or all:
|
|
46
|
+
tools.append(self.create_line_chart)
|
|
47
|
+
if enable_create_pie_chart or all:
|
|
48
|
+
tools.append(self.create_pie_chart)
|
|
49
|
+
if enable_create_scatter_plot or all:
|
|
50
|
+
tools.append(self.create_scatter_plot)
|
|
51
|
+
if enable_create_histogram or all:
|
|
52
|
+
tools.append(self.create_histogram)
|
|
53
|
+
|
|
54
|
+
super().__init__(name="visualization_tools", tools=tools, **kwargs)
|
|
64
55
|
|
|
65
56
|
def _normalize_data_for_charts(
|
|
66
57
|
self, data: Union[Dict[str, Any], List[Dict[str, Any]], List[Any], str]
|
agno/tools/webbrowser.py
CHANGED
|
@@ -7,11 +7,12 @@ from agno.tools import Toolkit
|
|
|
7
7
|
class WebBrowserTools(Toolkit):
|
|
8
8
|
"""Tools for opening a page on the web browser"""
|
|
9
9
|
|
|
10
|
-
def __init__(self):
|
|
10
|
+
def __init__(self, enable_open_page: bool = True, all: bool = False, **kwargs):
|
|
11
11
|
tools: List[Any] = []
|
|
12
|
-
|
|
12
|
+
if all or enable_open_page:
|
|
13
|
+
tools.append(self.open_page)
|
|
13
14
|
|
|
14
|
-
super().__init__(name="webbrowser_tools", tools=tools)
|
|
15
|
+
super().__init__(name="webbrowser_tools", tools=tools, **kwargs)
|
|
15
16
|
|
|
16
17
|
def open_page(self, url: str, new_window: bool = False):
|
|
17
18
|
"""Open a URL in a browser window
|
agno/tools/webex.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import
|
|
2
|
+
from os import getenv
|
|
3
3
|
from typing import Any, List, Optional
|
|
4
4
|
|
|
5
|
-
from agno.tools
|
|
5
|
+
from agno.tools import Toolkit
|
|
6
6
|
from agno.utils.log import logger
|
|
7
7
|
|
|
8
8
|
try:
|
|
@@ -14,19 +14,23 @@ except ImportError:
|
|
|
14
14
|
|
|
15
15
|
class WebexTools(Toolkit):
|
|
16
16
|
def __init__(
|
|
17
|
-
self,
|
|
17
|
+
self,
|
|
18
|
+
enable_send_message: bool = True,
|
|
19
|
+
enable_list_rooms: bool = True,
|
|
20
|
+
all: bool = False,
|
|
21
|
+
access_token: Optional[str] = None,
|
|
22
|
+
**kwargs,
|
|
18
23
|
):
|
|
19
|
-
|
|
20
|
-
access_token = os.getenv("WEBEX_ACCESS_TOKEN")
|
|
24
|
+
access_token = access_token or getenv("WEBEX_ACCESS_TOKEN")
|
|
21
25
|
if access_token is None:
|
|
22
26
|
raise ValueError("Webex access token is not set. Please set the WEBEX_ACCESS_TOKEN environment variable.")
|
|
23
27
|
|
|
24
28
|
self.client = WebexAPI(access_token=access_token)
|
|
25
29
|
|
|
26
30
|
tools: List[Any] = []
|
|
27
|
-
if
|
|
31
|
+
if all or enable_send_message:
|
|
28
32
|
tools.append(self.send_message)
|
|
29
|
-
if
|
|
33
|
+
if all or enable_list_rooms:
|
|
30
34
|
tools.append(self.list_rooms)
|
|
31
35
|
|
|
32
36
|
super().__init__(name="webex", tools=tools, **kwargs)
|
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
|
|