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

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