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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (580) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +19 -27
  3. agno/agent/agent.py +2778 -4123
  4. agno/api/agent.py +9 -65
  5. agno/api/api.py +5 -46
  6. agno/api/evals.py +6 -17
  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 +9 -64
  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 +1749 -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 +1438 -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 +888 -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 +1051 -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 +1417 -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 +298 -0
  52. agno/db/postgres/__init__.py +3 -0
  53. agno/db/postgres/postgres.py +1720 -0
  54. agno/db/postgres/schemas.py +124 -0
  55. agno/db/postgres/utils.py +281 -0
  56. agno/db/redis/__init__.py +3 -0
  57. agno/db/redis/redis.py +1371 -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 +1722 -0
  67. agno/db/singlestore/utils.py +327 -0
  68. agno/db/sqlite/__init__.py +3 -0
  69. agno/db/sqlite/schemas.py +119 -0
  70. agno/db/sqlite/sqlite.py +1680 -0
  71. agno/db/sqlite/utils.py +269 -0
  72. agno/db/utils.py +88 -0
  73. agno/eval/__init__.py +14 -0
  74. agno/eval/accuracy.py +142 -43
  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 +10 -10
  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 +1515 -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 +68 -15
  115. agno/knowledge/reader/docx_reader.py +83 -0
  116. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  117. agno/knowledge/reader/gcs_reader.py +67 -0
  118. agno/{document → knowledge}/reader/json_reader.py +30 -9
  119. agno/{document → knowledge}/reader/markdown_reader.py +36 -9
  120. agno/{document → knowledge}/reader/pdf_reader.py +79 -21
  121. agno/knowledge/reader/reader_factory.py +275 -0
  122. agno/knowledge/reader/s3_reader.py +171 -0
  123. agno/{document → knowledge}/reader/text_reader.py +31 -10
  124. agno/knowledge/reader/url_reader.py +84 -0
  125. agno/knowledge/reader/web_search_reader.py +389 -0
  126. agno/{document → knowledge}/reader/website_reader.py +37 -10
  127. agno/knowledge/reader/wikipedia_reader.py +59 -0
  128. agno/knowledge/reader/youtube_reader.py +78 -0
  129. agno/knowledge/remote_content/remote_content.py +88 -0
  130. agno/{reranker → knowledge/reranker}/base.py +1 -1
  131. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  132. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  133. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  134. agno/knowledge/types.py +30 -0
  135. agno/knowledge/utils.py +169 -0
  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 +129 -82
  141. agno/models/aws/bedrock.py +107 -175
  142. agno/models/aws/claude.py +64 -18
  143. agno/models/azure/ai_foundry.py +73 -23
  144. agno/models/base.py +347 -287
  145. agno/models/cerebras/cerebras.py +84 -27
  146. agno/models/cohere/chat.py +106 -98
  147. agno/models/google/gemini.py +100 -42
  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 +38 -144
  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 +84 -46
  158. agno/models/openai/chat.py +121 -23
  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 +14 -8
  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 +393 -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 +65 -28
  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 +33 -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 +30 -0
  184. agno/os/router.py +843 -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 +204 -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 +413 -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 +179 -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 +58 -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 +163 -0
  201. agno/os/schema.py +892 -0
  202. agno/{app/playground → os}/settings.py +8 -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/{response.py → agent.py} +144 -72
  212. agno/run/base.py +44 -58
  213. agno/run/cancel.py +83 -0
  214. agno/run/team.py +133 -77
  215. agno/run/workflow.py +537 -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 +2961 -4253
  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 +42 -22
  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 +18 -13
  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 +18 -11
  244. agno/tools/daytona.py +13 -16
  245. agno/tools/decorator.py +6 -3
  246. agno/tools/desi_vocal.py +16 -7
  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 +61 -61
  252. agno/tools/eleven_labs.py +35 -28
  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 +29 -29
  257. agno/tools/file.py +9 -8
  258. agno/tools/financial_datasets.py +25 -44
  259. agno/tools/firecrawl.py +22 -22
  260. agno/tools/function.py +68 -17
  261. agno/tools/giphy.py +22 -10
  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 +31 -19
  276. agno/tools/mem0.py +18 -12
  277. agno/tools/memori.py +14 -10
  278. agno/tools/mlx_transcribe.py +3 -2
  279. agno/tools/models/azure_openai.py +32 -14
  280. agno/tools/models/gemini.py +58 -31
  281. agno/tools/models/groq.py +29 -20
  282. agno/tools/models/nebius.py +27 -11
  283. agno/tools/models_labs.py +39 -15
  284. agno/tools/moviepy_video.py +7 -6
  285. agno/tools/neo4j.py +10 -8
  286. agno/tools/newspaper.py +7 -2
  287. agno/tools/newspaper4k.py +8 -3
  288. agno/tools/openai.py +57 -26
  289. agno/tools/openbb.py +12 -11
  290. agno/tools/opencv.py +62 -46
  291. agno/tools/openweather.py +14 -12
  292. agno/tools/pandas.py +11 -3
  293. agno/tools/postgres.py +4 -12
  294. agno/tools/pubmed.py +4 -1
  295. agno/tools/python.py +9 -22
  296. agno/tools/reasoning.py +35 -27
  297. agno/tools/reddit.py +11 -26
  298. agno/tools/replicate.py +54 -41
  299. agno/tools/resend.py +4 -1
  300. agno/tools/scrapegraph.py +15 -14
  301. agno/tools/searxng.py +10 -23
  302. agno/tools/serpapi.py +6 -3
  303. agno/tools/serper.py +13 -4
  304. agno/tools/shell.py +9 -2
  305. agno/tools/slack.py +12 -11
  306. agno/tools/sleep.py +3 -2
  307. agno/tools/spider.py +24 -4
  308. agno/tools/sql.py +7 -6
  309. agno/tools/tavily.py +6 -4
  310. agno/tools/telegram.py +12 -4
  311. agno/tools/todoist.py +11 -31
  312. agno/tools/toolkit.py +1 -1
  313. agno/tools/trafilatura.py +22 -6
  314. agno/tools/trello.py +9 -22
  315. agno/tools/twilio.py +10 -3
  316. agno/tools/user_control_flow.py +6 -1
  317. agno/tools/valyu.py +34 -5
  318. agno/tools/visualization.py +19 -28
  319. agno/tools/webbrowser.py +4 -3
  320. agno/tools/webex.py +11 -7
  321. agno/tools/website.py +15 -46
  322. agno/tools/webtools.py +12 -4
  323. agno/tools/whatsapp.py +5 -9
  324. agno/tools/wikipedia.py +20 -13
  325. agno/tools/x.py +14 -13
  326. agno/tools/yfinance.py +13 -40
  327. agno/tools/youtube.py +26 -20
  328. agno/tools/zendesk.py +7 -2
  329. agno/tools/zep.py +10 -7
  330. agno/tools/zoom.py +10 -9
  331. agno/utils/common.py +1 -19
  332. agno/utils/events.py +95 -118
  333. agno/utils/knowledge.py +29 -0
  334. agno/utils/log.py +2 -2
  335. agno/utils/mcp.py +11 -5
  336. agno/utils/media.py +39 -0
  337. agno/utils/message.py +12 -1
  338. agno/utils/models/claude.py +6 -4
  339. agno/utils/models/mistral.py +8 -7
  340. agno/utils/models/schema_utils.py +3 -3
  341. agno/utils/pprint.py +33 -32
  342. agno/utils/print_response/agent.py +779 -0
  343. agno/utils/print_response/team.py +1565 -0
  344. agno/utils/print_response/workflow.py +1451 -0
  345. agno/utils/prompts.py +14 -14
  346. agno/utils/reasoning.py +87 -0
  347. agno/utils/response.py +42 -42
  348. agno/utils/string.py +8 -22
  349. agno/utils/team.py +50 -0
  350. agno/utils/timer.py +2 -2
  351. agno/vectordb/base.py +33 -21
  352. agno/vectordb/cassandra/cassandra.py +287 -23
  353. agno/vectordb/chroma/chromadb.py +482 -59
  354. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  355. agno/vectordb/couchbase/couchbase.py +309 -29
  356. agno/vectordb/lancedb/lance_db.py +360 -21
  357. agno/vectordb/langchaindb/__init__.py +5 -0
  358. agno/vectordb/langchaindb/langchaindb.py +145 -0
  359. agno/vectordb/lightrag/__init__.py +5 -0
  360. agno/vectordb/lightrag/lightrag.py +374 -0
  361. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  362. agno/vectordb/milvus/milvus.py +242 -32
  363. agno/vectordb/mongodb/mongodb.py +200 -24
  364. agno/vectordb/pgvector/pgvector.py +319 -37
  365. agno/vectordb/pineconedb/pineconedb.py +221 -27
  366. agno/vectordb/qdrant/qdrant.py +334 -14
  367. agno/vectordb/singlestore/singlestore.py +286 -29
  368. agno/vectordb/surrealdb/surrealdb.py +187 -7
  369. agno/vectordb/upstashdb/upstashdb.py +342 -26
  370. agno/vectordb/weaviate/weaviate.py +227 -165
  371. agno/workflow/__init__.py +17 -13
  372. agno/workflow/{v2/condition.py → condition.py} +135 -32
  373. agno/workflow/{v2/loop.py → loop.py} +115 -28
  374. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  375. agno/workflow/{v2/router.py → router.py} +133 -32
  376. agno/workflow/{v2/step.py → step.py} +200 -42
  377. agno/workflow/{v2/steps.py → steps.py} +147 -66
  378. agno/workflow/types.py +482 -0
  379. agno/workflow/workflow.py +2394 -696
  380. agno-2.0.0a1.dist-info/METADATA +355 -0
  381. agno-2.0.0a1.dist-info/RECORD +514 -0
  382. agno/agent/metrics.py +0 -107
  383. agno/api/app.py +0 -35
  384. agno/api/playground.py +0 -92
  385. agno/api/schemas/app.py +0 -12
  386. agno/api/schemas/playground.py +0 -22
  387. agno/api/schemas/user.py +0 -35
  388. agno/api/schemas/workspace.py +0 -46
  389. agno/api/user.py +0 -160
  390. agno/api/workflows.py +0 -33
  391. agno/api/workspace.py +0 -175
  392. agno/app/agui/__init__.py +0 -3
  393. agno/app/agui/app.py +0 -17
  394. agno/app/agui/sync_router.py +0 -120
  395. agno/app/base.py +0 -186
  396. agno/app/discord/__init__.py +0 -3
  397. agno/app/fastapi/__init__.py +0 -3
  398. agno/app/fastapi/app.py +0 -107
  399. agno/app/fastapi/async_router.py +0 -457
  400. agno/app/fastapi/sync_router.py +0 -448
  401. agno/app/playground/app.py +0 -228
  402. agno/app/playground/async_router.py +0 -1050
  403. agno/app/playground/deploy.py +0 -249
  404. agno/app/playground/operator.py +0 -183
  405. agno/app/playground/schemas.py +0 -220
  406. agno/app/playground/serve.py +0 -55
  407. agno/app/playground/sync_router.py +0 -1042
  408. agno/app/playground/utils.py +0 -46
  409. agno/app/settings.py +0 -15
  410. agno/app/slack/__init__.py +0 -3
  411. agno/app/slack/app.py +0 -19
  412. agno/app/slack/sync_router.py +0 -92
  413. agno/app/utils.py +0 -54
  414. agno/app/whatsapp/__init__.py +0 -3
  415. agno/app/whatsapp/app.py +0 -15
  416. agno/app/whatsapp/sync_router.py +0 -197
  417. agno/cli/auth_server.py +0 -249
  418. agno/cli/config.py +0 -274
  419. agno/cli/console.py +0 -88
  420. agno/cli/credentials.py +0 -23
  421. agno/cli/entrypoint.py +0 -571
  422. agno/cli/operator.py +0 -357
  423. agno/cli/settings.py +0 -96
  424. agno/cli/ws/ws_cli.py +0 -817
  425. agno/constants.py +0 -13
  426. agno/document/__init__.py +0 -5
  427. agno/document/chunking/semantic.py +0 -45
  428. agno/document/chunking/strategy.py +0 -31
  429. agno/document/reader/__init__.py +0 -5
  430. agno/document/reader/base.py +0 -47
  431. agno/document/reader/docx_reader.py +0 -60
  432. agno/document/reader/gcs/pdf_reader.py +0 -44
  433. agno/document/reader/s3/pdf_reader.py +0 -59
  434. agno/document/reader/s3/text_reader.py +0 -63
  435. agno/document/reader/url_reader.py +0 -59
  436. agno/document/reader/youtube_reader.py +0 -58
  437. agno/embedder/__init__.py +0 -5
  438. agno/embedder/langdb.py +0 -80
  439. agno/embedder/mistral.py +0 -82
  440. agno/embedder/openai.py +0 -78
  441. agno/file/__init__.py +0 -5
  442. agno/file/file.py +0 -16
  443. agno/file/local/csv.py +0 -32
  444. agno/file/local/txt.py +0 -19
  445. agno/infra/app.py +0 -240
  446. agno/infra/base.py +0 -144
  447. agno/infra/context.py +0 -20
  448. agno/infra/db_app.py +0 -52
  449. agno/infra/resource.py +0 -205
  450. agno/infra/resources.py +0 -55
  451. agno/knowledge/agent.py +0 -702
  452. agno/knowledge/arxiv.py +0 -33
  453. agno/knowledge/combined.py +0 -36
  454. agno/knowledge/csv.py +0 -144
  455. agno/knowledge/csv_url.py +0 -124
  456. agno/knowledge/document.py +0 -223
  457. agno/knowledge/docx.py +0 -137
  458. agno/knowledge/firecrawl.py +0 -34
  459. agno/knowledge/gcs/__init__.py +0 -0
  460. agno/knowledge/gcs/base.py +0 -39
  461. agno/knowledge/gcs/pdf.py +0 -125
  462. agno/knowledge/json.py +0 -137
  463. agno/knowledge/langchain.py +0 -71
  464. agno/knowledge/light_rag.py +0 -273
  465. agno/knowledge/llamaindex.py +0 -66
  466. agno/knowledge/markdown.py +0 -154
  467. agno/knowledge/pdf.py +0 -164
  468. agno/knowledge/pdf_bytes.py +0 -42
  469. agno/knowledge/pdf_url.py +0 -148
  470. agno/knowledge/s3/__init__.py +0 -0
  471. agno/knowledge/s3/base.py +0 -64
  472. agno/knowledge/s3/pdf.py +0 -33
  473. agno/knowledge/s3/text.py +0 -34
  474. agno/knowledge/text.py +0 -141
  475. agno/knowledge/url.py +0 -46
  476. agno/knowledge/website.py +0 -179
  477. agno/knowledge/wikipedia.py +0 -32
  478. agno/knowledge/youtube.py +0 -35
  479. agno/memory/agent.py +0 -423
  480. agno/memory/classifier.py +0 -104
  481. agno/memory/db/__init__.py +0 -5
  482. agno/memory/db/base.py +0 -42
  483. agno/memory/db/mongodb.py +0 -189
  484. agno/memory/db/postgres.py +0 -203
  485. agno/memory/db/sqlite.py +0 -193
  486. agno/memory/memory.py +0 -22
  487. agno/memory/row.py +0 -36
  488. agno/memory/summarizer.py +0 -201
  489. agno/memory/summary.py +0 -19
  490. agno/memory/team.py +0 -415
  491. agno/memory/v2/__init__.py +0 -2
  492. agno/memory/v2/db/__init__.py +0 -1
  493. agno/memory/v2/db/base.py +0 -42
  494. agno/memory/v2/db/firestore.py +0 -339
  495. agno/memory/v2/db/mongodb.py +0 -196
  496. agno/memory/v2/db/postgres.py +0 -214
  497. agno/memory/v2/db/redis.py +0 -187
  498. agno/memory/v2/db/schema.py +0 -54
  499. agno/memory/v2/db/sqlite.py +0 -209
  500. agno/memory/v2/manager.py +0 -437
  501. agno/memory/v2/memory.py +0 -1097
  502. agno/memory/v2/schema.py +0 -55
  503. agno/memory/v2/summarizer.py +0 -215
  504. agno/memory/workflow.py +0 -38
  505. agno/models/ollama/tools.py +0 -430
  506. agno/models/qwen/__init__.py +0 -5
  507. agno/playground/__init__.py +0 -10
  508. agno/playground/deploy.py +0 -3
  509. agno/playground/playground.py +0 -3
  510. agno/playground/serve.py +0 -3
  511. agno/playground/settings.py +0 -3
  512. agno/reranker/__init__.py +0 -0
  513. agno/run/v2/__init__.py +0 -0
  514. agno/run/v2/workflow.py +0 -567
  515. agno/storage/__init__.py +0 -0
  516. agno/storage/agent/__init__.py +0 -0
  517. agno/storage/agent/dynamodb.py +0 -1
  518. agno/storage/agent/json.py +0 -1
  519. agno/storage/agent/mongodb.py +0 -1
  520. agno/storage/agent/postgres.py +0 -1
  521. agno/storage/agent/singlestore.py +0 -1
  522. agno/storage/agent/sqlite.py +0 -1
  523. agno/storage/agent/yaml.py +0 -1
  524. agno/storage/base.py +0 -60
  525. agno/storage/dynamodb.py +0 -673
  526. agno/storage/firestore.py +0 -297
  527. agno/storage/gcs_json.py +0 -261
  528. agno/storage/in_memory.py +0 -234
  529. agno/storage/json.py +0 -237
  530. agno/storage/mongodb.py +0 -328
  531. agno/storage/mysql.py +0 -685
  532. agno/storage/postgres.py +0 -682
  533. agno/storage/redis.py +0 -336
  534. agno/storage/session/__init__.py +0 -16
  535. agno/storage/session/agent.py +0 -64
  536. agno/storage/session/team.py +0 -63
  537. agno/storage/session/v2/__init__.py +0 -5
  538. agno/storage/session/workflow.py +0 -61
  539. agno/storage/singlestore.py +0 -606
  540. agno/storage/sqlite.py +0 -646
  541. agno/storage/workflow/__init__.py +0 -0
  542. agno/storage/workflow/mongodb.py +0 -1
  543. agno/storage/workflow/postgres.py +0 -1
  544. agno/storage/workflow/sqlite.py +0 -1
  545. agno/storage/yaml.py +0 -241
  546. agno/tools/thinking.py +0 -73
  547. agno/utils/defaults.py +0 -57
  548. agno/utils/filesystem.py +0 -39
  549. agno/utils/git.py +0 -52
  550. agno/utils/json_io.py +0 -30
  551. agno/utils/load_env.py +0 -19
  552. agno/utils/py_io.py +0 -19
  553. agno/utils/pyproject.py +0 -18
  554. agno/utils/resource_filter.py +0 -31
  555. agno/workflow/v2/__init__.py +0 -21
  556. agno/workflow/v2/types.py +0 -357
  557. agno/workflow/v2/workflow.py +0 -3312
  558. agno/workspace/__init__.py +0 -0
  559. agno/workspace/config.py +0 -325
  560. agno/workspace/enums.py +0 -6
  561. agno/workspace/helpers.py +0 -52
  562. agno/workspace/operator.py +0 -757
  563. agno/workspace/settings.py +0 -158
  564. agno-1.8.1.dist-info/METADATA +0 -982
  565. agno-1.8.1.dist-info/RECORD +0 -566
  566. agno-1.8.1.dist-info/entry_points.txt +0 -3
  567. /agno/{app → db/migrations}/__init__.py +0 -0
  568. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  569. /agno/{cli → integrations}/__init__.py +0 -0
  570. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  571. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  572. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  573. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  574. /agno/{app → os/interfaces}/slack/security.py +0 -0
  575. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  576. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  577. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  578. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/WHEEL +0 -0
  579. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/licenses/LICENSE +0 -0
  580. {agno-1.8.1.dist-info → agno-2.0.0a1.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
@@ -7,6 +7,7 @@ from uuid import uuid4
7
7
  from agno.agent import Agent
8
8
  from agno.media import ImageArtifact
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 ImageArtifact for the screenshot
162
+ image_artifact = ImageArtifact(
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)
agno/tools/cartesia.py CHANGED
@@ -8,6 +8,7 @@ from agno.agent import Agent
8
8
  from agno.media import AudioArtifact
9
9
  from agno.team.team import Team
10
10
  from agno.tools import Toolkit
11
+ from agno.tools.function import ToolResult
11
12
  from agno.utils.log import log_debug, log_error, log_info
12
13
 
13
14
  try:
@@ -22,9 +23,10 @@ class CartesiaTools(Toolkit):
22
23
  api_key: Optional[str] = None,
23
24
  model_id: str = "sonic-2",
24
25
  default_voice_id: str = "78ab82d5-25be-4f7d-82b3-7ad64e5b85b2",
25
- text_to_speech_enabled: bool = True,
26
- list_voices_enabled: bool = True,
27
- voice_localize_enabled: bool = False,
26
+ enable_text_to_speech: bool = True,
27
+ enable_list_voices: bool = True,
28
+ enable_localize_voice: bool = False,
29
+ all: bool = False,
28
30
  **kwargs,
29
31
  ):
30
32
  self.api_key = api_key or getenv("CARTESIA_API_KEY")
@@ -37,11 +39,11 @@ class CartesiaTools(Toolkit):
37
39
  self.default_voice_id = default_voice_id
38
40
 
39
41
  tools: List[Any] = []
40
- if voice_localize_enabled:
42
+ if all or enable_localize_voice:
41
43
  tools.append(self.localize_voice)
42
- if text_to_speech_enabled:
44
+ if all or enable_text_to_speech:
43
45
  tools.append(self.text_to_speech)
44
- if list_voices_enabled:
46
+ if all or enable_list_voices:
45
47
  tools.append(self.list_voices)
46
48
 
47
49
  super().__init__(name="cartesia_tools", tools=tools, **kwargs)
@@ -131,15 +133,15 @@ class CartesiaTools(Toolkit):
131
133
  agent: Union[Agent, Team],
132
134
  transcript: str,
133
135
  voice_id: Optional[str] = None,
134
- ) -> str:
136
+ ) -> ToolResult:
135
137
  """
136
- Convert text to speechß.
138
+ Convert text to speech.
137
139
  Args:
138
140
  transcript: The text to convert to speech
139
141
  voice_id (optional): The ID of the voice to use for the text-to-speech. If None, uses the default voice ID configured in the tool. Defaults to None.
140
142
 
141
143
  Returns:
142
- str: Success or error message.
144
+ ToolResult: A ToolResult containing the generated audio or error message.
143
145
  """
144
146
 
145
147
  try:
@@ -170,15 +172,18 @@ class CartesiaTools(Toolkit):
170
172
  audio_data = b"".join(chunk for chunk in audio_iterator)
171
173
  base64_audio = b64encode(audio_data).decode("utf-8")
172
174
 
173
- artifact = AudioArtifact(
175
+ # Create AudioArtifact
176
+ audio_artifact = AudioArtifact(
174
177
  id=str(uuid4()),
175
178
  base64_audio=base64_audio,
176
179
  mime_type=mime_type, # Hardcoded to audio/mpeg
177
180
  )
178
- agent.add_audio(artifact)
179
181
 
180
- return "Audio generated and attached successfully."
182
+ return ToolResult(
183
+ content="Audio generated and attached successfully.",
184
+ audios=[audio_artifact],
185
+ )
181
186
 
182
187
  except Exception as e:
183
188
  log_error(f"Error generating speech with Cartesia: {e}", exc_info=True)
184
- return f"Error generating speech: {e}"
189
+ return ToolResult(content=f"Error generating speech: {e}")