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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (580) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +19 -27
  3. agno/agent/agent.py +2778 -4123
  4. agno/api/agent.py +9 -65
  5. agno/api/api.py +5 -46
  6. agno/api/evals.py +6 -17
  7. agno/api/os.py +17 -0
  8. agno/api/routes.py +6 -41
  9. agno/api/schemas/__init__.py +9 -0
  10. agno/api/schemas/agent.py +5 -21
  11. agno/api/schemas/evals.py +7 -16
  12. agno/api/schemas/os.py +14 -0
  13. agno/api/schemas/team.py +5 -21
  14. agno/api/schemas/utils.py +21 -0
  15. agno/api/schemas/workflows.py +11 -7
  16. agno/api/settings.py +53 -0
  17. agno/api/team.py +9 -64
  18. agno/api/workflow.py +28 -0
  19. agno/cloud/aws/base.py +214 -0
  20. agno/cloud/aws/s3/__init__.py +2 -0
  21. agno/cloud/aws/s3/api_client.py +43 -0
  22. agno/cloud/aws/s3/bucket.py +195 -0
  23. agno/cloud/aws/s3/object.py +57 -0
  24. agno/db/__init__.py +24 -0
  25. agno/db/base.py +245 -0
  26. agno/db/dynamo/__init__.py +3 -0
  27. agno/db/dynamo/dynamo.py +1749 -0
  28. agno/db/dynamo/schemas.py +278 -0
  29. agno/db/dynamo/utils.py +684 -0
  30. agno/db/firestore/__init__.py +3 -0
  31. agno/db/firestore/firestore.py +1438 -0
  32. agno/db/firestore/schemas.py +130 -0
  33. agno/db/firestore/utils.py +278 -0
  34. agno/db/gcs_json/__init__.py +3 -0
  35. agno/db/gcs_json/gcs_json_db.py +1001 -0
  36. agno/db/gcs_json/utils.py +194 -0
  37. agno/db/in_memory/__init__.py +3 -0
  38. agno/db/in_memory/in_memory_db.py +888 -0
  39. agno/db/in_memory/utils.py +172 -0
  40. agno/db/json/__init__.py +3 -0
  41. agno/db/json/json_db.py +1051 -0
  42. agno/db/json/utils.py +196 -0
  43. agno/db/migrations/v1_to_v2.py +162 -0
  44. agno/db/mongo/__init__.py +3 -0
  45. agno/db/mongo/mongo.py +1417 -0
  46. agno/db/mongo/schemas.py +77 -0
  47. agno/db/mongo/utils.py +204 -0
  48. agno/db/mysql/__init__.py +3 -0
  49. agno/db/mysql/mysql.py +1719 -0
  50. agno/db/mysql/schemas.py +124 -0
  51. agno/db/mysql/utils.py +298 -0
  52. agno/db/postgres/__init__.py +3 -0
  53. agno/db/postgres/postgres.py +1720 -0
  54. agno/db/postgres/schemas.py +124 -0
  55. agno/db/postgres/utils.py +281 -0
  56. agno/db/redis/__init__.py +3 -0
  57. agno/db/redis/redis.py +1371 -0
  58. agno/db/redis/schemas.py +109 -0
  59. agno/db/redis/utils.py +288 -0
  60. agno/db/schemas/__init__.py +3 -0
  61. agno/db/schemas/evals.py +33 -0
  62. agno/db/schemas/knowledge.py +40 -0
  63. agno/db/schemas/memory.py +46 -0
  64. agno/db/singlestore/__init__.py +3 -0
  65. agno/db/singlestore/schemas.py +116 -0
  66. agno/db/singlestore/singlestore.py +1722 -0
  67. agno/db/singlestore/utils.py +327 -0
  68. agno/db/sqlite/__init__.py +3 -0
  69. agno/db/sqlite/schemas.py +119 -0
  70. agno/db/sqlite/sqlite.py +1680 -0
  71. agno/db/sqlite/utils.py +269 -0
  72. agno/db/utils.py +88 -0
  73. agno/eval/__init__.py +14 -0
  74. agno/eval/accuracy.py +142 -43
  75. agno/eval/performance.py +88 -23
  76. agno/eval/reliability.py +73 -20
  77. agno/eval/utils.py +23 -13
  78. agno/integrations/discord/__init__.py +3 -0
  79. agno/{app → integrations}/discord/client.py +10 -10
  80. agno/knowledge/__init__.py +2 -2
  81. agno/{document → knowledge}/chunking/agentic.py +2 -2
  82. agno/{document → knowledge}/chunking/document.py +2 -2
  83. agno/{document → knowledge}/chunking/fixed.py +3 -3
  84. agno/{document → knowledge}/chunking/markdown.py +2 -2
  85. agno/{document → knowledge}/chunking/recursive.py +2 -2
  86. agno/{document → knowledge}/chunking/row.py +2 -2
  87. agno/knowledge/chunking/semantic.py +59 -0
  88. agno/knowledge/chunking/strategy.py +121 -0
  89. agno/knowledge/content.py +74 -0
  90. agno/knowledge/document/__init__.py +5 -0
  91. agno/{document → knowledge/document}/base.py +12 -2
  92. agno/knowledge/embedder/__init__.py +5 -0
  93. agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
  94. agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
  95. agno/{embedder → knowledge/embedder}/base.py +6 -0
  96. agno/{embedder → knowledge/embedder}/cohere.py +72 -1
  97. agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
  98. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  99. agno/{embedder → knowledge/embedder}/google.py +74 -1
  100. agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
  101. agno/{embedder → knowledge/embedder}/jina.py +48 -2
  102. agno/knowledge/embedder/langdb.py +22 -0
  103. agno/knowledge/embedder/mistral.py +139 -0
  104. agno/{embedder → knowledge/embedder}/nebius.py +1 -1
  105. agno/{embedder → knowledge/embedder}/ollama.py +54 -3
  106. agno/knowledge/embedder/openai.py +223 -0
  107. agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
  108. agno/{embedder → knowledge/embedder}/together.py +1 -1
  109. agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
  110. agno/knowledge/knowledge.py +1515 -0
  111. agno/knowledge/reader/__init__.py +7 -0
  112. agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
  113. agno/knowledge/reader/base.py +88 -0
  114. agno/{document → knowledge}/reader/csv_reader.py +68 -15
  115. agno/knowledge/reader/docx_reader.py +83 -0
  116. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  117. agno/knowledge/reader/gcs_reader.py +67 -0
  118. agno/{document → knowledge}/reader/json_reader.py +30 -9
  119. agno/{document → knowledge}/reader/markdown_reader.py +36 -9
  120. agno/{document → knowledge}/reader/pdf_reader.py +79 -21
  121. agno/knowledge/reader/reader_factory.py +275 -0
  122. agno/knowledge/reader/s3_reader.py +171 -0
  123. agno/{document → knowledge}/reader/text_reader.py +31 -10
  124. agno/knowledge/reader/url_reader.py +84 -0
  125. agno/knowledge/reader/web_search_reader.py +389 -0
  126. agno/{document → knowledge}/reader/website_reader.py +37 -10
  127. agno/knowledge/reader/wikipedia_reader.py +59 -0
  128. agno/knowledge/reader/youtube_reader.py +78 -0
  129. agno/knowledge/remote_content/remote_content.py +88 -0
  130. agno/{reranker → knowledge/reranker}/base.py +1 -1
  131. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  132. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  133. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  134. agno/knowledge/types.py +30 -0
  135. agno/knowledge/utils.py +169 -0
  136. agno/memory/__init__.py +2 -10
  137. agno/memory/manager.py +1003 -148
  138. agno/models/aimlapi/__init__.py +2 -2
  139. agno/models/aimlapi/aimlapi.py +6 -6
  140. agno/models/anthropic/claude.py +129 -82
  141. agno/models/aws/bedrock.py +107 -175
  142. agno/models/aws/claude.py +64 -18
  143. agno/models/azure/ai_foundry.py +73 -23
  144. agno/models/base.py +347 -287
  145. agno/models/cerebras/cerebras.py +84 -27
  146. agno/models/cohere/chat.py +106 -98
  147. agno/models/google/gemini.py +100 -42
  148. agno/models/groq/groq.py +97 -35
  149. agno/models/huggingface/huggingface.py +92 -27
  150. agno/models/ibm/watsonx.py +72 -13
  151. agno/models/litellm/chat.py +85 -13
  152. agno/models/message.py +38 -144
  153. agno/models/meta/llama.py +85 -49
  154. agno/models/metrics.py +120 -0
  155. agno/models/mistral/mistral.py +90 -21
  156. agno/models/ollama/__init__.py +0 -2
  157. agno/models/ollama/chat.py +84 -46
  158. agno/models/openai/chat.py +121 -23
  159. agno/models/openai/responses.py +178 -105
  160. agno/models/perplexity/perplexity.py +26 -2
  161. agno/models/portkey/portkey.py +0 -7
  162. agno/models/response.py +14 -8
  163. agno/models/utils.py +20 -0
  164. agno/models/vercel/__init__.py +2 -2
  165. agno/models/vercel/v0.py +1 -1
  166. agno/models/vllm/__init__.py +2 -2
  167. agno/models/vllm/vllm.py +3 -3
  168. agno/models/xai/xai.py +10 -10
  169. agno/os/__init__.py +3 -0
  170. agno/os/app.py +393 -0
  171. agno/os/auth.py +47 -0
  172. agno/os/config.py +103 -0
  173. agno/os/interfaces/agui/__init__.py +3 -0
  174. agno/os/interfaces/agui/agui.py +31 -0
  175. agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
  176. agno/{app → os/interfaces}/agui/utils.py +65 -28
  177. agno/os/interfaces/base.py +21 -0
  178. agno/os/interfaces/slack/__init__.py +3 -0
  179. agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
  180. agno/os/interfaces/slack/slack.py +33 -0
  181. agno/os/interfaces/whatsapp/__init__.py +3 -0
  182. agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
  183. agno/os/interfaces/whatsapp/whatsapp.py +30 -0
  184. agno/os/router.py +843 -0
  185. agno/os/routers/__init__.py +3 -0
  186. agno/os/routers/evals/__init__.py +3 -0
  187. agno/os/routers/evals/evals.py +204 -0
  188. agno/os/routers/evals/schemas.py +142 -0
  189. agno/os/routers/evals/utils.py +161 -0
  190. agno/os/routers/knowledge/__init__.py +3 -0
  191. agno/os/routers/knowledge/knowledge.py +413 -0
  192. agno/os/routers/knowledge/schemas.py +118 -0
  193. agno/os/routers/memory/__init__.py +3 -0
  194. agno/os/routers/memory/memory.py +179 -0
  195. agno/os/routers/memory/schemas.py +58 -0
  196. agno/os/routers/metrics/__init__.py +3 -0
  197. agno/os/routers/metrics/metrics.py +58 -0
  198. agno/os/routers/metrics/schemas.py +47 -0
  199. agno/os/routers/session/__init__.py +3 -0
  200. agno/os/routers/session/session.py +163 -0
  201. agno/os/schema.py +892 -0
  202. agno/{app/playground → os}/settings.py +8 -15
  203. agno/os/utils.py +270 -0
  204. agno/reasoning/azure_ai_foundry.py +4 -4
  205. agno/reasoning/deepseek.py +4 -4
  206. agno/reasoning/default.py +6 -11
  207. agno/reasoning/groq.py +4 -4
  208. agno/reasoning/helpers.py +4 -6
  209. agno/reasoning/ollama.py +4 -4
  210. agno/reasoning/openai.py +4 -4
  211. agno/run/{response.py → agent.py} +144 -72
  212. agno/run/base.py +44 -58
  213. agno/run/cancel.py +83 -0
  214. agno/run/team.py +133 -77
  215. agno/run/workflow.py +537 -12
  216. agno/session/__init__.py +10 -0
  217. agno/session/agent.py +244 -0
  218. agno/session/summary.py +225 -0
  219. agno/session/team.py +262 -0
  220. agno/{storage/session/v2 → session}/workflow.py +47 -24
  221. agno/team/__init__.py +15 -16
  222. agno/team/team.py +2961 -4253
  223. agno/tools/agentql.py +14 -5
  224. agno/tools/airflow.py +9 -4
  225. agno/tools/api.py +7 -3
  226. agno/tools/apify.py +2 -46
  227. agno/tools/arxiv.py +8 -3
  228. agno/tools/aws_lambda.py +7 -5
  229. agno/tools/aws_ses.py +7 -1
  230. agno/tools/baidusearch.py +4 -1
  231. agno/tools/bitbucket.py +4 -4
  232. agno/tools/brandfetch.py +14 -11
  233. agno/tools/bravesearch.py +4 -1
  234. agno/tools/brightdata.py +42 -22
  235. agno/tools/browserbase.py +13 -4
  236. agno/tools/calcom.py +12 -10
  237. agno/tools/calculator.py +10 -27
  238. agno/tools/cartesia.py +18 -13
  239. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  240. agno/tools/confluence.py +8 -8
  241. agno/tools/crawl4ai.py +7 -1
  242. agno/tools/csv_toolkit.py +9 -8
  243. agno/tools/dalle.py +18 -11
  244. agno/tools/daytona.py +13 -16
  245. agno/tools/decorator.py +6 -3
  246. agno/tools/desi_vocal.py +16 -7
  247. agno/tools/discord.py +11 -8
  248. agno/tools/docker.py +30 -42
  249. agno/tools/duckdb.py +34 -53
  250. agno/tools/duckduckgo.py +8 -7
  251. agno/tools/e2b.py +61 -61
  252. agno/tools/eleven_labs.py +35 -28
  253. agno/tools/email.py +4 -1
  254. agno/tools/evm.py +7 -1
  255. agno/tools/exa.py +19 -14
  256. agno/tools/fal.py +29 -29
  257. agno/tools/file.py +9 -8
  258. agno/tools/financial_datasets.py +25 -44
  259. agno/tools/firecrawl.py +22 -22
  260. agno/tools/function.py +68 -17
  261. agno/tools/giphy.py +22 -10
  262. agno/tools/github.py +48 -126
  263. agno/tools/gmail.py +45 -61
  264. agno/tools/google_bigquery.py +7 -6
  265. agno/tools/google_maps.py +11 -26
  266. agno/tools/googlesearch.py +7 -2
  267. agno/tools/googlesheets.py +21 -17
  268. agno/tools/hackernews.py +9 -5
  269. agno/tools/jina.py +5 -4
  270. agno/tools/jira.py +18 -9
  271. agno/tools/knowledge.py +31 -32
  272. agno/tools/linear.py +18 -33
  273. agno/tools/linkup.py +5 -1
  274. agno/tools/local_file_system.py +8 -5
  275. agno/tools/lumalab.py +31 -19
  276. agno/tools/mem0.py +18 -12
  277. agno/tools/memori.py +14 -10
  278. agno/tools/mlx_transcribe.py +3 -2
  279. agno/tools/models/azure_openai.py +32 -14
  280. agno/tools/models/gemini.py +58 -31
  281. agno/tools/models/groq.py +29 -20
  282. agno/tools/models/nebius.py +27 -11
  283. agno/tools/models_labs.py +39 -15
  284. agno/tools/moviepy_video.py +7 -6
  285. agno/tools/neo4j.py +10 -8
  286. agno/tools/newspaper.py +7 -2
  287. agno/tools/newspaper4k.py +8 -3
  288. agno/tools/openai.py +57 -26
  289. agno/tools/openbb.py +12 -11
  290. agno/tools/opencv.py +62 -46
  291. agno/tools/openweather.py +14 -12
  292. agno/tools/pandas.py +11 -3
  293. agno/tools/postgres.py +4 -12
  294. agno/tools/pubmed.py +4 -1
  295. agno/tools/python.py +9 -22
  296. agno/tools/reasoning.py +35 -27
  297. agno/tools/reddit.py +11 -26
  298. agno/tools/replicate.py +54 -41
  299. agno/tools/resend.py +4 -1
  300. agno/tools/scrapegraph.py +15 -14
  301. agno/tools/searxng.py +10 -23
  302. agno/tools/serpapi.py +6 -3
  303. agno/tools/serper.py +13 -4
  304. agno/tools/shell.py +9 -2
  305. agno/tools/slack.py +12 -11
  306. agno/tools/sleep.py +3 -2
  307. agno/tools/spider.py +24 -4
  308. agno/tools/sql.py +7 -6
  309. agno/tools/tavily.py +6 -4
  310. agno/tools/telegram.py +12 -4
  311. agno/tools/todoist.py +11 -31
  312. agno/tools/toolkit.py +1 -1
  313. agno/tools/trafilatura.py +22 -6
  314. agno/tools/trello.py +9 -22
  315. agno/tools/twilio.py +10 -3
  316. agno/tools/user_control_flow.py +6 -1
  317. agno/tools/valyu.py +34 -5
  318. agno/tools/visualization.py +19 -28
  319. agno/tools/webbrowser.py +4 -3
  320. agno/tools/webex.py +11 -7
  321. agno/tools/website.py +15 -46
  322. agno/tools/webtools.py +12 -4
  323. agno/tools/whatsapp.py +5 -9
  324. agno/tools/wikipedia.py +20 -13
  325. agno/tools/x.py +14 -13
  326. agno/tools/yfinance.py +13 -40
  327. agno/tools/youtube.py +26 -20
  328. agno/tools/zendesk.py +7 -2
  329. agno/tools/zep.py +10 -7
  330. agno/tools/zoom.py +10 -9
  331. agno/utils/common.py +1 -19
  332. agno/utils/events.py +95 -118
  333. agno/utils/knowledge.py +29 -0
  334. agno/utils/log.py +2 -2
  335. agno/utils/mcp.py +11 -5
  336. agno/utils/media.py +39 -0
  337. agno/utils/message.py +12 -1
  338. agno/utils/models/claude.py +6 -4
  339. agno/utils/models/mistral.py +8 -7
  340. agno/utils/models/schema_utils.py +3 -3
  341. agno/utils/pprint.py +33 -32
  342. agno/utils/print_response/agent.py +779 -0
  343. agno/utils/print_response/team.py +1565 -0
  344. agno/utils/print_response/workflow.py +1451 -0
  345. agno/utils/prompts.py +14 -14
  346. agno/utils/reasoning.py +87 -0
  347. agno/utils/response.py +42 -42
  348. agno/utils/string.py +8 -22
  349. agno/utils/team.py +50 -0
  350. agno/utils/timer.py +2 -2
  351. agno/vectordb/base.py +33 -21
  352. agno/vectordb/cassandra/cassandra.py +287 -23
  353. agno/vectordb/chroma/chromadb.py +482 -59
  354. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  355. agno/vectordb/couchbase/couchbase.py +309 -29
  356. agno/vectordb/lancedb/lance_db.py +360 -21
  357. agno/vectordb/langchaindb/__init__.py +5 -0
  358. agno/vectordb/langchaindb/langchaindb.py +145 -0
  359. agno/vectordb/lightrag/__init__.py +5 -0
  360. agno/vectordb/lightrag/lightrag.py +374 -0
  361. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  362. agno/vectordb/milvus/milvus.py +242 -32
  363. agno/vectordb/mongodb/mongodb.py +200 -24
  364. agno/vectordb/pgvector/pgvector.py +319 -37
  365. agno/vectordb/pineconedb/pineconedb.py +221 -27
  366. agno/vectordb/qdrant/qdrant.py +334 -14
  367. agno/vectordb/singlestore/singlestore.py +286 -29
  368. agno/vectordb/surrealdb/surrealdb.py +187 -7
  369. agno/vectordb/upstashdb/upstashdb.py +342 -26
  370. agno/vectordb/weaviate/weaviate.py +227 -165
  371. agno/workflow/__init__.py +17 -13
  372. agno/workflow/{v2/condition.py → condition.py} +135 -32
  373. agno/workflow/{v2/loop.py → loop.py} +115 -28
  374. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  375. agno/workflow/{v2/router.py → router.py} +133 -32
  376. agno/workflow/{v2/step.py → step.py} +200 -42
  377. agno/workflow/{v2/steps.py → steps.py} +147 -66
  378. agno/workflow/types.py +482 -0
  379. agno/workflow/workflow.py +2394 -696
  380. agno-2.0.0a1.dist-info/METADATA +355 -0
  381. agno-2.0.0a1.dist-info/RECORD +514 -0
  382. agno/agent/metrics.py +0 -107
  383. agno/api/app.py +0 -35
  384. agno/api/playground.py +0 -92
  385. agno/api/schemas/app.py +0 -12
  386. agno/api/schemas/playground.py +0 -22
  387. agno/api/schemas/user.py +0 -35
  388. agno/api/schemas/workspace.py +0 -46
  389. agno/api/user.py +0 -160
  390. agno/api/workflows.py +0 -33
  391. agno/api/workspace.py +0 -175
  392. agno/app/agui/__init__.py +0 -3
  393. agno/app/agui/app.py +0 -17
  394. agno/app/agui/sync_router.py +0 -120
  395. agno/app/base.py +0 -186
  396. agno/app/discord/__init__.py +0 -3
  397. agno/app/fastapi/__init__.py +0 -3
  398. agno/app/fastapi/app.py +0 -107
  399. agno/app/fastapi/async_router.py +0 -457
  400. agno/app/fastapi/sync_router.py +0 -448
  401. agno/app/playground/app.py +0 -228
  402. agno/app/playground/async_router.py +0 -1050
  403. agno/app/playground/deploy.py +0 -249
  404. agno/app/playground/operator.py +0 -183
  405. agno/app/playground/schemas.py +0 -220
  406. agno/app/playground/serve.py +0 -55
  407. agno/app/playground/sync_router.py +0 -1042
  408. agno/app/playground/utils.py +0 -46
  409. agno/app/settings.py +0 -15
  410. agno/app/slack/__init__.py +0 -3
  411. agno/app/slack/app.py +0 -19
  412. agno/app/slack/sync_router.py +0 -92
  413. agno/app/utils.py +0 -54
  414. agno/app/whatsapp/__init__.py +0 -3
  415. agno/app/whatsapp/app.py +0 -15
  416. agno/app/whatsapp/sync_router.py +0 -197
  417. agno/cli/auth_server.py +0 -249
  418. agno/cli/config.py +0 -274
  419. agno/cli/console.py +0 -88
  420. agno/cli/credentials.py +0 -23
  421. agno/cli/entrypoint.py +0 -571
  422. agno/cli/operator.py +0 -357
  423. agno/cli/settings.py +0 -96
  424. agno/cli/ws/ws_cli.py +0 -817
  425. agno/constants.py +0 -13
  426. agno/document/__init__.py +0 -5
  427. agno/document/chunking/semantic.py +0 -45
  428. agno/document/chunking/strategy.py +0 -31
  429. agno/document/reader/__init__.py +0 -5
  430. agno/document/reader/base.py +0 -47
  431. agno/document/reader/docx_reader.py +0 -60
  432. agno/document/reader/gcs/pdf_reader.py +0 -44
  433. agno/document/reader/s3/pdf_reader.py +0 -59
  434. agno/document/reader/s3/text_reader.py +0 -63
  435. agno/document/reader/url_reader.py +0 -59
  436. agno/document/reader/youtube_reader.py +0 -58
  437. agno/embedder/__init__.py +0 -5
  438. agno/embedder/langdb.py +0 -80
  439. agno/embedder/mistral.py +0 -82
  440. agno/embedder/openai.py +0 -78
  441. agno/file/__init__.py +0 -5
  442. agno/file/file.py +0 -16
  443. agno/file/local/csv.py +0 -32
  444. agno/file/local/txt.py +0 -19
  445. agno/infra/app.py +0 -240
  446. agno/infra/base.py +0 -144
  447. agno/infra/context.py +0 -20
  448. agno/infra/db_app.py +0 -52
  449. agno/infra/resource.py +0 -205
  450. agno/infra/resources.py +0 -55
  451. agno/knowledge/agent.py +0 -702
  452. agno/knowledge/arxiv.py +0 -33
  453. agno/knowledge/combined.py +0 -36
  454. agno/knowledge/csv.py +0 -144
  455. agno/knowledge/csv_url.py +0 -124
  456. agno/knowledge/document.py +0 -223
  457. agno/knowledge/docx.py +0 -137
  458. agno/knowledge/firecrawl.py +0 -34
  459. agno/knowledge/gcs/__init__.py +0 -0
  460. agno/knowledge/gcs/base.py +0 -39
  461. agno/knowledge/gcs/pdf.py +0 -125
  462. agno/knowledge/json.py +0 -137
  463. agno/knowledge/langchain.py +0 -71
  464. agno/knowledge/light_rag.py +0 -273
  465. agno/knowledge/llamaindex.py +0 -66
  466. agno/knowledge/markdown.py +0 -154
  467. agno/knowledge/pdf.py +0 -164
  468. agno/knowledge/pdf_bytes.py +0 -42
  469. agno/knowledge/pdf_url.py +0 -148
  470. agno/knowledge/s3/__init__.py +0 -0
  471. agno/knowledge/s3/base.py +0 -64
  472. agno/knowledge/s3/pdf.py +0 -33
  473. agno/knowledge/s3/text.py +0 -34
  474. agno/knowledge/text.py +0 -141
  475. agno/knowledge/url.py +0 -46
  476. agno/knowledge/website.py +0 -179
  477. agno/knowledge/wikipedia.py +0 -32
  478. agno/knowledge/youtube.py +0 -35
  479. agno/memory/agent.py +0 -423
  480. agno/memory/classifier.py +0 -104
  481. agno/memory/db/__init__.py +0 -5
  482. agno/memory/db/base.py +0 -42
  483. agno/memory/db/mongodb.py +0 -189
  484. agno/memory/db/postgres.py +0 -203
  485. agno/memory/db/sqlite.py +0 -193
  486. agno/memory/memory.py +0 -22
  487. agno/memory/row.py +0 -36
  488. agno/memory/summarizer.py +0 -201
  489. agno/memory/summary.py +0 -19
  490. agno/memory/team.py +0 -415
  491. agno/memory/v2/__init__.py +0 -2
  492. agno/memory/v2/db/__init__.py +0 -1
  493. agno/memory/v2/db/base.py +0 -42
  494. agno/memory/v2/db/firestore.py +0 -339
  495. agno/memory/v2/db/mongodb.py +0 -196
  496. agno/memory/v2/db/postgres.py +0 -214
  497. agno/memory/v2/db/redis.py +0 -187
  498. agno/memory/v2/db/schema.py +0 -54
  499. agno/memory/v2/db/sqlite.py +0 -209
  500. agno/memory/v2/manager.py +0 -437
  501. agno/memory/v2/memory.py +0 -1097
  502. agno/memory/v2/schema.py +0 -55
  503. agno/memory/v2/summarizer.py +0 -215
  504. agno/memory/workflow.py +0 -38
  505. agno/models/ollama/tools.py +0 -430
  506. agno/models/qwen/__init__.py +0 -5
  507. agno/playground/__init__.py +0 -10
  508. agno/playground/deploy.py +0 -3
  509. agno/playground/playground.py +0 -3
  510. agno/playground/serve.py +0 -3
  511. agno/playground/settings.py +0 -3
  512. agno/reranker/__init__.py +0 -0
  513. agno/run/v2/__init__.py +0 -0
  514. agno/run/v2/workflow.py +0 -567
  515. agno/storage/__init__.py +0 -0
  516. agno/storage/agent/__init__.py +0 -0
  517. agno/storage/agent/dynamodb.py +0 -1
  518. agno/storage/agent/json.py +0 -1
  519. agno/storage/agent/mongodb.py +0 -1
  520. agno/storage/agent/postgres.py +0 -1
  521. agno/storage/agent/singlestore.py +0 -1
  522. agno/storage/agent/sqlite.py +0 -1
  523. agno/storage/agent/yaml.py +0 -1
  524. agno/storage/base.py +0 -60
  525. agno/storage/dynamodb.py +0 -673
  526. agno/storage/firestore.py +0 -297
  527. agno/storage/gcs_json.py +0 -261
  528. agno/storage/in_memory.py +0 -234
  529. agno/storage/json.py +0 -237
  530. agno/storage/mongodb.py +0 -328
  531. agno/storage/mysql.py +0 -685
  532. agno/storage/postgres.py +0 -682
  533. agno/storage/redis.py +0 -336
  534. agno/storage/session/__init__.py +0 -16
  535. agno/storage/session/agent.py +0 -64
  536. agno/storage/session/team.py +0 -63
  537. agno/storage/session/v2/__init__.py +0 -5
  538. agno/storage/session/workflow.py +0 -61
  539. agno/storage/singlestore.py +0 -606
  540. agno/storage/sqlite.py +0 -646
  541. agno/storage/workflow/__init__.py +0 -0
  542. agno/storage/workflow/mongodb.py +0 -1
  543. agno/storage/workflow/postgres.py +0 -1
  544. agno/storage/workflow/sqlite.py +0 -1
  545. agno/storage/yaml.py +0 -241
  546. agno/tools/thinking.py +0 -73
  547. agno/utils/defaults.py +0 -57
  548. agno/utils/filesystem.py +0 -39
  549. agno/utils/git.py +0 -52
  550. agno/utils/json_io.py +0 -30
  551. agno/utils/load_env.py +0 -19
  552. agno/utils/py_io.py +0 -19
  553. agno/utils/pyproject.py +0 -18
  554. agno/utils/resource_filter.py +0 -31
  555. agno/workflow/v2/__init__.py +0 -21
  556. agno/workflow/v2/types.py +0 -357
  557. agno/workflow/v2/workflow.py +0 -3312
  558. agno/workspace/__init__.py +0 -0
  559. agno/workspace/config.py +0 -325
  560. agno/workspace/enums.py +0 -6
  561. agno/workspace/helpers.py +0 -52
  562. agno/workspace/operator.py +0 -757
  563. agno/workspace/settings.py +0 -158
  564. agno-1.8.1.dist-info/METADATA +0 -982
  565. agno-1.8.1.dist-info/RECORD +0 -566
  566. agno-1.8.1.dist-info/entry_points.txt +0 -3
  567. /agno/{app → db/migrations}/__init__.py +0 -0
  568. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  569. /agno/{cli → integrations}/__init__.py +0 -0
  570. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  571. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  572. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  573. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  574. /agno/{app → os/interfaces}/slack/security.py +0 -0
  575. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  576. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  577. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  578. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/WHEEL +0 -0
  579. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/licenses/LICENSE +0 -0
  580. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/top_level.txt +0 -0
agno/tools/github.py CHANGED
@@ -7,7 +7,6 @@ from agno.utils.log import log_debug, logger
7
7
 
8
8
  try:
9
9
  from github import Auth, Github, GithubException
10
- from github.GithubObject import NotSet
11
10
 
12
11
  except ImportError:
13
12
  raise ImportError("`PyGithub` not installed. Please install using `pip install pygithub`")
@@ -18,45 +17,6 @@ class GithubTools(Toolkit):
18
17
  self,
19
18
  access_token: Optional[str] = None,
20
19
  base_url: Optional[str] = None,
21
- search_repositories: bool = True,
22
- list_repositories: bool = False,
23
- get_repository: bool = False,
24
- get_pull_request: bool = False,
25
- get_pull_request_changes: bool = False,
26
- create_issue: bool = False,
27
- create_repository: bool = False,
28
- delete_repository: bool = False,
29
- get_repository_languages: bool = False,
30
- list_branches: bool = False,
31
- get_pull_request_count: bool = False,
32
- get_repository_stars: bool = False,
33
- get_pull_requests: bool = False,
34
- get_pull_request_comments: bool = False,
35
- create_pull_request_comment: bool = False,
36
- edit_pull_request_comment: bool = False,
37
- get_pull_request_with_details: bool = False,
38
- get_repository_with_stats: bool = False,
39
- list_issues: bool = False,
40
- get_issue: bool = False,
41
- comment_on_issue: bool = False,
42
- close_issue: bool = False,
43
- reopen_issue: bool = False,
44
- assign_issue: bool = False,
45
- label_issue: bool = False,
46
- list_issue_comments: bool = False,
47
- edit_issue: bool = False,
48
- create_pull_request: bool = False,
49
- create_file: bool = False,
50
- get_file_content: bool = False,
51
- update_file: bool = True,
52
- delete_file: bool = False,
53
- get_directory_content: bool = False,
54
- get_branch_content: bool = False,
55
- create_branch: bool = False,
56
- set_default_branch: bool = False,
57
- search_code: bool = False,
58
- search_issues_and_prs: bool = False,
59
- create_review_request: bool = False,
60
20
  **kwargs,
61
21
  ):
62
22
  self.access_token = access_token or getenv("GITHUB_ACCESS_TOKEN")
@@ -64,85 +24,47 @@ class GithubTools(Toolkit):
64
24
 
65
25
  self.g = self.authenticate()
66
26
 
67
- tools: List[Any] = []
68
- if search_repositories:
69
- tools.append(self.search_repositories)
70
- if list_repositories:
71
- tools.append(self.list_repositories)
72
- if get_repository:
73
- tools.append(self.get_repository)
74
- if get_pull_request:
75
- tools.append(self.get_pull_request)
76
- if get_pull_request_changes:
77
- tools.append(self.get_pull_request_changes)
78
- if create_issue:
79
- tools.append(self.create_issue)
80
- if create_repository:
81
- tools.append(self.create_repository)
82
- if delete_repository:
83
- tools.append(self.delete_repository)
84
- if list_branches:
85
- tools.append(self.list_branches)
86
- if get_repository_languages:
87
- tools.append(self.get_repository_languages)
88
- if get_pull_request_count:
89
- tools.append(self.get_pull_request_count)
90
- if get_repository_stars:
91
- tools.append(self.get_repository_stars)
92
- if get_pull_requests:
93
- tools.append(self.get_pull_requests)
94
- if get_pull_request_comments:
95
- tools.append(self.get_pull_request_comments)
96
- if create_pull_request_comment:
97
- tools.append(self.create_pull_request_comment)
98
- if edit_pull_request_comment:
99
- tools.append(self.edit_pull_request_comment)
100
- if get_pull_request_with_details:
101
- tools.append(self.get_pull_request_with_details)
102
- if get_repository_with_stats:
103
- tools.append(self.get_repository_with_stats)
104
- if list_issues:
105
- tools.append(self.list_issues)
106
- if get_issue:
107
- tools.append(self.get_issue)
108
- if comment_on_issue:
109
- tools.append(self.comment_on_issue)
110
- if close_issue:
111
- tools.append(self.close_issue)
112
- if reopen_issue:
113
- tools.append(self.reopen_issue)
114
- if assign_issue:
115
- tools.append(self.assign_issue)
116
- if label_issue:
117
- tools.append(self.label_issue)
118
- if list_issue_comments:
119
- tools.append(self.list_issue_comments)
120
- if edit_issue:
121
- tools.append(self.edit_issue)
122
- if create_pull_request:
123
- tools.append(self.create_pull_request)
124
- if create_file:
125
- tools.append(self.create_file)
126
- if get_file_content:
127
- tools.append(self.get_file_content)
128
- if update_file:
129
- tools.append(self.update_file)
130
- if delete_file:
131
- tools.append(self.delete_file)
132
- if get_directory_content:
133
- tools.append(self.get_directory_content)
134
- if get_branch_content:
135
- tools.append(self.get_branch_content)
136
- if create_branch:
137
- tools.append(self.create_branch)
138
- if set_default_branch:
139
- tools.append(self.set_default_branch)
140
- if search_code:
141
- tools.append(self.search_code)
142
- if search_issues_and_prs:
143
- tools.append(self.search_issues_and_prs)
144
- if create_review_request:
145
- tools.append(self.create_review_request)
27
+ tools: List[Any] = [
28
+ self.search_repositories,
29
+ self.list_repositories,
30
+ self.get_repository,
31
+ self.get_pull_request,
32
+ self.get_pull_request_changes,
33
+ self.create_issue,
34
+ self.create_repository,
35
+ self.delete_repository,
36
+ self.list_branches,
37
+ self.get_repository_languages,
38
+ self.get_pull_request_count,
39
+ self.get_repository_stars,
40
+ self.get_pull_requests,
41
+ self.get_pull_request_comments,
42
+ self.create_pull_request_comment,
43
+ self.edit_pull_request_comment,
44
+ self.get_pull_request_with_details,
45
+ self.get_repository_with_stats,
46
+ self.list_issues,
47
+ self.get_issue,
48
+ self.comment_on_issue,
49
+ self.close_issue,
50
+ self.reopen_issue,
51
+ self.assign_issue,
52
+ self.label_issue,
53
+ self.list_issue_comments,
54
+ self.edit_issue,
55
+ self.create_pull_request,
56
+ self.create_file,
57
+ self.get_file_content,
58
+ self.update_file,
59
+ self.delete_file,
60
+ self.get_directory_content,
61
+ self.get_branch_content,
62
+ self.create_branch,
63
+ self.set_default_branch,
64
+ self.search_code,
65
+ self.search_issues_and_prs,
66
+ self.create_review_request,
67
+ ]
146
68
 
147
69
  super().__init__(name="github", tools=tools, **kwargs)
148
70
 
@@ -428,7 +350,7 @@ class GithubTools(Toolkit):
428
350
  logger.error(f"Error getting pull request changes: {e}")
429
351
  return json.dumps({"error": str(e)})
430
352
 
431
- def create_issue(self, repo_name: str, title: str, body: Optional[str] = NotSet) -> str:
353
+ def create_issue(self, repo_name: str, title: str, body: Optional[str] = None) -> str:
432
354
  """Create an issue in a repository.
433
355
 
434
356
  Args:
@@ -442,7 +364,7 @@ class GithubTools(Toolkit):
442
364
  log_debug(f"Creating issue in repository: {repo_name}")
443
365
  try:
444
366
  repo = self.g.get_repo(repo_name)
445
- issue = repo.create_issue(title=title, body=body)
367
+ issue = repo.create_issue(title=title, body=body) # type: ignore
446
368
  issue_info = {
447
369
  "id": issue.id,
448
370
  "number": issue.number,
@@ -697,8 +619,8 @@ class GithubTools(Toolkit):
697
619
  self,
698
620
  repo_name: str,
699
621
  issue_number: int,
700
- title: Optional[str] = NotSet,
701
- body: Optional[str] = NotSet,
622
+ title: Optional[str] = None,
623
+ body: Optional[str] = None,
702
624
  ) -> str:
703
625
  """Edit the title or body of an issue.
704
626
 
@@ -715,7 +637,7 @@ class GithubTools(Toolkit):
715
637
  try:
716
638
  repo = self.g.get_repo(repo_name)
717
639
  issue = repo.get_issue(number=issue_number)
718
- issue.edit(title=title, body=body)
640
+ issue.edit(title=title, body=body) # type: ignore
719
641
  return json.dumps({"message": f"Issue #{issue_number} updated."}, indent=2)
720
642
  except GithubException as e:
721
643
  logger.error(f"Error editing issue: {e}")
@@ -1324,7 +1246,7 @@ class GithubTools(Toolkit):
1324
1246
  path: str,
1325
1247
  content: str,
1326
1248
  message: str,
1327
- branch: Optional[str] = NotSet,
1249
+ branch: Optional[str] = None,
1328
1250
  ) -> str:
1329
1251
  """Create a new file in a repository.
1330
1252
 
@@ -1350,7 +1272,7 @@ class GithubTools(Toolkit):
1350
1272
 
1351
1273
  # Extract relevant information
1352
1274
  file_info = {
1353
- "path": result["content"].path,
1275
+ "path": result["content"].path, # type: ignore
1354
1276
  "sha": result["content"].sha,
1355
1277
  "url": result["content"].html_url,
1356
1278
  "commit": {
agno/tools/gmail.py CHANGED
@@ -101,17 +101,6 @@ class GmailTools(Toolkit):
101
101
 
102
102
  def __init__(
103
103
  self,
104
- get_latest_emails: bool = True,
105
- get_emails_from_user: bool = True,
106
- get_unread_emails: bool = True,
107
- get_starred_emails: bool = True,
108
- get_emails_by_context: bool = True,
109
- get_emails_by_date: bool = True,
110
- get_emails_by_thread: bool = True,
111
- create_draft_email: bool = True,
112
- send_email: bool = True,
113
- send_email_reply: bool = True,
114
- search_emails: bool = True,
115
104
  creds: Optional[Credentials] = None,
116
105
  credentials_path: Optional[str] = None,
117
106
  token_path: Optional[str] = None,
@@ -122,17 +111,6 @@ class GmailTools(Toolkit):
122
111
  """Initialize GmailTools and authenticate with Gmail API
123
112
 
124
113
  Args:
125
- get_latest_emails (bool): Enable getting latest emails. Defaults to True.
126
- get_emails_from_user (bool): Enable getting emails from specific user. Defaults to True.
127
- get_unread_emails (bool): Enable getting unread emails. Defaults to True.
128
- get_starred_emails (bool): Enable getting starred emails. Defaults to True.
129
- get_emails_by_context (bool): Enable getting emails by context. Defaults to True.
130
- get_emails_by_date (bool): Enable getting emails by date. Defaults to True.
131
- get_emails_by_thread (bool): Enable getting emails by thread. Defaults to True.
132
- create_draft_email (bool): Enable creating draft emails. Defaults to True.
133
- send_email (bool): Enable sending emails. Defaults to True.
134
- search_emails (bool): Enable searching emails. Defaults to True.
135
- send_email_reply (bool): Enable sending email replies. Defaults to True.
136
114
  creds (Optional[Credentials]): Pre-fetched OAuth credentials. Use this to skip a new auth flow. Defaults to None.
137
115
  credentials_path (Optional[str]): Path to credentials file. Defaults to None.
138
116
  token_path (Optional[str]): Path to token file. Defaults to None.
@@ -146,55 +124,61 @@ class GmailTools(Toolkit):
146
124
  self.scopes = scopes or self.DEFAULT_SCOPES
147
125
  self.port = port
148
126
 
149
- # Validate that required scopes are present for requested operations
150
- if (create_draft_email or send_email) and "https://www.googleapis.com/auth/gmail.compose" not in self.scopes:
127
+ """ tools functions:
128
+ enable_get_latest_emails (bool): Enable getting latest emails.
129
+ enable_get_emails_from_user (bool): Enable getting emails from specific user.
130
+ enable_get_unread_emails (bool): Enable getting unread emails.
131
+ enable_get_starred_emails (bool): Enable getting starred emails.
132
+ enable_get_emails_by_context (bool): Enable getting emails by context.
133
+ enable_get_emails_by_date (bool): Enable getting emails by date.
134
+ enable_get_emails_by_thread (bool): Enable getting emails by thread.
135
+ enable_create_draft_email (bool): Enable creating draft emails.
136
+ enable_send_email (bool): Enable sending emails.
137
+ enable_send_email_reply (bool): Enable sending email replies.
138
+ all (bool): Enable all tools.
139
+ """
140
+
141
+ tools: List[Any] = [
142
+ # Reading emails
143
+ self.get_latest_emails,
144
+ self.get_emails_from_user,
145
+ self.get_unread_emails,
146
+ self.get_starred_emails,
147
+ self.get_emails_by_context,
148
+ self.get_emails_by_date,
149
+ self.get_emails_by_thread,
150
+ self.search_emails,
151
+ # Composing emails
152
+ self.create_draft_email,
153
+ self.send_email,
154
+ self.send_email_reply,
155
+ ]
156
+
157
+ super().__init__(name="gmail_tools", tools=tools, **kwargs)
158
+
159
+ # Validate that required scopes are present for requested operations (only check registered functions)
160
+ if (
161
+ "create_draft_email" in self.functions or "send_email" in self.functions
162
+ ) and "https://www.googleapis.com/auth/gmail.compose" not in self.scopes:
151
163
  raise ValueError(
152
164
  "The scope https://www.googleapis.com/auth/gmail.compose is required for email composition operations"
153
165
  )
154
-
155
166
  read_operations = [
156
- get_latest_emails,
157
- get_emails_from_user,
158
- get_unread_emails,
159
- get_starred_emails,
160
- get_emails_by_context,
161
- get_emails_by_date,
162
- get_emails_by_thread,
163
- search_emails,
167
+ "get_latest_emails",
168
+ "get_emails_from_user",
169
+ "get_unread_emails",
170
+ "get_starred_emails",
171
+ "get_emails_by_context",
172
+ "get_emails_by_date",
173
+ "get_emails_by_thread",
174
+ "search_emails",
164
175
  ]
165
-
166
- if any(read_operations):
176
+ if any(read_operation in self.functions for read_operation in read_operations):
167
177
  read_scope = "https://www.googleapis.com/auth/gmail.readonly"
168
178
  write_scope = "https://www.googleapis.com/auth/gmail.modify"
169
179
  if read_scope not in self.scopes and write_scope not in self.scopes:
170
180
  raise ValueError(f"The scope {read_scope} is required for email reading operations")
171
181
 
172
- tools: List[Any] = []
173
- if get_latest_emails:
174
- tools.append(self.get_latest_emails)
175
- if get_emails_from_user:
176
- tools.append(self.get_emails_from_user)
177
- if get_unread_emails:
178
- tools.append(self.get_unread_emails)
179
- if get_starred_emails:
180
- tools.append(self.get_starred_emails)
181
- if get_emails_by_context:
182
- tools.append(self.get_emails_by_context)
183
- if get_emails_by_date:
184
- tools.append(self.get_emails_by_date)
185
- if get_emails_by_thread:
186
- tools.append(self.get_emails_by_thread)
187
- if create_draft_email:
188
- tools.append(self.create_draft_email)
189
- if send_email:
190
- tools.append(self.send_email)
191
- if send_email_reply:
192
- tools.append(self.send_email_reply)
193
- if search_emails:
194
- tools.append(self.search_emails)
195
-
196
- super().__init__(name="gmail_tools", tools=tools, **kwargs)
197
-
198
182
  def _auth(self) -> None:
199
183
  """Authenticate with Gmail API"""
200
184
  token_file = Path(self.token_path or "token.json")
@@ -17,10 +17,11 @@ class GoogleBigQueryTools(Toolkit):
17
17
  dataset: str,
18
18
  project: Optional[str] = None,
19
19
  location: Optional[str] = None,
20
- list_tables: Optional[bool] = True,
21
- describe_table: Optional[bool] = True,
22
- run_sql_query: Optional[bool] = True,
23
20
  credentials: Optional[Any] = None,
21
+ enable_list_tables: bool = True,
22
+ enable_describe_table: bool = True,
23
+ enable_run_sql_query: bool = True,
24
+ all: bool = False,
24
25
  **kwargs,
25
26
  ):
26
27
  self.project = project or getenv("GOOGLE_CLOUD_PROJECT")
@@ -37,11 +38,11 @@ class GoogleBigQueryTools(Toolkit):
37
38
  self.client = bigquery.Client(project=self.project, credentials=credentials)
38
39
 
39
40
  tools: List[Any] = []
40
- if list_tables:
41
+ if all or enable_list_tables:
41
42
  tools.append(self.list_tables)
42
- if describe_table:
43
+ if all or enable_describe_table:
43
44
  tools.append(self.describe_table)
44
- if run_sql_query:
45
+ if all or enable_run_sql_query:
45
46
  tools.append(self.run_sql_query)
46
47
 
47
48
  super().__init__(name="google_bigquery_tools", tools=tools, **kwargs)
agno/tools/google_maps.py CHANGED
@@ -6,7 +6,7 @@ Prerequisites:
6
6
  You can obtain the API key from the Google Cloud Console:
7
7
  https://console.cloud.google.com/projectselector2/google/maps-apis/credentials
8
8
 
9
- - You also need to activate the Address Validation API for your .
9
+ - You also need to activate the Address Validation API for your project.
10
10
  https://console.developers.google.com/apis/api/addressvalidation.googleapis.com
11
11
 
12
12
  """
@@ -29,14 +29,6 @@ class GoogleMapTools(Toolkit):
29
29
  def __init__(
30
30
  self,
31
31
  key: Optional[str] = None,
32
- search_places: bool = True,
33
- get_directions: bool = True,
34
- validate_address: bool = True,
35
- geocode_address: bool = True,
36
- reverse_geocode: bool = True,
37
- get_distance_matrix: bool = True,
38
- get_elevation: bool = True,
39
- get_timezone: bool = True,
40
32
  **kwargs,
41
33
  ):
42
34
  self.api_key = key or getenv("GOOGLE_MAPS_API_KEY")
@@ -46,23 +38,16 @@ class GoogleMapTools(Toolkit):
46
38
 
47
39
  self.places_client = places_v1.PlacesClient()
48
40
 
49
- tools: List[Any] = []
50
- if search_places:
51
- tools.append(self.search_places)
52
- if get_directions:
53
- tools.append(self.get_directions)
54
- if validate_address:
55
- tools.append(self.validate_address)
56
- if geocode_address:
57
- tools.append(self.geocode_address)
58
- if reverse_geocode:
59
- tools.append(self.reverse_geocode)
60
- if get_distance_matrix:
61
- tools.append(self.get_distance_matrix)
62
- if get_elevation:
63
- tools.append(self.get_elevation)
64
- if get_timezone:
65
- tools.append(self.get_timezone)
41
+ tools: List[Any] = [
42
+ self.search_places,
43
+ self.get_directions,
44
+ self.validate_address,
45
+ self.geocode_address,
46
+ self.reverse_geocode,
47
+ self.get_distance_matrix,
48
+ self.get_elevation,
49
+ self.get_timezone,
50
+ ]
66
51
 
67
52
  super().__init__(name="google_maps", tools=tools, **kwargs)
68
53
 
@@ -29,6 +29,8 @@ class GoogleSearchTools(Toolkit):
29
29
  cache_results (bool): Enable caching of search results.
30
30
  cache_ttl (int): Time-to-live for cached results in seconds.
31
31
  cache_dir (Optional[str]): Directory to store cache files.
32
+ enable_google_search (bool): Enable Google search.
33
+ all (bool): Enable all tools.
32
34
  """
33
35
 
34
36
  def __init__(
@@ -38,6 +40,8 @@ class GoogleSearchTools(Toolkit):
38
40
  headers: Optional[Any] = None,
39
41
  proxy: Optional[str] = None,
40
42
  timeout: Optional[int] = 10,
43
+ enable_google_search: bool = True,
44
+ all: bool = False,
41
45
  **kwargs,
42
46
  ):
43
47
  self.fixed_max_results: Optional[int] = fixed_max_results
@@ -47,7 +51,8 @@ class GoogleSearchTools(Toolkit):
47
51
  self.timeout: Optional[int] = timeout
48
52
 
49
53
  tools = []
50
- tools.append(self.google_search)
54
+ if all or enable_google_search:
55
+ tools.append(self.google_search)
51
56
 
52
57
  super().__init__(name="google_search_tools", tools=tools, **kwargs)
53
58
 
@@ -77,7 +82,7 @@ class GoogleSearchTools(Toolkit):
77
82
  log_debug(f"Searching Google [{language}] for: {query}")
78
83
 
79
84
  # Perform Google search using the googlesearch-python package
80
- results = list(search(query, num_results=max_results, lang=language, proxy=self.proxy, advanced=True))
85
+ results = list(search(query, num=max_results, lang=language))
81
86
 
82
87
  # Collect the search results
83
88
  res: List[Dict[str, str]] = []
@@ -94,27 +94,29 @@ class GoogleSheetsTools(Toolkit):
94
94
  creds: Optional[Credentials] = None,
95
95
  creds_path: Optional[str] = None,
96
96
  token_path: Optional[str] = None,
97
- read: bool = True,
98
- create: bool = False,
99
- update: bool = False,
100
- duplicate: bool = False,
101
97
  oauth_port: int = 0,
98
+ enable_read_sheet: bool = True,
99
+ enable_create_sheet: bool = False,
100
+ enable_update_sheet: bool = False,
101
+ enable_create_duplicate_sheet: bool = False,
102
+ all: bool = False,
102
103
  **kwargs,
103
104
  ):
104
105
  """Initialize GoogleSheetsTools with the specified configuration.
105
106
 
106
107
  Args:
107
- scopes (Optional[List[str]]): Custom OAuth scopes. If None, determined by operations.
108
+ scopes (Optional[List[str]]): Custom OAuth scopes. If None, uses write scope by default.
108
109
  spreadsheet_id (Optional[str]): ID of the target spreadsheet.
109
110
  spreadsheet_range (Optional[str]): Range within the spreadsheet.
110
111
  creds (Optional[Credentials]): Pre-existing credentials.
111
112
  creds_path (Optional[str]): Path to credentials file.
112
113
  token_path (Optional[str]): Path to token file.
113
- read (bool): Enable read operations. Defaults to True.
114
- create (bool): Enable create operations. Defaults to False.
115
- update (bool): Enable update operations. Defaults to False.
116
- duplicate (bool): Enable duplicate operations. Defaults to False.
117
114
  oauth_port (int): Port to use for OAuth authentication. Defaults to 0.
115
+ enable_read_sheet (bool): Enable reading from a sheet.
116
+ enable_create_sheet (bool): Enable creating a sheet.
117
+ enable_update_sheet (bool): Enable updating a sheet.
118
+ enable_create_duplicate_sheet (bool): Enable creating a duplicate sheet.
119
+ all (bool): Enable all tools.
118
120
  """
119
121
 
120
122
  self.spreadsheet_id = spreadsheet_id
@@ -128,19 +130,21 @@ class GoogleSheetsTools(Toolkit):
128
130
  # Determine required scopes based on operations if no custom scopes provided
129
131
  if scopes is None:
130
132
  self.scopes = []
131
- if read:
133
+ if enable_read_sheet:
132
134
  self.scopes.append(self.DEFAULT_SCOPES["read"])
133
- if create or update or duplicate:
135
+ if enable_create_sheet or enable_update_sheet or enable_create_duplicate_sheet:
134
136
  self.scopes.append(self.DEFAULT_SCOPES["write"])
135
137
  # Remove duplicates while preserving order
136
138
  self.scopes = list(dict.fromkeys(self.scopes))
137
139
  else:
138
140
  self.scopes = scopes
139
141
  # Validate that required scopes are present for requested operations
140
- if (create or update or duplicate) and self.DEFAULT_SCOPES["write"] not in self.scopes:
142
+ if (enable_create_sheet or enable_update_sheet or enable_create_duplicate_sheet) and self.DEFAULT_SCOPES[
143
+ "write"
144
+ ] not in self.scopes:
141
145
  raise ValueError(f"The scope {self.DEFAULT_SCOPES['write']} is required for write operations")
142
146
  if (
143
- read
147
+ enable_read_sheet
144
148
  and self.DEFAULT_SCOPES["read"] not in self.scopes
145
149
  and self.DEFAULT_SCOPES["write"] not in self.scopes
146
150
  ):
@@ -149,13 +153,13 @@ class GoogleSheetsTools(Toolkit):
149
153
  )
150
154
 
151
155
  tools: List[Any] = []
152
- if read:
156
+ if all or enable_read_sheet:
153
157
  tools.append(self.read_sheet)
154
- if create:
158
+ if all or enable_create_sheet:
155
159
  tools.append(self.create_sheet)
156
- if update:
160
+ if all or enable_update_sheet:
157
161
  tools.append(self.update_sheet)
158
- if duplicate:
162
+ if all or enable_create_duplicate_sheet:
159
163
  tools.append(self.create_duplicate_sheet)
160
164
 
161
165
  super().__init__(name="google_sheets_tools", tools=tools, **kwargs)
agno/tools/hackernews.py CHANGED
@@ -10,16 +10,20 @@ from agno.utils.log import log_debug, logger
10
10
  class HackerNewsTools(Toolkit):
11
11
  """
12
12
  HackerNews is a tool for getting top stories from Hacker News.
13
+
13
14
  Args:
14
- get_top_stories (bool): Whether to get top stories from Hacker News.
15
- get_user_details (bool): Whether to get user details from Hacker News.
15
+ enable_get_top_stories (bool): Enable getting top stories from Hacker News. Default is True.
16
+ enable_get_user_details (bool): Enable getting user details from Hacker News. Default is True.
17
+ all (bool): Enable all tools. Overrides individual flags when True. Default is False.
16
18
  """
17
19
 
18
- def __init__(self, get_top_stories: bool = True, get_user_details: bool = True, **kwargs):
20
+ def __init__(
21
+ self, enable_get_top_stories: bool = True, enable_get_user_details: bool = True, all: bool = False, **kwargs
22
+ ):
19
23
  tools: List[Any] = []
20
- if get_top_stories:
24
+ if all or enable_get_top_stories:
21
25
  tools.append(self.get_top_hackernews_stories)
22
- if get_user_details:
26
+ if all or enable_get_user_details:
23
27
  tools.append(self.get_user_details)
24
28
 
25
29
  super().__init__(name="hackers_news", tools=tools, **kwargs)
agno/tools/jina.py CHANGED
@@ -25,9 +25,10 @@ class JinaReaderTools(Toolkit):
25
25
  search_url: str = "https://s.jina.ai/",
26
26
  max_content_length: int = 10000,
27
27
  timeout: Optional[int] = None,
28
- read_url: bool = True,
29
- search_query: bool = False,
30
28
  search_query_content: bool = True,
29
+ enable_read_url: bool = True,
30
+ enable_search_query: bool = False,
31
+ all: bool = False,
31
32
  **kwargs,
32
33
  ):
33
34
  self.api_key = api_key or getenv("JINA_API_KEY")
@@ -41,9 +42,9 @@ class JinaReaderTools(Toolkit):
41
42
  )
42
43
 
43
44
  tools: List[Any] = []
44
- if read_url:
45
+ if all or enable_read_url:
45
46
  tools.append(self.read_url)
46
- if search_query:
47
+ if all or enable_search_query:
47
48
  tools.append(self.search_query)
48
49
 
49
50
  super().__init__(name="jina_reader_tools", tools=tools, **kwargs)