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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (583) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +19 -27
  3. agno/agent/agent.py +2781 -4126
  4. agno/api/agent.py +9 -65
  5. agno/api/api.py +5 -46
  6. agno/api/evals.py +6 -17
  7. agno/api/os.py +17 -0
  8. agno/api/routes.py +6 -41
  9. agno/api/schemas/__init__.py +9 -0
  10. agno/api/schemas/agent.py +5 -21
  11. agno/api/schemas/evals.py +7 -16
  12. agno/api/schemas/os.py +14 -0
  13. agno/api/schemas/team.py +5 -21
  14. agno/api/schemas/utils.py +21 -0
  15. agno/api/schemas/workflows.py +11 -7
  16. agno/api/settings.py +53 -0
  17. agno/api/team.py +9 -64
  18. agno/api/workflow.py +28 -0
  19. agno/cloud/aws/base.py +214 -0
  20. agno/cloud/aws/s3/__init__.py +2 -0
  21. agno/cloud/aws/s3/api_client.py +43 -0
  22. agno/cloud/aws/s3/bucket.py +195 -0
  23. agno/cloud/aws/s3/object.py +57 -0
  24. agno/db/__init__.py +24 -0
  25. agno/db/base.py +245 -0
  26. agno/db/dynamo/__init__.py +3 -0
  27. agno/db/dynamo/dynamo.py +1749 -0
  28. agno/db/dynamo/schemas.py +278 -0
  29. agno/db/dynamo/utils.py +684 -0
  30. agno/db/firestore/__init__.py +3 -0
  31. agno/db/firestore/firestore.py +1438 -0
  32. agno/db/firestore/schemas.py +130 -0
  33. agno/db/firestore/utils.py +278 -0
  34. agno/db/gcs_json/__init__.py +3 -0
  35. agno/db/gcs_json/gcs_json_db.py +1001 -0
  36. agno/db/gcs_json/utils.py +194 -0
  37. agno/db/in_memory/__init__.py +3 -0
  38. agno/db/in_memory/in_memory_db.py +888 -0
  39. agno/db/in_memory/utils.py +172 -0
  40. agno/db/json/__init__.py +3 -0
  41. agno/db/json/json_db.py +1051 -0
  42. agno/db/json/utils.py +196 -0
  43. agno/db/migrations/v1_to_v2.py +162 -0
  44. agno/db/mongo/__init__.py +3 -0
  45. agno/db/mongo/mongo.py +1417 -0
  46. agno/db/mongo/schemas.py +77 -0
  47. agno/db/mongo/utils.py +204 -0
  48. agno/db/mysql/__init__.py +3 -0
  49. agno/db/mysql/mysql.py +1719 -0
  50. agno/db/mysql/schemas.py +124 -0
  51. agno/db/mysql/utils.py +298 -0
  52. agno/db/postgres/__init__.py +3 -0
  53. agno/db/postgres/postgres.py +1720 -0
  54. agno/db/postgres/schemas.py +124 -0
  55. agno/db/postgres/utils.py +281 -0
  56. agno/db/redis/__init__.py +3 -0
  57. agno/db/redis/redis.py +1371 -0
  58. agno/db/redis/schemas.py +109 -0
  59. agno/db/redis/utils.py +288 -0
  60. agno/db/schemas/__init__.py +3 -0
  61. agno/db/schemas/evals.py +33 -0
  62. agno/db/schemas/knowledge.py +40 -0
  63. agno/db/schemas/memory.py +46 -0
  64. agno/db/singlestore/__init__.py +3 -0
  65. agno/db/singlestore/schemas.py +116 -0
  66. agno/db/singlestore/singlestore.py +1722 -0
  67. agno/db/singlestore/utils.py +327 -0
  68. agno/db/sqlite/__init__.py +3 -0
  69. agno/db/sqlite/schemas.py +119 -0
  70. agno/db/sqlite/sqlite.py +1680 -0
  71. agno/db/sqlite/utils.py +269 -0
  72. agno/db/utils.py +88 -0
  73. agno/eval/__init__.py +14 -0
  74. agno/eval/accuracy.py +142 -43
  75. agno/eval/performance.py +88 -23
  76. agno/eval/reliability.py +73 -20
  77. agno/eval/utils.py +23 -13
  78. agno/integrations/discord/__init__.py +3 -0
  79. agno/{app → integrations}/discord/client.py +10 -10
  80. agno/knowledge/__init__.py +2 -2
  81. agno/{document → knowledge}/chunking/agentic.py +2 -2
  82. agno/{document → knowledge}/chunking/document.py +2 -2
  83. agno/{document → knowledge}/chunking/fixed.py +3 -3
  84. agno/{document → knowledge}/chunking/markdown.py +2 -2
  85. agno/{document → knowledge}/chunking/recursive.py +2 -2
  86. agno/{document → knowledge}/chunking/row.py +2 -2
  87. agno/knowledge/chunking/semantic.py +59 -0
  88. agno/knowledge/chunking/strategy.py +121 -0
  89. agno/knowledge/content.py +74 -0
  90. agno/knowledge/document/__init__.py +5 -0
  91. agno/{document → knowledge/document}/base.py +12 -2
  92. agno/knowledge/embedder/__init__.py +5 -0
  93. agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
  94. agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
  95. agno/{embedder → knowledge/embedder}/base.py +6 -0
  96. agno/{embedder → knowledge/embedder}/cohere.py +72 -1
  97. agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
  98. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  99. agno/{embedder → knowledge/embedder}/google.py +74 -1
  100. agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
  101. agno/{embedder → knowledge/embedder}/jina.py +48 -2
  102. agno/knowledge/embedder/langdb.py +22 -0
  103. agno/knowledge/embedder/mistral.py +139 -0
  104. agno/{embedder → knowledge/embedder}/nebius.py +1 -1
  105. agno/{embedder → knowledge/embedder}/ollama.py +54 -3
  106. agno/knowledge/embedder/openai.py +223 -0
  107. agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
  108. agno/{embedder → knowledge/embedder}/together.py +1 -1
  109. agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
  110. agno/knowledge/knowledge.py +1515 -0
  111. agno/knowledge/reader/__init__.py +7 -0
  112. agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
  113. agno/knowledge/reader/base.py +88 -0
  114. agno/{document → knowledge}/reader/csv_reader.py +68 -15
  115. agno/knowledge/reader/docx_reader.py +83 -0
  116. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  117. agno/knowledge/reader/gcs_reader.py +67 -0
  118. agno/{document → knowledge}/reader/json_reader.py +30 -9
  119. agno/{document → knowledge}/reader/markdown_reader.py +36 -9
  120. agno/{document → knowledge}/reader/pdf_reader.py +79 -21
  121. agno/knowledge/reader/reader_factory.py +275 -0
  122. agno/knowledge/reader/s3_reader.py +171 -0
  123. agno/{document → knowledge}/reader/text_reader.py +31 -10
  124. agno/knowledge/reader/url_reader.py +84 -0
  125. agno/knowledge/reader/web_search_reader.py +389 -0
  126. agno/{document → knowledge}/reader/website_reader.py +37 -10
  127. agno/knowledge/reader/wikipedia_reader.py +59 -0
  128. agno/knowledge/reader/youtube_reader.py +78 -0
  129. agno/knowledge/remote_content/remote_content.py +88 -0
  130. agno/{reranker → knowledge/reranker}/base.py +1 -1
  131. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  132. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  133. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  134. agno/knowledge/types.py +30 -0
  135. agno/knowledge/utils.py +169 -0
  136. agno/media.py +2 -2
  137. agno/memory/__init__.py +2 -10
  138. agno/memory/manager.py +1003 -148
  139. agno/models/aimlapi/__init__.py +2 -2
  140. agno/models/aimlapi/aimlapi.py +6 -6
  141. agno/models/anthropic/claude.py +129 -82
  142. agno/models/aws/bedrock.py +107 -175
  143. agno/models/aws/claude.py +64 -18
  144. agno/models/azure/ai_foundry.py +73 -23
  145. agno/models/base.py +347 -287
  146. agno/models/cerebras/cerebras.py +84 -27
  147. agno/models/cohere/chat.py +106 -98
  148. agno/models/dashscope/dashscope.py +14 -5
  149. agno/models/google/gemini.py +123 -53
  150. agno/models/groq/groq.py +97 -35
  151. agno/models/huggingface/huggingface.py +92 -27
  152. agno/models/ibm/watsonx.py +72 -13
  153. agno/models/litellm/chat.py +85 -13
  154. agno/models/message.py +38 -144
  155. agno/models/meta/llama.py +85 -49
  156. agno/models/metrics.py +120 -0
  157. agno/models/mistral/mistral.py +90 -21
  158. agno/models/ollama/__init__.py +0 -2
  159. agno/models/ollama/chat.py +84 -46
  160. agno/models/openai/chat.py +135 -27
  161. agno/models/openai/responses.py +233 -115
  162. agno/models/perplexity/perplexity.py +26 -2
  163. agno/models/portkey/portkey.py +0 -7
  164. agno/models/response.py +14 -8
  165. agno/models/utils.py +20 -0
  166. agno/models/vercel/__init__.py +2 -2
  167. agno/models/vercel/v0.py +1 -1
  168. agno/models/vllm/__init__.py +2 -2
  169. agno/models/vllm/vllm.py +3 -3
  170. agno/models/xai/xai.py +10 -10
  171. agno/os/__init__.py +3 -0
  172. agno/os/app.py +393 -0
  173. agno/os/auth.py +47 -0
  174. agno/os/config.py +103 -0
  175. agno/os/interfaces/agui/__init__.py +3 -0
  176. agno/os/interfaces/agui/agui.py +31 -0
  177. agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
  178. agno/{app → os/interfaces}/agui/utils.py +65 -28
  179. agno/os/interfaces/base.py +21 -0
  180. agno/os/interfaces/slack/__init__.py +3 -0
  181. agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
  182. agno/os/interfaces/slack/slack.py +33 -0
  183. agno/os/interfaces/whatsapp/__init__.py +3 -0
  184. agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
  185. agno/os/interfaces/whatsapp/whatsapp.py +30 -0
  186. agno/os/router.py +843 -0
  187. agno/os/routers/__init__.py +3 -0
  188. agno/os/routers/evals/__init__.py +3 -0
  189. agno/os/routers/evals/evals.py +204 -0
  190. agno/os/routers/evals/schemas.py +142 -0
  191. agno/os/routers/evals/utils.py +161 -0
  192. agno/os/routers/knowledge/__init__.py +3 -0
  193. agno/os/routers/knowledge/knowledge.py +413 -0
  194. agno/os/routers/knowledge/schemas.py +118 -0
  195. agno/os/routers/memory/__init__.py +3 -0
  196. agno/os/routers/memory/memory.py +179 -0
  197. agno/os/routers/memory/schemas.py +58 -0
  198. agno/os/routers/metrics/__init__.py +3 -0
  199. agno/os/routers/metrics/metrics.py +58 -0
  200. agno/os/routers/metrics/schemas.py +47 -0
  201. agno/os/routers/session/__init__.py +3 -0
  202. agno/os/routers/session/session.py +163 -0
  203. agno/os/schema.py +892 -0
  204. agno/{app/playground → os}/settings.py +8 -15
  205. agno/os/utils.py +270 -0
  206. agno/reasoning/azure_ai_foundry.py +4 -4
  207. agno/reasoning/deepseek.py +4 -4
  208. agno/reasoning/default.py +6 -11
  209. agno/reasoning/groq.py +4 -4
  210. agno/reasoning/helpers.py +4 -6
  211. agno/reasoning/ollama.py +4 -4
  212. agno/reasoning/openai.py +4 -4
  213. agno/run/{response.py → agent.py} +144 -72
  214. agno/run/base.py +44 -58
  215. agno/run/cancel.py +83 -0
  216. agno/run/team.py +133 -77
  217. agno/run/workflow.py +537 -12
  218. agno/session/__init__.py +10 -0
  219. agno/session/agent.py +244 -0
  220. agno/session/summary.py +225 -0
  221. agno/session/team.py +262 -0
  222. agno/{storage/session/v2 → session}/workflow.py +47 -24
  223. agno/team/__init__.py +15 -16
  224. agno/team/team.py +2967 -4243
  225. agno/tools/agentql.py +14 -5
  226. agno/tools/airflow.py +9 -4
  227. agno/tools/api.py +7 -3
  228. agno/tools/apify.py +2 -46
  229. agno/tools/arxiv.py +8 -3
  230. agno/tools/aws_lambda.py +7 -5
  231. agno/tools/aws_ses.py +7 -1
  232. agno/tools/baidusearch.py +4 -1
  233. agno/tools/bitbucket.py +4 -4
  234. agno/tools/brandfetch.py +14 -11
  235. agno/tools/bravesearch.py +4 -1
  236. agno/tools/brightdata.py +42 -22
  237. agno/tools/browserbase.py +13 -4
  238. agno/tools/calcom.py +12 -10
  239. agno/tools/calculator.py +10 -27
  240. agno/tools/cartesia.py +18 -13
  241. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  242. agno/tools/confluence.py +71 -18
  243. agno/tools/crawl4ai.py +7 -1
  244. agno/tools/csv_toolkit.py +9 -8
  245. agno/tools/dalle.py +18 -11
  246. agno/tools/daytona.py +13 -16
  247. agno/tools/decorator.py +6 -3
  248. agno/tools/desi_vocal.py +16 -7
  249. agno/tools/discord.py +11 -8
  250. agno/tools/docker.py +30 -42
  251. agno/tools/duckdb.py +34 -53
  252. agno/tools/duckduckgo.py +8 -7
  253. agno/tools/e2b.py +62 -62
  254. agno/tools/eleven_labs.py +35 -28
  255. agno/tools/email.py +4 -1
  256. agno/tools/evm.py +7 -1
  257. agno/tools/exa.py +19 -14
  258. agno/tools/fal.py +29 -29
  259. agno/tools/file.py +9 -8
  260. agno/tools/financial_datasets.py +25 -44
  261. agno/tools/firecrawl.py +22 -22
  262. agno/tools/function.py +68 -17
  263. agno/tools/giphy.py +22 -10
  264. agno/tools/github.py +48 -126
  265. agno/tools/gmail.py +46 -62
  266. agno/tools/google_bigquery.py +7 -6
  267. agno/tools/google_maps.py +11 -26
  268. agno/tools/googlesearch.py +7 -2
  269. agno/tools/googlesheets.py +21 -17
  270. agno/tools/hackernews.py +9 -5
  271. agno/tools/jina.py +5 -4
  272. agno/tools/jira.py +18 -9
  273. agno/tools/knowledge.py +31 -32
  274. agno/tools/linear.py +18 -33
  275. agno/tools/linkup.py +5 -1
  276. agno/tools/local_file_system.py +8 -5
  277. agno/tools/lumalab.py +31 -19
  278. agno/tools/mem0.py +18 -12
  279. agno/tools/memori.py +14 -10
  280. agno/tools/mlx_transcribe.py +3 -2
  281. agno/tools/models/azure_openai.py +32 -14
  282. agno/tools/models/gemini.py +58 -31
  283. agno/tools/models/groq.py +29 -20
  284. agno/tools/models/nebius.py +27 -11
  285. agno/tools/models_labs.py +39 -15
  286. agno/tools/moviepy_video.py +7 -6
  287. agno/tools/neo4j.py +134 -0
  288. agno/tools/newspaper.py +7 -2
  289. agno/tools/newspaper4k.py +8 -3
  290. agno/tools/openai.py +57 -26
  291. agno/tools/openbb.py +12 -11
  292. agno/tools/opencv.py +62 -46
  293. agno/tools/openweather.py +14 -12
  294. agno/tools/pandas.py +11 -3
  295. agno/tools/postgres.py +4 -12
  296. agno/tools/pubmed.py +4 -1
  297. agno/tools/python.py +9 -22
  298. agno/tools/reasoning.py +35 -27
  299. agno/tools/reddit.py +11 -26
  300. agno/tools/replicate.py +54 -41
  301. agno/tools/resend.py +4 -1
  302. agno/tools/scrapegraph.py +15 -14
  303. agno/tools/searxng.py +10 -23
  304. agno/tools/serpapi.py +6 -3
  305. agno/tools/serper.py +13 -4
  306. agno/tools/shell.py +9 -2
  307. agno/tools/slack.py +12 -11
  308. agno/tools/sleep.py +3 -2
  309. agno/tools/spider.py +24 -4
  310. agno/tools/sql.py +7 -6
  311. agno/tools/tavily.py +6 -4
  312. agno/tools/telegram.py +12 -4
  313. agno/tools/todoist.py +11 -31
  314. agno/tools/toolkit.py +1 -1
  315. agno/tools/trafilatura.py +22 -6
  316. agno/tools/trello.py +9 -22
  317. agno/tools/twilio.py +10 -3
  318. agno/tools/user_control_flow.py +6 -1
  319. agno/tools/valyu.py +34 -5
  320. agno/tools/visualization.py +19 -28
  321. agno/tools/webbrowser.py +4 -3
  322. agno/tools/webex.py +11 -7
  323. agno/tools/website.py +15 -46
  324. agno/tools/webtools.py +12 -4
  325. agno/tools/whatsapp.py +5 -9
  326. agno/tools/wikipedia.py +20 -13
  327. agno/tools/x.py +14 -13
  328. agno/tools/yfinance.py +13 -40
  329. agno/tools/youtube.py +26 -20
  330. agno/tools/zendesk.py +7 -2
  331. agno/tools/zep.py +10 -7
  332. agno/tools/zoom.py +10 -9
  333. agno/utils/common.py +1 -19
  334. agno/utils/events.py +95 -118
  335. agno/utils/knowledge.py +29 -0
  336. agno/utils/location.py +2 -2
  337. agno/utils/log.py +2 -2
  338. agno/utils/mcp.py +11 -5
  339. agno/utils/media.py +39 -0
  340. agno/utils/message.py +12 -1
  341. agno/utils/models/claude.py +6 -4
  342. agno/utils/models/mistral.py +8 -7
  343. agno/utils/models/schema_utils.py +3 -3
  344. agno/utils/pprint.py +33 -32
  345. agno/utils/print_response/agent.py +779 -0
  346. agno/utils/print_response/team.py +1565 -0
  347. agno/utils/print_response/workflow.py +1451 -0
  348. agno/utils/prompts.py +14 -14
  349. agno/utils/reasoning.py +87 -0
  350. agno/utils/response.py +42 -42
  351. agno/utils/string.py +8 -22
  352. agno/utils/team.py +50 -0
  353. agno/utils/timer.py +2 -2
  354. agno/vectordb/base.py +33 -21
  355. agno/vectordb/cassandra/cassandra.py +287 -23
  356. agno/vectordb/chroma/chromadb.py +482 -59
  357. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  358. agno/vectordb/couchbase/couchbase.py +309 -29
  359. agno/vectordb/lancedb/lance_db.py +360 -21
  360. agno/vectordb/langchaindb/__init__.py +5 -0
  361. agno/vectordb/langchaindb/langchaindb.py +145 -0
  362. agno/vectordb/lightrag/__init__.py +5 -0
  363. agno/vectordb/lightrag/lightrag.py +374 -0
  364. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  365. agno/vectordb/milvus/milvus.py +242 -32
  366. agno/vectordb/mongodb/mongodb.py +200 -24
  367. agno/vectordb/pgvector/pgvector.py +319 -37
  368. agno/vectordb/pineconedb/pineconedb.py +221 -27
  369. agno/vectordb/qdrant/qdrant.py +356 -14
  370. agno/vectordb/singlestore/singlestore.py +286 -29
  371. agno/vectordb/surrealdb/surrealdb.py +187 -7
  372. agno/vectordb/upstashdb/upstashdb.py +342 -26
  373. agno/vectordb/weaviate/weaviate.py +227 -165
  374. agno/workflow/__init__.py +17 -13
  375. agno/workflow/{v2/condition.py → condition.py} +135 -32
  376. agno/workflow/{v2/loop.py → loop.py} +115 -28
  377. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  378. agno/workflow/{v2/router.py → router.py} +133 -32
  379. agno/workflow/{v2/step.py → step.py} +200 -42
  380. agno/workflow/{v2/steps.py → steps.py} +147 -66
  381. agno/workflow/types.py +482 -0
  382. agno/workflow/workflow.py +2394 -696
  383. agno-2.0.0a1.dist-info/METADATA +355 -0
  384. agno-2.0.0a1.dist-info/RECORD +514 -0
  385. agno/agent/metrics.py +0 -107
  386. agno/api/app.py +0 -35
  387. agno/api/playground.py +0 -92
  388. agno/api/schemas/app.py +0 -12
  389. agno/api/schemas/playground.py +0 -22
  390. agno/api/schemas/user.py +0 -35
  391. agno/api/schemas/workspace.py +0 -46
  392. agno/api/user.py +0 -160
  393. agno/api/workflows.py +0 -33
  394. agno/api/workspace.py +0 -175
  395. agno/app/agui/__init__.py +0 -3
  396. agno/app/agui/app.py +0 -17
  397. agno/app/agui/sync_router.py +0 -120
  398. agno/app/base.py +0 -186
  399. agno/app/discord/__init__.py +0 -3
  400. agno/app/fastapi/__init__.py +0 -3
  401. agno/app/fastapi/app.py +0 -107
  402. agno/app/fastapi/async_router.py +0 -457
  403. agno/app/fastapi/sync_router.py +0 -448
  404. agno/app/playground/app.py +0 -228
  405. agno/app/playground/async_router.py +0 -1050
  406. agno/app/playground/deploy.py +0 -249
  407. agno/app/playground/operator.py +0 -183
  408. agno/app/playground/schemas.py +0 -220
  409. agno/app/playground/serve.py +0 -55
  410. agno/app/playground/sync_router.py +0 -1042
  411. agno/app/playground/utils.py +0 -46
  412. agno/app/settings.py +0 -15
  413. agno/app/slack/__init__.py +0 -3
  414. agno/app/slack/app.py +0 -19
  415. agno/app/slack/sync_router.py +0 -92
  416. agno/app/utils.py +0 -54
  417. agno/app/whatsapp/__init__.py +0 -3
  418. agno/app/whatsapp/app.py +0 -15
  419. agno/app/whatsapp/sync_router.py +0 -197
  420. agno/cli/auth_server.py +0 -249
  421. agno/cli/config.py +0 -274
  422. agno/cli/console.py +0 -88
  423. agno/cli/credentials.py +0 -23
  424. agno/cli/entrypoint.py +0 -571
  425. agno/cli/operator.py +0 -357
  426. agno/cli/settings.py +0 -96
  427. agno/cli/ws/ws_cli.py +0 -817
  428. agno/constants.py +0 -13
  429. agno/document/__init__.py +0 -5
  430. agno/document/chunking/semantic.py +0 -45
  431. agno/document/chunking/strategy.py +0 -31
  432. agno/document/reader/__init__.py +0 -5
  433. agno/document/reader/base.py +0 -47
  434. agno/document/reader/docx_reader.py +0 -60
  435. agno/document/reader/gcs/pdf_reader.py +0 -44
  436. agno/document/reader/s3/pdf_reader.py +0 -59
  437. agno/document/reader/s3/text_reader.py +0 -63
  438. agno/document/reader/url_reader.py +0 -59
  439. agno/document/reader/youtube_reader.py +0 -58
  440. agno/embedder/__init__.py +0 -5
  441. agno/embedder/langdb.py +0 -80
  442. agno/embedder/mistral.py +0 -82
  443. agno/embedder/openai.py +0 -78
  444. agno/file/__init__.py +0 -5
  445. agno/file/file.py +0 -16
  446. agno/file/local/csv.py +0 -32
  447. agno/file/local/txt.py +0 -19
  448. agno/infra/app.py +0 -240
  449. agno/infra/base.py +0 -144
  450. agno/infra/context.py +0 -20
  451. agno/infra/db_app.py +0 -52
  452. agno/infra/resource.py +0 -205
  453. agno/infra/resources.py +0 -55
  454. agno/knowledge/agent.py +0 -698
  455. agno/knowledge/arxiv.py +0 -33
  456. agno/knowledge/combined.py +0 -36
  457. agno/knowledge/csv.py +0 -144
  458. agno/knowledge/csv_url.py +0 -124
  459. agno/knowledge/document.py +0 -223
  460. agno/knowledge/docx.py +0 -137
  461. agno/knowledge/firecrawl.py +0 -34
  462. agno/knowledge/gcs/__init__.py +0 -0
  463. agno/knowledge/gcs/base.py +0 -39
  464. agno/knowledge/gcs/pdf.py +0 -125
  465. agno/knowledge/json.py +0 -137
  466. agno/knowledge/langchain.py +0 -71
  467. agno/knowledge/light_rag.py +0 -273
  468. agno/knowledge/llamaindex.py +0 -66
  469. agno/knowledge/markdown.py +0 -154
  470. agno/knowledge/pdf.py +0 -164
  471. agno/knowledge/pdf_bytes.py +0 -42
  472. agno/knowledge/pdf_url.py +0 -148
  473. agno/knowledge/s3/__init__.py +0 -0
  474. agno/knowledge/s3/base.py +0 -64
  475. agno/knowledge/s3/pdf.py +0 -33
  476. agno/knowledge/s3/text.py +0 -34
  477. agno/knowledge/text.py +0 -141
  478. agno/knowledge/url.py +0 -46
  479. agno/knowledge/website.py +0 -179
  480. agno/knowledge/wikipedia.py +0 -32
  481. agno/knowledge/youtube.py +0 -35
  482. agno/memory/agent.py +0 -423
  483. agno/memory/classifier.py +0 -104
  484. agno/memory/db/__init__.py +0 -5
  485. agno/memory/db/base.py +0 -42
  486. agno/memory/db/mongodb.py +0 -189
  487. agno/memory/db/postgres.py +0 -203
  488. agno/memory/db/sqlite.py +0 -193
  489. agno/memory/memory.py +0 -22
  490. agno/memory/row.py +0 -36
  491. agno/memory/summarizer.py +0 -201
  492. agno/memory/summary.py +0 -19
  493. agno/memory/team.py +0 -415
  494. agno/memory/v2/__init__.py +0 -2
  495. agno/memory/v2/db/__init__.py +0 -1
  496. agno/memory/v2/db/base.py +0 -42
  497. agno/memory/v2/db/firestore.py +0 -339
  498. agno/memory/v2/db/mongodb.py +0 -196
  499. agno/memory/v2/db/postgres.py +0 -214
  500. agno/memory/v2/db/redis.py +0 -187
  501. agno/memory/v2/db/schema.py +0 -54
  502. agno/memory/v2/db/sqlite.py +0 -209
  503. agno/memory/v2/manager.py +0 -437
  504. agno/memory/v2/memory.py +0 -1097
  505. agno/memory/v2/schema.py +0 -55
  506. agno/memory/v2/summarizer.py +0 -215
  507. agno/memory/workflow.py +0 -38
  508. agno/models/ollama/tools.py +0 -430
  509. agno/models/qwen/__init__.py +0 -5
  510. agno/playground/__init__.py +0 -10
  511. agno/playground/deploy.py +0 -3
  512. agno/playground/playground.py +0 -3
  513. agno/playground/serve.py +0 -3
  514. agno/playground/settings.py +0 -3
  515. agno/reranker/__init__.py +0 -0
  516. agno/run/v2/__init__.py +0 -0
  517. agno/run/v2/workflow.py +0 -567
  518. agno/storage/__init__.py +0 -0
  519. agno/storage/agent/__init__.py +0 -0
  520. agno/storage/agent/dynamodb.py +0 -1
  521. agno/storage/agent/json.py +0 -1
  522. agno/storage/agent/mongodb.py +0 -1
  523. agno/storage/agent/postgres.py +0 -1
  524. agno/storage/agent/singlestore.py +0 -1
  525. agno/storage/agent/sqlite.py +0 -1
  526. agno/storage/agent/yaml.py +0 -1
  527. agno/storage/base.py +0 -60
  528. agno/storage/dynamodb.py +0 -673
  529. agno/storage/firestore.py +0 -297
  530. agno/storage/gcs_json.py +0 -261
  531. agno/storage/in_memory.py +0 -234
  532. agno/storage/json.py +0 -237
  533. agno/storage/mongodb.py +0 -328
  534. agno/storage/mysql.py +0 -685
  535. agno/storage/postgres.py +0 -682
  536. agno/storage/redis.py +0 -336
  537. agno/storage/session/__init__.py +0 -16
  538. agno/storage/session/agent.py +0 -64
  539. agno/storage/session/team.py +0 -63
  540. agno/storage/session/v2/__init__.py +0 -5
  541. agno/storage/session/workflow.py +0 -61
  542. agno/storage/singlestore.py +0 -606
  543. agno/storage/sqlite.py +0 -646
  544. agno/storage/workflow/__init__.py +0 -0
  545. agno/storage/workflow/mongodb.py +0 -1
  546. agno/storage/workflow/postgres.py +0 -1
  547. agno/storage/workflow/sqlite.py +0 -1
  548. agno/storage/yaml.py +0 -241
  549. agno/tools/thinking.py +0 -73
  550. agno/utils/defaults.py +0 -57
  551. agno/utils/filesystem.py +0 -39
  552. agno/utils/git.py +0 -52
  553. agno/utils/json_io.py +0 -30
  554. agno/utils/load_env.py +0 -19
  555. agno/utils/py_io.py +0 -19
  556. agno/utils/pyproject.py +0 -18
  557. agno/utils/resource_filter.py +0 -31
  558. agno/workflow/v2/__init__.py +0 -21
  559. agno/workflow/v2/types.py +0 -357
  560. agno/workflow/v2/workflow.py +0 -3312
  561. agno/workspace/__init__.py +0 -0
  562. agno/workspace/config.py +0 -325
  563. agno/workspace/enums.py +0 -6
  564. agno/workspace/helpers.py +0 -52
  565. agno/workspace/operator.py +0 -757
  566. agno/workspace/settings.py +0 -158
  567. agno-1.8.0.dist-info/METADATA +0 -979
  568. agno-1.8.0.dist-info/RECORD +0 -565
  569. agno-1.8.0.dist-info/entry_points.txt +0 -3
  570. /agno/{app → db/migrations}/__init__.py +0 -0
  571. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  572. /agno/{cli → integrations}/__init__.py +0 -0
  573. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  574. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  575. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  576. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  577. /agno/{app → os/interfaces}/slack/security.py +0 -0
  578. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  579. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  580. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  581. {agno-1.8.0.dist-info → agno-2.0.0a1.dist-info}/WHEEL +0 -0
  582. {agno-1.8.0.dist-info → agno-2.0.0a1.dist-info}/licenses/LICENSE +0 -0
  583. {agno-1.8.0.dist-info → agno-2.0.0a1.dist-info}/top_level.txt +0 -0
agno/tools/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] = []
agno/tools/wikipedia.py CHANGED
@@ -1,18 +1,24 @@
1
1
  import json
2
2
  from typing import List, Optional
3
3
 
4
- from agno.document import Document
5
- from agno.knowledge.wikipedia import WikipediaKnowledgeBase
4
+ from agno.knowledge.document import Document
5
+ from agno.knowledge.knowledge import Knowledge
6
+ from agno.knowledge.reader.wikipedia_reader import WikipediaReader
6
7
  from agno.tools import Toolkit
7
8
  from agno.utils.log import log_debug, log_info
8
9
 
9
10
 
10
11
  class WikipediaTools(Toolkit):
11
- def __init__(self, knowledge_base: Optional[WikipediaKnowledgeBase] = None, **kwargs):
12
+ def __init__(
13
+ self,
14
+ knowledge: Optional[Knowledge] = None,
15
+ all: bool = False,
16
+ **kwargs,
17
+ ):
12
18
  tools = []
13
19
 
14
- self.knowledge_base: Optional[WikipediaKnowledgeBase] = knowledge_base
15
- if self.knowledge_base is not None and isinstance(self.knowledge_base, WikipediaKnowledgeBase):
20
+ self.knowledge: Optional[Knowledge] = knowledge
21
+ if self.knowledge is not None and isinstance(self.knowledge, Knowledge):
16
22
  tools.append(self.search_wikipedia_and_update_knowledge_base)
17
23
  else:
18
24
  tools.append(self.search_wikipedia) # type: ignore
@@ -28,15 +34,16 @@ class WikipediaTools(Toolkit):
28
34
  :return: Relevant documents from Wikipedia knowledge base.
29
35
  """
30
36
 
31
- if self.knowledge_base is None:
32
- return "Knowledge base not provided"
37
+ if self.knowledge is None:
38
+ return "Knowledge not provided"
33
39
 
34
- log_debug(f"Adding to knowledge base: {topic}")
35
- self.knowledge_base.topics.append(topic)
36
- log_debug("Loading knowledge base.")
37
- self.knowledge_base.load(recreate=False)
38
- log_debug(f"Searching knowledge base: {topic}")
39
- relevant_docs: List[Document] = self.knowledge_base.search(query=topic)
40
+ log_debug(f"Adding to knowledge: {topic}")
41
+ self.knowledge.add_content(
42
+ topics=[topic],
43
+ reader=WikipediaReader(),
44
+ )
45
+ log_debug(f"Searching knowledge: {topic}")
46
+ relevant_docs: List[Document] = self.knowledge.search(query=topic)
40
47
  return json.dumps([doc.to_dict() for doc in relevant_docs])
41
48
 
42
49
  def search_wikipedia(self, query: str) -> str:
agno/tools/x.py CHANGED
@@ -1,5 +1,5 @@
1
1
  import json
2
- import os
2
+ from os import getenv
3
3
  from typing import Any, List, Optional
4
4
 
5
5
  from agno.tools import Toolkit
@@ -35,11 +35,11 @@ class XTools(Toolkit):
35
35
  include_post_metrics Optional[bool]: Whether to include post metrics in the search results.
36
36
  wait_on_rate_limit Optional[bool]: Whether to wait on rate limit.
37
37
  """
38
- self.bearer_token = bearer_token or os.getenv("X_BEARER_TOKEN")
39
- self.consumer_key = consumer_key or os.getenv("X_CONSUMER_KEY")
40
- self.consumer_secret = consumer_secret or os.getenv("X_CONSUMER_SECRET")
41
- self.access_token = access_token or os.getenv("X_ACCESS_TOKEN")
42
- self.access_token_secret = access_token_secret or os.getenv("X_ACCESS_TOKEN_SECRET")
38
+ self.bearer_token = bearer_token or getenv("X_BEARER_TOKEN")
39
+ self.consumer_key = consumer_key or getenv("X_CONSUMER_KEY")
40
+ self.consumer_secret = consumer_secret or getenv("X_CONSUMER_SECRET")
41
+ self.access_token = access_token or getenv("X_ACCESS_TOKEN")
42
+ self.access_token_secret = access_token_secret or getenv("X_ACCESS_TOKEN_SECRET")
43
43
  self.wait_on_rate_limit = wait_on_rate_limit
44
44
  self.client = tweepy.Client(
45
45
  bearer_token=self.bearer_token,
@@ -51,13 +51,14 @@ class XTools(Toolkit):
51
51
  )
52
52
  self.include_post_metrics = include_post_metrics
53
53
 
54
- tools: List[Any] = []
55
- tools.append(self.create_post)
56
- tools.append(self.reply_to_post)
57
- tools.append(self.send_dm)
58
- tools.append(self.get_user_info)
59
- tools.append(self.get_home_timeline)
60
- tools.append(self.search_posts)
54
+ tools: List[Any] = [
55
+ self.create_post,
56
+ self.reply_to_post,
57
+ self.send_dm,
58
+ self.get_user_info,
59
+ self.get_home_timeline,
60
+ self.search_posts,
61
+ ]
61
62
 
62
63
  super().__init__(name="x", tools=tools, **kwargs)
63
64
 
agno/tools/yfinance.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import json
2
+ from typing import Any, List
2
3
 
3
4
  from agno.tools import Toolkit
4
5
  from agno.utils.log import log_debug
@@ -12,52 +13,24 @@ except ImportError:
12
13
  class YFinanceTools(Toolkit):
13
14
  """
14
15
  YFinanceTools is a toolkit for getting financial data from Yahoo Finance.
15
- Args:
16
- stock_price (bool): Whether to get the current stock price.
17
- company_info (bool): Whether to get company information.
18
- stock_fundamentals (bool): Whether to get stock fundamentals.
19
- income_statements (bool): Whether to get income statements.
20
- key_financial_ratios (bool): Whether to get key financial ratios.
21
- analyst_recommendations (bool): Whether to get analyst recommendations.
22
- company_news (bool): Whether to get company news.
23
- technical_indicators (bool): Whether to get technical indicators.
24
- historical_prices (bool): Whether to get historical prices.
25
- enable_all (bool): Whether to enable all tools.
16
+ Includes all available financial data tools.
26
17
  """
27
18
 
28
19
  def __init__(
29
20
  self,
30
- stock_price: bool = True,
31
- company_info: bool = False,
32
- stock_fundamentals: bool = False,
33
- income_statements: bool = False,
34
- key_financial_ratios: bool = False,
35
- analyst_recommendations: bool = False,
36
- company_news: bool = False,
37
- technical_indicators: bool = False,
38
- historical_prices: bool = False,
39
- enable_all: bool = False,
40
21
  **kwargs,
41
22
  ):
42
- tools = []
43
- if stock_price or enable_all:
44
- tools.append(self.get_current_stock_price)
45
- if company_info or enable_all:
46
- tools.append(self.get_company_info)
47
- if stock_fundamentals or enable_all:
48
- tools.append(self.get_stock_fundamentals)
49
- if income_statements or enable_all:
50
- tools.append(self.get_income_statements)
51
- if key_financial_ratios or enable_all:
52
- tools.append(self.get_key_financial_ratios)
53
- if analyst_recommendations or enable_all:
54
- tools.append(self.get_analyst_recommendations)
55
- if company_news or enable_all:
56
- tools.append(self.get_company_news)
57
- if technical_indicators or enable_all:
58
- tools.append(self.get_technical_indicators)
59
- if historical_prices or enable_all:
60
- tools.append(self.get_historical_stock_prices)
23
+ tools: List[Any] = [
24
+ self.get_current_stock_price,
25
+ self.get_company_info,
26
+ self.get_stock_fundamentals,
27
+ self.get_income_statements,
28
+ self.get_key_financial_ratios,
29
+ self.get_analyst_recommendations,
30
+ self.get_company_news,
31
+ self.get_technical_indicators,
32
+ self.get_historical_stock_prices,
33
+ ]
61
34
 
62
35
  super().__init__(name="yfinance_tools", tools=tools, **kwargs)
63
36
 
agno/tools/youtube.py CHANGED
@@ -17,9 +17,10 @@ except ImportError:
17
17
  class YouTubeTools(Toolkit):
18
18
  def __init__(
19
19
  self,
20
- get_video_captions: bool = True,
21
- get_video_data: bool = True,
22
- get_video_timestamps: bool = True,
20
+ enable_get_video_captions: bool = True,
21
+ enable_get_video_data: bool = True,
22
+ enable_get_video_timestamps: bool = True,
23
+ all: bool = False,
23
24
  languages: Optional[List[str]] = None,
24
25
  proxies: Optional[Dict[str, Any]] = None,
25
26
  **kwargs,
@@ -28,11 +29,11 @@ class YouTubeTools(Toolkit):
28
29
  self.proxies: Optional[Dict[str, Any]] = proxies
29
30
 
30
31
  tools: List[Any] = []
31
- if get_video_captions:
32
+ if all or enable_get_video_captions:
32
33
  tools.append(self.get_youtube_video_captions)
33
- if get_video_data:
34
+ if all or enable_get_video_data:
34
35
  tools.append(self.get_youtube_video_data)
35
- if get_video_timestamps:
36
+ if all or enable_get_video_timestamps:
36
37
  tools.append(self.get_video_timestamps)
37
38
 
38
39
  super().__init__(name="youtube_tools", tools=tools, **kwargs)
@@ -126,17 +127,19 @@ class YouTubeTools(Toolkit):
126
127
  return "Error getting video ID from URL, please provide a valid YouTube url"
127
128
 
128
129
  try:
129
- ytt_api = YouTubeTranscriptApi()
130
- captions_data = ytt_api.fetch(video_id)
131
-
132
- # log_info(f"Captions for video {video_id}: {captions_data}")
133
-
134
- transcript_text = ""
135
-
136
- for segment in captions_data:
137
- transcript_text += f"{segment.text} "
138
-
139
- return transcript_text.strip() if transcript_text else "No captions found for video"
130
+ captions = None
131
+ kwargs: Dict = {}
132
+ if self.languages:
133
+ kwargs["languages"] = self.languages or ["en"]
134
+ if self.proxies:
135
+ kwargs["proxies"] = self.proxies
136
+ if video_id is not None:
137
+ captions = YouTubeTranscriptApi().fetch(video_id, **kwargs)
138
+ else:
139
+ return "No video ID found"
140
+ if captions:
141
+ return " ".join(line.text for line in captions)
142
+ return "No captions found for video"
140
143
  except Exception as e:
141
144
  # log_info(f"Error getting captions for video {video_id}: {e}")
142
145
  return f"Error getting captions for video: {e}"
@@ -160,6 +163,9 @@ class YouTubeTools(Toolkit):
160
163
  except Exception:
161
164
  return "Error getting video ID from URL, please provide a valid YouTube url"
162
165
 
166
+ if video_id is None:
167
+ return "No video ID found"
168
+
163
169
  try:
164
170
  kwargs: Dict = {}
165
171
  if self.languages:
@@ -167,12 +173,12 @@ class YouTubeTools(Toolkit):
167
173
  if self.proxies:
168
174
  kwargs["proxies"] = self.proxies
169
175
 
170
- captions = YouTubeTranscriptApi.get_transcript(video_id, **kwargs)
176
+ captions = YouTubeTranscriptApi().fetch(video_id, **kwargs)
171
177
  timestamps = []
172
178
  for line in captions:
173
- start = int(line["start"])
179
+ start = int(line.start)
174
180
  minutes, seconds = divmod(start, 60)
175
- timestamps.append(f"{minutes}:{seconds:02d} - {line['text']}")
181
+ timestamps.append(f"{minutes}:{seconds:02d} - {line.text}")
176
182
  return "\n".join(timestamps)
177
183
  except Exception as e:
178
184
  return f"Error generating timestamps: {e}"
agno/tools/zendesk.py CHANGED
@@ -23,6 +23,8 @@ class ZendeskTools(Toolkit):
23
23
  username: Optional[str] = None,
24
24
  password: Optional[str] = None,
25
25
  company_name: Optional[str] = None,
26
+ enable_search_zendesk: bool = True,
27
+ all: bool = False,
26
28
  **kwargs,
27
29
  ):
28
30
  """
@@ -33,16 +35,19 @@ class ZendeskTools(Toolkit):
33
35
  username (str): The username for Zendesk API authentication.
34
36
  password (str): The password for Zendesk API authentication.
35
37
  company_name (str): The company name to form the base URL for API requests.
38
+ enable_search_zendesk (bool): Whether to enable the search functionality.
39
+ all (bool): Enable all functions.
36
40
  """
37
41
  self.username = username or getenv("ZENDESK_USERNAME")
38
- self.password = password or getenv("ZENDESK_PW")
42
+ self.password = password or getenv("ZENDESK_PASSWORD")
39
43
  self.company_name = company_name or getenv("ZENDESK_COMPANY_NAME")
40
44
 
41
45
  if not self.username or not self.password or not self.company_name:
42
46
  logger.error("Username, password, or company name not provided.")
43
47
 
44
48
  tools: List[Any] = []
45
- tools.append(self.search_zendesk)
49
+ if all or enable_search_zendesk:
50
+ tools.append(self.search_zendesk)
46
51
 
47
52
  super().__init__(name="zendesk_tools", tools=tools, **kwargs)
48
53
 
agno/tools/zep.py CHANGED
@@ -40,11 +40,12 @@ class ZepTools(Toolkit):
40
40
  user_id: Optional[str] = None,
41
41
  api_key: Optional[str] = None,
42
42
  ignore_assistant_messages: bool = False,
43
- add_zep_message: bool = True,
44
- get_zep_memory: bool = True,
45
- search_zep_memory: bool = True,
43
+ enable_add_zep_message: bool = True,
44
+ enable_get_zep_memory: bool = True,
45
+ enable_search_zep_memory: bool = True,
46
46
  instructions: Optional[str] = None,
47
47
  add_instructions: bool = False,
48
+ all: bool = False,
48
49
  **kwargs,
49
50
  ):
50
51
  self._api_key = api_key or getenv("ZEP_API_KEY")
@@ -71,11 +72,11 @@ class ZepTools(Toolkit):
71
72
  self.initialize()
72
73
 
73
74
  tools: List[Any] = []
74
- if add_zep_message:
75
+ if enable_add_zep_message or all:
75
76
  tools.append(self.add_zep_message)
76
- if get_zep_memory:
77
+ if enable_get_zep_memory or all:
77
78
  tools.append(self.get_zep_memory)
78
- if search_zep_memory:
79
+ if enable_search_zep_memory or all:
79
80
  tools.append(self.search_zep_memory)
80
81
 
81
82
  super().__init__(
@@ -118,7 +119,7 @@ class ZepTools(Toolkit):
118
119
 
119
120
  # Create session associated with the user
120
121
  try:
121
- self.zep_client.thread.create(thread_id=self.session_id, user_id=self.user_id)
122
+ self.zep_client.thread.create(thread_id=self.session_id, user_id=self.user_id) # type: ignore
122
123
  log_debug(f"Created session {self.session_id} for user {self.user_id}")
123
124
  except Exception as e:
124
125
  log_debug(f"Session may already exist: {e}")
@@ -150,6 +151,7 @@ class ZepTools(Toolkit):
150
151
  zep_message = ZepMessage(
151
152
  role=role,
152
153
  content=content,
154
+ role_type=role,
153
155
  )
154
156
 
155
157
  # Prepare ignore_roles if needed
@@ -358,6 +360,7 @@ class ZepAsyncTools(Toolkit):
358
360
  zep_message = ZepMessage(
359
361
  role=role,
360
362
  content=content,
363
+ role_type=role,
361
364
  )
362
365
 
363
366
  # Prepare ignore_roles if needed
agno/tools/zoom.py CHANGED
@@ -6,7 +6,7 @@ from typing import Any, List, Optional
6
6
 
7
7
  import requests
8
8
 
9
- from agno.tools.toolkit import Toolkit
9
+ from agno.tools import Toolkit
10
10
  from agno.utils.log import log_debug, log_info, logger
11
11
 
12
12
 
@@ -39,14 +39,15 @@ class ZoomTools(Toolkit):
39
39
  "ZOOM_ACCOUNT_ID, ZOOM_CLIENT_ID, and ZOOM_CLIENT_SECRET must be set either through parameters or environment variables."
40
40
  )
41
41
 
42
- tools: List[Any] = []
43
-
44
- tools.append(self.schedule_meeting)
45
- tools.append(self.get_upcoming_meetings)
46
- tools.append(self.list_meetings)
47
- tools.append(self.get_meeting_recordings)
48
- tools.append(self.delete_meeting)
49
- tools.append(self.get_meeting)
42
+ tools: List[Any] = [
43
+ self.get_access_token,
44
+ self.schedule_meeting,
45
+ self.get_upcoming_meetings,
46
+ self.list_meetings,
47
+ self.get_meeting_recordings,
48
+ self.delete_meeting,
49
+ self.get_meeting,
50
+ ]
50
51
 
51
52
  super().__init__(name="zoom_tool", tools=tools, **kwargs)
52
53
 
agno/utils/common.py CHANGED
@@ -10,24 +10,6 @@ def isinstanceany(obj: Any, class_list: List[Type]) -> bool:
10
10
  return False
11
11
 
12
12
 
13
- def str_to_int(inp: Optional[str]) -> Optional[int]:
14
- """
15
- Safely converts a string value to integer.
16
- Args:
17
- inp: input string
18
-
19
- Returns: input string as int if possible, None if not
20
- """
21
- if inp is None:
22
- return None
23
-
24
- try:
25
- val = int(inp)
26
- return val
27
- except Exception:
28
- return None
29
-
30
-
31
13
  def is_empty(val: Any) -> bool:
32
14
  """Returns True if val is None or empty"""
33
15
  if val is None or len(val) == 0 or val == "":
@@ -43,7 +25,7 @@ def dataclass_to_dict(dataclass_object, exclude: Optional[set[str]] = None, excl
43
25
  final_dict = asdict(dataclass_object)
44
26
  if exclude:
45
27
  for key in exclude:
46
- final_dict.pop(key)
28
+ final_dict.pop(key, None)
47
29
  if exclude_none:
48
30
  final_dict = {k: v for k, v in final_dict.items() if v is not None}
49
31
  return final_dict