agno 1.8.1__py3-none-any.whl → 2.0.0rc1__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 +3181 -4169
  4. agno/api/agent.py +11 -67
  5. agno/api/api.py +5 -46
  6. agno/api/evals.py +8 -19
  7. agno/api/os.py +17 -0
  8. agno/api/routes.py +6 -41
  9. agno/api/schemas/__init__.py +9 -0
  10. agno/api/schemas/agent.py +5 -21
  11. agno/api/schemas/evals.py +7 -16
  12. agno/api/schemas/os.py +14 -0
  13. agno/api/schemas/team.py +5 -21
  14. agno/api/schemas/utils.py +21 -0
  15. agno/api/schemas/workflows.py +11 -7
  16. agno/api/settings.py +53 -0
  17. agno/api/team.py +11 -66
  18. agno/api/workflow.py +28 -0
  19. agno/cloud/aws/base.py +214 -0
  20. agno/cloud/aws/s3/__init__.py +2 -0
  21. agno/cloud/aws/s3/api_client.py +43 -0
  22. agno/cloud/aws/s3/bucket.py +195 -0
  23. agno/cloud/aws/s3/object.py +57 -0
  24. agno/db/__init__.py +24 -0
  25. agno/db/base.py +245 -0
  26. agno/db/dynamo/__init__.py +3 -0
  27. agno/db/dynamo/dynamo.py +1743 -0
  28. agno/db/dynamo/schemas.py +278 -0
  29. agno/db/dynamo/utils.py +684 -0
  30. agno/db/firestore/__init__.py +3 -0
  31. agno/db/firestore/firestore.py +1432 -0
  32. agno/db/firestore/schemas.py +130 -0
  33. agno/db/firestore/utils.py +278 -0
  34. agno/db/gcs_json/__init__.py +3 -0
  35. agno/db/gcs_json/gcs_json_db.py +1001 -0
  36. agno/db/gcs_json/utils.py +194 -0
  37. agno/db/in_memory/__init__.py +3 -0
  38. agno/db/in_memory/in_memory_db.py +882 -0
  39. agno/db/in_memory/utils.py +172 -0
  40. agno/db/json/__init__.py +3 -0
  41. agno/db/json/json_db.py +1045 -0
  42. agno/db/json/utils.py +196 -0
  43. agno/db/migrations/v1_to_v2.py +162 -0
  44. agno/db/mongo/__init__.py +3 -0
  45. agno/db/mongo/mongo.py +1411 -0
  46. agno/db/mongo/schemas.py +77 -0
  47. agno/db/mongo/utils.py +204 -0
  48. agno/db/mysql/__init__.py +3 -0
  49. agno/db/mysql/mysql.py +1719 -0
  50. agno/db/mysql/schemas.py +124 -0
  51. agno/db/mysql/utils.py +297 -0
  52. agno/db/postgres/__init__.py +3 -0
  53. agno/db/postgres/postgres.py +1710 -0
  54. agno/db/postgres/schemas.py +124 -0
  55. agno/db/postgres/utils.py +280 -0
  56. agno/db/redis/__init__.py +3 -0
  57. agno/db/redis/redis.py +1367 -0
  58. agno/db/redis/schemas.py +109 -0
  59. agno/db/redis/utils.py +288 -0
  60. agno/db/schemas/__init__.py +3 -0
  61. agno/db/schemas/evals.py +33 -0
  62. agno/db/schemas/knowledge.py +40 -0
  63. agno/db/schemas/memory.py +46 -0
  64. agno/db/singlestore/__init__.py +3 -0
  65. agno/db/singlestore/schemas.py +116 -0
  66. agno/db/singlestore/singlestore.py +1712 -0
  67. agno/db/singlestore/utils.py +326 -0
  68. agno/db/sqlite/__init__.py +3 -0
  69. agno/db/sqlite/schemas.py +119 -0
  70. agno/db/sqlite/sqlite.py +1676 -0
  71. agno/db/sqlite/utils.py +268 -0
  72. agno/db/utils.py +88 -0
  73. agno/eval/__init__.py +14 -0
  74. agno/eval/accuracy.py +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 +15 -11
  80. agno/knowledge/__init__.py +2 -2
  81. agno/{document → knowledge}/chunking/agentic.py +2 -2
  82. agno/{document → knowledge}/chunking/document.py +2 -2
  83. agno/{document → knowledge}/chunking/fixed.py +3 -3
  84. agno/{document → knowledge}/chunking/markdown.py +2 -2
  85. agno/{document → knowledge}/chunking/recursive.py +2 -2
  86. agno/{document → knowledge}/chunking/row.py +2 -2
  87. agno/knowledge/chunking/semantic.py +59 -0
  88. agno/knowledge/chunking/strategy.py +121 -0
  89. agno/knowledge/content.py +74 -0
  90. agno/knowledge/document/__init__.py +5 -0
  91. agno/{document → knowledge/document}/base.py +12 -2
  92. agno/knowledge/embedder/__init__.py +5 -0
  93. agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
  94. agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
  95. agno/{embedder → knowledge/embedder}/base.py +6 -0
  96. agno/{embedder → knowledge/embedder}/cohere.py +72 -1
  97. agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
  98. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  99. agno/{embedder → knowledge/embedder}/google.py +74 -1
  100. agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
  101. agno/{embedder → knowledge/embedder}/jina.py +48 -2
  102. agno/knowledge/embedder/langdb.py +22 -0
  103. agno/knowledge/embedder/mistral.py +139 -0
  104. agno/{embedder → knowledge/embedder}/nebius.py +1 -1
  105. agno/{embedder → knowledge/embedder}/ollama.py +54 -3
  106. agno/knowledge/embedder/openai.py +223 -0
  107. agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
  108. agno/{embedder → knowledge/embedder}/together.py +1 -1
  109. agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
  110. agno/knowledge/knowledge.py +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 +131 -131
  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 +45 -150
  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 +489 -0
  171. agno/os/auth.py +47 -0
  172. agno/os/config.py +103 -0
  173. agno/os/interfaces/agui/__init__.py +3 -0
  174. agno/os/interfaces/agui/agui.py +31 -0
  175. agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
  176. agno/{app → os/interfaces}/agui/utils.py +77 -33
  177. agno/os/interfaces/base.py +21 -0
  178. agno/os/interfaces/slack/__init__.py +3 -0
  179. agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
  180. agno/os/interfaces/slack/slack.py +32 -0
  181. agno/os/interfaces/whatsapp/__init__.py +3 -0
  182. agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
  183. agno/os/interfaces/whatsapp/whatsapp.py +29 -0
  184. agno/os/mcp.py +255 -0
  185. agno/os/router.py +869 -0
  186. agno/os/routers/__init__.py +3 -0
  187. agno/os/routers/evals/__init__.py +3 -0
  188. agno/os/routers/evals/evals.py +208 -0
  189. agno/os/routers/evals/schemas.py +142 -0
  190. agno/os/routers/evals/utils.py +161 -0
  191. agno/os/routers/knowledge/__init__.py +3 -0
  192. agno/os/routers/knowledge/knowledge.py +436 -0
  193. agno/os/routers/knowledge/schemas.py +118 -0
  194. agno/os/routers/memory/__init__.py +3 -0
  195. agno/os/routers/memory/memory.py +188 -0
  196. agno/os/routers/memory/schemas.py +58 -0
  197. agno/os/routers/metrics/__init__.py +3 -0
  198. agno/os/routers/metrics/metrics.py +60 -0
  199. agno/os/routers/metrics/schemas.py +47 -0
  200. agno/os/routers/session/__init__.py +3 -0
  201. agno/os/routers/session/session.py +168 -0
  202. agno/os/schema.py +892 -0
  203. agno/{app/playground → os}/settings.py +7 -15
  204. agno/os/utils.py +270 -0
  205. agno/reasoning/azure_ai_foundry.py +4 -4
  206. agno/reasoning/deepseek.py +4 -4
  207. agno/reasoning/default.py +6 -11
  208. agno/reasoning/groq.py +4 -4
  209. agno/reasoning/helpers.py +4 -6
  210. agno/reasoning/ollama.py +4 -4
  211. agno/reasoning/openai.py +4 -4
  212. agno/run/{response.py → agent.py} +231 -74
  213. agno/run/base.py +44 -58
  214. agno/run/cancel.py +81 -0
  215. agno/run/team.py +133 -77
  216. agno/run/workflow.py +537 -12
  217. agno/session/__init__.py +10 -0
  218. agno/session/agent.py +244 -0
  219. agno/session/summary.py +225 -0
  220. agno/session/team.py +262 -0
  221. agno/{storage/session/v2 → session}/workflow.py +47 -24
  222. agno/team/__init__.py +15 -16
  223. agno/team/team.py +2960 -4252
  224. agno/tools/agentql.py +14 -5
  225. agno/tools/airflow.py +9 -4
  226. agno/tools/api.py +7 -3
  227. agno/tools/apify.py +2 -46
  228. agno/tools/arxiv.py +8 -3
  229. agno/tools/aws_lambda.py +7 -5
  230. agno/tools/aws_ses.py +7 -1
  231. agno/tools/baidusearch.py +4 -1
  232. agno/tools/bitbucket.py +4 -4
  233. agno/tools/brandfetch.py +14 -11
  234. agno/tools/bravesearch.py +4 -1
  235. agno/tools/brightdata.py +42 -22
  236. agno/tools/browserbase.py +13 -4
  237. agno/tools/calcom.py +12 -10
  238. agno/tools/calculator.py +10 -27
  239. agno/tools/cartesia.py +18 -13
  240. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  241. agno/tools/confluence.py +8 -8
  242. agno/tools/crawl4ai.py +7 -1
  243. agno/tools/csv_toolkit.py +9 -8
  244. agno/tools/dalle.py +18 -11
  245. agno/tools/daytona.py +13 -16
  246. agno/tools/decorator.py +6 -3
  247. agno/tools/desi_vocal.py +16 -7
  248. agno/tools/discord.py +11 -8
  249. agno/tools/docker.py +30 -42
  250. agno/tools/duckdb.py +34 -53
  251. agno/tools/duckduckgo.py +8 -7
  252. agno/tools/e2b.py +61 -61
  253. agno/tools/eleven_labs.py +35 -28
  254. agno/tools/email.py +4 -1
  255. agno/tools/evm.py +7 -1
  256. agno/tools/exa.py +19 -14
  257. agno/tools/fal.py +29 -29
  258. agno/tools/file.py +9 -8
  259. agno/tools/financial_datasets.py +25 -44
  260. agno/tools/firecrawl.py +22 -22
  261. agno/tools/function.py +127 -18
  262. agno/tools/giphy.py +22 -10
  263. agno/tools/github.py +48 -126
  264. agno/tools/gmail.py +45 -61
  265. agno/tools/google_bigquery.py +7 -6
  266. agno/tools/google_maps.py +11 -26
  267. agno/tools/googlesearch.py +7 -2
  268. agno/tools/googlesheets.py +21 -17
  269. agno/tools/hackernews.py +9 -5
  270. agno/tools/jina.py +5 -4
  271. agno/tools/jira.py +18 -9
  272. agno/tools/knowledge.py +31 -32
  273. agno/tools/linear.py +19 -34
  274. agno/tools/linkup.py +5 -1
  275. agno/tools/local_file_system.py +8 -5
  276. agno/tools/lumalab.py +31 -19
  277. agno/tools/mem0.py +18 -12
  278. agno/tools/memori.py +14 -10
  279. agno/tools/mlx_transcribe.py +3 -2
  280. agno/tools/models/azure_openai.py +32 -14
  281. agno/tools/models/gemini.py +58 -31
  282. agno/tools/models/groq.py +29 -20
  283. agno/tools/models/nebius.py +27 -11
  284. agno/tools/models_labs.py +39 -15
  285. agno/tools/moviepy_video.py +7 -6
  286. agno/tools/neo4j.py +10 -8
  287. agno/tools/newspaper.py +7 -2
  288. agno/tools/newspaper4k.py +8 -3
  289. agno/tools/openai.py +57 -26
  290. agno/tools/openbb.py +12 -11
  291. agno/tools/opencv.py +62 -46
  292. agno/tools/openweather.py +14 -12
  293. agno/tools/pandas.py +11 -3
  294. agno/tools/postgres.py +4 -12
  295. agno/tools/pubmed.py +4 -1
  296. agno/tools/python.py +9 -22
  297. agno/tools/reasoning.py +35 -27
  298. agno/tools/reddit.py +11 -26
  299. agno/tools/replicate.py +54 -41
  300. agno/tools/resend.py +4 -1
  301. agno/tools/scrapegraph.py +15 -14
  302. agno/tools/searxng.py +10 -23
  303. agno/tools/serpapi.py +6 -3
  304. agno/tools/serper.py +13 -4
  305. agno/tools/shell.py +9 -2
  306. agno/tools/slack.py +12 -11
  307. agno/tools/sleep.py +3 -2
  308. agno/tools/spider.py +24 -4
  309. agno/tools/sql.py +7 -6
  310. agno/tools/tavily.py +6 -4
  311. agno/tools/telegram.py +12 -4
  312. agno/tools/todoist.py +11 -31
  313. agno/tools/toolkit.py +1 -1
  314. agno/tools/trafilatura.py +22 -6
  315. agno/tools/trello.py +9 -22
  316. agno/tools/twilio.py +10 -3
  317. agno/tools/user_control_flow.py +6 -1
  318. agno/tools/valyu.py +34 -5
  319. agno/tools/visualization.py +19 -28
  320. agno/tools/webbrowser.py +4 -3
  321. agno/tools/webex.py +11 -7
  322. agno/tools/website.py +15 -46
  323. agno/tools/webtools.py +12 -4
  324. agno/tools/whatsapp.py +5 -9
  325. agno/tools/wikipedia.py +20 -13
  326. agno/tools/x.py +14 -13
  327. agno/tools/yfinance.py +13 -40
  328. agno/tools/youtube.py +26 -20
  329. agno/tools/zendesk.py +7 -2
  330. agno/tools/zep.py +10 -7
  331. agno/tools/zoom.py +10 -9
  332. agno/utils/common.py +1 -19
  333. agno/utils/events.py +95 -118
  334. agno/utils/gemini.py +31 -1
  335. agno/utils/knowledge.py +29 -0
  336. agno/utils/log.py +2 -2
  337. agno/utils/mcp.py +11 -5
  338. agno/utils/media.py +39 -0
  339. agno/utils/message.py +12 -1
  340. agno/utils/models/claude.py +55 -4
  341. agno/utils/models/mistral.py +8 -7
  342. agno/utils/models/schema_utils.py +3 -3
  343. agno/utils/pprint.py +33 -32
  344. agno/utils/print_response/agent.py +779 -0
  345. agno/utils/print_response/team.py +1565 -0
  346. agno/utils/print_response/workflow.py +1451 -0
  347. agno/utils/prompts.py +14 -14
  348. agno/utils/reasoning.py +87 -0
  349. agno/utils/response.py +42 -42
  350. agno/utils/streamlit.py +454 -0
  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 +334 -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 +2401 -696
  383. agno-2.0.0rc1.dist-info/METADATA +355 -0
  384. agno-2.0.0rc1.dist-info/RECORD +516 -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 -702
  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.1.dist-info/METADATA +0 -982
  568. agno-1.8.1.dist-info/RECORD +0 -566
  569. agno-1.8.1.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.1.dist-info → agno-2.0.0rc1.dist-info}/WHEEL +0 -0
  582. {agno-1.8.1.dist-info → agno-2.0.0rc1.dist-info}/licenses/LICENSE +0 -0
  583. {agno-1.8.1.dist-info → agno-2.0.0rc1.dist-info}/top_level.txt +0 -0
agno/tools/tavily.py CHANGED
@@ -15,12 +15,13 @@ class TavilyTools(Toolkit):
15
15
  def __init__(
16
16
  self,
17
17
  api_key: Optional[str] = None,
18
- search: bool = True,
18
+ enable_search: bool = True,
19
+ enable_search_context: bool = False,
20
+ all: bool = False,
19
21
  max_tokens: int = 6000,
20
22
  include_answer: bool = True,
21
23
  search_depth: Literal["basic", "advanced"] = "advanced",
22
24
  format: Literal["json", "markdown"] = "markdown",
23
- use_search_context: bool = False,
24
25
  **kwargs,
25
26
  ):
26
27
  self.api_key = api_key or getenv("TAVILY_API_KEY")
@@ -34,8 +35,9 @@ class TavilyTools(Toolkit):
34
35
  self.format: Literal["json", "markdown"] = format
35
36
 
36
37
  tools: List[Any] = []
37
- if search:
38
- if use_search_context:
38
+
39
+ if enable_search or all:
40
+ if enable_search_context:
39
41
  tools.append(self.web_search_with_tavily)
40
42
  else:
41
43
  tools.append(self.web_search_using_tavily)
agno/tools/telegram.py CHANGED
@@ -1,4 +1,4 @@
1
- import os
1
+ from os import getenv
2
2
  from typing import Any, List, Optional, Union
3
3
 
4
4
  import httpx
@@ -10,15 +10,23 @@ from agno.utils.log import log_debug, logger
10
10
  class TelegramTools(Toolkit):
11
11
  base_url = "https://api.telegram.org"
12
12
 
13
- def __init__(self, chat_id: Union[str, int], token: Optional[str] = None, **kwargs):
14
- self.token = token or os.getenv("TELEGRAM_TOKEN")
13
+ def __init__(
14
+ self,
15
+ chat_id: Union[str, int],
16
+ token: Optional[str] = None,
17
+ enable_send_message: bool = True,
18
+ all: bool = False,
19
+ **kwargs,
20
+ ):
21
+ self.token = token or getenv("TELEGRAM_TOKEN")
15
22
  if not self.token:
16
23
  logger.error("TELEGRAM_TOKEN not set. Please set the TELEGRAM_TOKEN environment variable.")
17
24
 
18
25
  self.chat_id = chat_id
19
26
 
20
27
  tools: List[Any] = []
21
- tools.append(self.send_message)
28
+ if all or enable_send_message:
29
+ tools.append(self.send_message)
22
30
 
23
31
  super().__init__(name="telegram", tools=tools, **kwargs)
24
32
 
agno/tools/todoist.py CHANGED
@@ -1,5 +1,5 @@
1
1
  import json
2
- import os
2
+ from os import getenv
3
3
  from typing import Any, Dict, List, Optional
4
4
 
5
5
  from agno.tools import Toolkit
@@ -17,48 +17,28 @@ class TodoistTools(Toolkit):
17
17
  def __init__(
18
18
  self,
19
19
  api_token: Optional[str] = None,
20
- create_task: bool = True,
21
- get_task: bool = True,
22
- update_task: bool = True,
23
- close_task: bool = True,
24
- delete_task: bool = True,
25
- get_active_tasks: bool = True,
26
- get_projects: bool = True,
27
20
  **kwargs,
28
21
  ):
29
22
  """Initialize the Todoist toolkit.
30
23
 
31
24
  Args:
32
25
  api_token: Optional Todoist API token. If not provided, will look for TODOIST_API_TOKEN env var
33
- create_task: Whether to register the create_task function
34
- get_task: Whether to register the get_task function
35
- update_task: Whether to register the update_task function
36
- close_task: Whether to register the close_task function
37
- delete_task: Whether to register the delete_task function
38
- get_active_tasks: Whether to register the get_active_tasks function
39
- get_projects: Whether to register the get_projects function
40
26
  """
41
- self.api_token = api_token or os.getenv("TODOIST_API_TOKEN")
27
+ self.api_token = api_token or getenv("TODOIST_API_TOKEN")
42
28
  if not self.api_token:
43
29
  raise ValueError("TODOIST_API_TOKEN not set. Please set the TODOIST_API_TOKEN environment variable.")
44
30
 
45
31
  self.api = TodoistAPI(self.api_token)
46
32
 
47
- tools: List[Any] = []
48
- if create_task:
49
- tools.append(self.create_task)
50
- if get_task:
51
- tools.append(self.get_task)
52
- if update_task:
53
- tools.append(self.update_task)
54
- if close_task:
55
- tools.append(self.close_task)
56
- if delete_task:
57
- tools.append(self.delete_task)
58
- if get_active_tasks:
59
- tools.append(self.get_active_tasks)
60
- if get_projects:
61
- tools.append(self.get_projects)
33
+ tools: List[Any] = [
34
+ self.create_task,
35
+ self.get_task,
36
+ self.update_task,
37
+ self.close_task,
38
+ self.delete_task,
39
+ self.get_active_tasks,
40
+ self.get_projects,
41
+ ]
62
42
 
63
43
  super().__init__(name="todoist", tools=tools, **kwargs)
64
44
 
agno/tools/toolkit.py CHANGED
@@ -131,7 +131,7 @@ class Toolkit:
131
131
  requires_confirmation=tool_name in self.requires_confirmation_tools,
132
132
  external_execution=tool_name in self.external_execution_required_tools,
133
133
  stop_after_tool_call=tool_name in self.stop_after_tool_call_tools,
134
- show_result=tool_name in self.show_result_tools,
134
+ show_result=tool_name in self.show_result_tools or tool_name in self.stop_after_tool_call_tools,
135
135
  )
136
136
  self.functions[f.name] = f
137
137
  log_debug(f"Function: {f.name} registered with {self.name}")
agno/tools/trafilatura.py CHANGED
@@ -63,6 +63,13 @@ class TrafilaturaTools(Toolkit):
63
63
  max_tree_size: Optional[int] = None,
64
64
  max_crawl_urls: int = 10,
65
65
  max_known_urls: int = 100000,
66
+ # Tool enable flags for <6 functions
67
+ enable_extract_text: bool = True,
68
+ enable_extract_metadata_only: bool = True,
69
+ enable_html_to_text: bool = True,
70
+ enable_extract_batch: bool = True,
71
+ enable_crawl_website: bool = True,
72
+ all: bool = False,
66
73
  **kwargs,
67
74
  ):
68
75
  self.output_format = output_format
@@ -80,12 +87,21 @@ class TrafilaturaTools(Toolkit):
80
87
  self.max_crawl_urls = max_crawl_urls
81
88
  self.max_known_urls = max_known_urls
82
89
 
83
- tools: List[Callable] = [self.extract_text, self.extract_metadata_only, self.html_to_text, self.extract_batch]
84
-
85
- if not SPIDER_AVAILABLE:
86
- logger.warning("Web crawling requested but spider module not available. Skipping crawler tool.")
87
- else:
88
- tools.append(self.crawl_website)
90
+ tools: List[Callable] = []
91
+ if all or enable_extract_text:
92
+ tools.append(self.extract_text)
93
+ if all or enable_extract_metadata_only:
94
+ tools.append(self.extract_metadata_only)
95
+ if all or enable_html_to_text:
96
+ tools.append(self.html_to_text)
97
+ if all or enable_extract_batch:
98
+ tools.append(self.extract_batch)
99
+
100
+ if all or enable_crawl_website:
101
+ if not SPIDER_AVAILABLE:
102
+ logger.warning("Web crawling requested but spider module not available. Skipping crawler tool.")
103
+ else:
104
+ tools.append(self.crawl_website)
89
105
 
90
106
  super().__init__(name="trafilatura_tools", tools=tools, **kwargs)
91
107
 
agno/tools/trello.py CHANGED
@@ -17,13 +17,6 @@ class TrelloTools(Toolkit):
17
17
  api_key: Optional[str] = None,
18
18
  api_secret: Optional[str] = None,
19
19
  token: Optional[str] = None,
20
- create_card: bool = True,
21
- get_board_lists: bool = True,
22
- move_card: bool = True,
23
- get_cards: bool = True,
24
- create_board: bool = True,
25
- create_list: bool = True,
26
- list_boards: bool = True,
27
20
  **kwargs,
28
21
  ):
29
22
  self.api_key = api_key or getenv("TRELLO_API_KEY")
@@ -39,21 +32,15 @@ class TrelloTools(Toolkit):
39
32
  logger.error(f"Error initializing Trello client: {e}")
40
33
  self.client = None
41
34
 
42
- tools: List[Any] = []
43
- if create_card:
44
- tools.append(self.create_card)
45
- if get_board_lists:
46
- tools.append(self.get_board_lists)
47
- if move_card:
48
- tools.append(self.move_card)
49
- if get_cards:
50
- tools.append(self.get_cards)
51
- if create_board:
52
- tools.append(self.create_board)
53
- if create_list:
54
- tools.append(self.create_list)
55
- if list_boards:
56
- tools.append(self.list_boards)
35
+ tools: List[Any] = [
36
+ self.create_card,
37
+ self.get_board_lists,
38
+ self.move_card,
39
+ self.get_cards,
40
+ self.create_board,
41
+ self.create_list,
42
+ self.list_boards,
43
+ ]
57
44
 
58
45
  super().__init__(name="trello", tools=tools, **kwargs)
59
46
 
agno/tools/twilio.py CHANGED
@@ -22,6 +22,10 @@ class TwilioTools(Toolkit):
22
22
  region: Optional[str] = None,
23
23
  edge: Optional[str] = None,
24
24
  debug: bool = False,
25
+ enable_send_sms: bool = True,
26
+ enable_get_call_details: bool = True,
27
+ enable_list_messages: bool = True,
28
+ all: bool = False,
25
29
  **kwargs,
26
30
  ):
27
31
  """Initialize the Twilio toolkit.
@@ -84,9 +88,12 @@ class TwilioTools(Toolkit):
84
88
  self.client.http_client.logger.setLevel(logging.INFO)
85
89
 
86
90
  tools: List[Any] = []
87
- tools.append(self.send_sms)
88
- tools.append(self.get_call_details)
89
- tools.append(self.list_messages)
91
+ if all or enable_send_sms:
92
+ tools.append(self.send_sms)
93
+ if all or enable_get_call_details:
94
+ tools.append(self.get_call_details)
95
+ if all or enable_list_messages:
96
+ tools.append(self.list_messages)
90
97
 
91
98
  super().__init__(name="twilio", tools=tools, **kwargs)
92
99
 
@@ -9,6 +9,8 @@ class UserControlFlowTools(Toolkit):
9
9
  self,
10
10
  instructions: Optional[str] = None,
11
11
  add_instructions: bool = True,
12
+ enable_get_user_input: bool = True,
13
+ all: bool = False,
12
14
  **kwargs,
13
15
  ):
14
16
  """A toolkit that provides the ability for the agent to interrupt the agent run and interact with the user."""
@@ -17,7 +19,10 @@ class UserControlFlowTools(Toolkit):
17
19
  self.instructions = self.DEFAULT_INSTRUCTIONS
18
20
  else:
19
21
  self.instructions = instructions
20
- tools = [self.get_user_input]
22
+
23
+ tools = []
24
+ if all or enable_get_user_input:
25
+ tools.append(self.get_user_input)
21
26
 
22
27
  super().__init__(
23
28
  name="user_control_flow_tools",
agno/tools/valyu.py CHANGED
@@ -12,9 +12,34 @@ except ImportError:
12
12
 
13
13
 
14
14
  class ValyuTools(Toolkit):
15
+ """
16
+ Valyu is a toolkit for academic and web search capabilities.
17
+
18
+ Args:
19
+ api_key (Optional[str]): Valyu API key. Retrieved from VALYU_API_KEY env variable if not provided.
20
+ enable_academic_search (bool): Enable academic sources search functionality. Default is True.
21
+ enable_web_search (bool): Enable web search functionality. Default is True.
22
+ enable_paper_search (bool): Enable search within paper functionality. Default is True.
23
+ all (bool): Enable all tools. Overrides individual flags when True. Default is False.
24
+ text_length (int): Maximum length of text content per result. Default is 1000.
25
+ max_results (int): Maximum number of results to return. Default is 10.
26
+ relevance_threshold (float): Minimum relevance score for results. Default is 0.5.
27
+ content_category (Optional[str]): Content category for filtering.
28
+ search_start_date (Optional[str]): Start date for search filtering (YYYY-MM-DD).
29
+ search_end_date (Optional[str]): End date for search filtering (YYYY-MM-DD).
30
+ search_domains (Optional[List[str]]): List of domains to search within.
31
+ sources (Optional[List[str]]): List of specific sources to search.
32
+ max_price (float): Maximum price for API calls. Default is 30.0.
33
+ tool_call_mode (bool): Enable tool call mode. Default is False.
34
+ """
35
+
15
36
  def __init__(
16
37
  self,
17
38
  api_key: Optional[str] = None,
39
+ enable_academic_search: bool = True,
40
+ enable_web_search: bool = True,
41
+ enable_paper_search: bool = True,
42
+ all: bool = False,
18
43
  text_length: int = 1000,
19
44
  max_results: int = 10,
20
45
  relevance_threshold: float = 0.5,
@@ -43,11 +68,15 @@ class ValyuTools(Toolkit):
43
68
  self.sources = sources
44
69
  self.tool_call_mode = tool_call_mode
45
70
 
46
- super().__init__(
47
- name="valyu_search",
48
- tools=[self.search_academic_sources, self.search_web, self.search_within_paper],
49
- **kwargs,
50
- )
71
+ tools: List[Any] = []
72
+ if all or enable_academic_search:
73
+ tools.append(self.search_academic_sources)
74
+ if all or enable_web_search:
75
+ tools.append(self.search_web)
76
+ if all or enable_paper_search:
77
+ tools.append(self.search_within_paper)
78
+
79
+ super().__init__(name="valyu_search", tools=tools, **kwargs)
51
80
 
52
81
  def _parse_results(self, results: List[Any]) -> str:
53
82
  parsed_results = []
@@ -9,29 +9,21 @@ from agno.utils.log import log_info, logger
9
9
  class VisualizationTools(Toolkit):
10
10
  def __init__(
11
11
  self,
12
- bar_chart: bool = True,
13
- line_chart: bool = True,
14
- pie_chart: bool = True,
15
- scatter_plot: bool = True,
16
- histogram: bool = True,
17
- enable_all: bool = False,
18
12
  output_dir: str = "charts",
13
+ enable_create_bar_chart: bool = True,
14
+ enable_create_line_chart: bool = True,
15
+ enable_create_pie_chart: bool = True,
16
+ enable_create_scatter_plot: bool = True,
17
+ enable_create_histogram: bool = True,
18
+ all: bool = False,
19
19
  **kwargs,
20
20
  ):
21
21
  """
22
22
  Initialize the VisualizationTools toolkit.
23
23
 
24
24
  Args:
25
- bar_chart (bool): Enable bar chart creation. Default is True.
26
- line_chart (bool): Enable line chart creation. Default is True.
27
- pie_chart (bool): Enable pie chart creation. Default is True.
28
- scatter_plot (bool): Enable scatter plot creation. Default is True.
29
- histogram (bool): Enable histogram creation. Default is True.
30
- enable_all (bool): Enable all chart types. Default is False.
31
25
  output_dir (str): Directory to save charts. Default is "charts".
32
26
  """
33
- super().__init__(**kwargs)
34
-
35
27
  # Check if matplotlib is available
36
28
  try:
37
29
  import matplotlib
@@ -47,20 +39,19 @@ class VisualizationTools(Toolkit):
47
39
 
48
40
  self.output_dir = output_dir
49
41
 
50
- # Register functions based on enabled chart types
51
- if enable_all:
52
- bar_chart = line_chart = pie_chart = scatter_plot = histogram = True
53
-
54
- if bar_chart:
55
- self.register(self.create_bar_chart)
56
- if line_chart:
57
- self.register(self.create_line_chart)
58
- if pie_chart:
59
- self.register(self.create_pie_chart)
60
- if scatter_plot:
61
- self.register(self.create_scatter_plot)
62
- if histogram:
63
- self.register(self.create_histogram)
42
+ tools: List[Any] = []
43
+ if enable_create_bar_chart or all:
44
+ tools.append(self.create_bar_chart)
45
+ if enable_create_line_chart or all:
46
+ tools.append(self.create_line_chart)
47
+ if enable_create_pie_chart or all:
48
+ tools.append(self.create_pie_chart)
49
+ if enable_create_scatter_plot or all:
50
+ tools.append(self.create_scatter_plot)
51
+ if enable_create_histogram or all:
52
+ tools.append(self.create_histogram)
53
+
54
+ super().__init__(name="visualization_tools", tools=tools, **kwargs)
64
55
 
65
56
  def _normalize_data_for_charts(
66
57
  self, data: Union[Dict[str, Any], List[Dict[str, Any]], List[Any], str]
agno/tools/webbrowser.py CHANGED
@@ -7,11 +7,12 @@ from agno.tools import Toolkit
7
7
  class WebBrowserTools(Toolkit):
8
8
  """Tools for opening a page on the web browser"""
9
9
 
10
- def __init__(self):
10
+ def __init__(self, enable_open_page: bool = True, all: bool = False, **kwargs):
11
11
  tools: List[Any] = []
12
- tools.append(self.open_page)
12
+ if all or enable_open_page:
13
+ tools.append(self.open_page)
13
14
 
14
- super().__init__(name="webbrowser_tools", tools=tools)
15
+ super().__init__(name="webbrowser_tools", tools=tools, **kwargs)
15
16
 
16
17
  def open_page(self, url: str, new_window: bool = False):
17
18
  """Open a URL in a browser window
agno/tools/webex.py CHANGED
@@ -1,8 +1,8 @@
1
1
  import json
2
- import os
2
+ from os import getenv
3
3
  from typing import Any, List, Optional
4
4
 
5
- from agno.tools.toolkit import Toolkit
5
+ from agno.tools import Toolkit
6
6
  from agno.utils.log import logger
7
7
 
8
8
  try:
@@ -14,19 +14,23 @@ except ImportError:
14
14
 
15
15
  class WebexTools(Toolkit):
16
16
  def __init__(
17
- self, send_message: bool = True, list_rooms: bool = True, access_token: Optional[str] = None, **kwargs
17
+ self,
18
+ enable_send_message: bool = True,
19
+ enable_list_rooms: bool = True,
20
+ all: bool = False,
21
+ access_token: Optional[str] = None,
22
+ **kwargs,
18
23
  ):
19
- if access_token is None:
20
- access_token = os.getenv("WEBEX_ACCESS_TOKEN")
24
+ access_token = access_token or getenv("WEBEX_ACCESS_TOKEN")
21
25
  if access_token is None:
22
26
  raise ValueError("Webex access token is not set. Please set the WEBEX_ACCESS_TOKEN environment variable.")
23
27
 
24
28
  self.client = WebexAPI(access_token=access_token)
25
29
 
26
30
  tools: List[Any] = []
27
- if send_message:
31
+ if all or enable_send_message:
28
32
  tools.append(self.send_message)
29
- if list_rooms:
33
+ if all or enable_list_rooms:
30
34
  tools.append(self.list_rooms)
31
35
 
32
36
  super().__init__(name="webex", tools=tools, **kwargs)
agno/tools/website.py CHANGED
@@ -1,29 +1,29 @@
1
1
  import json
2
- from typing import Any, List, Optional, Union, cast
2
+ from typing import Any, List, Optional
3
3
 
4
- from agno.document import Document
5
- from agno.knowledge.combined import CombinedKnowledgeBase
6
- from agno.knowledge.website import WebsiteKnowledgeBase
4
+ from agno.knowledge.document import Document
5
+ from agno.knowledge.knowledge import Knowledge
7
6
  from agno.tools import Toolkit
8
7
  from agno.utils.log import log_debug
9
8
 
10
9
 
11
10
  class WebsiteTools(Toolkit):
12
- def __init__(self, knowledge_base: Optional[Union[WebsiteKnowledgeBase, CombinedKnowledgeBase]] = None, **kwargs):
13
- self.knowledge_base: Optional[Union[WebsiteKnowledgeBase, CombinedKnowledgeBase]] = knowledge_base
11
+ def __init__(
12
+ self,
13
+ knowledge: Optional[Knowledge] = None,
14
+ **kwargs,
15
+ ):
16
+ self.knowledge: Optional[Knowledge] = knowledge
14
17
 
15
18
  tools: List[Any] = []
16
- if self.knowledge_base is not None:
17
- if isinstance(self.knowledge_base, WebsiteKnowledgeBase):
18
- tools.append(self.add_website_to_knowledge_base)
19
- elif isinstance(self.knowledge_base, CombinedKnowledgeBase):
20
- tools.append(self.add_website_to_combined_knowledge_base)
19
+ if self.knowledge is not None:
20
+ tools.append(self.add_website_to_knowledge)
21
21
  else:
22
22
  tools.append(self.read_url)
23
23
 
24
24
  super().__init__(name="website_tools", tools=tools, **kwargs)
25
25
 
26
- def add_website_to_knowledge_base(self, url: str) -> str:
26
+ def add_website_to_knowledge(self, url: str) -> str:
27
27
  """This function adds a websites content to the knowledge base.
28
28
  NOTE: The website must start with https:// and should be a valid website.
29
29
 
@@ -32,42 +32,11 @@ class WebsiteTools(Toolkit):
32
32
  :param url: The url of the website to add.
33
33
  :return: 'Success' if the website was added to the knowledge base.
34
34
  """
35
- self.knowledge_base = cast(WebsiteKnowledgeBase, self.knowledge_base)
36
- if self.knowledge_base is None:
35
+ if self.knowledge is None:
37
36
  return "Knowledge base not provided"
38
37
 
39
38
  log_debug(f"Adding to knowledge base: {url}")
40
- self.knowledge_base.urls.append(url)
41
- log_debug("Loading knowledge base.")
42
- self.knowledge_base.load(recreate=False)
43
- return "Success"
44
-
45
- def add_website_to_combined_knowledge_base(self, url: str) -> str:
46
- """This function adds a websites content to the knowledge base.
47
- NOTE: The website must start with https:// and should be a valid website.
48
-
49
- USE THIS FUNCTION TO GET INFORMATION ABOUT PRODUCTS FROM THE INTERNET.
50
-
51
- :param url: The url of the website to add.
52
- :return: 'Success' if the website was added to the knowledge base.
53
- """
54
- self.knowledge_base = cast(CombinedKnowledgeBase, self.knowledge_base)
55
- if self.knowledge_base is None:
56
- return "Knowledge base not provided"
57
-
58
- website_knowledge_base = None
59
- for knowledge_base in self.knowledge_base.sources:
60
- if isinstance(knowledge_base, WebsiteKnowledgeBase):
61
- website_knowledge_base = knowledge_base
62
- break
63
-
64
- if website_knowledge_base is None:
65
- return "Website knowledge base not found"
66
-
67
- log_debug(f"Adding to knowledge base: {url}")
68
- website_knowledge_base.urls.append(url)
69
- log_debug("Loading knowledge base.")
70
- website_knowledge_base.load(recreate=False)
39
+ self.knowledge.add_content(url=url)
71
40
  return "Success"
72
41
 
73
42
  def read_url(self, url: str) -> str:
@@ -76,7 +45,7 @@ class WebsiteTools(Toolkit):
76
45
  :param url: The url of the website to read.
77
46
  :return: Relevant documents from the website.
78
47
  """
79
- from agno.document.reader.website_reader import WebsiteReader
48
+ from agno.knowledge.reader.website_reader import WebsiteReader
80
49
 
81
50
  website = WebsiteReader()
82
51
 
agno/tools/webtools.py CHANGED
@@ -9,12 +9,20 @@ class WebTools(Toolkit):
9
9
  A toolkit for working with web-related tools.
10
10
  """
11
11
 
12
- def __init__(self, retries: int = 3):
13
- super().__init__(name="web_tools")
14
-
12
+ def __init__(
13
+ self,
14
+ retries: int = 3,
15
+ enable_expand_url: bool = True,
16
+ all: bool = False,
17
+ **kwargs,
18
+ ):
15
19
  self.retries = retries
16
20
 
17
- self.register(self.expand_url)
21
+ tools = []
22
+ if all or enable_expand_url:
23
+ tools.append(self.expand_url)
24
+
25
+ super().__init__(name="web_tools", tools=tools, **kwargs)
18
26
 
19
27
  def expand_url(self, url: str) -> str:
20
28
  """
agno/tools/whatsapp.py CHANGED
@@ -1,4 +1,4 @@
1
- import os
1
+ from os import getenv
2
2
  from typing import Any, Dict, List, Optional
3
3
 
4
4
  import httpx
@@ -30,25 +30,21 @@ class WhatsAppTools(Toolkit):
30
30
  async_mode: Whether to use async methods (default: False)
31
31
  """
32
32
  # Core credentials
33
- self.access_token = access_token or os.getenv("WHATSAPP_ACCESS_TOKEN") or os.getenv("WHATSAPP_ACCESS_TOKEN")
33
+ self.access_token = access_token or getenv("WHATSAPP_ACCESS_TOKEN")
34
34
  if not self.access_token:
35
35
  logger.error("WHATSAPP_ACCESS_TOKEN not set. Please set the WHATSAPP_ACCESS_TOKEN environment variable.")
36
36
 
37
- self.phone_number_id = (
38
- phone_number_id or os.getenv("WHATSAPP_PHONE_NUMBER_ID") or os.getenv("WHATSAPP_PHONE_NUMBER_ID")
39
- )
37
+ self.phone_number_id = phone_number_id or getenv("WHATSAPP_PHONE_NUMBER_ID")
40
38
  if not self.phone_number_id:
41
39
  logger.error(
42
40
  "WHATSAPP_PHONE_NUMBER_ID not set. Please set the WHATSAPP_PHONE_NUMBER_ID environment variable."
43
41
  )
44
42
 
45
43
  # Optional default recipient
46
- self.default_recipient = (
47
- recipient_waid or os.getenv("WHATSAPP_RECIPIENT_WAID") or os.getenv("WHATSAPP_RECIPIENT_WAID")
48
- )
44
+ self.default_recipient = recipient_waid or getenv("WHATSAPP_RECIPIENT_WAID")
49
45
 
50
46
  # API version and mode
51
- self.version = version or os.getenv("WHATSAPP_VERSION") or os.getenv("WHATSAPP_VERSION", "v22.0")
47
+ self.version = version or getenv("WHATSAPP_VERSION", "v22.0")
52
48
  self.async_mode = async_mode
53
49
 
54
50
  tools: List[Any] = []