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.
Files changed (589) hide show
  1. agno/agent/__init__.py +19 -27
  2. agno/agent/agent.py +3143 -4170
  3. agno/api/agent.py +11 -67
  4. agno/api/api.py +5 -46
  5. agno/api/evals.py +8 -19
  6. agno/api/os.py +17 -0
  7. agno/api/routes.py +6 -41
  8. agno/api/schemas/__init__.py +9 -0
  9. agno/api/schemas/agent.py +5 -21
  10. agno/api/schemas/evals.py +7 -16
  11. agno/api/schemas/os.py +14 -0
  12. agno/api/schemas/team.py +5 -21
  13. agno/api/schemas/utils.py +21 -0
  14. agno/api/schemas/workflows.py +11 -7
  15. agno/api/settings.py +53 -0
  16. agno/api/team.py +11 -66
  17. agno/api/workflow.py +28 -0
  18. agno/cloud/aws/base.py +214 -0
  19. agno/cloud/aws/s3/__init__.py +2 -0
  20. agno/cloud/aws/s3/api_client.py +43 -0
  21. agno/cloud/aws/s3/bucket.py +195 -0
  22. agno/cloud/aws/s3/object.py +57 -0
  23. agno/db/__init__.py +24 -0
  24. agno/db/base.py +245 -0
  25. agno/db/dynamo/__init__.py +3 -0
  26. agno/db/dynamo/dynamo.py +1743 -0
  27. agno/db/dynamo/schemas.py +278 -0
  28. agno/db/dynamo/utils.py +684 -0
  29. agno/db/firestore/__init__.py +3 -0
  30. agno/db/firestore/firestore.py +1432 -0
  31. agno/db/firestore/schemas.py +130 -0
  32. agno/db/firestore/utils.py +278 -0
  33. agno/db/gcs_json/__init__.py +3 -0
  34. agno/db/gcs_json/gcs_json_db.py +1001 -0
  35. agno/db/gcs_json/utils.py +194 -0
  36. agno/db/in_memory/__init__.py +3 -0
  37. agno/db/in_memory/in_memory_db.py +882 -0
  38. agno/db/in_memory/utils.py +172 -0
  39. agno/db/json/__init__.py +3 -0
  40. agno/db/json/json_db.py +1045 -0
  41. agno/db/json/utils.py +196 -0
  42. agno/db/migrations/v1_to_v2.py +162 -0
  43. agno/db/mongo/__init__.py +3 -0
  44. agno/db/mongo/mongo.py +1416 -0
  45. agno/db/mongo/schemas.py +77 -0
  46. agno/db/mongo/utils.py +204 -0
  47. agno/db/mysql/__init__.py +3 -0
  48. agno/db/mysql/mysql.py +1719 -0
  49. agno/db/mysql/schemas.py +124 -0
  50. agno/db/mysql/utils.py +297 -0
  51. agno/db/postgres/__init__.py +3 -0
  52. agno/db/postgres/postgres.py +1710 -0
  53. agno/db/postgres/schemas.py +124 -0
  54. agno/db/postgres/utils.py +280 -0
  55. agno/db/redis/__init__.py +3 -0
  56. agno/db/redis/redis.py +1367 -0
  57. agno/db/redis/schemas.py +109 -0
  58. agno/db/redis/utils.py +288 -0
  59. agno/db/schemas/__init__.py +3 -0
  60. agno/db/schemas/evals.py +33 -0
  61. agno/db/schemas/knowledge.py +40 -0
  62. agno/db/schemas/memory.py +46 -0
  63. agno/db/singlestore/__init__.py +3 -0
  64. agno/db/singlestore/schemas.py +116 -0
  65. agno/db/singlestore/singlestore.py +1712 -0
  66. agno/db/singlestore/utils.py +326 -0
  67. agno/db/sqlite/__init__.py +3 -0
  68. agno/db/sqlite/schemas.py +119 -0
  69. agno/db/sqlite/sqlite.py +1676 -0
  70. agno/db/sqlite/utils.py +268 -0
  71. agno/db/utils.py +88 -0
  72. agno/eval/__init__.py +14 -0
  73. agno/eval/accuracy.py +154 -48
  74. agno/eval/performance.py +88 -23
  75. agno/eval/reliability.py +73 -20
  76. agno/eval/utils.py +23 -13
  77. agno/integrations/discord/__init__.py +3 -0
  78. agno/{app → integrations}/discord/client.py +10 -10
  79. agno/knowledge/__init__.py +2 -2
  80. agno/{document → knowledge}/chunking/agentic.py +2 -2
  81. agno/{document → knowledge}/chunking/document.py +2 -2
  82. agno/{document → knowledge}/chunking/fixed.py +3 -3
  83. agno/{document → knowledge}/chunking/markdown.py +2 -2
  84. agno/{document → knowledge}/chunking/recursive.py +2 -2
  85. agno/{document → knowledge}/chunking/row.py +2 -2
  86. agno/knowledge/chunking/semantic.py +59 -0
  87. agno/knowledge/chunking/strategy.py +121 -0
  88. agno/knowledge/content.py +74 -0
  89. agno/knowledge/document/__init__.py +5 -0
  90. agno/{document → knowledge/document}/base.py +12 -2
  91. agno/knowledge/embedder/__init__.py +5 -0
  92. agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
  93. agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
  94. agno/{embedder → knowledge/embedder}/base.py +6 -0
  95. agno/{embedder → knowledge/embedder}/cohere.py +72 -1
  96. agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
  97. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  98. agno/{embedder → knowledge/embedder}/google.py +74 -1
  99. agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
  100. agno/{embedder → knowledge/embedder}/jina.py +48 -2
  101. agno/knowledge/embedder/langdb.py +22 -0
  102. agno/knowledge/embedder/mistral.py +139 -0
  103. agno/{embedder → knowledge/embedder}/nebius.py +1 -1
  104. agno/{embedder → knowledge/embedder}/ollama.py +54 -3
  105. agno/knowledge/embedder/openai.py +223 -0
  106. agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
  107. agno/{embedder → knowledge/embedder}/together.py +1 -1
  108. agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
  109. agno/knowledge/knowledge.py +1551 -0
  110. agno/knowledge/reader/__init__.py +7 -0
  111. agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
  112. agno/knowledge/reader/base.py +88 -0
  113. agno/{document → knowledge}/reader/csv_reader.py +47 -65
  114. agno/knowledge/reader/docx_reader.py +83 -0
  115. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  116. agno/{document → knowledge}/reader/json_reader.py +30 -9
  117. agno/{document → knowledge}/reader/markdown_reader.py +58 -9
  118. agno/{document → knowledge}/reader/pdf_reader.py +71 -126
  119. agno/knowledge/reader/reader_factory.py +268 -0
  120. agno/knowledge/reader/s3_reader.py +101 -0
  121. agno/{document → knowledge}/reader/text_reader.py +31 -10
  122. agno/knowledge/reader/url_reader.py +128 -0
  123. agno/knowledge/reader/web_search_reader.py +366 -0
  124. agno/{document → knowledge}/reader/website_reader.py +37 -10
  125. agno/knowledge/reader/wikipedia_reader.py +59 -0
  126. agno/knowledge/reader/youtube_reader.py +78 -0
  127. agno/knowledge/remote_content/remote_content.py +88 -0
  128. agno/{reranker → knowledge/reranker}/base.py +1 -1
  129. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  130. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  131. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  132. agno/knowledge/types.py +30 -0
  133. agno/knowledge/utils.py +169 -0
  134. agno/media.py +269 -268
  135. agno/memory/__init__.py +2 -10
  136. agno/memory/manager.py +1003 -148
  137. agno/models/aimlapi/__init__.py +2 -2
  138. agno/models/aimlapi/aimlapi.py +6 -6
  139. agno/models/anthropic/claude.py +128 -72
  140. agno/models/aws/bedrock.py +107 -175
  141. agno/models/aws/claude.py +64 -18
  142. agno/models/azure/ai_foundry.py +73 -23
  143. agno/models/base.py +346 -290
  144. agno/models/cerebras/cerebras.py +84 -27
  145. agno/models/cohere/chat.py +106 -98
  146. agno/models/google/gemini.py +105 -46
  147. agno/models/groq/groq.py +97 -35
  148. agno/models/huggingface/huggingface.py +92 -27
  149. agno/models/ibm/watsonx.py +72 -13
  150. agno/models/litellm/chat.py +85 -13
  151. agno/models/message.py +46 -151
  152. agno/models/meta/llama.py +85 -49
  153. agno/models/metrics.py +120 -0
  154. agno/models/mistral/mistral.py +90 -21
  155. agno/models/ollama/__init__.py +0 -2
  156. agno/models/ollama/chat.py +85 -47
  157. agno/models/openai/chat.py +154 -37
  158. agno/models/openai/responses.py +178 -105
  159. agno/models/perplexity/perplexity.py +26 -2
  160. agno/models/portkey/portkey.py +0 -7
  161. agno/models/response.py +15 -9
  162. agno/models/utils.py +20 -0
  163. agno/models/vercel/__init__.py +2 -2
  164. agno/models/vercel/v0.py +1 -1
  165. agno/models/vllm/__init__.py +2 -2
  166. agno/models/vllm/vllm.py +3 -3
  167. agno/models/xai/xai.py +10 -10
  168. agno/os/__init__.py +3 -0
  169. agno/os/app.py +497 -0
  170. agno/os/auth.py +47 -0
  171. agno/os/config.py +103 -0
  172. agno/os/interfaces/agui/__init__.py +3 -0
  173. agno/os/interfaces/agui/agui.py +31 -0
  174. agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
  175. agno/{app → os/interfaces}/agui/utils.py +65 -28
  176. agno/os/interfaces/base.py +21 -0
  177. agno/os/interfaces/slack/__init__.py +3 -0
  178. agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
  179. agno/os/interfaces/slack/slack.py +32 -0
  180. agno/os/interfaces/whatsapp/__init__.py +3 -0
  181. agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
  182. agno/os/interfaces/whatsapp/whatsapp.py +29 -0
  183. agno/os/mcp.py +235 -0
  184. agno/os/router.py +1400 -0
  185. agno/os/routers/__init__.py +3 -0
  186. agno/os/routers/evals/__init__.py +3 -0
  187. agno/os/routers/evals/evals.py +393 -0
  188. agno/os/routers/evals/schemas.py +142 -0
  189. agno/os/routers/evals/utils.py +161 -0
  190. agno/os/routers/knowledge/__init__.py +3 -0
  191. agno/os/routers/knowledge/knowledge.py +850 -0
  192. agno/os/routers/knowledge/schemas.py +118 -0
  193. agno/os/routers/memory/__init__.py +3 -0
  194. agno/os/routers/memory/memory.py +410 -0
  195. agno/os/routers/memory/schemas.py +58 -0
  196. agno/os/routers/metrics/__init__.py +3 -0
  197. agno/os/routers/metrics/metrics.py +178 -0
  198. agno/os/routers/metrics/schemas.py +47 -0
  199. agno/os/routers/session/__init__.py +3 -0
  200. agno/os/routers/session/session.py +536 -0
  201. agno/os/schema.py +945 -0
  202. agno/{app/playground → os}/settings.py +7 -15
  203. agno/os/utils.py +270 -0
  204. agno/reasoning/azure_ai_foundry.py +4 -4
  205. agno/reasoning/deepseek.py +4 -4
  206. agno/reasoning/default.py +6 -11
  207. agno/reasoning/groq.py +4 -4
  208. agno/reasoning/helpers.py +4 -6
  209. agno/reasoning/ollama.py +4 -4
  210. agno/reasoning/openai.py +4 -4
  211. agno/run/agent.py +633 -0
  212. agno/run/base.py +53 -77
  213. agno/run/cancel.py +81 -0
  214. agno/run/team.py +243 -96
  215. agno/run/workflow.py +550 -12
  216. agno/session/__init__.py +10 -0
  217. agno/session/agent.py +244 -0
  218. agno/session/summary.py +225 -0
  219. agno/session/team.py +262 -0
  220. agno/{storage/session/v2 → session}/workflow.py +47 -24
  221. agno/team/__init__.py +15 -16
  222. agno/team/team.py +3260 -4824
  223. agno/tools/agentql.py +14 -5
  224. agno/tools/airflow.py +9 -4
  225. agno/tools/api.py +7 -3
  226. agno/tools/apify.py +2 -46
  227. agno/tools/arxiv.py +8 -3
  228. agno/tools/aws_lambda.py +7 -5
  229. agno/tools/aws_ses.py +7 -1
  230. agno/tools/baidusearch.py +4 -1
  231. agno/tools/bitbucket.py +4 -4
  232. agno/tools/brandfetch.py +14 -11
  233. agno/tools/bravesearch.py +4 -1
  234. agno/tools/brightdata.py +43 -23
  235. agno/tools/browserbase.py +13 -4
  236. agno/tools/calcom.py +12 -10
  237. agno/tools/calculator.py +10 -27
  238. agno/tools/cartesia.py +20 -17
  239. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  240. agno/tools/confluence.py +8 -8
  241. agno/tools/crawl4ai.py +7 -1
  242. agno/tools/csv_toolkit.py +9 -8
  243. agno/tools/dalle.py +22 -12
  244. agno/tools/daytona.py +13 -16
  245. agno/tools/decorator.py +6 -3
  246. agno/tools/desi_vocal.py +17 -8
  247. agno/tools/discord.py +11 -8
  248. agno/tools/docker.py +30 -42
  249. agno/tools/duckdb.py +34 -53
  250. agno/tools/duckduckgo.py +8 -7
  251. agno/tools/e2b.py +62 -62
  252. agno/tools/eleven_labs.py +36 -29
  253. agno/tools/email.py +4 -1
  254. agno/tools/evm.py +7 -1
  255. agno/tools/exa.py +19 -14
  256. agno/tools/fal.py +30 -30
  257. agno/tools/file.py +9 -8
  258. agno/tools/financial_datasets.py +25 -44
  259. agno/tools/firecrawl.py +17 -18
  260. agno/tools/function.py +127 -18
  261. agno/tools/giphy.py +23 -11
  262. agno/tools/github.py +48 -126
  263. agno/tools/gmail.py +45 -61
  264. agno/tools/google_bigquery.py +7 -6
  265. agno/tools/google_maps.py +11 -26
  266. agno/tools/googlesearch.py +7 -2
  267. agno/tools/googlesheets.py +21 -17
  268. agno/tools/hackernews.py +9 -5
  269. agno/tools/jina.py +5 -4
  270. agno/tools/jira.py +18 -9
  271. agno/tools/knowledge.py +31 -32
  272. agno/tools/linear.py +18 -33
  273. agno/tools/linkup.py +5 -1
  274. agno/tools/local_file_system.py +8 -5
  275. agno/tools/lumalab.py +32 -20
  276. agno/tools/mcp.py +1 -2
  277. agno/tools/mem0.py +18 -12
  278. agno/tools/memori.py +14 -10
  279. agno/tools/mlx_transcribe.py +3 -2
  280. agno/tools/models/azure_openai.py +33 -15
  281. agno/tools/models/gemini.py +59 -32
  282. agno/tools/models/groq.py +30 -23
  283. agno/tools/models/nebius.py +28 -12
  284. agno/tools/models_labs.py +40 -16
  285. agno/tools/moviepy_video.py +7 -6
  286. agno/tools/neo4j.py +10 -8
  287. agno/tools/newspaper.py +7 -2
  288. agno/tools/newspaper4k.py +8 -3
  289. agno/tools/openai.py +58 -32
  290. agno/tools/openbb.py +12 -11
  291. agno/tools/opencv.py +63 -47
  292. agno/tools/openweather.py +14 -12
  293. agno/tools/pandas.py +11 -3
  294. agno/tools/postgres.py +4 -12
  295. agno/tools/pubmed.py +4 -1
  296. agno/tools/python.py +9 -22
  297. agno/tools/reasoning.py +35 -27
  298. agno/tools/reddit.py +11 -26
  299. agno/tools/replicate.py +55 -42
  300. agno/tools/resend.py +4 -1
  301. agno/tools/scrapegraph.py +15 -14
  302. agno/tools/searxng.py +10 -23
  303. agno/tools/serpapi.py +6 -3
  304. agno/tools/serper.py +13 -4
  305. agno/tools/shell.py +9 -2
  306. agno/tools/slack.py +12 -11
  307. agno/tools/sleep.py +3 -2
  308. agno/tools/spider.py +24 -4
  309. agno/tools/sql.py +7 -6
  310. agno/tools/tavily.py +6 -4
  311. agno/tools/telegram.py +12 -4
  312. agno/tools/todoist.py +11 -31
  313. agno/tools/toolkit.py +1 -1
  314. agno/tools/trafilatura.py +22 -6
  315. agno/tools/trello.py +9 -22
  316. agno/tools/twilio.py +10 -3
  317. agno/tools/user_control_flow.py +6 -1
  318. agno/tools/valyu.py +34 -5
  319. agno/tools/visualization.py +19 -28
  320. agno/tools/webbrowser.py +4 -3
  321. agno/tools/webex.py +11 -7
  322. agno/tools/website.py +15 -46
  323. agno/tools/webtools.py +12 -4
  324. agno/tools/whatsapp.py +5 -9
  325. agno/tools/wikipedia.py +20 -13
  326. agno/tools/x.py +14 -13
  327. agno/tools/yfinance.py +13 -40
  328. agno/tools/youtube.py +26 -20
  329. agno/tools/zendesk.py +7 -2
  330. agno/tools/zep.py +10 -7
  331. agno/tools/zoom.py +10 -9
  332. agno/utils/common.py +1 -19
  333. agno/utils/events.py +100 -123
  334. agno/utils/gemini.py +1 -1
  335. agno/utils/knowledge.py +29 -0
  336. agno/utils/log.py +54 -4
  337. agno/utils/mcp.py +68 -10
  338. agno/utils/media.py +39 -0
  339. agno/utils/message.py +12 -1
  340. agno/utils/models/aws_claude.py +1 -1
  341. agno/utils/models/claude.py +6 -12
  342. agno/utils/models/cohere.py +1 -1
  343. agno/utils/models/mistral.py +8 -7
  344. agno/utils/models/schema_utils.py +3 -3
  345. agno/utils/models/watsonx.py +1 -1
  346. agno/utils/openai.py +1 -1
  347. agno/utils/pprint.py +33 -32
  348. agno/utils/print_response/agent.py +779 -0
  349. agno/utils/print_response/team.py +1669 -0
  350. agno/utils/print_response/workflow.py +1451 -0
  351. agno/utils/prompts.py +14 -14
  352. agno/utils/reasoning.py +87 -0
  353. agno/utils/response.py +42 -42
  354. agno/utils/streamlit.py +481 -0
  355. agno/utils/string.py +8 -22
  356. agno/utils/team.py +50 -0
  357. agno/utils/timer.py +2 -2
  358. agno/vectordb/base.py +33 -21
  359. agno/vectordb/cassandra/cassandra.py +287 -23
  360. agno/vectordb/chroma/chromadb.py +482 -59
  361. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  362. agno/vectordb/couchbase/couchbase.py +309 -29
  363. agno/vectordb/lancedb/lance_db.py +360 -21
  364. agno/vectordb/langchaindb/__init__.py +5 -0
  365. agno/vectordb/langchaindb/langchaindb.py +145 -0
  366. agno/vectordb/lightrag/__init__.py +5 -0
  367. agno/vectordb/lightrag/lightrag.py +374 -0
  368. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  369. agno/vectordb/milvus/milvus.py +242 -32
  370. agno/vectordb/mongodb/mongodb.py +200 -24
  371. agno/vectordb/pgvector/pgvector.py +319 -37
  372. agno/vectordb/pineconedb/pineconedb.py +221 -27
  373. agno/vectordb/qdrant/qdrant.py +334 -14
  374. agno/vectordb/singlestore/singlestore.py +286 -29
  375. agno/vectordb/surrealdb/surrealdb.py +187 -7
  376. agno/vectordb/upstashdb/upstashdb.py +342 -26
  377. agno/vectordb/weaviate/weaviate.py +227 -165
  378. agno/workflow/__init__.py +17 -13
  379. agno/workflow/{v2/condition.py → condition.py} +135 -32
  380. agno/workflow/{v2/loop.py → loop.py} +115 -28
  381. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  382. agno/workflow/{v2/router.py → router.py} +133 -32
  383. agno/workflow/{v2/step.py → step.py} +207 -49
  384. agno/workflow/{v2/steps.py → steps.py} +147 -66
  385. agno/workflow/types.py +482 -0
  386. agno/workflow/workflow.py +2410 -696
  387. agno-2.0.0.dist-info/METADATA +494 -0
  388. agno-2.0.0.dist-info/RECORD +515 -0
  389. agno-2.0.0.dist-info/licenses/LICENSE +201 -0
  390. agno/agent/metrics.py +0 -110
  391. agno/api/app.py +0 -35
  392. agno/api/playground.py +0 -92
  393. agno/api/schemas/app.py +0 -12
  394. agno/api/schemas/playground.py +0 -22
  395. agno/api/schemas/user.py +0 -35
  396. agno/api/schemas/workspace.py +0 -46
  397. agno/api/user.py +0 -160
  398. agno/api/workflows.py +0 -33
  399. agno/api/workspace.py +0 -175
  400. agno/app/agui/__init__.py +0 -3
  401. agno/app/agui/app.py +0 -17
  402. agno/app/agui/sync_router.py +0 -120
  403. agno/app/base.py +0 -186
  404. agno/app/discord/__init__.py +0 -3
  405. agno/app/fastapi/__init__.py +0 -3
  406. agno/app/fastapi/app.py +0 -107
  407. agno/app/fastapi/async_router.py +0 -457
  408. agno/app/fastapi/sync_router.py +0 -448
  409. agno/app/playground/app.py +0 -228
  410. agno/app/playground/async_router.py +0 -1053
  411. agno/app/playground/deploy.py +0 -249
  412. agno/app/playground/operator.py +0 -183
  413. agno/app/playground/schemas.py +0 -223
  414. agno/app/playground/serve.py +0 -55
  415. agno/app/playground/sync_router.py +0 -1045
  416. agno/app/playground/utils.py +0 -46
  417. agno/app/settings.py +0 -15
  418. agno/app/slack/__init__.py +0 -3
  419. agno/app/slack/app.py +0 -19
  420. agno/app/slack/sync_router.py +0 -92
  421. agno/app/utils.py +0 -54
  422. agno/app/whatsapp/__init__.py +0 -3
  423. agno/app/whatsapp/app.py +0 -15
  424. agno/app/whatsapp/sync_router.py +0 -197
  425. agno/cli/auth_server.py +0 -249
  426. agno/cli/config.py +0 -274
  427. agno/cli/console.py +0 -88
  428. agno/cli/credentials.py +0 -23
  429. agno/cli/entrypoint.py +0 -571
  430. agno/cli/operator.py +0 -357
  431. agno/cli/settings.py +0 -96
  432. agno/cli/ws/ws_cli.py +0 -817
  433. agno/constants.py +0 -13
  434. agno/document/__init__.py +0 -5
  435. agno/document/chunking/semantic.py +0 -45
  436. agno/document/chunking/strategy.py +0 -31
  437. agno/document/reader/__init__.py +0 -5
  438. agno/document/reader/base.py +0 -47
  439. agno/document/reader/docx_reader.py +0 -60
  440. agno/document/reader/gcs/pdf_reader.py +0 -44
  441. agno/document/reader/s3/pdf_reader.py +0 -59
  442. agno/document/reader/s3/text_reader.py +0 -63
  443. agno/document/reader/url_reader.py +0 -59
  444. agno/document/reader/youtube_reader.py +0 -58
  445. agno/embedder/__init__.py +0 -5
  446. agno/embedder/langdb.py +0 -80
  447. agno/embedder/mistral.py +0 -82
  448. agno/embedder/openai.py +0 -78
  449. agno/file/__init__.py +0 -5
  450. agno/file/file.py +0 -16
  451. agno/file/local/csv.py +0 -32
  452. agno/file/local/txt.py +0 -19
  453. agno/infra/app.py +0 -240
  454. agno/infra/base.py +0 -144
  455. agno/infra/context.py +0 -20
  456. agno/infra/db_app.py +0 -52
  457. agno/infra/resource.py +0 -205
  458. agno/infra/resources.py +0 -55
  459. agno/knowledge/agent.py +0 -702
  460. agno/knowledge/arxiv.py +0 -33
  461. agno/knowledge/combined.py +0 -36
  462. agno/knowledge/csv.py +0 -144
  463. agno/knowledge/csv_url.py +0 -124
  464. agno/knowledge/document.py +0 -223
  465. agno/knowledge/docx.py +0 -137
  466. agno/knowledge/firecrawl.py +0 -34
  467. agno/knowledge/gcs/__init__.py +0 -0
  468. agno/knowledge/gcs/base.py +0 -39
  469. agno/knowledge/gcs/pdf.py +0 -125
  470. agno/knowledge/json.py +0 -137
  471. agno/knowledge/langchain.py +0 -71
  472. agno/knowledge/light_rag.py +0 -273
  473. agno/knowledge/llamaindex.py +0 -66
  474. agno/knowledge/markdown.py +0 -154
  475. agno/knowledge/pdf.py +0 -164
  476. agno/knowledge/pdf_bytes.py +0 -42
  477. agno/knowledge/pdf_url.py +0 -148
  478. agno/knowledge/s3/__init__.py +0 -0
  479. agno/knowledge/s3/base.py +0 -64
  480. agno/knowledge/s3/pdf.py +0 -33
  481. agno/knowledge/s3/text.py +0 -34
  482. agno/knowledge/text.py +0 -141
  483. agno/knowledge/url.py +0 -46
  484. agno/knowledge/website.py +0 -179
  485. agno/knowledge/wikipedia.py +0 -32
  486. agno/knowledge/youtube.py +0 -35
  487. agno/memory/agent.py +0 -423
  488. agno/memory/classifier.py +0 -104
  489. agno/memory/db/__init__.py +0 -5
  490. agno/memory/db/base.py +0 -42
  491. agno/memory/db/mongodb.py +0 -189
  492. agno/memory/db/postgres.py +0 -203
  493. agno/memory/db/sqlite.py +0 -193
  494. agno/memory/memory.py +0 -22
  495. agno/memory/row.py +0 -36
  496. agno/memory/summarizer.py +0 -201
  497. agno/memory/summary.py +0 -19
  498. agno/memory/team.py +0 -415
  499. agno/memory/v2/__init__.py +0 -2
  500. agno/memory/v2/db/__init__.py +0 -1
  501. agno/memory/v2/db/base.py +0 -42
  502. agno/memory/v2/db/firestore.py +0 -339
  503. agno/memory/v2/db/mongodb.py +0 -196
  504. agno/memory/v2/db/postgres.py +0 -214
  505. agno/memory/v2/db/redis.py +0 -187
  506. agno/memory/v2/db/schema.py +0 -54
  507. agno/memory/v2/db/sqlite.py +0 -209
  508. agno/memory/v2/manager.py +0 -437
  509. agno/memory/v2/memory.py +0 -1097
  510. agno/memory/v2/schema.py +0 -55
  511. agno/memory/v2/summarizer.py +0 -215
  512. agno/memory/workflow.py +0 -38
  513. agno/models/ollama/tools.py +0 -430
  514. agno/models/qwen/__init__.py +0 -5
  515. agno/playground/__init__.py +0 -10
  516. agno/playground/deploy.py +0 -3
  517. agno/playground/playground.py +0 -3
  518. agno/playground/serve.py +0 -3
  519. agno/playground/settings.py +0 -3
  520. agno/reranker/__init__.py +0 -0
  521. agno/run/response.py +0 -467
  522. agno/run/v2/__init__.py +0 -0
  523. agno/run/v2/workflow.py +0 -567
  524. agno/storage/__init__.py +0 -0
  525. agno/storage/agent/__init__.py +0 -0
  526. agno/storage/agent/dynamodb.py +0 -1
  527. agno/storage/agent/json.py +0 -1
  528. agno/storage/agent/mongodb.py +0 -1
  529. agno/storage/agent/postgres.py +0 -1
  530. agno/storage/agent/singlestore.py +0 -1
  531. agno/storage/agent/sqlite.py +0 -1
  532. agno/storage/agent/yaml.py +0 -1
  533. agno/storage/base.py +0 -60
  534. agno/storage/dynamodb.py +0 -673
  535. agno/storage/firestore.py +0 -297
  536. agno/storage/gcs_json.py +0 -261
  537. agno/storage/in_memory.py +0 -234
  538. agno/storage/json.py +0 -237
  539. agno/storage/mongodb.py +0 -328
  540. agno/storage/mysql.py +0 -685
  541. agno/storage/postgres.py +0 -682
  542. agno/storage/redis.py +0 -336
  543. agno/storage/session/__init__.py +0 -16
  544. agno/storage/session/agent.py +0 -64
  545. agno/storage/session/team.py +0 -63
  546. agno/storage/session/v2/__init__.py +0 -5
  547. agno/storage/session/workflow.py +0 -61
  548. agno/storage/singlestore.py +0 -606
  549. agno/storage/sqlite.py +0 -646
  550. agno/storage/workflow/__init__.py +0 -0
  551. agno/storage/workflow/mongodb.py +0 -1
  552. agno/storage/workflow/postgres.py +0 -1
  553. agno/storage/workflow/sqlite.py +0 -1
  554. agno/storage/yaml.py +0 -241
  555. agno/tools/thinking.py +0 -73
  556. agno/utils/defaults.py +0 -57
  557. agno/utils/filesystem.py +0 -39
  558. agno/utils/git.py +0 -52
  559. agno/utils/json_io.py +0 -30
  560. agno/utils/load_env.py +0 -19
  561. agno/utils/py_io.py +0 -19
  562. agno/utils/pyproject.py +0 -18
  563. agno/utils/resource_filter.py +0 -31
  564. agno/workflow/v2/__init__.py +0 -21
  565. agno/workflow/v2/types.py +0 -357
  566. agno/workflow/v2/workflow.py +0 -3313
  567. agno/workspace/__init__.py +0 -0
  568. agno/workspace/config.py +0 -325
  569. agno/workspace/enums.py +0 -6
  570. agno/workspace/helpers.py +0 -52
  571. agno/workspace/operator.py +0 -757
  572. agno/workspace/settings.py +0 -158
  573. agno-1.8.2.dist-info/METADATA +0 -982
  574. agno-1.8.2.dist-info/RECORD +0 -566
  575. agno-1.8.2.dist-info/entry_points.txt +0 -3
  576. agno-1.8.2.dist-info/licenses/LICENSE +0 -375
  577. /agno/{app → db/migrations}/__init__.py +0 -0
  578. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  579. /agno/{cli → integrations}/__init__.py +0 -0
  580. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  581. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  582. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  583. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  584. /agno/{app → os/interfaces}/slack/security.py +0 -0
  585. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  586. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  587. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  588. {agno-1.8.2.dist-info → agno-2.0.0.dist-info}/WHEEL +0 -0
  589. {agno-1.8.2.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)