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,222 @@
1
+ import json
2
+ from os import getenv
3
+ from typing import Any, List, Optional
4
+
5
+ from agno.tools import Toolkit
6
+ from agno.utils.log import log_debug, log_error
7
+
8
+ try:
9
+ from scrapegraph_py import Client
10
+ from scrapegraph_py.logger import sgai_logger
11
+ except ImportError:
12
+ raise ImportError("`scrapegraph-py` not installed. Please install using `pip install scrapegraph-py`")
13
+
14
+ # Set logging level
15
+ sgai_logger.set_logging(level="INFO")
16
+
17
+
18
+ class ScrapeGraphTools(Toolkit):
19
+ def __init__(
20
+ self,
21
+ api_key: Optional[str] = None,
22
+ enable_smartscraper: bool = True,
23
+ enable_markdownify: bool = False,
24
+ enable_crawl: bool = False,
25
+ enable_searchscraper: bool = False,
26
+ enable_agentic_crawler: bool = False,
27
+ enable_scrape: bool = False,
28
+ render_heavy_js: bool = False,
29
+ all: bool = False,
30
+ **kwargs,
31
+ ):
32
+ self.api_key: Optional[str] = api_key or getenv("SGAI_API_KEY")
33
+ self.client = Client(api_key=self.api_key)
34
+ self.render_heavy_js = render_heavy_js
35
+
36
+ # Start with smartscraper by default
37
+ # Only enable markdownify if smartscraper is False
38
+ if not enable_smartscraper and not all:
39
+ enable_markdownify = True
40
+
41
+ tools: List[Any] = []
42
+ if enable_smartscraper or all:
43
+ tools.append(self.smartscraper)
44
+ if enable_markdownify or all:
45
+ tools.append(self.markdownify)
46
+ if enable_crawl or all:
47
+ tools.append(self.crawl)
48
+ if enable_searchscraper or all:
49
+ tools.append(self.searchscraper)
50
+ if enable_agentic_crawler or all:
51
+ tools.append(self.agentic_crawler)
52
+ if enable_scrape or all:
53
+ tools.append(self.scrape)
54
+
55
+ super().__init__(name="scrapegraph_tools", tools=tools, **kwargs)
56
+
57
+ def smartscraper(self, url: str, prompt: str) -> str:
58
+ """Extract structured data from a webpage using LLM.
59
+ Args:
60
+ url (str): The URL to scrape
61
+ prompt (str): Natural language prompt describing what to extract
62
+ Returns:
63
+ The structured data extracted from the webpage
64
+ """
65
+ try:
66
+ log_debug(f"ScrapeGraph smartscraper request for URL: {url}")
67
+ response = self.client.smartscraper(website_url=url, user_prompt=prompt)
68
+ return json.dumps(response["result"])
69
+ except Exception as e:
70
+ error_msg = f"Smartscraper failed: {str(e)}"
71
+ log_error(error_msg)
72
+ return f"Error: {error_msg}"
73
+
74
+ def markdownify(self, url: str) -> str:
75
+ """Convert a webpage to markdown format.
76
+ Args:
77
+ url (str): The URL to convert
78
+ Returns:
79
+ The markdown version of the webpage
80
+ """
81
+ try:
82
+ log_debug(f"ScrapeGraph markdownify request for URL: {url}")
83
+ response = self.client.markdownify(website_url=url)
84
+ return response["result"]
85
+ except Exception as e:
86
+ error_msg = f"Markdownify failed: {str(e)}"
87
+ log_error(error_msg)
88
+ return f"Error: {error_msg}"
89
+
90
+ def crawl(
91
+ self,
92
+ url: str,
93
+ prompt: str,
94
+ schema: dict,
95
+ cache_website: bool = True,
96
+ depth: int = 2,
97
+ max_pages: int = 2,
98
+ same_domain_only: bool = True,
99
+ batch_size: int = 1,
100
+ ) -> str:
101
+ """Crawl a website and extract structured data
102
+ Args:
103
+ url (str): The URL to crawl
104
+ prompt (str): Natural language prompt describing what to extract
105
+ schema (dict): JSON schema for extraction
106
+ cache_website (bool): Whether to cache the website
107
+ depth (int): Crawl depth
108
+ max_pages (int): Max number of pages to crawl
109
+ same_domain_only (bool): Restrict to same domain
110
+ batch_size (int): Batch size for crawling
111
+ Returns:
112
+ The structured data extracted from the website
113
+ """
114
+ try:
115
+ log_debug(f"ScrapeGraph crawl request for URL: {url}")
116
+ response = self.client.crawl(
117
+ url=url,
118
+ prompt=prompt,
119
+ data_schema=schema,
120
+ cache_website=cache_website,
121
+ depth=depth,
122
+ max_pages=max_pages,
123
+ same_domain_only=same_domain_only,
124
+ batch_size=batch_size,
125
+ )
126
+ return json.dumps(response, indent=2)
127
+ except Exception as e:
128
+ error_msg = f"Crawl failed: {str(e)}"
129
+ log_error(error_msg)
130
+ return f"Error: {error_msg}"
131
+
132
+ def agentic_crawler(
133
+ self,
134
+ url: str,
135
+ steps: List[str],
136
+ use_session: bool = True,
137
+ user_prompt: Optional[str] = None,
138
+ output_schema: Optional[dict] = None,
139
+ ai_extraction: bool = False,
140
+ ) -> str:
141
+ """Perform agentic crawling with automated browser actions and optional AI extraction.
142
+
143
+ This tool can:
144
+ 1. Navigate to a website
145
+ 2. Perform a series of automated actions (like filling forms, clicking buttons)
146
+ 3. Extract the resulting HTML content as markdown
147
+ 4. Optionally use AI to extract structured data
148
+
149
+ Args:
150
+ url (str): The URL to scrape
151
+ steps (List[str]): List of steps to perform on the webpage (e.g., ["Type email in input box", "click login"])
152
+ use_session (bool): Whether to use session for the scraping (default: True)
153
+ user_prompt (Optional[str]): Prompt for AI extraction (only used when ai_extraction=True)
154
+ output_schema (Optional[dict]): Schema for structured data extraction (only used when ai_extraction=True)
155
+ ai_extraction (bool): Whether to use AI for data extraction from the scraped content (default: False)
156
+
157
+ Returns:
158
+ JSON string containing the scraping results, including request_id, status, and extracted data
159
+ """
160
+ try:
161
+ log_debug(f"ScrapeGraph agentic_crawler request for URL: {url}")
162
+
163
+ # Prepare parameters for the API call
164
+ params = {"url": url, "steps": steps, "use_session": use_session, "ai_extraction": ai_extraction}
165
+
166
+ # Add optional parameters only if they are provided
167
+ if user_prompt:
168
+ params["user_prompt"] = user_prompt
169
+ if output_schema:
170
+ params["output_schema"] = output_schema
171
+
172
+ # Call the agentic scraper API
173
+ response = self.client.agenticscraper(**params)
174
+ return json.dumps(response, indent=2)
175
+
176
+ except Exception as e:
177
+ error_msg = f"Agentic crawler failed: {str(e)}"
178
+ log_error(error_msg)
179
+ return f"Error: {error_msg}"
180
+
181
+ def searchscraper(self, user_prompt: str) -> str:
182
+ """Search the web and extract information from the web.
183
+ Args:
184
+ user_prompt (str): Search query
185
+ Returns:
186
+ JSON of the search results
187
+ """
188
+ try:
189
+ log_debug(f"ScrapeGraph searchscraper request with prompt: {user_prompt}")
190
+ response = self.client.searchscraper(user_prompt=user_prompt)
191
+ return json.dumps(response["result"])
192
+ except Exception as e:
193
+ error_msg = f"Searchscraper failed: {str(e)}"
194
+ log_error(error_msg)
195
+ return f"Error: {error_msg}"
196
+
197
+ def scrape(
198
+ self,
199
+ website_url: str,
200
+ headers: Optional[dict] = None,
201
+ ) -> str:
202
+ """Get raw HTML content from a website using the ScrapeGraphAI scrape API.
203
+
204
+ Args:
205
+ website_url (str): The URL of the website to scrape
206
+ headers (Optional[dict]): Optional headers to send with the request
207
+
208
+ Returns:
209
+ JSON string containing the HTML content and metadata
210
+ """
211
+ try:
212
+ log_debug(f"ScrapeGraph scrape request for URL: {website_url}")
213
+ response = self.client.scrape(
214
+ website_url=website_url,
215
+ headers=headers,
216
+ render_heavy_js=self.render_heavy_js,
217
+ )
218
+ return json.dumps(response, indent=2)
219
+ except Exception as e:
220
+ error_msg = f"Scrape failed: {str(e)}"
221
+ log_error(error_msg)
222
+ return f"Error: {error_msg}"
agno/tools/searxng.py ADDED
@@ -0,0 +1,152 @@
1
+ import json
2
+ import urllib.parse
3
+ from typing import Any, List, Optional
4
+
5
+ import httpx
6
+
7
+ from agno.tools import Toolkit
8
+ from agno.utils.log import log_info
9
+
10
+
11
+ class Searxng(Toolkit):
12
+ def __init__(
13
+ self,
14
+ host: str,
15
+ engines: List[str] = [],
16
+ fixed_max_results: Optional[int] = None,
17
+ **kwargs,
18
+ ):
19
+ self.host = host
20
+ self.engines = engines
21
+ self.fixed_max_results = fixed_max_results
22
+
23
+ tools: List[Any] = [
24
+ self.search_web,
25
+ self.image_search,
26
+ self.it_search,
27
+ self.map_search,
28
+ self.music_search,
29
+ self.news_search,
30
+ self.science_search,
31
+ self.video_search,
32
+ ]
33
+
34
+ super().__init__(name="searxng", tools=tools, **kwargs)
35
+
36
+ def search_web(self, query: str, max_results: int = 5) -> str:
37
+ """Use this function to search the web.
38
+
39
+ Args:
40
+ query (str): The query to search the web with.
41
+ max_results (int, optional): The maximum number of results to return. Defaults to 5.
42
+
43
+ Returns:
44
+ The results of the search.
45
+ """
46
+ return self._search(query, max_results=max_results)
47
+
48
+ def image_search(self, query: str, max_results: int = 5) -> str:
49
+ """Use this function to search for images.
50
+
51
+ Args:
52
+ query (str): The query to search images with.
53
+ max_results (int, optional): The maximum number of results to return. Defaults to 5.
54
+
55
+ Returns:
56
+ The results of the search.
57
+ """
58
+ return self._search(query, "images", max_results)
59
+
60
+ def it_search(self, query: str, max_results: int = 5) -> str:
61
+ """Use this function to search for IT related information.
62
+
63
+ Args:
64
+ query (str): The query to search for IT related information.
65
+ max_results (int, optional): The maximum number of results to return. Defaults to 5.
66
+
67
+ Returns:
68
+ The results of the search.
69
+ """
70
+ return self._search(query, "it", max_results)
71
+
72
+ def map_search(self, query: str, max_results: int = 5) -> str:
73
+ """Use this function to search maps
74
+
75
+ Args:
76
+ query (str): The query to search maps with.
77
+ max_results (int, optional): The maximum number of results to return. Defaults to 5.
78
+
79
+ Returns:
80
+ The results of the search.
81
+ """
82
+ return self._search(query, "map", max_results)
83
+
84
+ def music_search(self, query: str, max_results: int = 5) -> str:
85
+ """Use this function to search for information related to music.
86
+
87
+ Args:
88
+ query (str): The query to search music with.
89
+ max_results (int, optional): The maximum number of results to return. Defaults to 5.
90
+
91
+ Returns:
92
+ The results of the search.
93
+ """
94
+ return self._search(query, "music", max_results)
95
+
96
+ def news_search(self, query: str, max_results: int = 5) -> str:
97
+ """Use this function to search for news.
98
+
99
+ Args:
100
+ query (str): The query to search news with.
101
+ max_results (int, optional): The maximum number of results to return. Defaults to 5.
102
+
103
+ Returns:
104
+ The results of the search.
105
+ """
106
+ return self._search(query, "news", max_results)
107
+
108
+ def science_search(self, query: str, max_results: int = 5) -> str:
109
+ """Use this function to search for information related to science.
110
+
111
+ Args:
112
+ query (str): The query to search science with.
113
+ max_results (int, optional): The maximum number of results to return. Defaults to 5.
114
+
115
+ Returns:
116
+ The results of the search.
117
+ """
118
+ return self._search(query, "science", max_results)
119
+
120
+ def video_search(self, query: str, max_results: int = 5) -> str:
121
+ """Use this function to search for videos.
122
+
123
+ Args:
124
+ query (str): The query to search videos with.
125
+ max_results (int, optional): The maximum number of results to return. Defaults to 5.
126
+
127
+ Returns:
128
+ The results of the search.
129
+ """
130
+ return self._search(query, "videos", max_results)
131
+
132
+ def _search(self, query: str, category: Optional[str] = None, max_results: int = 5) -> str:
133
+ encoded_query = urllib.parse.quote(query)
134
+ url = f"{self.host}/search?format=json&q={encoded_query}"
135
+
136
+ if self.engines:
137
+ url += f"&engines={','.join(self.engines)}"
138
+ if category:
139
+ url += f"&categories={category}"
140
+
141
+ log_info(f"Fetching results from searxng: {url}")
142
+ try:
143
+ resp = httpx.get(url).json()
144
+ results = self.fixed_max_results or max_results
145
+ resp["results"] = resp["results"][:results]
146
+ return json.dumps(resp)
147
+ except Exception as e:
148
+ return f"Error fetching results from searxng: {e}"
149
+
150
+
151
+ # Alias for consistency with other tools
152
+ SearxngTools = Searxng
agno/tools/serpapi.py ADDED
@@ -0,0 +1,116 @@
1
+ import json
2
+ from os import getenv
3
+ from typing import Any, List, Optional
4
+
5
+ from agno.tools import Toolkit
6
+ from agno.utils.log import log_info, logger
7
+
8
+ try:
9
+ import serpapi
10
+ except ImportError:
11
+ raise ImportError("`google-search-results` not installed.")
12
+
13
+
14
+ class SerpApiTools(Toolkit):
15
+ def __init__(
16
+ self,
17
+ api_key: Optional[str] = None,
18
+ enable_search_google: bool = True,
19
+ enable_search_youtube: bool = False,
20
+ all: bool = False,
21
+ **kwargs,
22
+ ):
23
+ self.api_key = api_key or getenv("SERP_API_KEY")
24
+ if not self.api_key:
25
+ logger.warning("No Serpapi API key provided")
26
+
27
+ tools: List[Any] = []
28
+ if all or enable_search_google:
29
+ tools.append(self.search_google)
30
+ if all or enable_search_youtube:
31
+ tools.append(self.search_youtube)
32
+
33
+ super().__init__(name="serpapi_tools", tools=tools, **kwargs)
34
+
35
+ def search_google(self, query: str, num_results: int = 10) -> str:
36
+ """
37
+ Search Google using the Serpapi API. Returns the search results.
38
+
39
+ Args:
40
+ query(str): The query to search for.
41
+ num_results(int): The number of results to return.
42
+
43
+ Returns:
44
+ str: The search results from Google.
45
+ Keys:
46
+ - 'search_results': List of organic search results.
47
+ - 'recipes_results': List of recipes search results.
48
+ - 'shopping_results': List of shopping search results.
49
+ - 'knowledge_graph': The knowledge graph.
50
+ - 'related_questions': List of related questions.
51
+ """
52
+
53
+ try:
54
+ if not self.api_key:
55
+ return "Please provide an API key"
56
+ if not query:
57
+ return "Please provide a query to search for"
58
+
59
+ log_info(f"Searching Google for: {query}")
60
+
61
+ params = {"q": query, "api_key": self.api_key, "num": num_results}
62
+
63
+ search = serpapi.GoogleSearch(params)
64
+ results = search.get_dict()
65
+
66
+ filtered_results = {
67
+ "search_results": results.get("organic_results", ""),
68
+ "recipes_results": results.get("recipes_results", ""),
69
+ "shopping_results": results.get("shopping_results", ""),
70
+ "knowledge_graph": results.get("knowledge_graph", ""),
71
+ "related_questions": results.get("related_questions", ""),
72
+ }
73
+
74
+ return json.dumps(filtered_results)
75
+
76
+ except Exception as e:
77
+ return f"Error searching for the query {query}: {e}"
78
+
79
+ def search_youtube(self, query: str) -> str:
80
+ """
81
+ Search Youtube using the Serpapi API. Returns the search results.
82
+
83
+ Args:
84
+ query(str): The query to search for.
85
+
86
+ Returns:
87
+ str: The video search results from Youtube.
88
+ Keys:
89
+ - 'video_results': List of video results.
90
+ - 'movie_results': List of movie results.
91
+ - 'channel_results': List of channel results.
92
+ """
93
+
94
+ try:
95
+ if not self.api_key:
96
+ return "Please provide an API key"
97
+ if not query:
98
+ return "Please provide a query to search for"
99
+
100
+ log_info(f"Searching Youtube for: {query}")
101
+
102
+ params = {"search_query": query, "api_key": self.api_key}
103
+
104
+ search = serpapi.YoutubeSearch(params)
105
+ results = search.get_dict()
106
+
107
+ filtered_results = {
108
+ "video_results": results.get("video_results", ""),
109
+ "movie_results": results.get("movie_results", ""),
110
+ "channel_results": results.get("channel_results", ""),
111
+ }
112
+
113
+ return json.dumps(filtered_results)
114
+
115
+ except Exception as e:
116
+ return f"Error searching for the query {query}: {e}"