agno 1.8.1__py3-none-any.whl → 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (590) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +19 -27
  3. agno/agent/agent.py +3143 -4170
  4. agno/api/agent.py +11 -67
  5. agno/api/api.py +5 -46
  6. agno/api/evals.py +8 -19
  7. agno/api/os.py +17 -0
  8. agno/api/routes.py +6 -41
  9. agno/api/schemas/__init__.py +9 -0
  10. agno/api/schemas/agent.py +5 -21
  11. agno/api/schemas/evals.py +7 -16
  12. agno/api/schemas/os.py +14 -0
  13. agno/api/schemas/team.py +5 -21
  14. agno/api/schemas/utils.py +21 -0
  15. agno/api/schemas/workflows.py +11 -7
  16. agno/api/settings.py +53 -0
  17. agno/api/team.py +11 -66
  18. agno/api/workflow.py +28 -0
  19. agno/cloud/aws/base.py +214 -0
  20. agno/cloud/aws/s3/__init__.py +2 -0
  21. agno/cloud/aws/s3/api_client.py +43 -0
  22. agno/cloud/aws/s3/bucket.py +195 -0
  23. agno/cloud/aws/s3/object.py +57 -0
  24. agno/db/__init__.py +24 -0
  25. agno/db/base.py +245 -0
  26. agno/db/dynamo/__init__.py +3 -0
  27. agno/db/dynamo/dynamo.py +1743 -0
  28. agno/db/dynamo/schemas.py +278 -0
  29. agno/db/dynamo/utils.py +684 -0
  30. agno/db/firestore/__init__.py +3 -0
  31. agno/db/firestore/firestore.py +1432 -0
  32. agno/db/firestore/schemas.py +130 -0
  33. agno/db/firestore/utils.py +278 -0
  34. agno/db/gcs_json/__init__.py +3 -0
  35. agno/db/gcs_json/gcs_json_db.py +1001 -0
  36. agno/db/gcs_json/utils.py +194 -0
  37. agno/db/in_memory/__init__.py +3 -0
  38. agno/db/in_memory/in_memory_db.py +882 -0
  39. agno/db/in_memory/utils.py +172 -0
  40. agno/db/json/__init__.py +3 -0
  41. agno/db/json/json_db.py +1045 -0
  42. agno/db/json/utils.py +196 -0
  43. agno/db/migrations/v1_to_v2.py +162 -0
  44. agno/db/mongo/__init__.py +3 -0
  45. agno/db/mongo/mongo.py +1416 -0
  46. agno/db/mongo/schemas.py +77 -0
  47. agno/db/mongo/utils.py +204 -0
  48. agno/db/mysql/__init__.py +3 -0
  49. agno/db/mysql/mysql.py +1719 -0
  50. agno/db/mysql/schemas.py +124 -0
  51. agno/db/mysql/utils.py +297 -0
  52. agno/db/postgres/__init__.py +3 -0
  53. agno/db/postgres/postgres.py +1710 -0
  54. agno/db/postgres/schemas.py +124 -0
  55. agno/db/postgres/utils.py +280 -0
  56. agno/db/redis/__init__.py +3 -0
  57. agno/db/redis/redis.py +1367 -0
  58. agno/db/redis/schemas.py +109 -0
  59. agno/db/redis/utils.py +288 -0
  60. agno/db/schemas/__init__.py +3 -0
  61. agno/db/schemas/evals.py +33 -0
  62. agno/db/schemas/knowledge.py +40 -0
  63. agno/db/schemas/memory.py +46 -0
  64. agno/db/singlestore/__init__.py +3 -0
  65. agno/db/singlestore/schemas.py +116 -0
  66. agno/db/singlestore/singlestore.py +1712 -0
  67. agno/db/singlestore/utils.py +326 -0
  68. agno/db/sqlite/__init__.py +3 -0
  69. agno/db/sqlite/schemas.py +119 -0
  70. agno/db/sqlite/sqlite.py +1676 -0
  71. agno/db/sqlite/utils.py +268 -0
  72. agno/db/utils.py +88 -0
  73. agno/eval/__init__.py +14 -0
  74. agno/eval/accuracy.py +154 -48
  75. agno/eval/performance.py +88 -23
  76. agno/eval/reliability.py +73 -20
  77. agno/eval/utils.py +23 -13
  78. agno/integrations/discord/__init__.py +3 -0
  79. agno/{app → integrations}/discord/client.py +15 -11
  80. agno/knowledge/__init__.py +2 -2
  81. agno/{document → knowledge}/chunking/agentic.py +2 -2
  82. agno/{document → knowledge}/chunking/document.py +2 -2
  83. agno/{document → knowledge}/chunking/fixed.py +3 -3
  84. agno/{document → knowledge}/chunking/markdown.py +2 -2
  85. agno/{document → knowledge}/chunking/recursive.py +2 -2
  86. agno/{document → knowledge}/chunking/row.py +2 -2
  87. agno/knowledge/chunking/semantic.py +59 -0
  88. agno/knowledge/chunking/strategy.py +121 -0
  89. agno/knowledge/content.py +74 -0
  90. agno/knowledge/document/__init__.py +5 -0
  91. agno/{document → knowledge/document}/base.py +12 -2
  92. agno/knowledge/embedder/__init__.py +5 -0
  93. agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
  94. agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
  95. agno/{embedder → knowledge/embedder}/base.py +6 -0
  96. agno/{embedder → knowledge/embedder}/cohere.py +72 -1
  97. agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
  98. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  99. agno/{embedder → knowledge/embedder}/google.py +74 -1
  100. agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
  101. agno/{embedder → knowledge/embedder}/jina.py +48 -2
  102. agno/knowledge/embedder/langdb.py +22 -0
  103. agno/knowledge/embedder/mistral.py +139 -0
  104. agno/{embedder → knowledge/embedder}/nebius.py +1 -1
  105. agno/{embedder → knowledge/embedder}/ollama.py +54 -3
  106. agno/knowledge/embedder/openai.py +223 -0
  107. agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
  108. agno/{embedder → knowledge/embedder}/together.py +1 -1
  109. agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
  110. agno/knowledge/knowledge.py +1551 -0
  111. agno/knowledge/reader/__init__.py +7 -0
  112. agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
  113. agno/knowledge/reader/base.py +88 -0
  114. agno/{document → knowledge}/reader/csv_reader.py +47 -65
  115. agno/knowledge/reader/docx_reader.py +83 -0
  116. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  117. agno/{document → knowledge}/reader/json_reader.py +30 -9
  118. agno/{document → knowledge}/reader/markdown_reader.py +58 -9
  119. agno/{document → knowledge}/reader/pdf_reader.py +71 -126
  120. agno/knowledge/reader/reader_factory.py +268 -0
  121. agno/knowledge/reader/s3_reader.py +101 -0
  122. agno/{document → knowledge}/reader/text_reader.py +31 -10
  123. agno/knowledge/reader/url_reader.py +128 -0
  124. agno/knowledge/reader/web_search_reader.py +366 -0
  125. agno/{document → knowledge}/reader/website_reader.py +37 -10
  126. agno/knowledge/reader/wikipedia_reader.py +59 -0
  127. agno/knowledge/reader/youtube_reader.py +78 -0
  128. agno/knowledge/remote_content/remote_content.py +88 -0
  129. agno/{reranker → knowledge/reranker}/base.py +1 -1
  130. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  131. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  132. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  133. agno/knowledge/types.py +30 -0
  134. agno/knowledge/utils.py +169 -0
  135. agno/media.py +269 -268
  136. agno/memory/__init__.py +2 -10
  137. agno/memory/manager.py +1003 -148
  138. agno/models/aimlapi/__init__.py +2 -2
  139. agno/models/aimlapi/aimlapi.py +6 -6
  140. agno/models/anthropic/claude.py +131 -131
  141. agno/models/aws/bedrock.py +110 -182
  142. agno/models/aws/claude.py +64 -18
  143. agno/models/azure/ai_foundry.py +73 -23
  144. agno/models/base.py +346 -290
  145. agno/models/cerebras/cerebras.py +84 -27
  146. agno/models/cohere/chat.py +106 -98
  147. agno/models/google/gemini.py +105 -46
  148. agno/models/groq/groq.py +97 -35
  149. agno/models/huggingface/huggingface.py +92 -27
  150. agno/models/ibm/watsonx.py +72 -13
  151. agno/models/litellm/chat.py +85 -13
  152. agno/models/message.py +46 -151
  153. agno/models/meta/llama.py +85 -49
  154. agno/models/metrics.py +120 -0
  155. agno/models/mistral/mistral.py +90 -21
  156. agno/models/ollama/__init__.py +0 -2
  157. agno/models/ollama/chat.py +85 -47
  158. agno/models/openai/chat.py +154 -37
  159. agno/models/openai/responses.py +178 -105
  160. agno/models/perplexity/perplexity.py +26 -2
  161. agno/models/portkey/portkey.py +0 -7
  162. agno/models/response.py +15 -9
  163. agno/models/utils.py +20 -0
  164. agno/models/vercel/__init__.py +2 -2
  165. agno/models/vercel/v0.py +1 -1
  166. agno/models/vllm/__init__.py +2 -2
  167. agno/models/vllm/vllm.py +3 -3
  168. agno/models/xai/xai.py +10 -10
  169. agno/os/__init__.py +3 -0
  170. agno/os/app.py +497 -0
  171. agno/os/auth.py +47 -0
  172. agno/os/config.py +103 -0
  173. agno/os/interfaces/agui/__init__.py +3 -0
  174. agno/os/interfaces/agui/agui.py +31 -0
  175. agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
  176. agno/{app → os/interfaces}/agui/utils.py +77 -33
  177. agno/os/interfaces/base.py +21 -0
  178. agno/os/interfaces/slack/__init__.py +3 -0
  179. agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
  180. agno/os/interfaces/slack/slack.py +32 -0
  181. agno/os/interfaces/whatsapp/__init__.py +3 -0
  182. agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
  183. agno/os/interfaces/whatsapp/whatsapp.py +29 -0
  184. agno/os/mcp.py +235 -0
  185. agno/os/router.py +1400 -0
  186. agno/os/routers/__init__.py +3 -0
  187. agno/os/routers/evals/__init__.py +3 -0
  188. agno/os/routers/evals/evals.py +393 -0
  189. agno/os/routers/evals/schemas.py +142 -0
  190. agno/os/routers/evals/utils.py +161 -0
  191. agno/os/routers/knowledge/__init__.py +3 -0
  192. agno/os/routers/knowledge/knowledge.py +850 -0
  193. agno/os/routers/knowledge/schemas.py +118 -0
  194. agno/os/routers/memory/__init__.py +3 -0
  195. agno/os/routers/memory/memory.py +410 -0
  196. agno/os/routers/memory/schemas.py +58 -0
  197. agno/os/routers/metrics/__init__.py +3 -0
  198. agno/os/routers/metrics/metrics.py +178 -0
  199. agno/os/routers/metrics/schemas.py +47 -0
  200. agno/os/routers/session/__init__.py +3 -0
  201. agno/os/routers/session/session.py +536 -0
  202. agno/os/schema.py +945 -0
  203. agno/{app/playground → os}/settings.py +7 -15
  204. agno/os/utils.py +270 -0
  205. agno/reasoning/azure_ai_foundry.py +4 -4
  206. agno/reasoning/deepseek.py +4 -4
  207. agno/reasoning/default.py +6 -11
  208. agno/reasoning/groq.py +4 -4
  209. agno/reasoning/helpers.py +4 -6
  210. agno/reasoning/ollama.py +4 -4
  211. agno/reasoning/openai.py +4 -4
  212. agno/run/agent.py +633 -0
  213. agno/run/base.py +53 -77
  214. agno/run/cancel.py +81 -0
  215. agno/run/team.py +243 -96
  216. agno/run/workflow.py +550 -12
  217. agno/session/__init__.py +10 -0
  218. agno/session/agent.py +244 -0
  219. agno/session/summary.py +225 -0
  220. agno/session/team.py +262 -0
  221. agno/{storage/session/v2 → session}/workflow.py +47 -24
  222. agno/team/__init__.py +15 -16
  223. agno/team/team.py +3260 -4824
  224. agno/tools/agentql.py +14 -5
  225. agno/tools/airflow.py +9 -4
  226. agno/tools/api.py +7 -3
  227. agno/tools/apify.py +2 -46
  228. agno/tools/arxiv.py +8 -3
  229. agno/tools/aws_lambda.py +7 -5
  230. agno/tools/aws_ses.py +7 -1
  231. agno/tools/baidusearch.py +4 -1
  232. agno/tools/bitbucket.py +4 -4
  233. agno/tools/brandfetch.py +14 -11
  234. agno/tools/bravesearch.py +4 -1
  235. agno/tools/brightdata.py +43 -23
  236. agno/tools/browserbase.py +13 -4
  237. agno/tools/calcom.py +12 -10
  238. agno/tools/calculator.py +10 -27
  239. agno/tools/cartesia.py +20 -17
  240. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  241. agno/tools/confluence.py +8 -8
  242. agno/tools/crawl4ai.py +7 -1
  243. agno/tools/csv_toolkit.py +9 -8
  244. agno/tools/dalle.py +22 -12
  245. agno/tools/daytona.py +13 -16
  246. agno/tools/decorator.py +6 -3
  247. agno/tools/desi_vocal.py +17 -8
  248. agno/tools/discord.py +11 -8
  249. agno/tools/docker.py +30 -42
  250. agno/tools/duckdb.py +34 -53
  251. agno/tools/duckduckgo.py +8 -7
  252. agno/tools/e2b.py +62 -62
  253. agno/tools/eleven_labs.py +36 -29
  254. agno/tools/email.py +4 -1
  255. agno/tools/evm.py +7 -1
  256. agno/tools/exa.py +19 -14
  257. agno/tools/fal.py +30 -30
  258. agno/tools/file.py +9 -8
  259. agno/tools/financial_datasets.py +25 -44
  260. agno/tools/firecrawl.py +22 -22
  261. agno/tools/function.py +127 -18
  262. agno/tools/giphy.py +23 -11
  263. agno/tools/github.py +48 -126
  264. agno/tools/gmail.py +45 -61
  265. agno/tools/google_bigquery.py +7 -6
  266. agno/tools/google_maps.py +11 -26
  267. agno/tools/googlesearch.py +7 -2
  268. agno/tools/googlesheets.py +21 -17
  269. agno/tools/hackernews.py +9 -5
  270. agno/tools/jina.py +5 -4
  271. agno/tools/jira.py +18 -9
  272. agno/tools/knowledge.py +31 -32
  273. agno/tools/linear.py +19 -34
  274. agno/tools/linkup.py +5 -1
  275. agno/tools/local_file_system.py +8 -5
  276. agno/tools/lumalab.py +32 -20
  277. agno/tools/mcp.py +1 -2
  278. agno/tools/mem0.py +18 -12
  279. agno/tools/memori.py +14 -10
  280. agno/tools/mlx_transcribe.py +3 -2
  281. agno/tools/models/azure_openai.py +33 -15
  282. agno/tools/models/gemini.py +59 -32
  283. agno/tools/models/groq.py +30 -23
  284. agno/tools/models/nebius.py +28 -12
  285. agno/tools/models_labs.py +40 -16
  286. agno/tools/moviepy_video.py +7 -6
  287. agno/tools/neo4j.py +10 -8
  288. agno/tools/newspaper.py +7 -2
  289. agno/tools/newspaper4k.py +8 -3
  290. agno/tools/openai.py +58 -32
  291. agno/tools/openbb.py +12 -11
  292. agno/tools/opencv.py +63 -47
  293. agno/tools/openweather.py +14 -12
  294. agno/tools/pandas.py +11 -3
  295. agno/tools/postgres.py +4 -12
  296. agno/tools/pubmed.py +4 -1
  297. agno/tools/python.py +9 -22
  298. agno/tools/reasoning.py +35 -27
  299. agno/tools/reddit.py +11 -26
  300. agno/tools/replicate.py +55 -42
  301. agno/tools/resend.py +4 -1
  302. agno/tools/scrapegraph.py +15 -14
  303. agno/tools/searxng.py +10 -23
  304. agno/tools/serpapi.py +6 -3
  305. agno/tools/serper.py +13 -4
  306. agno/tools/shell.py +9 -2
  307. agno/tools/slack.py +12 -11
  308. agno/tools/sleep.py +3 -2
  309. agno/tools/spider.py +24 -4
  310. agno/tools/sql.py +7 -6
  311. agno/tools/tavily.py +6 -4
  312. agno/tools/telegram.py +12 -4
  313. agno/tools/todoist.py +11 -31
  314. agno/tools/toolkit.py +1 -1
  315. agno/tools/trafilatura.py +22 -6
  316. agno/tools/trello.py +9 -22
  317. agno/tools/twilio.py +10 -3
  318. agno/tools/user_control_flow.py +6 -1
  319. agno/tools/valyu.py +34 -5
  320. agno/tools/visualization.py +19 -28
  321. agno/tools/webbrowser.py +4 -3
  322. agno/tools/webex.py +11 -7
  323. agno/tools/website.py +15 -46
  324. agno/tools/webtools.py +12 -4
  325. agno/tools/whatsapp.py +5 -9
  326. agno/tools/wikipedia.py +20 -13
  327. agno/tools/x.py +14 -13
  328. agno/tools/yfinance.py +13 -40
  329. agno/tools/youtube.py +26 -20
  330. agno/tools/zendesk.py +7 -2
  331. agno/tools/zep.py +10 -7
  332. agno/tools/zoom.py +10 -9
  333. agno/utils/common.py +1 -19
  334. agno/utils/events.py +100 -123
  335. agno/utils/gemini.py +32 -2
  336. agno/utils/knowledge.py +29 -0
  337. agno/utils/log.py +54 -4
  338. agno/utils/mcp.py +68 -10
  339. agno/utils/media.py +39 -0
  340. agno/utils/message.py +12 -1
  341. agno/utils/models/aws_claude.py +1 -1
  342. agno/utils/models/claude.py +47 -4
  343. agno/utils/models/cohere.py +1 -1
  344. agno/utils/models/mistral.py +8 -7
  345. agno/utils/models/schema_utils.py +3 -3
  346. agno/utils/models/watsonx.py +1 -1
  347. agno/utils/openai.py +1 -1
  348. agno/utils/pprint.py +33 -32
  349. agno/utils/print_response/agent.py +779 -0
  350. agno/utils/print_response/team.py +1669 -0
  351. agno/utils/print_response/workflow.py +1451 -0
  352. agno/utils/prompts.py +14 -14
  353. agno/utils/reasoning.py +87 -0
  354. agno/utils/response.py +42 -42
  355. agno/utils/streamlit.py +481 -0
  356. agno/utils/string.py +8 -22
  357. agno/utils/team.py +50 -0
  358. agno/utils/timer.py +2 -2
  359. agno/vectordb/base.py +33 -21
  360. agno/vectordb/cassandra/cassandra.py +287 -23
  361. agno/vectordb/chroma/chromadb.py +482 -59
  362. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  363. agno/vectordb/couchbase/couchbase.py +309 -29
  364. agno/vectordb/lancedb/lance_db.py +360 -21
  365. agno/vectordb/langchaindb/__init__.py +5 -0
  366. agno/vectordb/langchaindb/langchaindb.py +145 -0
  367. agno/vectordb/lightrag/__init__.py +5 -0
  368. agno/vectordb/lightrag/lightrag.py +374 -0
  369. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  370. agno/vectordb/milvus/milvus.py +242 -32
  371. agno/vectordb/mongodb/mongodb.py +200 -24
  372. agno/vectordb/pgvector/pgvector.py +319 -37
  373. agno/vectordb/pineconedb/pineconedb.py +221 -27
  374. agno/vectordb/qdrant/qdrant.py +334 -14
  375. agno/vectordb/singlestore/singlestore.py +286 -29
  376. agno/vectordb/surrealdb/surrealdb.py +187 -7
  377. agno/vectordb/upstashdb/upstashdb.py +342 -26
  378. agno/vectordb/weaviate/weaviate.py +227 -165
  379. agno/workflow/__init__.py +17 -13
  380. agno/workflow/{v2/condition.py → condition.py} +135 -32
  381. agno/workflow/{v2/loop.py → loop.py} +115 -28
  382. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  383. agno/workflow/{v2/router.py → router.py} +133 -32
  384. agno/workflow/{v2/step.py → step.py} +207 -49
  385. agno/workflow/{v2/steps.py → steps.py} +147 -66
  386. agno/workflow/types.py +482 -0
  387. agno/workflow/workflow.py +2410 -696
  388. agno-2.0.0.dist-info/METADATA +494 -0
  389. agno-2.0.0.dist-info/RECORD +515 -0
  390. agno-2.0.0.dist-info/licenses/LICENSE +201 -0
  391. agno/agent/metrics.py +0 -107
  392. agno/api/app.py +0 -35
  393. agno/api/playground.py +0 -92
  394. agno/api/schemas/app.py +0 -12
  395. agno/api/schemas/playground.py +0 -22
  396. agno/api/schemas/user.py +0 -35
  397. agno/api/schemas/workspace.py +0 -46
  398. agno/api/user.py +0 -160
  399. agno/api/workflows.py +0 -33
  400. agno/api/workspace.py +0 -175
  401. agno/app/agui/__init__.py +0 -3
  402. agno/app/agui/app.py +0 -17
  403. agno/app/agui/sync_router.py +0 -120
  404. agno/app/base.py +0 -186
  405. agno/app/discord/__init__.py +0 -3
  406. agno/app/fastapi/__init__.py +0 -3
  407. agno/app/fastapi/app.py +0 -107
  408. agno/app/fastapi/async_router.py +0 -457
  409. agno/app/fastapi/sync_router.py +0 -448
  410. agno/app/playground/app.py +0 -228
  411. agno/app/playground/async_router.py +0 -1050
  412. agno/app/playground/deploy.py +0 -249
  413. agno/app/playground/operator.py +0 -183
  414. agno/app/playground/schemas.py +0 -220
  415. agno/app/playground/serve.py +0 -55
  416. agno/app/playground/sync_router.py +0 -1042
  417. agno/app/playground/utils.py +0 -46
  418. agno/app/settings.py +0 -15
  419. agno/app/slack/__init__.py +0 -3
  420. agno/app/slack/app.py +0 -19
  421. agno/app/slack/sync_router.py +0 -92
  422. agno/app/utils.py +0 -54
  423. agno/app/whatsapp/__init__.py +0 -3
  424. agno/app/whatsapp/app.py +0 -15
  425. agno/app/whatsapp/sync_router.py +0 -197
  426. agno/cli/auth_server.py +0 -249
  427. agno/cli/config.py +0 -274
  428. agno/cli/console.py +0 -88
  429. agno/cli/credentials.py +0 -23
  430. agno/cli/entrypoint.py +0 -571
  431. agno/cli/operator.py +0 -357
  432. agno/cli/settings.py +0 -96
  433. agno/cli/ws/ws_cli.py +0 -817
  434. agno/constants.py +0 -13
  435. agno/document/__init__.py +0 -5
  436. agno/document/chunking/semantic.py +0 -45
  437. agno/document/chunking/strategy.py +0 -31
  438. agno/document/reader/__init__.py +0 -5
  439. agno/document/reader/base.py +0 -47
  440. agno/document/reader/docx_reader.py +0 -60
  441. agno/document/reader/gcs/pdf_reader.py +0 -44
  442. agno/document/reader/s3/pdf_reader.py +0 -59
  443. agno/document/reader/s3/text_reader.py +0 -63
  444. agno/document/reader/url_reader.py +0 -59
  445. agno/document/reader/youtube_reader.py +0 -58
  446. agno/embedder/__init__.py +0 -5
  447. agno/embedder/langdb.py +0 -80
  448. agno/embedder/mistral.py +0 -82
  449. agno/embedder/openai.py +0 -78
  450. agno/file/__init__.py +0 -5
  451. agno/file/file.py +0 -16
  452. agno/file/local/csv.py +0 -32
  453. agno/file/local/txt.py +0 -19
  454. agno/infra/app.py +0 -240
  455. agno/infra/base.py +0 -144
  456. agno/infra/context.py +0 -20
  457. agno/infra/db_app.py +0 -52
  458. agno/infra/resource.py +0 -205
  459. agno/infra/resources.py +0 -55
  460. agno/knowledge/agent.py +0 -702
  461. agno/knowledge/arxiv.py +0 -33
  462. agno/knowledge/combined.py +0 -36
  463. agno/knowledge/csv.py +0 -144
  464. agno/knowledge/csv_url.py +0 -124
  465. agno/knowledge/document.py +0 -223
  466. agno/knowledge/docx.py +0 -137
  467. agno/knowledge/firecrawl.py +0 -34
  468. agno/knowledge/gcs/__init__.py +0 -0
  469. agno/knowledge/gcs/base.py +0 -39
  470. agno/knowledge/gcs/pdf.py +0 -125
  471. agno/knowledge/json.py +0 -137
  472. agno/knowledge/langchain.py +0 -71
  473. agno/knowledge/light_rag.py +0 -273
  474. agno/knowledge/llamaindex.py +0 -66
  475. agno/knowledge/markdown.py +0 -154
  476. agno/knowledge/pdf.py +0 -164
  477. agno/knowledge/pdf_bytes.py +0 -42
  478. agno/knowledge/pdf_url.py +0 -148
  479. agno/knowledge/s3/__init__.py +0 -0
  480. agno/knowledge/s3/base.py +0 -64
  481. agno/knowledge/s3/pdf.py +0 -33
  482. agno/knowledge/s3/text.py +0 -34
  483. agno/knowledge/text.py +0 -141
  484. agno/knowledge/url.py +0 -46
  485. agno/knowledge/website.py +0 -179
  486. agno/knowledge/wikipedia.py +0 -32
  487. agno/knowledge/youtube.py +0 -35
  488. agno/memory/agent.py +0 -423
  489. agno/memory/classifier.py +0 -104
  490. agno/memory/db/__init__.py +0 -5
  491. agno/memory/db/base.py +0 -42
  492. agno/memory/db/mongodb.py +0 -189
  493. agno/memory/db/postgres.py +0 -203
  494. agno/memory/db/sqlite.py +0 -193
  495. agno/memory/memory.py +0 -22
  496. agno/memory/row.py +0 -36
  497. agno/memory/summarizer.py +0 -201
  498. agno/memory/summary.py +0 -19
  499. agno/memory/team.py +0 -415
  500. agno/memory/v2/__init__.py +0 -2
  501. agno/memory/v2/db/__init__.py +0 -1
  502. agno/memory/v2/db/base.py +0 -42
  503. agno/memory/v2/db/firestore.py +0 -339
  504. agno/memory/v2/db/mongodb.py +0 -196
  505. agno/memory/v2/db/postgres.py +0 -214
  506. agno/memory/v2/db/redis.py +0 -187
  507. agno/memory/v2/db/schema.py +0 -54
  508. agno/memory/v2/db/sqlite.py +0 -209
  509. agno/memory/v2/manager.py +0 -437
  510. agno/memory/v2/memory.py +0 -1097
  511. agno/memory/v2/schema.py +0 -55
  512. agno/memory/v2/summarizer.py +0 -215
  513. agno/memory/workflow.py +0 -38
  514. agno/models/ollama/tools.py +0 -430
  515. agno/models/qwen/__init__.py +0 -5
  516. agno/playground/__init__.py +0 -10
  517. agno/playground/deploy.py +0 -3
  518. agno/playground/playground.py +0 -3
  519. agno/playground/serve.py +0 -3
  520. agno/playground/settings.py +0 -3
  521. agno/reranker/__init__.py +0 -0
  522. agno/run/response.py +0 -467
  523. agno/run/v2/__init__.py +0 -0
  524. agno/run/v2/workflow.py +0 -567
  525. agno/storage/__init__.py +0 -0
  526. agno/storage/agent/__init__.py +0 -0
  527. agno/storage/agent/dynamodb.py +0 -1
  528. agno/storage/agent/json.py +0 -1
  529. agno/storage/agent/mongodb.py +0 -1
  530. agno/storage/agent/postgres.py +0 -1
  531. agno/storage/agent/singlestore.py +0 -1
  532. agno/storage/agent/sqlite.py +0 -1
  533. agno/storage/agent/yaml.py +0 -1
  534. agno/storage/base.py +0 -60
  535. agno/storage/dynamodb.py +0 -673
  536. agno/storage/firestore.py +0 -297
  537. agno/storage/gcs_json.py +0 -261
  538. agno/storage/in_memory.py +0 -234
  539. agno/storage/json.py +0 -237
  540. agno/storage/mongodb.py +0 -328
  541. agno/storage/mysql.py +0 -685
  542. agno/storage/postgres.py +0 -682
  543. agno/storage/redis.py +0 -336
  544. agno/storage/session/__init__.py +0 -16
  545. agno/storage/session/agent.py +0 -64
  546. agno/storage/session/team.py +0 -63
  547. agno/storage/session/v2/__init__.py +0 -5
  548. agno/storage/session/workflow.py +0 -61
  549. agno/storage/singlestore.py +0 -606
  550. agno/storage/sqlite.py +0 -646
  551. agno/storage/workflow/__init__.py +0 -0
  552. agno/storage/workflow/mongodb.py +0 -1
  553. agno/storage/workflow/postgres.py +0 -1
  554. agno/storage/workflow/sqlite.py +0 -1
  555. agno/storage/yaml.py +0 -241
  556. agno/tools/thinking.py +0 -73
  557. agno/utils/defaults.py +0 -57
  558. agno/utils/filesystem.py +0 -39
  559. agno/utils/git.py +0 -52
  560. agno/utils/json_io.py +0 -30
  561. agno/utils/load_env.py +0 -19
  562. agno/utils/py_io.py +0 -19
  563. agno/utils/pyproject.py +0 -18
  564. agno/utils/resource_filter.py +0 -31
  565. agno/workflow/v2/__init__.py +0 -21
  566. agno/workflow/v2/types.py +0 -357
  567. agno/workflow/v2/workflow.py +0 -3312
  568. agno/workspace/__init__.py +0 -0
  569. agno/workspace/config.py +0 -325
  570. agno/workspace/enums.py +0 -6
  571. agno/workspace/helpers.py +0 -52
  572. agno/workspace/operator.py +0 -757
  573. agno/workspace/settings.py +0 -158
  574. agno-1.8.1.dist-info/METADATA +0 -982
  575. agno-1.8.1.dist-info/RECORD +0 -566
  576. agno-1.8.1.dist-info/entry_points.txt +0 -3
  577. agno-1.8.1.dist-info/licenses/LICENSE +0 -375
  578. /agno/{app → db/migrations}/__init__.py +0 -0
  579. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  580. /agno/{cli → integrations}/__init__.py +0 -0
  581. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  582. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  583. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  584. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  585. /agno/{app → os/interfaces}/slack/security.py +0 -0
  586. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  587. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  588. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  589. {agno-1.8.1.dist-info → agno-2.0.0.dist-info}/WHEEL +0 -0
  590. {agno-1.8.1.dist-info → agno-2.0.0.dist-info}/top_level.txt +0 -0
agno/tools/agentql.py CHANGED
@@ -12,7 +12,15 @@ except ImportError:
12
12
 
13
13
 
14
14
  class AgentQLTools(Toolkit):
15
- def __init__(self, api_key: Optional[str] = None, scrape: bool = True, agentql_query: str = "", **kwargs):
15
+ def __init__(
16
+ self,
17
+ api_key: Optional[str] = None,
18
+ enable_scrape_website: bool = True,
19
+ enable_custom_scrape_website: bool = False,
20
+ all: bool = False,
21
+ agentql_query: str = "",
22
+ **kwargs,
23
+ ):
16
24
  self.api_key = api_key or getenv("AGENTQL_API_KEY")
17
25
  if not self.api_key:
18
26
  raise ValueError("AGENTQL_API_KEY not set. Please set the AGENTQL_API_KEY environment variable.")
@@ -20,11 +28,12 @@ class AgentQLTools(Toolkit):
20
28
  self.agentql_query = agentql_query
21
29
 
22
30
  tools: List[Any] = []
23
- if scrape:
31
+ if all or enable_scrape_website:
24
32
  tools.append(self.scrape_website)
25
- if agentql_query:
26
- log_info("Custom AgentQL query provided. Registering custom scrape function.")
27
- tools.append(self.custom_scrape_website)
33
+ if all or enable_custom_scrape_website or (agentql_query and not all and not enable_custom_scrape_website):
34
+ if agentql_query:
35
+ log_info("Custom AgentQL query provided. Registering custom scrape function.")
36
+ tools.append(self.custom_scrape_website)
28
37
 
29
38
  super().__init__(name="agentql_tools", tools=tools, **kwargs)
30
39
 
agno/tools/airflow.py CHANGED
@@ -7,7 +7,12 @@ from agno.utils.log import log_debug, log_info, logger
7
7
 
8
8
  class AirflowTools(Toolkit):
9
9
  def __init__(
10
- self, dags_dir: Optional[Union[Path, str]] = None, save_dag: bool = True, read_dag: bool = True, **kwargs
10
+ self,
11
+ dags_dir: Optional[Union[Path, str]] = None,
12
+ enable_save_dag_file: bool = True,
13
+ enable_read_dag_file: bool = True,
14
+ all: bool = False,
15
+ **kwargs,
11
16
  ):
12
17
  """
13
18
  quick start to work with airflow : https://airflow.apache.org/docs/apache-airflow/stable/start.html
@@ -22,9 +27,9 @@ class AirflowTools(Toolkit):
22
27
  self.dags_dir: Path = _dags_dir or Path.cwd()
23
28
 
24
29
  tools: List[Any] = []
25
- if save_dag:
30
+ if all or enable_save_dag_file:
26
31
  tools.append(self.save_dag_file)
27
- if read_dag:
32
+ if all or enable_read_dag_file:
28
33
  tools.append(self.read_dag_file)
29
34
 
30
35
  super().__init__(name="AirflowTools", tools=tools, **kwargs)
@@ -43,7 +48,7 @@ class AirflowTools(Toolkit):
43
48
  file_path.parent.mkdir(parents=True, exist_ok=True)
44
49
  file_path.write_text(contents)
45
50
  log_info(f"Saved: {file_path}")
46
- return str(str(file_path))
51
+ return str(file_path)
47
52
  except Exception as e:
48
53
  logger.error(f"Error saving to file: {e}")
49
54
  return f"Error saving to file: {e}"
agno/tools/api.py CHANGED
@@ -21,7 +21,8 @@ class CustomApiTools(Toolkit):
21
21
  headers: Optional[Dict[str, str]] = None,
22
22
  verify_ssl: bool = True,
23
23
  timeout: int = 30,
24
- make_request: bool = True,
24
+ enable_make_request: bool = True,
25
+ all: bool = False,
25
26
  **kwargs,
26
27
  ):
27
28
  self.base_url = base_url
@@ -33,7 +34,7 @@ class CustomApiTools(Toolkit):
33
34
  self.timeout = timeout
34
35
 
35
36
  tools: List[Any] = []
36
- if make_request:
37
+ if all or enable_make_request:
37
38
  tools.append(self.make_request)
38
39
 
39
40
  super().__init__(name="api_tools", tools=tools, **kwargs)
@@ -76,7 +77,10 @@ class CustomApiTools(Toolkit):
76
77
  str: JSON string containing response data or error message
77
78
  """
78
79
  try:
79
- url = f"{self.base_url.rstrip('/')}/{endpoint.lstrip('/')}" if self.base_url else endpoint
80
+ if self.base_url:
81
+ url = f"{self.base_url.rstrip('/')}/{endpoint.lstrip('/')}"
82
+ else:
83
+ url = endpoint
80
84
  log_debug(f"Making {method} request to {url}")
81
85
 
82
86
  response = requests.request(
agno/tools/apify.py CHANGED
@@ -1,6 +1,6 @@
1
1
  import json
2
- import os
3
2
  import string
3
+ from os import getenv
4
4
  from typing import Any, Dict, List, Optional, Tuple, Union
5
5
 
6
6
  import requests
@@ -21,53 +21,9 @@ class ApifyTools(Toolkit):
21
21
  Args:
22
22
  actors (Optional[Union[str, List[str]]]): Single Actor ID as string or list of Actor IDs to register as individual tools
23
23
  apify_api_token (Optional[str]): Apify API token (defaults to APIFY_API_TOKEN env variable)
24
-
25
- Examples:
26
- Configuration Instructions:
27
- 1. Install required dependencies:
28
- pip install agno apify-client
29
-
30
- 2. Set the APIFY_API_TOKEN environment variable:
31
- Add a .env file with APIFY_API_TOKEN=your_apify_api_key
32
-
33
- Import necessary components:
34
-
35
- from agno.agent import Agent
36
- from agno.tools.apify import ApifyTools
37
-
38
- # Create an agent with ApifyTools
39
- agent = Agent(
40
- tools=[
41
- ApifyTools(actors=["apify/rag-web-browser"])
42
- ],
43
- markdown=True
44
- )
45
-
46
- # Ask the agent to process web content
47
- agent.print_response("Summarize the content from https://docs.agno.com/introduction", markdown=True)
48
-
49
- # Using multiple actors with the agent
50
- agent = Agent(
51
- tools=[
52
- ApifyTools(actors=[
53
- "apify/rag-web-browser",
54
- "compass/crawler-google-places"
55
- ])
56
- ],
57
- show_tool_calls=True
58
- )
59
- agent.print_response(
60
- '''
61
- I'm traveling to Tokyo next month.
62
- 1. Research the best time to visit and major attractions
63
- 2. Find one good rated sushi restaurant near Shinjuku
64
- Compile a comprehensive travel guide with this information.
65
- ''',
66
- markdown=True
67
- )
68
24
  """
69
25
  # Get API token from args or environment
70
- self.apify_api_token = apify_api_token or os.getenv("APIFY_API_TOKEN")
26
+ self.apify_api_token = apify_api_token or getenv("APIFY_API_TOKEN")
71
27
  if not self.apify_api_token:
72
28
  raise ValueError("APIFY_API_TOKEN environment variable or apify_api_token parameter must be set")
73
29
 
agno/tools/arxiv.py CHANGED
@@ -18,15 +18,20 @@ except ImportError:
18
18
 
19
19
  class ArxivTools(Toolkit):
20
20
  def __init__(
21
- self, search_arxiv: bool = True, read_arxiv_papers: bool = True, download_dir: Optional[Path] = None, **kwargs
21
+ self,
22
+ enable_search_arxiv: bool = True,
23
+ enable_read_arxiv_papers: bool = True,
24
+ all: bool = False,
25
+ download_dir: Optional[Path] = None,
26
+ **kwargs,
22
27
  ):
23
28
  self.client: arxiv.Client = arxiv.Client()
24
29
  self.download_dir: Path = download_dir or Path(__file__).parent.joinpath("arxiv_pdfs")
25
30
 
26
31
  tools: List[Any] = []
27
- if search_arxiv:
32
+ if all or enable_search_arxiv:
28
33
  tools.append(self.search_arxiv_and_return_articles)
29
- if read_arxiv_papers:
34
+ if all or enable_read_arxiv_papers:
30
35
  tools.append(self.read_arxiv_papers)
31
36
 
32
37
  super().__init__(name="arxiv_tools", tools=tools, **kwargs)
agno/tools/aws_lambda.py CHANGED
@@ -9,19 +9,21 @@ except ImportError:
9
9
 
10
10
 
11
11
  class AWSLambdaTools(Toolkit):
12
- name: str = "AWSLambdaTool"
13
- description: str = "A tool for interacting with AWS Lambda functions"
14
-
15
12
  def __init__(
16
13
  self,
17
14
  region_name: str = "us-east-1",
15
+ enable_list_functions: bool = True,
16
+ enable_invoke_function: bool = True,
17
+ all: bool = False,
18
18
  **kwargs,
19
19
  ):
20
20
  self.client = boto3.client("lambda", region_name=region_name)
21
21
 
22
22
  tools: List[Any] = []
23
- tools.append(self.list_functions)
24
- tools.append(self.invoke_function)
23
+ if all or enable_list_functions:
24
+ tools.append(self.list_functions)
25
+ if all or enable_invoke_function:
26
+ tools.append(self.invoke_function)
25
27
 
26
28
  super().__init__(name="aws-lambda", tools=tools, **kwargs)
27
29
 
agno/tools/aws_ses.py CHANGED
@@ -15,8 +15,14 @@ class AWSSESTool(Toolkit):
15
15
  sender_email: Optional[str] = None,
16
16
  sender_name: Optional[str] = None,
17
17
  region_name: str = "us-east-1",
18
+ enable_send_email: bool = True,
19
+ all: bool = False,
20
+ **kwargs,
18
21
  ):
19
- super().__init__(name="aws_ses_tool", tools=[self.send_email])
22
+ tools = []
23
+ if all or enable_send_email:
24
+ tools.append(self.send_email)
25
+ super().__init__(name="aws_ses_tool", tools=tools, **kwargs)
20
26
  self.client = boto3.client("ses", region_name=region_name)
21
27
  self.sender_email = sender_email
22
28
  self.sender_name = sender_name
agno/tools/baidusearch.py CHANGED
@@ -35,6 +35,8 @@ class BaiduSearchTools(Toolkit):
35
35
  proxy: Optional[str] = None,
36
36
  timeout: Optional[int] = 10,
37
37
  debug: Optional[bool] = False,
38
+ enable_baidu_search: bool = True,
39
+ all: bool = False,
38
40
  **kwargs,
39
41
  ):
40
42
  self.fixed_max_results = fixed_max_results
@@ -45,7 +47,8 @@ class BaiduSearchTools(Toolkit):
45
47
  self.debug = debug
46
48
 
47
49
  tools = []
48
- tools.append(self.baidu_search)
50
+ if all or enable_baidu_search:
51
+ tools.append(self.baidu_search)
49
52
 
50
53
  super().__init__(name="baidusearch", tools=tools, **kwargs)
51
54
 
agno/tools/bitbucket.py CHANGED
@@ -1,6 +1,6 @@
1
1
  import base64
2
2
  import json
3
- import os
3
+ from os import getenv
4
4
  from typing import Any, Dict, Optional, Union
5
5
 
6
6
  import requests
@@ -21,9 +21,9 @@ class BitbucketTools(Toolkit):
21
21
  api_version: str = "2.0",
22
22
  **kwargs,
23
23
  ):
24
- self.username = username or os.getenv("BITBUCKET_USERNAME")
25
- self.password = password or os.getenv("BITBUCKET_PASSWORD")
26
- self.token = token or os.getenv("BITBUCKET_TOKEN")
24
+ self.username = username or getenv("BITBUCKET_USERNAME")
25
+ self.password = password or getenv("BITBUCKET_PASSWORD")
26
+ self.token = token or getenv("BITBUCKET_TOKEN")
27
27
  self.auth_password = self.token or self.password
28
28
  self.server_url = server_url or "api.bitbucket.org"
29
29
  self.api_version = api_version or "2.0"
agno/tools/brandfetch.py CHANGED
@@ -28,9 +28,11 @@ class BrandfetchTools(Toolkit):
28
28
 
29
29
  client_id: str - your Brandfetch Client ID
30
30
 
31
- async_tools: bool = True - if True, will use async tools, if False, will use sync tools
32
- brand: bool = False - if True, will use brand api, if False, will not use brand api
33
- search: bool = False - if True, will use brand search api, if False, will not use brand search api
31
+ all: bool - if True, will use all tools
32
+ enable_search_by_identifier: bool - if True, will use search by identifier
33
+ enable_search_by_brand: bool - if True, will use search by brand
34
+ enable_asearch_by_identifier: bool - if True, will use async search by identifier
35
+ enable_asearch_by_brand: bool - if True, will use async search by brand
34
36
  """
35
37
 
36
38
  def __init__(
@@ -39,29 +41,30 @@ class BrandfetchTools(Toolkit):
39
41
  client_id: Optional[str] = None,
40
42
  base_url: str = "https://api.brandfetch.io/v2",
41
43
  timeout: Optional[float] = 20.0,
44
+ enable_search_by_identifier: bool = True,
45
+ enable_search_by_brand: bool = False,
46
+ all: bool = False,
42
47
  async_tools: bool = False,
43
- brand: bool = True,
44
- search: bool = False,
45
48
  **kwargs,
46
49
  ):
47
50
  self.api_key = api_key or getenv("BRANDFETCH_API_KEY")
48
51
  self.client_id = client_id or getenv("BRANDFETCH_CLIENT_ID")
49
52
  self.base_url = base_url
50
53
  self.timeout = httpx.Timeout(timeout)
51
- self.async_tools = async_tools
52
54
  self.search_url = f"{self.base_url}/search"
53
55
  self.brand_url = f"{self.base_url}/brands"
54
56
 
55
57
  tools: list[Any] = []
56
- if self.async_tools:
57
- if brand:
58
+ # Backward-compat mapping: prefer new enable_* flags, but honor legacy toggles
59
+ if async_tools:
60
+ if all or enable_search_by_identifier:
58
61
  tools.append(self.asearch_by_identifier)
59
- if search:
62
+ if all or enable_search_by_brand:
60
63
  tools.append(self.asearch_by_brand)
61
64
  else:
62
- if brand:
65
+ if all or enable_search_by_identifier:
63
66
  tools.append(self.search_by_identifier)
64
- if search:
67
+ if all or enable_search_by_brand:
65
68
  tools.append(self.search_by_brand)
66
69
  name = kwargs.pop("name", "brandfetch_tools")
67
70
  super().__init__(name=name, tools=tools, **kwargs)
agno/tools/bravesearch.py CHANGED
@@ -26,6 +26,8 @@ class BraveSearchTools(Toolkit):
26
26
  api_key: Optional[str] = None,
27
27
  fixed_max_results: Optional[int] = None,
28
28
  fixed_language: Optional[str] = None,
29
+ enable_brave_search: bool = True,
30
+ all: bool = False,
29
31
  **kwargs,
30
32
  ):
31
33
  self.api_key = api_key or getenv("BRAVE_API_KEY")
@@ -38,7 +40,8 @@ class BraveSearchTools(Toolkit):
38
40
  self.brave_client = Brave(api_key=self.api_key)
39
41
 
40
42
  tools = []
41
- tools.append(self.brave_search)
43
+ if all or enable_brave_search:
44
+ tools.append(self.brave_search)
42
45
 
43
46
  super().__init__(
44
47
  name="brave_search",
agno/tools/brightdata.py CHANGED
@@ -5,8 +5,9 @@ from typing import Any, Dict, List, Optional
5
5
  from uuid import uuid4
6
6
 
7
7
  from agno.agent import Agent
8
- from agno.media import ImageArtifact
8
+ from agno.media import Image
9
9
  from agno.tools import Toolkit
10
+ from agno.tools.function import ToolResult
10
11
  from agno.utils.log import log_debug, log_error, log_info
11
12
 
12
13
  try:
@@ -16,15 +17,32 @@ except ImportError:
16
17
 
17
18
 
18
19
  class BrightDataTools(Toolkit):
20
+ """
21
+ BrightData is a toolkit for web scraping, screenshots, search engines, and web data feeds.
22
+
23
+ Args:
24
+ api_key (Optional[str]): Bright Data API key. Retrieved from BRIGHT_DATA_API_KEY env variable if not provided.
25
+ enable_scrape_markdown (bool): Enable webpage scraping as Markdown. Default is True.
26
+ enable_screenshot (bool): Enable website screenshot capture. Default is True.
27
+ enable_search_engine (bool): Enable search engine functionality. Default is True.
28
+ enable_web_data_feed (bool): Enable web data feed retrieval. Default is True.
29
+ all (bool): Enable all tools. Overrides individual flags when True. Default is False.
30
+ serp_zone (str): SERP zone for search operations. Default is "serp_api".
31
+ web_unlocker_zone (str): Web unlocker zone for scraping operations. Default is "web_unlocker1".
32
+ verbose (bool): Enable verbose logging. Default is False.
33
+ timeout (int): Timeout in seconds for operations. Default is 600.
34
+ """
35
+
19
36
  def __init__(
20
37
  self,
21
38
  api_key: Optional[str] = None,
39
+ enable_scrape_markdown: bool = True,
40
+ enable_screenshot: bool = True,
41
+ enable_search_engine: bool = True,
42
+ enable_web_data_feed: bool = True,
43
+ all: bool = False,
22
44
  serp_zone: str = "serp_api",
23
45
  web_unlocker_zone: str = "web_unlocker1",
24
- scrape_as_markdown: bool = True,
25
- get_screenshot: bool = False,
26
- search_engine: bool = True,
27
- web_data_feed: bool = True,
28
46
  verbose: bool = False,
29
47
  timeout: int = 600,
30
48
  **kwargs,
@@ -47,14 +65,13 @@ class BrightDataTools(Toolkit):
47
65
  self.timeout = timeout
48
66
 
49
67
  tools: List[Any] = []
50
-
51
- if scrape_as_markdown:
68
+ if all or enable_scrape_markdown:
52
69
  tools.append(self.scrape_as_markdown)
53
- if get_screenshot:
70
+ if all or enable_screenshot:
54
71
  tools.append(self.get_screenshot)
55
- if search_engine:
72
+ if all or enable_search_engine:
56
73
  tools.append(self.search_engine)
57
- if web_data_feed:
74
+ if all or enable_web_data_feed:
58
75
  tools.append(self.web_data_feed)
59
76
 
60
77
  super().__init__(name="brightdata_tools", tools=tools, **kwargs)
@@ -104,21 +121,22 @@ class BrightDataTools(Toolkit):
104
121
  except Exception as e:
105
122
  return f"Error scraping URL {url}: {e}"
106
123
 
107
- def get_screenshot(self, agent: Agent, url: str, output_path: str = "screenshot.png") -> str:
124
+ def get_screenshot(self, agent: Agent, url: str, output_path: str = "screenshot.png") -> ToolResult:
108
125
  """
109
126
  Capture a screenshot of a webpage
110
127
 
111
128
  Args:
112
129
  url (str): URL to screenshot
130
+ output_path (str): Output path for the screenshot (not used, kept for compatibility)
113
131
 
114
132
  Returns:
115
- str: A message indicating success (including media ID) or failure.
133
+ ToolResult: Contains the screenshot image or error message.
116
134
  """
117
135
  try:
118
136
  if not self.api_key:
119
- return "Please provide a Bright Data API key"
137
+ return ToolResult(content="Please provide a Bright Data API key")
120
138
  if not url:
121
- return "Please provide a URL to screenshot"
139
+ return ToolResult(content="Please provide a URL to screenshot")
122
140
 
123
141
  log_info(f"Taking screenshot of: {url}")
124
142
 
@@ -140,18 +158,20 @@ class BrightDataTools(Toolkit):
140
158
 
141
159
  media_id = str(uuid4())
142
160
 
143
- agent.add_image(
144
- ImageArtifact(
145
- id=media_id,
146
- content=base64_encoded_image.encode("utf-8"),
147
- mime_type="image/png",
148
- original_prompt=f"Screenshot of {url}",
149
- )
161
+ # Create Image for the screenshot
162
+ image_artifact = Image(
163
+ id=media_id,
164
+ content=base64_encoded_image.encode("utf-8"),
165
+ mime_type="image/png",
166
+ original_prompt=f"Screenshot of {url}",
150
167
  )
168
+
151
169
  log_debug(f"Screenshot captured and added as artifact with ID: {media_id}")
152
- return f"Screenshot captured and added as artifact with ID: {media_id}"
170
+ return ToolResult(
171
+ content=f"Screenshot captured and added as artifact with ID: {media_id}", images=[image_artifact]
172
+ )
153
173
  except Exception as e:
154
- return f"Error taking screenshot of {url}: {e}"
174
+ return ToolResult(content=f"Error taking screenshot of {url}: {e}")
155
175
 
156
176
  def search_engine(
157
177
  self,
agno/tools/browserbase.py CHANGED
@@ -24,6 +24,11 @@ class BrowserbaseTools(Toolkit):
24
24
  api_key: Optional[str] = None,
25
25
  project_id: Optional[str] = None,
26
26
  base_url: Optional[str] = None,
27
+ enable_navigate_to: bool = True,
28
+ enable_screenshot: bool = True,
29
+ enable_get_page_content: bool = True,
30
+ enable_close_session: bool = True,
31
+ all: bool = False,
27
32
  **kwargs,
28
33
  ):
29
34
  """Initialize BrowserbaseTools.
@@ -61,10 +66,14 @@ class BrowserbaseTools(Toolkit):
61
66
  self._connect_url = None
62
67
 
63
68
  tools: List[Any] = []
64
- tools.append(self.navigate_to)
65
- tools.append(self.screenshot)
66
- tools.append(self.get_page_content)
67
- tools.append(self.close_session)
69
+ if all or enable_navigate_to:
70
+ tools.append(self.navigate_to)
71
+ if all or enable_screenshot:
72
+ tools.append(self.screenshot)
73
+ if all or enable_get_page_content:
74
+ tools.append(self.get_page_content)
75
+ if all or enable_close_session:
76
+ tools.append(self.close_session)
68
77
 
69
78
  super().__init__(name="browserbase_tools", tools=tools, **kwargs)
70
79
 
agno/tools/calcom.py CHANGED
@@ -18,11 +18,13 @@ class CalComTools(Toolkit):
18
18
  api_key: Optional[str] = None,
19
19
  event_type_id: Optional[int] = None,
20
20
  user_timezone: Optional[str] = None,
21
- get_available_slots: bool = True,
22
- create_booking: bool = True,
23
- get_upcoming_bookings: bool = True,
24
- reschedule_booking: bool = True,
25
- cancel_booking: bool = True,
21
+ # Enable flags for <6 functions
22
+ enable_get_available_slots: bool = True,
23
+ enable_create_booking: bool = True,
24
+ enable_get_upcoming_bookings: bool = True,
25
+ enable_reschedule_booking: bool = True,
26
+ enable_cancel_booking: bool = True,
27
+ all: bool = False,
26
28
  **kwargs,
27
29
  ):
28
30
  """Initialize the Cal.com toolkit.
@@ -49,15 +51,15 @@ class CalComTools(Toolkit):
49
51
  self.user_timezone = user_timezone or "America/New_York"
50
52
 
51
53
  tools: List[Any] = []
52
- if get_available_slots:
54
+ if all or enable_get_available_slots:
53
55
  tools.append(self.get_available_slots)
54
- if create_booking:
56
+ if all or enable_create_booking:
55
57
  tools.append(self.create_booking)
56
- if get_upcoming_bookings:
58
+ if all or enable_get_upcoming_bookings:
57
59
  tools.append(self.get_upcoming_bookings)
58
- if reschedule_booking:
60
+ if all or enable_reschedule_booking:
59
61
  tools.append(self.reschedule_booking)
60
- if cancel_booking:
62
+ if all or enable_cancel_booking:
61
63
  tools.append(self.cancel_booking)
62
64
 
63
65
  super().__init__(name="calcom", tools=tools, **kwargs)
agno/tools/calculator.py CHANGED
@@ -9,35 +9,18 @@ from agno.utils.log import log_debug, logger
9
9
  class CalculatorTools(Toolkit):
10
10
  def __init__(
11
11
  self,
12
- add: bool = True,
13
- subtract: bool = True,
14
- multiply: bool = True,
15
- divide: bool = True,
16
- exponentiate: bool = False,
17
- factorial: bool = False,
18
- is_prime: bool = False,
19
- square_root: bool = False,
20
- enable_all: bool = False,
21
12
  **kwargs,
22
13
  ):
23
- # Build the include_tools list based on enabled functions
24
- tools: List[Callable] = []
25
- if add or enable_all:
26
- tools.append(self.add)
27
- if subtract or enable_all:
28
- tools.append(self.subtract)
29
- if multiply or enable_all:
30
- tools.append(self.multiply)
31
- if divide or enable_all:
32
- tools.append(self.divide)
33
- if exponentiate or enable_all:
34
- tools.append(self.exponentiate)
35
- if factorial or enable_all:
36
- tools.append(self.factorial)
37
- if is_prime or enable_all:
38
- tools.append(self.is_prime)
39
- if square_root or enable_all:
40
- tools.append(self.square_root)
14
+ tools: List[Callable] = [
15
+ self.add,
16
+ self.subtract,
17
+ self.multiply,
18
+ self.divide,
19
+ self.exponentiate,
20
+ self.factorial,
21
+ self.is_prime,
22
+ self.square_root,
23
+ ]
41
24
 
42
25
  # Initialize the toolkit with auto-registration enabled
43
26
  super().__init__(name="calculator", tools=tools, **kwargs)