agno 2.2.13__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 (575) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +51 -0
  3. agno/agent/agent.py +10405 -0
  4. agno/api/__init__.py +0 -0
  5. agno/api/agent.py +28 -0
  6. agno/api/api.py +40 -0
  7. agno/api/evals.py +22 -0
  8. agno/api/os.py +17 -0
  9. agno/api/routes.py +13 -0
  10. agno/api/schemas/__init__.py +9 -0
  11. agno/api/schemas/agent.py +16 -0
  12. agno/api/schemas/evals.py +16 -0
  13. agno/api/schemas/os.py +14 -0
  14. agno/api/schemas/response.py +6 -0
  15. agno/api/schemas/team.py +16 -0
  16. agno/api/schemas/utils.py +21 -0
  17. agno/api/schemas/workflows.py +16 -0
  18. agno/api/settings.py +53 -0
  19. agno/api/team.py +30 -0
  20. agno/api/workflow.py +28 -0
  21. agno/cloud/aws/base.py +214 -0
  22. agno/cloud/aws/s3/__init__.py +2 -0
  23. agno/cloud/aws/s3/api_client.py +43 -0
  24. agno/cloud/aws/s3/bucket.py +195 -0
  25. agno/cloud/aws/s3/object.py +57 -0
  26. agno/culture/__init__.py +3 -0
  27. agno/culture/manager.py +956 -0
  28. agno/db/__init__.py +24 -0
  29. agno/db/async_postgres/__init__.py +3 -0
  30. agno/db/base.py +598 -0
  31. agno/db/dynamo/__init__.py +3 -0
  32. agno/db/dynamo/dynamo.py +2042 -0
  33. agno/db/dynamo/schemas.py +314 -0
  34. agno/db/dynamo/utils.py +743 -0
  35. agno/db/firestore/__init__.py +3 -0
  36. agno/db/firestore/firestore.py +1795 -0
  37. agno/db/firestore/schemas.py +140 -0
  38. agno/db/firestore/utils.py +376 -0
  39. agno/db/gcs_json/__init__.py +3 -0
  40. agno/db/gcs_json/gcs_json_db.py +1335 -0
  41. agno/db/gcs_json/utils.py +228 -0
  42. agno/db/in_memory/__init__.py +3 -0
  43. agno/db/in_memory/in_memory_db.py +1160 -0
  44. agno/db/in_memory/utils.py +230 -0
  45. agno/db/json/__init__.py +3 -0
  46. agno/db/json/json_db.py +1328 -0
  47. agno/db/json/utils.py +230 -0
  48. agno/db/migrations/__init__.py +0 -0
  49. agno/db/migrations/v1_to_v2.py +635 -0
  50. agno/db/mongo/__init__.py +17 -0
  51. agno/db/mongo/async_mongo.py +2026 -0
  52. agno/db/mongo/mongo.py +1982 -0
  53. agno/db/mongo/schemas.py +87 -0
  54. agno/db/mongo/utils.py +259 -0
  55. agno/db/mysql/__init__.py +3 -0
  56. agno/db/mysql/mysql.py +2308 -0
  57. agno/db/mysql/schemas.py +138 -0
  58. agno/db/mysql/utils.py +355 -0
  59. agno/db/postgres/__init__.py +4 -0
  60. agno/db/postgres/async_postgres.py +1927 -0
  61. agno/db/postgres/postgres.py +2260 -0
  62. agno/db/postgres/schemas.py +139 -0
  63. agno/db/postgres/utils.py +442 -0
  64. agno/db/redis/__init__.py +3 -0
  65. agno/db/redis/redis.py +1660 -0
  66. agno/db/redis/schemas.py +123 -0
  67. agno/db/redis/utils.py +346 -0
  68. agno/db/schemas/__init__.py +4 -0
  69. agno/db/schemas/culture.py +120 -0
  70. agno/db/schemas/evals.py +33 -0
  71. agno/db/schemas/knowledge.py +40 -0
  72. agno/db/schemas/memory.py +46 -0
  73. agno/db/schemas/metrics.py +0 -0
  74. agno/db/singlestore/__init__.py +3 -0
  75. agno/db/singlestore/schemas.py +130 -0
  76. agno/db/singlestore/singlestore.py +2272 -0
  77. agno/db/singlestore/utils.py +384 -0
  78. agno/db/sqlite/__init__.py +4 -0
  79. agno/db/sqlite/async_sqlite.py +2293 -0
  80. agno/db/sqlite/schemas.py +133 -0
  81. agno/db/sqlite/sqlite.py +2288 -0
  82. agno/db/sqlite/utils.py +431 -0
  83. agno/db/surrealdb/__init__.py +3 -0
  84. agno/db/surrealdb/metrics.py +292 -0
  85. agno/db/surrealdb/models.py +309 -0
  86. agno/db/surrealdb/queries.py +71 -0
  87. agno/db/surrealdb/surrealdb.py +1353 -0
  88. agno/db/surrealdb/utils.py +147 -0
  89. agno/db/utils.py +116 -0
  90. agno/debug.py +18 -0
  91. agno/eval/__init__.py +14 -0
  92. agno/eval/accuracy.py +834 -0
  93. agno/eval/performance.py +773 -0
  94. agno/eval/reliability.py +306 -0
  95. agno/eval/utils.py +119 -0
  96. agno/exceptions.py +161 -0
  97. agno/filters.py +354 -0
  98. agno/guardrails/__init__.py +6 -0
  99. agno/guardrails/base.py +19 -0
  100. agno/guardrails/openai.py +144 -0
  101. agno/guardrails/pii.py +94 -0
  102. agno/guardrails/prompt_injection.py +52 -0
  103. agno/integrations/__init__.py +0 -0
  104. agno/integrations/discord/__init__.py +3 -0
  105. agno/integrations/discord/client.py +203 -0
  106. agno/knowledge/__init__.py +5 -0
  107. agno/knowledge/chunking/__init__.py +0 -0
  108. agno/knowledge/chunking/agentic.py +79 -0
  109. agno/knowledge/chunking/document.py +91 -0
  110. agno/knowledge/chunking/fixed.py +57 -0
  111. agno/knowledge/chunking/markdown.py +151 -0
  112. agno/knowledge/chunking/recursive.py +63 -0
  113. agno/knowledge/chunking/row.py +39 -0
  114. agno/knowledge/chunking/semantic.py +86 -0
  115. agno/knowledge/chunking/strategy.py +165 -0
  116. agno/knowledge/content.py +74 -0
  117. agno/knowledge/document/__init__.py +5 -0
  118. agno/knowledge/document/base.py +58 -0
  119. agno/knowledge/embedder/__init__.py +5 -0
  120. agno/knowledge/embedder/aws_bedrock.py +343 -0
  121. agno/knowledge/embedder/azure_openai.py +210 -0
  122. agno/knowledge/embedder/base.py +23 -0
  123. agno/knowledge/embedder/cohere.py +323 -0
  124. agno/knowledge/embedder/fastembed.py +62 -0
  125. agno/knowledge/embedder/fireworks.py +13 -0
  126. agno/knowledge/embedder/google.py +258 -0
  127. agno/knowledge/embedder/huggingface.py +94 -0
  128. agno/knowledge/embedder/jina.py +182 -0
  129. agno/knowledge/embedder/langdb.py +22 -0
  130. agno/knowledge/embedder/mistral.py +206 -0
  131. agno/knowledge/embedder/nebius.py +13 -0
  132. agno/knowledge/embedder/ollama.py +154 -0
  133. agno/knowledge/embedder/openai.py +195 -0
  134. agno/knowledge/embedder/sentence_transformer.py +63 -0
  135. agno/knowledge/embedder/together.py +13 -0
  136. agno/knowledge/embedder/vllm.py +262 -0
  137. agno/knowledge/embedder/voyageai.py +165 -0
  138. agno/knowledge/knowledge.py +1988 -0
  139. agno/knowledge/reader/__init__.py +7 -0
  140. agno/knowledge/reader/arxiv_reader.py +81 -0
  141. agno/knowledge/reader/base.py +95 -0
  142. agno/knowledge/reader/csv_reader.py +166 -0
  143. agno/knowledge/reader/docx_reader.py +82 -0
  144. agno/knowledge/reader/field_labeled_csv_reader.py +292 -0
  145. agno/knowledge/reader/firecrawl_reader.py +201 -0
  146. agno/knowledge/reader/json_reader.py +87 -0
  147. agno/knowledge/reader/markdown_reader.py +137 -0
  148. agno/knowledge/reader/pdf_reader.py +431 -0
  149. agno/knowledge/reader/pptx_reader.py +101 -0
  150. agno/knowledge/reader/reader_factory.py +313 -0
  151. agno/knowledge/reader/s3_reader.py +89 -0
  152. agno/knowledge/reader/tavily_reader.py +194 -0
  153. agno/knowledge/reader/text_reader.py +115 -0
  154. agno/knowledge/reader/web_search_reader.py +372 -0
  155. agno/knowledge/reader/website_reader.py +455 -0
  156. agno/knowledge/reader/wikipedia_reader.py +59 -0
  157. agno/knowledge/reader/youtube_reader.py +78 -0
  158. agno/knowledge/remote_content/__init__.py +0 -0
  159. agno/knowledge/remote_content/remote_content.py +88 -0
  160. agno/knowledge/reranker/__init__.py +3 -0
  161. agno/knowledge/reranker/base.py +14 -0
  162. agno/knowledge/reranker/cohere.py +64 -0
  163. agno/knowledge/reranker/infinity.py +195 -0
  164. agno/knowledge/reranker/sentence_transformer.py +54 -0
  165. agno/knowledge/types.py +39 -0
  166. agno/knowledge/utils.py +189 -0
  167. agno/media.py +462 -0
  168. agno/memory/__init__.py +3 -0
  169. agno/memory/manager.py +1327 -0
  170. agno/models/__init__.py +0 -0
  171. agno/models/aimlapi/__init__.py +5 -0
  172. agno/models/aimlapi/aimlapi.py +45 -0
  173. agno/models/anthropic/__init__.py +5 -0
  174. agno/models/anthropic/claude.py +757 -0
  175. agno/models/aws/__init__.py +15 -0
  176. agno/models/aws/bedrock.py +701 -0
  177. agno/models/aws/claude.py +378 -0
  178. agno/models/azure/__init__.py +18 -0
  179. agno/models/azure/ai_foundry.py +485 -0
  180. agno/models/azure/openai_chat.py +131 -0
  181. agno/models/base.py +2175 -0
  182. agno/models/cerebras/__init__.py +12 -0
  183. agno/models/cerebras/cerebras.py +501 -0
  184. agno/models/cerebras/cerebras_openai.py +112 -0
  185. agno/models/cohere/__init__.py +5 -0
  186. agno/models/cohere/chat.py +389 -0
  187. agno/models/cometapi/__init__.py +5 -0
  188. agno/models/cometapi/cometapi.py +57 -0
  189. agno/models/dashscope/__init__.py +5 -0
  190. agno/models/dashscope/dashscope.py +91 -0
  191. agno/models/deepinfra/__init__.py +5 -0
  192. agno/models/deepinfra/deepinfra.py +28 -0
  193. agno/models/deepseek/__init__.py +5 -0
  194. agno/models/deepseek/deepseek.py +61 -0
  195. agno/models/defaults.py +1 -0
  196. agno/models/fireworks/__init__.py +5 -0
  197. agno/models/fireworks/fireworks.py +26 -0
  198. agno/models/google/__init__.py +5 -0
  199. agno/models/google/gemini.py +1085 -0
  200. agno/models/groq/__init__.py +5 -0
  201. agno/models/groq/groq.py +556 -0
  202. agno/models/huggingface/__init__.py +5 -0
  203. agno/models/huggingface/huggingface.py +491 -0
  204. agno/models/ibm/__init__.py +5 -0
  205. agno/models/ibm/watsonx.py +422 -0
  206. agno/models/internlm/__init__.py +3 -0
  207. agno/models/internlm/internlm.py +26 -0
  208. agno/models/langdb/__init__.py +1 -0
  209. agno/models/langdb/langdb.py +48 -0
  210. agno/models/litellm/__init__.py +14 -0
  211. agno/models/litellm/chat.py +468 -0
  212. agno/models/litellm/litellm_openai.py +25 -0
  213. agno/models/llama_cpp/__init__.py +5 -0
  214. agno/models/llama_cpp/llama_cpp.py +22 -0
  215. agno/models/lmstudio/__init__.py +5 -0
  216. agno/models/lmstudio/lmstudio.py +25 -0
  217. agno/models/message.py +434 -0
  218. agno/models/meta/__init__.py +12 -0
  219. agno/models/meta/llama.py +475 -0
  220. agno/models/meta/llama_openai.py +78 -0
  221. agno/models/metrics.py +120 -0
  222. agno/models/mistral/__init__.py +5 -0
  223. agno/models/mistral/mistral.py +432 -0
  224. agno/models/nebius/__init__.py +3 -0
  225. agno/models/nebius/nebius.py +54 -0
  226. agno/models/nexus/__init__.py +3 -0
  227. agno/models/nexus/nexus.py +22 -0
  228. agno/models/nvidia/__init__.py +5 -0
  229. agno/models/nvidia/nvidia.py +28 -0
  230. agno/models/ollama/__init__.py +5 -0
  231. agno/models/ollama/chat.py +441 -0
  232. agno/models/openai/__init__.py +9 -0
  233. agno/models/openai/chat.py +883 -0
  234. agno/models/openai/like.py +27 -0
  235. agno/models/openai/responses.py +1050 -0
  236. agno/models/openrouter/__init__.py +5 -0
  237. agno/models/openrouter/openrouter.py +66 -0
  238. agno/models/perplexity/__init__.py +5 -0
  239. agno/models/perplexity/perplexity.py +187 -0
  240. agno/models/portkey/__init__.py +3 -0
  241. agno/models/portkey/portkey.py +81 -0
  242. agno/models/requesty/__init__.py +5 -0
  243. agno/models/requesty/requesty.py +52 -0
  244. agno/models/response.py +199 -0
  245. agno/models/sambanova/__init__.py +5 -0
  246. agno/models/sambanova/sambanova.py +28 -0
  247. agno/models/siliconflow/__init__.py +5 -0
  248. agno/models/siliconflow/siliconflow.py +25 -0
  249. agno/models/together/__init__.py +5 -0
  250. agno/models/together/together.py +25 -0
  251. agno/models/utils.py +266 -0
  252. agno/models/vercel/__init__.py +3 -0
  253. agno/models/vercel/v0.py +26 -0
  254. agno/models/vertexai/__init__.py +0 -0
  255. agno/models/vertexai/claude.py +70 -0
  256. agno/models/vllm/__init__.py +3 -0
  257. agno/models/vllm/vllm.py +78 -0
  258. agno/models/xai/__init__.py +3 -0
  259. agno/models/xai/xai.py +113 -0
  260. agno/os/__init__.py +3 -0
  261. agno/os/app.py +876 -0
  262. agno/os/auth.py +57 -0
  263. agno/os/config.py +104 -0
  264. agno/os/interfaces/__init__.py +1 -0
  265. agno/os/interfaces/a2a/__init__.py +3 -0
  266. agno/os/interfaces/a2a/a2a.py +42 -0
  267. agno/os/interfaces/a2a/router.py +250 -0
  268. agno/os/interfaces/a2a/utils.py +924 -0
  269. agno/os/interfaces/agui/__init__.py +3 -0
  270. agno/os/interfaces/agui/agui.py +47 -0
  271. agno/os/interfaces/agui/router.py +144 -0
  272. agno/os/interfaces/agui/utils.py +534 -0
  273. agno/os/interfaces/base.py +25 -0
  274. agno/os/interfaces/slack/__init__.py +3 -0
  275. agno/os/interfaces/slack/router.py +148 -0
  276. agno/os/interfaces/slack/security.py +30 -0
  277. agno/os/interfaces/slack/slack.py +47 -0
  278. agno/os/interfaces/whatsapp/__init__.py +3 -0
  279. agno/os/interfaces/whatsapp/router.py +211 -0
  280. agno/os/interfaces/whatsapp/security.py +53 -0
  281. agno/os/interfaces/whatsapp/whatsapp.py +36 -0
  282. agno/os/mcp.py +292 -0
  283. agno/os/middleware/__init__.py +7 -0
  284. agno/os/middleware/jwt.py +233 -0
  285. agno/os/router.py +1763 -0
  286. agno/os/routers/__init__.py +3 -0
  287. agno/os/routers/evals/__init__.py +3 -0
  288. agno/os/routers/evals/evals.py +430 -0
  289. agno/os/routers/evals/schemas.py +142 -0
  290. agno/os/routers/evals/utils.py +162 -0
  291. agno/os/routers/health.py +31 -0
  292. agno/os/routers/home.py +52 -0
  293. agno/os/routers/knowledge/__init__.py +3 -0
  294. agno/os/routers/knowledge/knowledge.py +997 -0
  295. agno/os/routers/knowledge/schemas.py +178 -0
  296. agno/os/routers/memory/__init__.py +3 -0
  297. agno/os/routers/memory/memory.py +515 -0
  298. agno/os/routers/memory/schemas.py +62 -0
  299. agno/os/routers/metrics/__init__.py +3 -0
  300. agno/os/routers/metrics/metrics.py +190 -0
  301. agno/os/routers/metrics/schemas.py +47 -0
  302. agno/os/routers/session/__init__.py +3 -0
  303. agno/os/routers/session/session.py +997 -0
  304. agno/os/schema.py +1055 -0
  305. agno/os/settings.py +43 -0
  306. agno/os/utils.py +630 -0
  307. agno/py.typed +0 -0
  308. agno/reasoning/__init__.py +0 -0
  309. agno/reasoning/anthropic.py +80 -0
  310. agno/reasoning/azure_ai_foundry.py +67 -0
  311. agno/reasoning/deepseek.py +63 -0
  312. agno/reasoning/default.py +97 -0
  313. agno/reasoning/gemini.py +73 -0
  314. agno/reasoning/groq.py +71 -0
  315. agno/reasoning/helpers.py +63 -0
  316. agno/reasoning/ollama.py +67 -0
  317. agno/reasoning/openai.py +86 -0
  318. agno/reasoning/step.py +31 -0
  319. agno/reasoning/vertexai.py +76 -0
  320. agno/run/__init__.py +6 -0
  321. agno/run/agent.py +787 -0
  322. agno/run/base.py +229 -0
  323. agno/run/cancel.py +81 -0
  324. agno/run/messages.py +32 -0
  325. agno/run/team.py +753 -0
  326. agno/run/workflow.py +708 -0
  327. agno/session/__init__.py +10 -0
  328. agno/session/agent.py +295 -0
  329. agno/session/summary.py +265 -0
  330. agno/session/team.py +392 -0
  331. agno/session/workflow.py +205 -0
  332. agno/team/__init__.py +37 -0
  333. agno/team/team.py +8793 -0
  334. agno/tools/__init__.py +10 -0
  335. agno/tools/agentql.py +120 -0
  336. agno/tools/airflow.py +69 -0
  337. agno/tools/api.py +122 -0
  338. agno/tools/apify.py +314 -0
  339. agno/tools/arxiv.py +127 -0
  340. agno/tools/aws_lambda.py +53 -0
  341. agno/tools/aws_ses.py +66 -0
  342. agno/tools/baidusearch.py +89 -0
  343. agno/tools/bitbucket.py +292 -0
  344. agno/tools/brandfetch.py +213 -0
  345. agno/tools/bravesearch.py +106 -0
  346. agno/tools/brightdata.py +367 -0
  347. agno/tools/browserbase.py +209 -0
  348. agno/tools/calcom.py +255 -0
  349. agno/tools/calculator.py +151 -0
  350. agno/tools/cartesia.py +187 -0
  351. agno/tools/clickup.py +244 -0
  352. agno/tools/confluence.py +240 -0
  353. agno/tools/crawl4ai.py +158 -0
  354. agno/tools/csv_toolkit.py +185 -0
  355. agno/tools/dalle.py +110 -0
  356. agno/tools/daytona.py +475 -0
  357. agno/tools/decorator.py +262 -0
  358. agno/tools/desi_vocal.py +108 -0
  359. agno/tools/discord.py +161 -0
  360. agno/tools/docker.py +716 -0
  361. agno/tools/duckdb.py +379 -0
  362. agno/tools/duckduckgo.py +91 -0
  363. agno/tools/e2b.py +703 -0
  364. agno/tools/eleven_labs.py +196 -0
  365. agno/tools/email.py +67 -0
  366. agno/tools/evm.py +129 -0
  367. agno/tools/exa.py +396 -0
  368. agno/tools/fal.py +127 -0
  369. agno/tools/file.py +240 -0
  370. agno/tools/file_generation.py +350 -0
  371. agno/tools/financial_datasets.py +288 -0
  372. agno/tools/firecrawl.py +143 -0
  373. agno/tools/function.py +1187 -0
  374. agno/tools/giphy.py +93 -0
  375. agno/tools/github.py +1760 -0
  376. agno/tools/gmail.py +922 -0
  377. agno/tools/google_bigquery.py +117 -0
  378. agno/tools/google_drive.py +270 -0
  379. agno/tools/google_maps.py +253 -0
  380. agno/tools/googlecalendar.py +674 -0
  381. agno/tools/googlesearch.py +98 -0
  382. agno/tools/googlesheets.py +377 -0
  383. agno/tools/hackernews.py +77 -0
  384. agno/tools/jina.py +101 -0
  385. agno/tools/jira.py +170 -0
  386. agno/tools/knowledge.py +218 -0
  387. agno/tools/linear.py +426 -0
  388. agno/tools/linkup.py +58 -0
  389. agno/tools/local_file_system.py +90 -0
  390. agno/tools/lumalab.py +183 -0
  391. agno/tools/mcp/__init__.py +10 -0
  392. agno/tools/mcp/mcp.py +331 -0
  393. agno/tools/mcp/multi_mcp.py +347 -0
  394. agno/tools/mcp/params.py +24 -0
  395. agno/tools/mcp_toolbox.py +284 -0
  396. agno/tools/mem0.py +193 -0
  397. agno/tools/memori.py +339 -0
  398. agno/tools/memory.py +419 -0
  399. agno/tools/mlx_transcribe.py +139 -0
  400. agno/tools/models/__init__.py +0 -0
  401. agno/tools/models/azure_openai.py +190 -0
  402. agno/tools/models/gemini.py +203 -0
  403. agno/tools/models/groq.py +158 -0
  404. agno/tools/models/morph.py +186 -0
  405. agno/tools/models/nebius.py +124 -0
  406. agno/tools/models_labs.py +195 -0
  407. agno/tools/moviepy_video.py +349 -0
  408. agno/tools/neo4j.py +134 -0
  409. agno/tools/newspaper.py +46 -0
  410. agno/tools/newspaper4k.py +93 -0
  411. agno/tools/notion.py +204 -0
  412. agno/tools/openai.py +202 -0
  413. agno/tools/openbb.py +160 -0
  414. agno/tools/opencv.py +321 -0
  415. agno/tools/openweather.py +233 -0
  416. agno/tools/oxylabs.py +385 -0
  417. agno/tools/pandas.py +102 -0
  418. agno/tools/parallel.py +314 -0
  419. agno/tools/postgres.py +257 -0
  420. agno/tools/pubmed.py +188 -0
  421. agno/tools/python.py +205 -0
  422. agno/tools/reasoning.py +283 -0
  423. agno/tools/reddit.py +467 -0
  424. agno/tools/replicate.py +117 -0
  425. agno/tools/resend.py +62 -0
  426. agno/tools/scrapegraph.py +222 -0
  427. agno/tools/searxng.py +152 -0
  428. agno/tools/serpapi.py +116 -0
  429. agno/tools/serper.py +255 -0
  430. agno/tools/shell.py +53 -0
  431. agno/tools/slack.py +136 -0
  432. agno/tools/sleep.py +20 -0
  433. agno/tools/spider.py +116 -0
  434. agno/tools/sql.py +154 -0
  435. agno/tools/streamlit/__init__.py +0 -0
  436. agno/tools/streamlit/components.py +113 -0
  437. agno/tools/tavily.py +254 -0
  438. agno/tools/telegram.py +48 -0
  439. agno/tools/todoist.py +218 -0
  440. agno/tools/tool_registry.py +1 -0
  441. agno/tools/toolkit.py +146 -0
  442. agno/tools/trafilatura.py +388 -0
  443. agno/tools/trello.py +274 -0
  444. agno/tools/twilio.py +186 -0
  445. agno/tools/user_control_flow.py +78 -0
  446. agno/tools/valyu.py +228 -0
  447. agno/tools/visualization.py +467 -0
  448. agno/tools/webbrowser.py +28 -0
  449. agno/tools/webex.py +76 -0
  450. agno/tools/website.py +54 -0
  451. agno/tools/webtools.py +45 -0
  452. agno/tools/whatsapp.py +286 -0
  453. agno/tools/wikipedia.py +63 -0
  454. agno/tools/workflow.py +278 -0
  455. agno/tools/x.py +335 -0
  456. agno/tools/yfinance.py +257 -0
  457. agno/tools/youtube.py +184 -0
  458. agno/tools/zendesk.py +82 -0
  459. agno/tools/zep.py +454 -0
  460. agno/tools/zoom.py +382 -0
  461. agno/utils/__init__.py +0 -0
  462. agno/utils/agent.py +820 -0
  463. agno/utils/audio.py +49 -0
  464. agno/utils/certs.py +27 -0
  465. agno/utils/code_execution.py +11 -0
  466. agno/utils/common.py +132 -0
  467. agno/utils/dttm.py +13 -0
  468. agno/utils/enum.py +22 -0
  469. agno/utils/env.py +11 -0
  470. agno/utils/events.py +696 -0
  471. agno/utils/format_str.py +16 -0
  472. agno/utils/functions.py +166 -0
  473. agno/utils/gemini.py +426 -0
  474. agno/utils/hooks.py +57 -0
  475. agno/utils/http.py +74 -0
  476. agno/utils/json_schema.py +234 -0
  477. agno/utils/knowledge.py +36 -0
  478. agno/utils/location.py +19 -0
  479. agno/utils/log.py +255 -0
  480. agno/utils/mcp.py +214 -0
  481. agno/utils/media.py +352 -0
  482. agno/utils/merge_dict.py +41 -0
  483. agno/utils/message.py +118 -0
  484. agno/utils/models/__init__.py +0 -0
  485. agno/utils/models/ai_foundry.py +43 -0
  486. agno/utils/models/claude.py +358 -0
  487. agno/utils/models/cohere.py +87 -0
  488. agno/utils/models/llama.py +78 -0
  489. agno/utils/models/mistral.py +98 -0
  490. agno/utils/models/openai_responses.py +140 -0
  491. agno/utils/models/schema_utils.py +153 -0
  492. agno/utils/models/watsonx.py +41 -0
  493. agno/utils/openai.py +257 -0
  494. agno/utils/pickle.py +32 -0
  495. agno/utils/pprint.py +178 -0
  496. agno/utils/print_response/__init__.py +0 -0
  497. agno/utils/print_response/agent.py +842 -0
  498. agno/utils/print_response/team.py +1724 -0
  499. agno/utils/print_response/workflow.py +1668 -0
  500. agno/utils/prompts.py +111 -0
  501. agno/utils/reasoning.py +108 -0
  502. agno/utils/response.py +163 -0
  503. agno/utils/response_iterator.py +17 -0
  504. agno/utils/safe_formatter.py +24 -0
  505. agno/utils/serialize.py +32 -0
  506. agno/utils/shell.py +22 -0
  507. agno/utils/streamlit.py +487 -0
  508. agno/utils/string.py +231 -0
  509. agno/utils/team.py +139 -0
  510. agno/utils/timer.py +41 -0
  511. agno/utils/tools.py +102 -0
  512. agno/utils/web.py +23 -0
  513. agno/utils/whatsapp.py +305 -0
  514. agno/utils/yaml_io.py +25 -0
  515. agno/vectordb/__init__.py +3 -0
  516. agno/vectordb/base.py +127 -0
  517. agno/vectordb/cassandra/__init__.py +5 -0
  518. agno/vectordb/cassandra/cassandra.py +501 -0
  519. agno/vectordb/cassandra/extra_param_mixin.py +11 -0
  520. agno/vectordb/cassandra/index.py +13 -0
  521. agno/vectordb/chroma/__init__.py +5 -0
  522. agno/vectordb/chroma/chromadb.py +929 -0
  523. agno/vectordb/clickhouse/__init__.py +9 -0
  524. agno/vectordb/clickhouse/clickhousedb.py +835 -0
  525. agno/vectordb/clickhouse/index.py +9 -0
  526. agno/vectordb/couchbase/__init__.py +3 -0
  527. agno/vectordb/couchbase/couchbase.py +1442 -0
  528. agno/vectordb/distance.py +7 -0
  529. agno/vectordb/lancedb/__init__.py +6 -0
  530. agno/vectordb/lancedb/lance_db.py +995 -0
  531. agno/vectordb/langchaindb/__init__.py +5 -0
  532. agno/vectordb/langchaindb/langchaindb.py +163 -0
  533. agno/vectordb/lightrag/__init__.py +5 -0
  534. agno/vectordb/lightrag/lightrag.py +388 -0
  535. agno/vectordb/llamaindex/__init__.py +3 -0
  536. agno/vectordb/llamaindex/llamaindexdb.py +166 -0
  537. agno/vectordb/milvus/__init__.py +4 -0
  538. agno/vectordb/milvus/milvus.py +1182 -0
  539. agno/vectordb/mongodb/__init__.py +9 -0
  540. agno/vectordb/mongodb/mongodb.py +1417 -0
  541. agno/vectordb/pgvector/__init__.py +12 -0
  542. agno/vectordb/pgvector/index.py +23 -0
  543. agno/vectordb/pgvector/pgvector.py +1462 -0
  544. agno/vectordb/pineconedb/__init__.py +5 -0
  545. agno/vectordb/pineconedb/pineconedb.py +747 -0
  546. agno/vectordb/qdrant/__init__.py +5 -0
  547. agno/vectordb/qdrant/qdrant.py +1134 -0
  548. agno/vectordb/redis/__init__.py +9 -0
  549. agno/vectordb/redis/redisdb.py +694 -0
  550. agno/vectordb/search.py +7 -0
  551. agno/vectordb/singlestore/__init__.py +10 -0
  552. agno/vectordb/singlestore/index.py +41 -0
  553. agno/vectordb/singlestore/singlestore.py +763 -0
  554. agno/vectordb/surrealdb/__init__.py +3 -0
  555. agno/vectordb/surrealdb/surrealdb.py +699 -0
  556. agno/vectordb/upstashdb/__init__.py +5 -0
  557. agno/vectordb/upstashdb/upstashdb.py +718 -0
  558. agno/vectordb/weaviate/__init__.py +8 -0
  559. agno/vectordb/weaviate/index.py +15 -0
  560. agno/vectordb/weaviate/weaviate.py +1005 -0
  561. agno/workflow/__init__.py +23 -0
  562. agno/workflow/agent.py +299 -0
  563. agno/workflow/condition.py +738 -0
  564. agno/workflow/loop.py +735 -0
  565. agno/workflow/parallel.py +824 -0
  566. agno/workflow/router.py +702 -0
  567. agno/workflow/step.py +1432 -0
  568. agno/workflow/steps.py +592 -0
  569. agno/workflow/types.py +520 -0
  570. agno/workflow/workflow.py +4321 -0
  571. agno-2.2.13.dist-info/METADATA +614 -0
  572. agno-2.2.13.dist-info/RECORD +575 -0
  573. agno-2.2.13.dist-info/WHEEL +5 -0
  574. agno-2.2.13.dist-info/licenses/LICENSE +201 -0
  575. agno-2.2.13.dist-info/top_level.txt +1 -0
@@ -0,0 +1,196 @@
1
+ from io import BytesIO
2
+ from os import getenv, path
3
+ from pathlib import Path
4
+ from typing import Any, Iterator, List, Literal, Optional, Union
5
+ from uuid import uuid4
6
+
7
+ from agno.agent import Agent
8
+ from agno.media import Audio
9
+ from agno.team.team import Team
10
+ from agno.tools import Toolkit
11
+ from agno.tools.function import ToolResult
12
+ from agno.utils.log import log_error, log_info
13
+
14
+ try:
15
+ from elevenlabs import ElevenLabs # type: ignore
16
+ except ImportError:
17
+ raise ImportError("`elevenlabs` not installed. Please install using `pip install elevenlabs`")
18
+
19
+ ElevenLabsAudioOutputFormat = Literal[
20
+ "mp3_22050_32", # mp3 with 22.05kHz sample rate at 32kbps
21
+ "mp3_44100_32", # mp3 with 44.1kHz sample rate at 32kbps
22
+ "mp3_44100_64", # mp3 with 44.1kHz sample rate at 64kbps
23
+ "mp3_44100_96", # mp3 with 44.1kHz sample rate at 96kbps
24
+ "mp3_44100_128", # default, mp3 with 44.1kHz sample rate at 128kbps
25
+ "mp3_44100_192", # mp3 with 44.1kHz sample rate at 192kbps (Creator tier+)
26
+ "pcm_16000", # PCM format (S16LE) with 16kHz sample rate
27
+ "pcm_22050", # PCM format (S16LE) with 22.05kHz sample rate
28
+ "pcm_24000", # PCM format (S16LE) with 24kHz sample rate
29
+ "pcm_44100", # PCM format (S16LE) with 44.1kHz sample rate (Pro tier+)
30
+ "ulaw_8000", # μ-law format with 8kHz sample rate (for Twilio)
31
+ ]
32
+
33
+
34
+ class ElevenLabsTools(Toolkit):
35
+ def __init__(
36
+ self,
37
+ voice_id: str = "JBFqnCBsd6RMkjVDRZzb",
38
+ api_key: Optional[str] = None,
39
+ target_directory: Optional[str] = None,
40
+ model_id: str = "eleven_multilingual_v2",
41
+ output_format: ElevenLabsAudioOutputFormat = "mp3_44100_64",
42
+ enable_get_voices: bool = True,
43
+ enable_generate_sound_effect: bool = True,
44
+ enable_text_to_speech: bool = True,
45
+ all: bool = False,
46
+ **kwargs,
47
+ ):
48
+ self.api_key = api_key or getenv("ELEVEN_LABS_API_KEY")
49
+ if not self.api_key:
50
+ log_error("ELEVEN_LABS_API_KEY not set. Please set the ELEVEN_LABS_API_KEY environment variable.")
51
+
52
+ self.target_directory = target_directory
53
+ self.voice_id = voice_id
54
+ self.model_id = model_id
55
+ self.output_format = output_format
56
+
57
+ if self.target_directory:
58
+ target_path = Path(self.target_directory)
59
+ target_path.mkdir(parents=True, exist_ok=True)
60
+
61
+ self.eleven_labs_client = ElevenLabs(api_key=self.api_key)
62
+
63
+ tools: List[Any] = []
64
+ if all or enable_get_voices:
65
+ tools.append(self.get_voices)
66
+ if all or enable_generate_sound_effect:
67
+ tools.append(self.generate_sound_effect)
68
+ if all or enable_text_to_speech:
69
+ tools.append(self.text_to_speech)
70
+
71
+ super().__init__(name="elevenlabs_tools", tools=tools, **kwargs)
72
+
73
+ def get_voices(self) -> str:
74
+ """
75
+ Get all the voices available.
76
+
77
+ Returns:
78
+ result (list): A list of voices that have an ID, name and description.
79
+ """
80
+ try:
81
+ voices = self.eleven_labs_client.voices.get_all()
82
+
83
+ response = []
84
+ for voice in voices.voices:
85
+ response.append(
86
+ {
87
+ "id": voice.voice_id,
88
+ "name": voice.name,
89
+ "description": voice.description,
90
+ }
91
+ )
92
+
93
+ return str(response)
94
+
95
+ except Exception as e:
96
+ log_error(f"Failed to fetch voices: {e}")
97
+ return f"Error: {e}"
98
+
99
+ def _process_audio(self, audio_generator: Iterator[bytes]) -> bytes:
100
+ audio_bytes = BytesIO()
101
+ for chunk in audio_generator:
102
+ audio_bytes.write(chunk)
103
+
104
+ # Read bytes
105
+ audio_bytes.seek(0)
106
+ audio_data = audio_bytes.read()
107
+
108
+ # Save to disk if target_directory exists
109
+ if self.target_directory:
110
+ # Determine file extension based on output format
111
+ if self.output_format.startswith("mp3"):
112
+ extension = "mp3"
113
+ elif self.output_format.startswith("pcm"):
114
+ extension = "wav"
115
+ elif self.output_format.startswith("ulaw"):
116
+ extension = "ulaw"
117
+ else:
118
+ extension = "mp3"
119
+
120
+ output_filename = f"{uuid4()}.{extension}"
121
+ output_path = path.join(self.target_directory, output_filename)
122
+
123
+ with open(output_path, "wb") as f:
124
+ f.write(audio_data)
125
+
126
+ log_info(f"Audio saved to: {output_path}")
127
+
128
+ return audio_data
129
+
130
+ def generate_sound_effect(self, prompt: str, duration_seconds: Optional[float] = None) -> ToolResult:
131
+ """
132
+ Generate a sound effect from a text description.
133
+
134
+ Args:
135
+ prompt (str): Description of the sound effect
136
+ duration_seconds (Optional[float]): Duration in seconds to generate audio from. Has to be between 0.5 and 22.
137
+ Returns:
138
+ ToolResult: A ToolResult containing the generated audio or error message.
139
+ """
140
+ try:
141
+ audio_generator = self.eleven_labs_client.text_to_sound_effects.convert(
142
+ text=prompt, duration_seconds=duration_seconds
143
+ )
144
+
145
+ audio_data = self._process_audio(audio_generator)
146
+
147
+ # Create AudioArtifact
148
+ audio_artifact = Audio(
149
+ id=str(uuid4()),
150
+ content=audio_data,
151
+ mime_type="audio/mpeg",
152
+ )
153
+
154
+ return ToolResult(
155
+ content="Sound effect generated successfully",
156
+ audios=[audio_artifact],
157
+ )
158
+
159
+ except Exception as e:
160
+ log_error(f"Failed to generate sound effect: {e}")
161
+ return ToolResult(content=f"Error: {e}")
162
+
163
+ def text_to_speech(self, agent: Union[Agent, Team], prompt: str) -> ToolResult:
164
+ """
165
+ Convert text to speech.
166
+
167
+ Args:
168
+ prompt (str): Text to generate audio from.
169
+ Returns:
170
+ ToolResult: A ToolResult containing the generated audio or error message.
171
+ """
172
+ try:
173
+ audio_generator = self.eleven_labs_client.text_to_speech.convert(
174
+ text=prompt,
175
+ voice_id=self.voice_id,
176
+ model_id=self.model_id,
177
+ output_format=self.output_format,
178
+ )
179
+
180
+ audio_data = self._process_audio(audio_generator)
181
+
182
+ # Create AudioArtifact
183
+ audio_artifact = Audio(
184
+ id=str(uuid4()),
185
+ content=audio_data,
186
+ mime_type="audio/mpeg",
187
+ )
188
+
189
+ return ToolResult(
190
+ content="Audio generated successfully",
191
+ audios=[audio_artifact],
192
+ )
193
+
194
+ except Exception as e:
195
+ log_error(f"Failed to generate audio: {e}")
196
+ return ToolResult(content=f"Error: {e}")
agno/tools/email.py ADDED
@@ -0,0 +1,67 @@
1
+ from typing import Optional
2
+
3
+ from agno.tools import Toolkit
4
+ from agno.utils.log import log_info, logger
5
+
6
+
7
+ class EmailTools(Toolkit):
8
+ def __init__(
9
+ self,
10
+ receiver_email: Optional[str] = None,
11
+ sender_name: Optional[str] = None,
12
+ sender_email: Optional[str] = None,
13
+ sender_passkey: Optional[str] = None,
14
+ enable_email_user: bool = True,
15
+ all: bool = False,
16
+ **kwargs,
17
+ ):
18
+ self.receiver_email: Optional[str] = receiver_email
19
+ self.sender_name: Optional[str] = sender_name
20
+ self.sender_email: Optional[str] = sender_email
21
+ self.sender_passkey: Optional[str] = sender_passkey
22
+
23
+ tools = []
24
+ if all or enable_email_user:
25
+ tools.append(self.email_user)
26
+
27
+ # Call superclass with tools list
28
+ super().__init__(name="email_tools", tools=tools, **kwargs)
29
+
30
+ def email_user(self, subject: str, body: str, **kwargs) -> str:
31
+ """Emails the user with the given subject and body.
32
+
33
+ :param subject: The subject of the email.
34
+ :param body: The body of the email.
35
+ :return: "success" if the email was sent successfully, "error: [error message]" otherwise.
36
+ """
37
+ try:
38
+ import smtplib
39
+ from email.message import EmailMessage
40
+ except ImportError:
41
+ logger.error("`smtplib` not installed")
42
+ raise
43
+
44
+ if not self.receiver_email:
45
+ return "error: No receiver email provided"
46
+ if not self.sender_name:
47
+ return "error: No sender name provided"
48
+ if not self.sender_email:
49
+ return "error: No sender email provided"
50
+ if not self.sender_passkey:
51
+ return "error: No sender passkey provided"
52
+
53
+ msg = EmailMessage()
54
+ msg["Subject"] = subject
55
+ msg["From"] = f"{self.sender_name} <{self.sender_email}>"
56
+ msg["To"] = self.receiver_email
57
+ msg.set_content(body)
58
+
59
+ log_info(f"Sending Email to {self.receiver_email}")
60
+ try:
61
+ with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp:
62
+ smtp.login(self.sender_email, self.sender_passkey)
63
+ smtp.send_message(msg)
64
+ except Exception as e:
65
+ logger.error(f"Error sending email: {e}")
66
+ return f"error: {e}"
67
+ return "email sent successfully"
agno/tools/evm.py ADDED
@@ -0,0 +1,129 @@
1
+ from os import getenv
2
+ from typing import Optional
3
+
4
+ from agno.tools import Toolkit
5
+ from agno.utils.log import log_debug, log_error
6
+
7
+ try:
8
+ from eth_account.account import LocalAccount
9
+ from eth_account.datastructures import SignedTransaction
10
+ from hexbytes import HexBytes
11
+ from web3 import Web3
12
+ from web3.main import Web3 as Web3Type
13
+ from web3.providers.rpc import HTTPProvider
14
+ from web3.types import TxParams, TxReceipt
15
+ except ImportError:
16
+ raise ImportError("`web3` not installed. Please install using `pip install web3`")
17
+
18
+
19
+ class EvmTools(Toolkit):
20
+ def __init__(
21
+ self,
22
+ private_key: Optional[str] = None,
23
+ rpc_url: Optional[str] = None,
24
+ enable_send_transaction: bool = True,
25
+ all: bool = False,
26
+ **kwargs,
27
+ ):
28
+ """Initialize EVM tools for blockchain interactions.
29
+
30
+ Args:
31
+ private_key: Private key for signing transactions (defaults to EVM_PRIVATE_KEY env var)
32
+ rpc_url: RPC URL for blockchain connection (defaults to EVM_RPC_URL env var)
33
+ **kwargs: Additional arguments passed to parent Toolkit class
34
+ """
35
+
36
+ self.private_key = private_key or getenv("EVM_PRIVATE_KEY")
37
+ self.rpc_url = rpc_url or getenv("EVM_RPC_URL")
38
+
39
+ if not self.private_key:
40
+ log_error("Private Key is required")
41
+ raise ValueError("Private Key is required")
42
+ if not self.rpc_url:
43
+ log_error("RPC Url is needed to interact with EVM blockchain")
44
+ raise ValueError("RPC Url is needed to interact with EVM blockchain")
45
+
46
+ # Ensure private key has 0x prefix
47
+ if not self.private_key.startswith("0x"):
48
+ self.private_key = f"0x{self.private_key}"
49
+
50
+ # Initialize Web3 client and account
51
+ self.web3_client: "Web3Type" = Web3(HTTPProvider(self.rpc_url))
52
+ self.account: "LocalAccount" = self.web3_client.eth.account.from_key(self.private_key)
53
+ log_debug(f"Your wallet address is: {self.account.address}")
54
+
55
+ tools = []
56
+ if all or enable_send_transaction:
57
+ tools.append(self.send_transaction)
58
+
59
+ super().__init__(name="evm_tools", tools=tools, **kwargs)
60
+
61
+ def get_max_priority_fee_per_gas(self) -> int:
62
+ """Get the max priority fee per gas for the transaction.
63
+
64
+ Returns:
65
+ int: The max priority fee per gas for the transaction (1 gwei)
66
+ """
67
+ max_priority_fee_per_gas = self.web3_client.to_wei(1, "gwei")
68
+ return max_priority_fee_per_gas
69
+
70
+ def get_max_fee_per_gas(self, max_priority_fee_per_gas: int) -> int:
71
+ """Get the max fee per gas for the transaction.
72
+
73
+ Args:
74
+ max_priority_fee_per_gas: The max priority fee per gas
75
+
76
+ Returns:
77
+ int: The max fee per gas for the transaction
78
+ """
79
+ latest_block = self.web3_client.eth.get_block("latest")
80
+ base_fee_per_gas = latest_block.get("baseFeePerGas")
81
+ if base_fee_per_gas is None:
82
+ log_error("Base fee per gas not found in the latest block.")
83
+ raise ValueError("Base fee per gas not found in the latest block.")
84
+ max_fee_per_gas = (2 * base_fee_per_gas) + max_priority_fee_per_gas
85
+ return max_fee_per_gas
86
+
87
+ def send_transaction(self, to_address: str, amount_in_wei: int) -> str:
88
+ """Sends a transaction to the address provided.
89
+
90
+ Args:
91
+ to_address: The address to which you want to send ETH
92
+ amount_in_wei: The amount of ETH to send in wei
93
+
94
+ Returns:
95
+ str: The transaction hash of the transaction or error message
96
+ """
97
+ try:
98
+ max_priority_fee_per_gas = self.get_max_priority_fee_per_gas()
99
+ max_fee_per_gas = self.get_max_fee_per_gas(max_priority_fee_per_gas)
100
+
101
+ transaction_params: "TxParams" = {
102
+ "from": self.account.address,
103
+ "to": to_address,
104
+ "value": amount_in_wei, # type: ignore[typeddict-item]
105
+ "nonce": self.web3_client.eth.get_transaction_count(self.account.address),
106
+ "gas": 21000,
107
+ "maxFeePerGas": max_fee_per_gas, # type: ignore[typeddict-item]
108
+ "maxPriorityFeePerGas": max_priority_fee_per_gas, # type: ignore[typeddict-item]
109
+ "chainId": self.web3_client.eth.chain_id,
110
+ "type": 2, # EIP-1559 dynamic fee transaction
111
+ }
112
+
113
+ signed_transaction: "SignedTransaction" = self.web3_client.eth.account.sign_transaction(
114
+ transaction_params, self.private_key
115
+ )
116
+ transaction_hash: "HexBytes" = self.web3_client.eth.send_raw_transaction(signed_transaction.raw_transaction)
117
+ log_debug(f"Ongoing Transaction hash: 0x{transaction_hash.hex()}")
118
+
119
+ transaction_receipt: "TxReceipt" = self.web3_client.eth.wait_for_transaction_receipt(transaction_hash)
120
+ if transaction_receipt.get("status") == 1:
121
+ log_debug(f"Transaction successful! Transaction hash: 0x{transaction_hash.hex()}")
122
+ return f"0x{transaction_hash.hex()}"
123
+ else:
124
+ log_error("Transaction failed!")
125
+ raise Exception("Transaction failed!")
126
+
127
+ except Exception as e:
128
+ log_error(f"Error sending transaction: {e}")
129
+ return f"error: {e}"