agno 2.3.21__tar.gz → 2.3.22__tar.gz

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 (650) hide show
  1. {agno-2.3.21 → agno-2.3.22}/PKG-INFO +13 -14
  2. {agno-2.3.21 → agno-2.3.22}/README.md +11 -12
  3. {agno-2.3.21 → agno-2.3.22}/agno/agent/agent.py +26 -1
  4. {agno-2.3.21 → agno-2.3.22}/agno/agent/remote.py +233 -72
  5. agno-2.3.22/agno/client/a2a/__init__.py +10 -0
  6. agno-2.3.22/agno/client/a2a/client.py +554 -0
  7. agno-2.3.22/agno/client/a2a/schemas.py +112 -0
  8. agno-2.3.22/agno/client/a2a/utils.py +369 -0
  9. agno-2.3.22/agno/db/migrations/utils.py +19 -0
  10. {agno-2.3.21 → agno-2.3.22}/agno/db/migrations/v1_to_v2.py +54 -16
  11. {agno-2.3.21 → agno-2.3.22}/agno/db/migrations/versions/v2_3_0.py +92 -53
  12. {agno-2.3.21 → agno-2.3.22}/agno/db/postgres/async_postgres.py +162 -40
  13. {agno-2.3.21 → agno-2.3.22}/agno/db/postgres/postgres.py +181 -31
  14. {agno-2.3.21 → agno-2.3.22}/agno/db/postgres/utils.py +6 -2
  15. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/document.py +3 -2
  16. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/markdown.py +8 -3
  17. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/recursive.py +2 -2
  18. {agno-2.3.21 → agno-2.3.22}/agno/models/openai/chat.py +1 -1
  19. {agno-2.3.21 → agno-2.3.22}/agno/models/openai/responses.py +14 -7
  20. {agno-2.3.21 → agno-2.3.22}/agno/os/middleware/jwt.py +66 -27
  21. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/agents/router.py +2 -2
  22. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/knowledge/knowledge.py +3 -3
  23. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/teams/router.py +2 -2
  24. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/workflows/router.py +2 -2
  25. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/deepseek.py +11 -1
  26. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/gemini.py +6 -2
  27. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/groq.py +8 -3
  28. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/openai.py +2 -0
  29. {agno-2.3.21 → agno-2.3.22}/agno/remote/base.py +105 -8
  30. agno-2.3.22/agno/skills/__init__.py +17 -0
  31. agno-2.3.22/agno/skills/agent_skills.py +370 -0
  32. agno-2.3.22/agno/skills/errors.py +32 -0
  33. agno-2.3.22/agno/skills/loaders/__init__.py +4 -0
  34. agno-2.3.22/agno/skills/loaders/base.py +27 -0
  35. agno-2.3.22/agno/skills/loaders/local.py +216 -0
  36. agno-2.3.22/agno/skills/skill.py +65 -0
  37. agno-2.3.22/agno/skills/utils.py +107 -0
  38. agno-2.3.22/agno/skills/validator.py +277 -0
  39. agno-2.3.22/agno/team/remote.py +447 -0
  40. {agno-2.3.21 → agno-2.3.22}/agno/team/team.py +22 -2
  41. {agno-2.3.21 → agno-2.3.22}/agno/tools/mcp/mcp.py +299 -17
  42. {agno-2.3.21 → agno-2.3.22}/agno/tools/mcp/multi_mcp.py +269 -14
  43. {agno-2.3.21 → agno-2.3.22}/agno/utils/mcp.py +49 -8
  44. {agno-2.3.21 → agno-2.3.22}/agno/utils/string.py +43 -1
  45. {agno-2.3.21 → agno-2.3.22}/agno/workflow/condition.py +4 -2
  46. {agno-2.3.21 → agno-2.3.22}/agno/workflow/loop.py +20 -1
  47. agno-2.3.22/agno/workflow/remote.py +362 -0
  48. {agno-2.3.21 → agno-2.3.22}/agno/workflow/router.py +4 -1
  49. {agno-2.3.21 → agno-2.3.22}/agno/workflow/steps.py +4 -0
  50. {agno-2.3.21 → agno-2.3.22}/agno.egg-info/PKG-INFO +13 -14
  51. {agno-2.3.21 → agno-2.3.22}/agno.egg-info/SOURCES.txt +14 -0
  52. {agno-2.3.21 → agno-2.3.22}/agno.egg-info/requires.txt +1 -1
  53. {agno-2.3.21 → agno-2.3.22}/pyproject.toml +2 -2
  54. agno-2.3.21/agno/team/remote.py +0 -287
  55. agno-2.3.21/agno/workflow/remote.py +0 -222
  56. {agno-2.3.21 → agno-2.3.22}/LICENSE +0 -0
  57. {agno-2.3.21 → agno-2.3.22}/agno/__init__.py +0 -0
  58. {agno-2.3.21 → agno-2.3.22}/agno/agent/__init__.py +0 -0
  59. {agno-2.3.21 → agno-2.3.22}/agno/api/__init__.py +0 -0
  60. {agno-2.3.21 → agno-2.3.22}/agno/api/agent.py +0 -0
  61. {agno-2.3.21 → agno-2.3.22}/agno/api/api.py +0 -0
  62. {agno-2.3.21 → agno-2.3.22}/agno/api/evals.py +0 -0
  63. {agno-2.3.21 → agno-2.3.22}/agno/api/os.py +0 -0
  64. {agno-2.3.21 → agno-2.3.22}/agno/api/routes.py +0 -0
  65. {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/__init__.py +0 -0
  66. {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/agent.py +0 -0
  67. {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/evals.py +0 -0
  68. {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/os.py +0 -0
  69. {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/response.py +0 -0
  70. {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/team.py +0 -0
  71. {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/utils.py +0 -0
  72. {agno-2.3.21 → agno-2.3.22}/agno/api/schemas/workflows.py +0 -0
  73. {agno-2.3.21 → agno-2.3.22}/agno/api/settings.py +0 -0
  74. {agno-2.3.21 → agno-2.3.22}/agno/api/team.py +0 -0
  75. {agno-2.3.21 → agno-2.3.22}/agno/api/workflow.py +0 -0
  76. {agno-2.3.21 → agno-2.3.22}/agno/client/__init__.py +0 -0
  77. {agno-2.3.21 → agno-2.3.22}/agno/client/os.py +0 -0
  78. {agno-2.3.21 → agno-2.3.22}/agno/cloud/aws/base.py +0 -0
  79. {agno-2.3.21 → agno-2.3.22}/agno/cloud/aws/s3/__init__.py +0 -0
  80. {agno-2.3.21 → agno-2.3.22}/agno/cloud/aws/s3/api_client.py +0 -0
  81. {agno-2.3.21 → agno-2.3.22}/agno/cloud/aws/s3/bucket.py +0 -0
  82. {agno-2.3.21 → agno-2.3.22}/agno/cloud/aws/s3/object.py +0 -0
  83. {agno-2.3.21 → agno-2.3.22}/agno/compression/__init__.py +0 -0
  84. {agno-2.3.21 → agno-2.3.22}/agno/compression/manager.py +0 -0
  85. {agno-2.3.21 → agno-2.3.22}/agno/culture/__init__.py +0 -0
  86. {agno-2.3.21 → agno-2.3.22}/agno/culture/manager.py +0 -0
  87. {agno-2.3.21 → agno-2.3.22}/agno/db/__init__.py +0 -0
  88. {agno-2.3.21 → agno-2.3.22}/agno/db/async_postgres/__init__.py +0 -0
  89. {agno-2.3.21 → agno-2.3.22}/agno/db/base.py +0 -0
  90. {agno-2.3.21 → agno-2.3.22}/agno/db/dynamo/__init__.py +0 -0
  91. {agno-2.3.21 → agno-2.3.22}/agno/db/dynamo/dynamo.py +0 -0
  92. {agno-2.3.21 → agno-2.3.22}/agno/db/dynamo/schemas.py +0 -0
  93. {agno-2.3.21 → agno-2.3.22}/agno/db/dynamo/utils.py +0 -0
  94. {agno-2.3.21 → agno-2.3.22}/agno/db/firestore/__init__.py +0 -0
  95. {agno-2.3.21 → agno-2.3.22}/agno/db/firestore/firestore.py +0 -0
  96. {agno-2.3.21 → agno-2.3.22}/agno/db/firestore/schemas.py +0 -0
  97. {agno-2.3.21 → agno-2.3.22}/agno/db/firestore/utils.py +0 -0
  98. {agno-2.3.21 → agno-2.3.22}/agno/db/gcs_json/__init__.py +0 -0
  99. {agno-2.3.21 → agno-2.3.22}/agno/db/gcs_json/gcs_json_db.py +0 -0
  100. {agno-2.3.21 → agno-2.3.22}/agno/db/gcs_json/utils.py +0 -0
  101. {agno-2.3.21 → agno-2.3.22}/agno/db/in_memory/__init__.py +0 -0
  102. {agno-2.3.21 → agno-2.3.22}/agno/db/in_memory/in_memory_db.py +0 -0
  103. {agno-2.3.21 → agno-2.3.22}/agno/db/in_memory/utils.py +0 -0
  104. {agno-2.3.21 → agno-2.3.22}/agno/db/json/__init__.py +0 -0
  105. {agno-2.3.21 → agno-2.3.22}/agno/db/json/json_db.py +0 -0
  106. {agno-2.3.21 → agno-2.3.22}/agno/db/json/utils.py +0 -0
  107. {agno-2.3.21 → agno-2.3.22}/agno/db/migrations/__init__.py +0 -0
  108. {agno-2.3.21 → agno-2.3.22}/agno/db/migrations/manager.py +0 -0
  109. {agno-2.3.21 → agno-2.3.22}/agno/db/migrations/versions/__init__.py +0 -0
  110. {agno-2.3.21 → agno-2.3.22}/agno/db/mongo/__init__.py +0 -0
  111. {agno-2.3.21 → agno-2.3.22}/agno/db/mongo/async_mongo.py +0 -0
  112. {agno-2.3.21 → agno-2.3.22}/agno/db/mongo/mongo.py +0 -0
  113. {agno-2.3.21 → agno-2.3.22}/agno/db/mongo/schemas.py +0 -0
  114. {agno-2.3.21 → agno-2.3.22}/agno/db/mongo/utils.py +0 -0
  115. {agno-2.3.21 → agno-2.3.22}/agno/db/mysql/__init__.py +0 -0
  116. {agno-2.3.21 → agno-2.3.22}/agno/db/mysql/async_mysql.py +0 -0
  117. {agno-2.3.21 → agno-2.3.22}/agno/db/mysql/mysql.py +0 -0
  118. {agno-2.3.21 → agno-2.3.22}/agno/db/mysql/schemas.py +0 -0
  119. {agno-2.3.21 → agno-2.3.22}/agno/db/mysql/utils.py +0 -0
  120. {agno-2.3.21 → agno-2.3.22}/agno/db/postgres/__init__.py +0 -0
  121. {agno-2.3.21 → agno-2.3.22}/agno/db/postgres/schemas.py +0 -0
  122. {agno-2.3.21 → agno-2.3.22}/agno/db/redis/__init__.py +0 -0
  123. {agno-2.3.21 → agno-2.3.22}/agno/db/redis/redis.py +0 -0
  124. {agno-2.3.21 → agno-2.3.22}/agno/db/redis/schemas.py +0 -0
  125. {agno-2.3.21 → agno-2.3.22}/agno/db/redis/utils.py +0 -0
  126. {agno-2.3.21 → agno-2.3.22}/agno/db/schemas/__init__.py +0 -0
  127. {agno-2.3.21 → agno-2.3.22}/agno/db/schemas/culture.py +0 -0
  128. {agno-2.3.21 → agno-2.3.22}/agno/db/schemas/evals.py +0 -0
  129. {agno-2.3.21 → agno-2.3.22}/agno/db/schemas/knowledge.py +0 -0
  130. {agno-2.3.21 → agno-2.3.22}/agno/db/schemas/memory.py +0 -0
  131. {agno-2.3.21 → agno-2.3.22}/agno/db/schemas/metrics.py +0 -0
  132. {agno-2.3.21 → agno-2.3.22}/agno/db/singlestore/__init__.py +0 -0
  133. {agno-2.3.21 → agno-2.3.22}/agno/db/singlestore/schemas.py +0 -0
  134. {agno-2.3.21 → agno-2.3.22}/agno/db/singlestore/singlestore.py +0 -0
  135. {agno-2.3.21 → agno-2.3.22}/agno/db/singlestore/utils.py +0 -0
  136. {agno-2.3.21 → agno-2.3.22}/agno/db/sqlite/__init__.py +0 -0
  137. {agno-2.3.21 → agno-2.3.22}/agno/db/sqlite/async_sqlite.py +0 -0
  138. {agno-2.3.21 → agno-2.3.22}/agno/db/sqlite/schemas.py +0 -0
  139. {agno-2.3.21 → agno-2.3.22}/agno/db/sqlite/sqlite.py +0 -0
  140. {agno-2.3.21 → agno-2.3.22}/agno/db/sqlite/utils.py +0 -0
  141. {agno-2.3.21 → agno-2.3.22}/agno/db/surrealdb/__init__.py +0 -0
  142. {agno-2.3.21 → agno-2.3.22}/agno/db/surrealdb/metrics.py +0 -0
  143. {agno-2.3.21 → agno-2.3.22}/agno/db/surrealdb/models.py +0 -0
  144. {agno-2.3.21 → agno-2.3.22}/agno/db/surrealdb/queries.py +0 -0
  145. {agno-2.3.21 → agno-2.3.22}/agno/db/surrealdb/surrealdb.py +0 -0
  146. {agno-2.3.21 → agno-2.3.22}/agno/db/surrealdb/utils.py +0 -0
  147. {agno-2.3.21 → agno-2.3.22}/agno/db/utils.py +0 -0
  148. {agno-2.3.21 → agno-2.3.22}/agno/debug.py +0 -0
  149. {agno-2.3.21 → agno-2.3.22}/agno/eval/__init__.py +0 -0
  150. {agno-2.3.21 → agno-2.3.22}/agno/eval/accuracy.py +0 -0
  151. {agno-2.3.21 → agno-2.3.22}/agno/eval/agent_as_judge.py +0 -0
  152. {agno-2.3.21 → agno-2.3.22}/agno/eval/base.py +0 -0
  153. {agno-2.3.21 → agno-2.3.22}/agno/eval/performance.py +0 -0
  154. {agno-2.3.21 → agno-2.3.22}/agno/eval/reliability.py +0 -0
  155. {agno-2.3.21 → agno-2.3.22}/agno/eval/utils.py +0 -0
  156. {agno-2.3.21 → agno-2.3.22}/agno/exceptions.py +0 -0
  157. {agno-2.3.21 → agno-2.3.22}/agno/filters.py +0 -0
  158. {agno-2.3.21 → agno-2.3.22}/agno/guardrails/__init__.py +0 -0
  159. {agno-2.3.21 → agno-2.3.22}/agno/guardrails/base.py +0 -0
  160. {agno-2.3.21 → agno-2.3.22}/agno/guardrails/openai.py +0 -0
  161. {agno-2.3.21 → agno-2.3.22}/agno/guardrails/pii.py +0 -0
  162. {agno-2.3.21 → agno-2.3.22}/agno/guardrails/prompt_injection.py +0 -0
  163. {agno-2.3.21 → agno-2.3.22}/agno/hooks/__init__.py +0 -0
  164. {agno-2.3.21 → agno-2.3.22}/agno/hooks/decorator.py +0 -0
  165. {agno-2.3.21 → agno-2.3.22}/agno/integrations/__init__.py +0 -0
  166. {agno-2.3.21 → agno-2.3.22}/agno/integrations/discord/__init__.py +0 -0
  167. {agno-2.3.21 → agno-2.3.22}/agno/integrations/discord/client.py +0 -0
  168. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/__init__.py +0 -0
  169. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/__init__.py +0 -0
  170. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/agentic.py +0 -0
  171. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/fixed.py +0 -0
  172. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/row.py +0 -0
  173. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/semantic.py +0 -0
  174. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/chunking/strategy.py +0 -0
  175. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/content.py +0 -0
  176. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/document/__init__.py +0 -0
  177. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/document/base.py +0 -0
  178. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/__init__.py +0 -0
  179. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  180. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/azure_openai.py +0 -0
  181. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/base.py +0 -0
  182. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/cohere.py +0 -0
  183. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/fastembed.py +0 -0
  184. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/fireworks.py +0 -0
  185. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/google.py +0 -0
  186. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/huggingface.py +0 -0
  187. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/jina.py +0 -0
  188. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/langdb.py +0 -0
  189. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/mistral.py +0 -0
  190. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/nebius.py +0 -0
  191. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/ollama.py +0 -0
  192. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/openai.py +0 -0
  193. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  194. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/together.py +0 -0
  195. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/vllm.py +0 -0
  196. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/embedder/voyageai.py +0 -0
  197. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/knowledge.py +0 -0
  198. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/__init__.py +0 -0
  199. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/arxiv_reader.py +0 -0
  200. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/base.py +0 -0
  201. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/csv_reader.py +0 -0
  202. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/docx_reader.py +0 -0
  203. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
  204. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  205. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/json_reader.py +0 -0
  206. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/markdown_reader.py +0 -0
  207. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/pdf_reader.py +0 -0
  208. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/pptx_reader.py +0 -0
  209. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/reader_factory.py +0 -0
  210. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/s3_reader.py +0 -0
  211. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/tavily_reader.py +0 -0
  212. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/text_reader.py +0 -0
  213. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/web_search_reader.py +0 -0
  214. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/website_reader.py +0 -0
  215. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  216. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reader/youtube_reader.py +0 -0
  217. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/remote_content/__init__.py +0 -0
  218. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/remote_content/remote_content.py +0 -0
  219. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reranker/__init__.py +0 -0
  220. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reranker/base.py +0 -0
  221. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reranker/cohere.py +0 -0
  222. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reranker/infinity.py +0 -0
  223. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  224. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/types.py +0 -0
  225. {agno-2.3.21 → agno-2.3.22}/agno/knowledge/utils.py +0 -0
  226. {agno-2.3.21 → agno-2.3.22}/agno/media.py +0 -0
  227. {agno-2.3.21 → agno-2.3.22}/agno/memory/__init__.py +0 -0
  228. {agno-2.3.21 → agno-2.3.22}/agno/memory/manager.py +0 -0
  229. {agno-2.3.21 → agno-2.3.22}/agno/memory/strategies/__init__.py +0 -0
  230. {agno-2.3.21 → agno-2.3.22}/agno/memory/strategies/base.py +0 -0
  231. {agno-2.3.21 → agno-2.3.22}/agno/memory/strategies/summarize.py +0 -0
  232. {agno-2.3.21 → agno-2.3.22}/agno/memory/strategies/types.py +0 -0
  233. {agno-2.3.21 → agno-2.3.22}/agno/models/__init__.py +0 -0
  234. {agno-2.3.21 → agno-2.3.22}/agno/models/aimlapi/__init__.py +0 -0
  235. {agno-2.3.21 → agno-2.3.22}/agno/models/aimlapi/aimlapi.py +0 -0
  236. {agno-2.3.21 → agno-2.3.22}/agno/models/anthropic/__init__.py +0 -0
  237. {agno-2.3.21 → agno-2.3.22}/agno/models/anthropic/claude.py +0 -0
  238. {agno-2.3.21 → agno-2.3.22}/agno/models/aws/__init__.py +0 -0
  239. {agno-2.3.21 → agno-2.3.22}/agno/models/aws/bedrock.py +0 -0
  240. {agno-2.3.21 → agno-2.3.22}/agno/models/aws/claude.py +0 -0
  241. {agno-2.3.21 → agno-2.3.22}/agno/models/azure/__init__.py +0 -0
  242. {agno-2.3.21 → agno-2.3.22}/agno/models/azure/ai_foundry.py +0 -0
  243. {agno-2.3.21 → agno-2.3.22}/agno/models/azure/openai_chat.py +0 -0
  244. {agno-2.3.21 → agno-2.3.22}/agno/models/base.py +0 -0
  245. {agno-2.3.21 → agno-2.3.22}/agno/models/cerebras/__init__.py +0 -0
  246. {agno-2.3.21 → agno-2.3.22}/agno/models/cerebras/cerebras.py +0 -0
  247. {agno-2.3.21 → agno-2.3.22}/agno/models/cerebras/cerebras_openai.py +0 -0
  248. {agno-2.3.21 → agno-2.3.22}/agno/models/cohere/__init__.py +0 -0
  249. {agno-2.3.21 → agno-2.3.22}/agno/models/cohere/chat.py +0 -0
  250. {agno-2.3.21 → agno-2.3.22}/agno/models/cometapi/__init__.py +0 -0
  251. {agno-2.3.21 → agno-2.3.22}/agno/models/cometapi/cometapi.py +0 -0
  252. {agno-2.3.21 → agno-2.3.22}/agno/models/dashscope/__init__.py +0 -0
  253. {agno-2.3.21 → agno-2.3.22}/agno/models/dashscope/dashscope.py +0 -0
  254. {agno-2.3.21 → agno-2.3.22}/agno/models/deepinfra/__init__.py +0 -0
  255. {agno-2.3.21 → agno-2.3.22}/agno/models/deepinfra/deepinfra.py +0 -0
  256. {agno-2.3.21 → agno-2.3.22}/agno/models/deepseek/__init__.py +0 -0
  257. {agno-2.3.21 → agno-2.3.22}/agno/models/deepseek/deepseek.py +0 -0
  258. {agno-2.3.21 → agno-2.3.22}/agno/models/defaults.py +0 -0
  259. {agno-2.3.21 → agno-2.3.22}/agno/models/fireworks/__init__.py +0 -0
  260. {agno-2.3.21 → agno-2.3.22}/agno/models/fireworks/fireworks.py +0 -0
  261. {agno-2.3.21 → agno-2.3.22}/agno/models/google/__init__.py +0 -0
  262. {agno-2.3.21 → agno-2.3.22}/agno/models/google/gemini.py +0 -0
  263. {agno-2.3.21 → agno-2.3.22}/agno/models/google/utils.py +0 -0
  264. {agno-2.3.21 → agno-2.3.22}/agno/models/groq/__init__.py +0 -0
  265. {agno-2.3.21 → agno-2.3.22}/agno/models/groq/groq.py +0 -0
  266. {agno-2.3.21 → agno-2.3.22}/agno/models/huggingface/__init__.py +0 -0
  267. {agno-2.3.21 → agno-2.3.22}/agno/models/huggingface/huggingface.py +0 -0
  268. {agno-2.3.21 → agno-2.3.22}/agno/models/ibm/__init__.py +0 -0
  269. {agno-2.3.21 → agno-2.3.22}/agno/models/ibm/watsonx.py +0 -0
  270. {agno-2.3.21 → agno-2.3.22}/agno/models/internlm/__init__.py +0 -0
  271. {agno-2.3.21 → agno-2.3.22}/agno/models/internlm/internlm.py +0 -0
  272. {agno-2.3.21 → agno-2.3.22}/agno/models/langdb/__init__.py +0 -0
  273. {agno-2.3.21 → agno-2.3.22}/agno/models/langdb/langdb.py +0 -0
  274. {agno-2.3.21 → agno-2.3.22}/agno/models/litellm/__init__.py +0 -0
  275. {agno-2.3.21 → agno-2.3.22}/agno/models/litellm/chat.py +0 -0
  276. {agno-2.3.21 → agno-2.3.22}/agno/models/litellm/litellm_openai.py +0 -0
  277. {agno-2.3.21 → agno-2.3.22}/agno/models/llama_cpp/__init__.py +0 -0
  278. {agno-2.3.21 → agno-2.3.22}/agno/models/llama_cpp/llama_cpp.py +0 -0
  279. {agno-2.3.21 → agno-2.3.22}/agno/models/lmstudio/__init__.py +0 -0
  280. {agno-2.3.21 → agno-2.3.22}/agno/models/lmstudio/lmstudio.py +0 -0
  281. {agno-2.3.21 → agno-2.3.22}/agno/models/message.py +0 -0
  282. {agno-2.3.21 → agno-2.3.22}/agno/models/meta/__init__.py +0 -0
  283. {agno-2.3.21 → agno-2.3.22}/agno/models/meta/llama.py +0 -0
  284. {agno-2.3.21 → agno-2.3.22}/agno/models/meta/llama_openai.py +0 -0
  285. {agno-2.3.21 → agno-2.3.22}/agno/models/metrics.py +0 -0
  286. {agno-2.3.21 → agno-2.3.22}/agno/models/mistral/__init__.py +0 -0
  287. {agno-2.3.21 → agno-2.3.22}/agno/models/mistral/mistral.py +0 -0
  288. {agno-2.3.21 → agno-2.3.22}/agno/models/nebius/__init__.py +0 -0
  289. {agno-2.3.21 → agno-2.3.22}/agno/models/nebius/nebius.py +0 -0
  290. {agno-2.3.21 → agno-2.3.22}/agno/models/nexus/__init__.py +0 -0
  291. {agno-2.3.21 → agno-2.3.22}/agno/models/nexus/nexus.py +0 -0
  292. {agno-2.3.21 → agno-2.3.22}/agno/models/nvidia/__init__.py +0 -0
  293. {agno-2.3.21 → agno-2.3.22}/agno/models/nvidia/nvidia.py +0 -0
  294. {agno-2.3.21 → agno-2.3.22}/agno/models/ollama/__init__.py +0 -0
  295. {agno-2.3.21 → agno-2.3.22}/agno/models/ollama/chat.py +0 -0
  296. {agno-2.3.21 → agno-2.3.22}/agno/models/openai/__init__.py +0 -0
  297. {agno-2.3.21 → agno-2.3.22}/agno/models/openai/like.py +0 -0
  298. {agno-2.3.21 → agno-2.3.22}/agno/models/openrouter/__init__.py +0 -0
  299. {agno-2.3.21 → agno-2.3.22}/agno/models/openrouter/openrouter.py +0 -0
  300. {agno-2.3.21 → agno-2.3.22}/agno/models/perplexity/__init__.py +0 -0
  301. {agno-2.3.21 → agno-2.3.22}/agno/models/perplexity/perplexity.py +0 -0
  302. {agno-2.3.21 → agno-2.3.22}/agno/models/portkey/__init__.py +0 -0
  303. {agno-2.3.21 → agno-2.3.22}/agno/models/portkey/portkey.py +0 -0
  304. {agno-2.3.21 → agno-2.3.22}/agno/models/requesty/__init__.py +0 -0
  305. {agno-2.3.21 → agno-2.3.22}/agno/models/requesty/requesty.py +0 -0
  306. {agno-2.3.21 → agno-2.3.22}/agno/models/response.py +0 -0
  307. {agno-2.3.21 → agno-2.3.22}/agno/models/sambanova/__init__.py +0 -0
  308. {agno-2.3.21 → agno-2.3.22}/agno/models/sambanova/sambanova.py +0 -0
  309. {agno-2.3.21 → agno-2.3.22}/agno/models/siliconflow/__init__.py +0 -0
  310. {agno-2.3.21 → agno-2.3.22}/agno/models/siliconflow/siliconflow.py +0 -0
  311. {agno-2.3.21 → agno-2.3.22}/agno/models/together/__init__.py +0 -0
  312. {agno-2.3.21 → agno-2.3.22}/agno/models/together/together.py +0 -0
  313. {agno-2.3.21 → agno-2.3.22}/agno/models/utils.py +0 -0
  314. {agno-2.3.21 → agno-2.3.22}/agno/models/vercel/__init__.py +0 -0
  315. {agno-2.3.21 → agno-2.3.22}/agno/models/vercel/v0.py +0 -0
  316. {agno-2.3.21 → agno-2.3.22}/agno/models/vertexai/__init__.py +0 -0
  317. {agno-2.3.21 → agno-2.3.22}/agno/models/vertexai/claude.py +0 -0
  318. {agno-2.3.21 → agno-2.3.22}/agno/models/vllm/__init__.py +0 -0
  319. {agno-2.3.21 → agno-2.3.22}/agno/models/vllm/vllm.py +0 -0
  320. {agno-2.3.21 → agno-2.3.22}/agno/models/xai/__init__.py +0 -0
  321. {agno-2.3.21 → agno-2.3.22}/agno/models/xai/xai.py +0 -0
  322. {agno-2.3.21 → agno-2.3.22}/agno/os/__init__.py +0 -0
  323. {agno-2.3.21 → agno-2.3.22}/agno/os/app.py +0 -0
  324. {agno-2.3.21 → agno-2.3.22}/agno/os/auth.py +0 -0
  325. {agno-2.3.21 → agno-2.3.22}/agno/os/config.py +0 -0
  326. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/__init__.py +0 -0
  327. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/a2a/__init__.py +0 -0
  328. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/a2a/a2a.py +0 -0
  329. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/a2a/router.py +0 -0
  330. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/a2a/utils.py +0 -0
  331. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/agui/__init__.py +0 -0
  332. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/agui/agui.py +0 -0
  333. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/agui/router.py +0 -0
  334. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/agui/utils.py +0 -0
  335. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/base.py +0 -0
  336. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/slack/__init__.py +0 -0
  337. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/slack/router.py +0 -0
  338. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/slack/security.py +0 -0
  339. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/slack/slack.py +0 -0
  340. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  341. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/whatsapp/router.py +0 -0
  342. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/whatsapp/security.py +0 -0
  343. {agno-2.3.21 → agno-2.3.22}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  344. {agno-2.3.21 → agno-2.3.22}/agno/os/managers.py +0 -0
  345. {agno-2.3.21 → agno-2.3.22}/agno/os/mcp.py +0 -0
  346. {agno-2.3.21 → agno-2.3.22}/agno/os/middleware/__init__.py +0 -0
  347. {agno-2.3.21 → agno-2.3.22}/agno/os/router.py +0 -0
  348. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/__init__.py +0 -0
  349. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/agents/__init__.py +0 -0
  350. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/agents/schema.py +0 -0
  351. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/database.py +0 -0
  352. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/evals/__init__.py +0 -0
  353. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/evals/evals.py +0 -0
  354. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/evals/schemas.py +0 -0
  355. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/evals/utils.py +0 -0
  356. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/health.py +0 -0
  357. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/home.py +0 -0
  358. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/knowledge/__init__.py +0 -0
  359. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/knowledge/schemas.py +0 -0
  360. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/memory/__init__.py +0 -0
  361. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/memory/memory.py +0 -0
  362. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/memory/schemas.py +0 -0
  363. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/metrics/__init__.py +0 -0
  364. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/metrics/metrics.py +0 -0
  365. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/metrics/schemas.py +0 -0
  366. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/session/__init__.py +0 -0
  367. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/session/session.py +0 -0
  368. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/teams/__init__.py +0 -0
  369. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/teams/schema.py +0 -0
  370. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/traces/__init__.py +0 -0
  371. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/traces/schemas.py +0 -0
  372. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/traces/traces.py +0 -0
  373. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/workflows/__init__.py +0 -0
  374. {agno-2.3.21 → agno-2.3.22}/agno/os/routers/workflows/schema.py +0 -0
  375. {agno-2.3.21 → agno-2.3.22}/agno/os/schema.py +0 -0
  376. {agno-2.3.21 → agno-2.3.22}/agno/os/scopes.py +0 -0
  377. {agno-2.3.21 → agno-2.3.22}/agno/os/settings.py +0 -0
  378. {agno-2.3.21 → agno-2.3.22}/agno/os/utils.py +0 -0
  379. {agno-2.3.21 → agno-2.3.22}/agno/py.typed +0 -0
  380. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/__init__.py +0 -0
  381. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/anthropic.py +0 -0
  382. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/azure_ai_foundry.py +0 -0
  383. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/default.py +0 -0
  384. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/helpers.py +0 -0
  385. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/manager.py +0 -0
  386. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/ollama.py +0 -0
  387. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/step.py +0 -0
  388. {agno-2.3.21 → agno-2.3.22}/agno/reasoning/vertexai.py +0 -0
  389. {agno-2.3.21 → agno-2.3.22}/agno/remote/__init__.py +0 -0
  390. {agno-2.3.21 → agno-2.3.22}/agno/run/__init__.py +0 -0
  391. {agno-2.3.21 → agno-2.3.22}/agno/run/agent.py +0 -0
  392. {agno-2.3.21 → agno-2.3.22}/agno/run/base.py +0 -0
  393. {agno-2.3.21 → agno-2.3.22}/agno/run/cancel.py +0 -0
  394. {agno-2.3.21 → agno-2.3.22}/agno/run/cancellation_management/__init__.py +0 -0
  395. {agno-2.3.21 → agno-2.3.22}/agno/run/cancellation_management/base.py +0 -0
  396. {agno-2.3.21 → agno-2.3.22}/agno/run/cancellation_management/in_memory_cancellation_manager.py +0 -0
  397. {agno-2.3.21 → agno-2.3.22}/agno/run/cancellation_management/redis_cancellation_manager.py +0 -0
  398. {agno-2.3.21 → agno-2.3.22}/agno/run/messages.py +0 -0
  399. {agno-2.3.21 → agno-2.3.22}/agno/run/requirement.py +0 -0
  400. {agno-2.3.21 → agno-2.3.22}/agno/run/team.py +0 -0
  401. {agno-2.3.21 → agno-2.3.22}/agno/run/workflow.py +0 -0
  402. {agno-2.3.21 → agno-2.3.22}/agno/session/__init__.py +0 -0
  403. {agno-2.3.21 → agno-2.3.22}/agno/session/agent.py +0 -0
  404. {agno-2.3.21 → agno-2.3.22}/agno/session/summary.py +0 -0
  405. {agno-2.3.21 → agno-2.3.22}/agno/session/team.py +0 -0
  406. {agno-2.3.21 → agno-2.3.22}/agno/session/workflow.py +0 -0
  407. {agno-2.3.21 → agno-2.3.22}/agno/table.py +0 -0
  408. {agno-2.3.21 → agno-2.3.22}/agno/team/__init__.py +0 -0
  409. {agno-2.3.21 → agno-2.3.22}/agno/tools/__init__.py +0 -0
  410. {agno-2.3.21 → agno-2.3.22}/agno/tools/agentql.py +0 -0
  411. {agno-2.3.21 → agno-2.3.22}/agno/tools/airflow.py +0 -0
  412. {agno-2.3.21 → agno-2.3.22}/agno/tools/api.py +0 -0
  413. {agno-2.3.21 → agno-2.3.22}/agno/tools/apify.py +0 -0
  414. {agno-2.3.21 → agno-2.3.22}/agno/tools/arxiv.py +0 -0
  415. {agno-2.3.21 → agno-2.3.22}/agno/tools/aws_lambda.py +0 -0
  416. {agno-2.3.21 → agno-2.3.22}/agno/tools/aws_ses.py +0 -0
  417. {agno-2.3.21 → agno-2.3.22}/agno/tools/baidusearch.py +0 -0
  418. {agno-2.3.21 → agno-2.3.22}/agno/tools/bitbucket.py +0 -0
  419. {agno-2.3.21 → agno-2.3.22}/agno/tools/brandfetch.py +0 -0
  420. {agno-2.3.21 → agno-2.3.22}/agno/tools/bravesearch.py +0 -0
  421. {agno-2.3.21 → agno-2.3.22}/agno/tools/brightdata.py +0 -0
  422. {agno-2.3.21 → agno-2.3.22}/agno/tools/browserbase.py +0 -0
  423. {agno-2.3.21 → agno-2.3.22}/agno/tools/calcom.py +0 -0
  424. {agno-2.3.21 → agno-2.3.22}/agno/tools/calculator.py +0 -0
  425. {agno-2.3.21 → agno-2.3.22}/agno/tools/cartesia.py +0 -0
  426. {agno-2.3.21 → agno-2.3.22}/agno/tools/clickup.py +0 -0
  427. {agno-2.3.21 → agno-2.3.22}/agno/tools/confluence.py +0 -0
  428. {agno-2.3.21 → agno-2.3.22}/agno/tools/crawl4ai.py +0 -0
  429. {agno-2.3.21 → agno-2.3.22}/agno/tools/csv_toolkit.py +0 -0
  430. {agno-2.3.21 → agno-2.3.22}/agno/tools/dalle.py +0 -0
  431. {agno-2.3.21 → agno-2.3.22}/agno/tools/daytona.py +0 -0
  432. {agno-2.3.21 → agno-2.3.22}/agno/tools/decorator.py +0 -0
  433. {agno-2.3.21 → agno-2.3.22}/agno/tools/desi_vocal.py +0 -0
  434. {agno-2.3.21 → agno-2.3.22}/agno/tools/discord.py +0 -0
  435. {agno-2.3.21 → agno-2.3.22}/agno/tools/docker.py +0 -0
  436. {agno-2.3.21 → agno-2.3.22}/agno/tools/duckdb.py +0 -0
  437. {agno-2.3.21 → agno-2.3.22}/agno/tools/duckduckgo.py +0 -0
  438. {agno-2.3.21 → agno-2.3.22}/agno/tools/e2b.py +0 -0
  439. {agno-2.3.21 → agno-2.3.22}/agno/tools/eleven_labs.py +0 -0
  440. {agno-2.3.21 → agno-2.3.22}/agno/tools/email.py +0 -0
  441. {agno-2.3.21 → agno-2.3.22}/agno/tools/evm.py +0 -0
  442. {agno-2.3.21 → agno-2.3.22}/agno/tools/exa.py +0 -0
  443. {agno-2.3.21 → agno-2.3.22}/agno/tools/fal.py +0 -0
  444. {agno-2.3.21 → agno-2.3.22}/agno/tools/file.py +0 -0
  445. {agno-2.3.21 → agno-2.3.22}/agno/tools/file_generation.py +0 -0
  446. {agno-2.3.21 → agno-2.3.22}/agno/tools/financial_datasets.py +0 -0
  447. {agno-2.3.21 → agno-2.3.22}/agno/tools/firecrawl.py +0 -0
  448. {agno-2.3.21 → agno-2.3.22}/agno/tools/function.py +0 -0
  449. {agno-2.3.21 → agno-2.3.22}/agno/tools/giphy.py +0 -0
  450. {agno-2.3.21 → agno-2.3.22}/agno/tools/github.py +0 -0
  451. {agno-2.3.21 → agno-2.3.22}/agno/tools/gmail.py +0 -0
  452. {agno-2.3.21 → agno-2.3.22}/agno/tools/google_bigquery.py +0 -0
  453. {agno-2.3.21 → agno-2.3.22}/agno/tools/google_drive.py +0 -0
  454. {agno-2.3.21 → agno-2.3.22}/agno/tools/google_maps.py +0 -0
  455. {agno-2.3.21 → agno-2.3.22}/agno/tools/googlecalendar.py +0 -0
  456. {agno-2.3.21 → agno-2.3.22}/agno/tools/googlesheets.py +0 -0
  457. {agno-2.3.21 → agno-2.3.22}/agno/tools/hackernews.py +0 -0
  458. {agno-2.3.21 → agno-2.3.22}/agno/tools/jina.py +0 -0
  459. {agno-2.3.21 → agno-2.3.22}/agno/tools/jira.py +0 -0
  460. {agno-2.3.21 → agno-2.3.22}/agno/tools/knowledge.py +0 -0
  461. {agno-2.3.21 → agno-2.3.22}/agno/tools/linear.py +0 -0
  462. {agno-2.3.21 → agno-2.3.22}/agno/tools/linkup.py +0 -0
  463. {agno-2.3.21 → agno-2.3.22}/agno/tools/local_file_system.py +0 -0
  464. {agno-2.3.21 → agno-2.3.22}/agno/tools/lumalab.py +0 -0
  465. {agno-2.3.21 → agno-2.3.22}/agno/tools/mcp/__init__.py +0 -0
  466. {agno-2.3.21 → agno-2.3.22}/agno/tools/mcp/params.py +0 -0
  467. {agno-2.3.21 → agno-2.3.22}/agno/tools/mcp_toolbox.py +0 -0
  468. {agno-2.3.21 → agno-2.3.22}/agno/tools/mem0.py +0 -0
  469. {agno-2.3.21 → agno-2.3.22}/agno/tools/memory.py +0 -0
  470. {agno-2.3.21 → agno-2.3.22}/agno/tools/mlx_transcribe.py +0 -0
  471. {agno-2.3.21 → agno-2.3.22}/agno/tools/models/__init__.py +0 -0
  472. {agno-2.3.21 → agno-2.3.22}/agno/tools/models/azure_openai.py +0 -0
  473. {agno-2.3.21 → agno-2.3.22}/agno/tools/models/gemini.py +0 -0
  474. {agno-2.3.21 → agno-2.3.22}/agno/tools/models/groq.py +0 -0
  475. {agno-2.3.21 → agno-2.3.22}/agno/tools/models/morph.py +0 -0
  476. {agno-2.3.21 → agno-2.3.22}/agno/tools/models/nebius.py +0 -0
  477. {agno-2.3.21 → agno-2.3.22}/agno/tools/models_labs.py +0 -0
  478. {agno-2.3.21 → agno-2.3.22}/agno/tools/moviepy_video.py +0 -0
  479. {agno-2.3.21 → agno-2.3.22}/agno/tools/nano_banana.py +0 -0
  480. {agno-2.3.21 → agno-2.3.22}/agno/tools/neo4j.py +0 -0
  481. {agno-2.3.21 → agno-2.3.22}/agno/tools/newspaper.py +0 -0
  482. {agno-2.3.21 → agno-2.3.22}/agno/tools/newspaper4k.py +0 -0
  483. {agno-2.3.21 → agno-2.3.22}/agno/tools/notion.py +0 -0
  484. {agno-2.3.21 → agno-2.3.22}/agno/tools/openai.py +0 -0
  485. {agno-2.3.21 → agno-2.3.22}/agno/tools/openbb.py +0 -0
  486. {agno-2.3.21 → agno-2.3.22}/agno/tools/opencv.py +0 -0
  487. {agno-2.3.21 → agno-2.3.22}/agno/tools/openweather.py +0 -0
  488. {agno-2.3.21 → agno-2.3.22}/agno/tools/oxylabs.py +0 -0
  489. {agno-2.3.21 → agno-2.3.22}/agno/tools/pandas.py +0 -0
  490. {agno-2.3.21 → agno-2.3.22}/agno/tools/parallel.py +0 -0
  491. {agno-2.3.21 → agno-2.3.22}/agno/tools/postgres.py +0 -0
  492. {agno-2.3.21 → agno-2.3.22}/agno/tools/pubmed.py +0 -0
  493. {agno-2.3.21 → agno-2.3.22}/agno/tools/python.py +0 -0
  494. {agno-2.3.21 → agno-2.3.22}/agno/tools/reasoning.py +0 -0
  495. {agno-2.3.21 → agno-2.3.22}/agno/tools/reddit.py +0 -0
  496. {agno-2.3.21 → agno-2.3.22}/agno/tools/redshift.py +0 -0
  497. {agno-2.3.21 → agno-2.3.22}/agno/tools/replicate.py +0 -0
  498. {agno-2.3.21 → agno-2.3.22}/agno/tools/resend.py +0 -0
  499. {agno-2.3.21 → agno-2.3.22}/agno/tools/scrapegraph.py +0 -0
  500. {agno-2.3.21 → agno-2.3.22}/agno/tools/searxng.py +0 -0
  501. {agno-2.3.21 → agno-2.3.22}/agno/tools/serpapi.py +0 -0
  502. {agno-2.3.21 → agno-2.3.22}/agno/tools/serper.py +0 -0
  503. {agno-2.3.21 → agno-2.3.22}/agno/tools/shell.py +0 -0
  504. {agno-2.3.21 → agno-2.3.22}/agno/tools/shopify.py +0 -0
  505. {agno-2.3.21 → agno-2.3.22}/agno/tools/slack.py +0 -0
  506. {agno-2.3.21 → agno-2.3.22}/agno/tools/sleep.py +0 -0
  507. {agno-2.3.21 → agno-2.3.22}/agno/tools/spider.py +0 -0
  508. {agno-2.3.21 → agno-2.3.22}/agno/tools/spotify.py +0 -0
  509. {agno-2.3.21 → agno-2.3.22}/agno/tools/sql.py +0 -0
  510. {agno-2.3.21 → agno-2.3.22}/agno/tools/streamlit/__init__.py +0 -0
  511. {agno-2.3.21 → agno-2.3.22}/agno/tools/streamlit/components.py +0 -0
  512. {agno-2.3.21 → agno-2.3.22}/agno/tools/tavily.py +0 -0
  513. {agno-2.3.21 → agno-2.3.22}/agno/tools/telegram.py +0 -0
  514. {agno-2.3.21 → agno-2.3.22}/agno/tools/todoist.py +0 -0
  515. {agno-2.3.21 → agno-2.3.22}/agno/tools/tool_registry.py +0 -0
  516. {agno-2.3.21 → agno-2.3.22}/agno/tools/toolkit.py +0 -0
  517. {agno-2.3.21 → agno-2.3.22}/agno/tools/trafilatura.py +0 -0
  518. {agno-2.3.21 → agno-2.3.22}/agno/tools/trello.py +0 -0
  519. {agno-2.3.21 → agno-2.3.22}/agno/tools/twilio.py +0 -0
  520. {agno-2.3.21 → agno-2.3.22}/agno/tools/user_control_flow.py +0 -0
  521. {agno-2.3.21 → agno-2.3.22}/agno/tools/valyu.py +0 -0
  522. {agno-2.3.21 → agno-2.3.22}/agno/tools/visualization.py +0 -0
  523. {agno-2.3.21 → agno-2.3.22}/agno/tools/webbrowser.py +0 -0
  524. {agno-2.3.21 → agno-2.3.22}/agno/tools/webex.py +0 -0
  525. {agno-2.3.21 → agno-2.3.22}/agno/tools/website.py +0 -0
  526. {agno-2.3.21 → agno-2.3.22}/agno/tools/webtools.py +0 -0
  527. {agno-2.3.21 → agno-2.3.22}/agno/tools/whatsapp.py +0 -0
  528. {agno-2.3.21 → agno-2.3.22}/agno/tools/wikipedia.py +0 -0
  529. {agno-2.3.21 → agno-2.3.22}/agno/tools/workflow.py +0 -0
  530. {agno-2.3.21 → agno-2.3.22}/agno/tools/x.py +0 -0
  531. {agno-2.3.21 → agno-2.3.22}/agno/tools/yfinance.py +0 -0
  532. {agno-2.3.21 → agno-2.3.22}/agno/tools/youtube.py +0 -0
  533. {agno-2.3.21 → agno-2.3.22}/agno/tools/zendesk.py +0 -0
  534. {agno-2.3.21 → agno-2.3.22}/agno/tools/zep.py +0 -0
  535. {agno-2.3.21 → agno-2.3.22}/agno/tools/zoom.py +0 -0
  536. {agno-2.3.21 → agno-2.3.22}/agno/tracing/__init__.py +0 -0
  537. {agno-2.3.21 → agno-2.3.22}/agno/tracing/exporter.py +0 -0
  538. {agno-2.3.21 → agno-2.3.22}/agno/tracing/schemas.py +0 -0
  539. {agno-2.3.21 → agno-2.3.22}/agno/tracing/setup.py +0 -0
  540. {agno-2.3.21 → agno-2.3.22}/agno/utils/__init__.py +0 -0
  541. {agno-2.3.21 → agno-2.3.22}/agno/utils/agent.py +0 -0
  542. {agno-2.3.21 → agno-2.3.22}/agno/utils/audio.py +0 -0
  543. {agno-2.3.21 → agno-2.3.22}/agno/utils/certs.py +0 -0
  544. {agno-2.3.21 → agno-2.3.22}/agno/utils/code_execution.py +0 -0
  545. {agno-2.3.21 → agno-2.3.22}/agno/utils/common.py +0 -0
  546. {agno-2.3.21 → agno-2.3.22}/agno/utils/cryptography.py +0 -0
  547. {agno-2.3.21 → agno-2.3.22}/agno/utils/dttm.py +0 -0
  548. {agno-2.3.21 → agno-2.3.22}/agno/utils/enum.py +0 -0
  549. {agno-2.3.21 → agno-2.3.22}/agno/utils/env.py +0 -0
  550. {agno-2.3.21 → agno-2.3.22}/agno/utils/events.py +0 -0
  551. {agno-2.3.21 → agno-2.3.22}/agno/utils/format_str.py +0 -0
  552. {agno-2.3.21 → agno-2.3.22}/agno/utils/functions.py +0 -0
  553. {agno-2.3.21 → agno-2.3.22}/agno/utils/gemini.py +0 -0
  554. {agno-2.3.21 → agno-2.3.22}/agno/utils/hooks.py +0 -0
  555. {agno-2.3.21 → agno-2.3.22}/agno/utils/http.py +0 -0
  556. {agno-2.3.21 → agno-2.3.22}/agno/utils/json_schema.py +0 -0
  557. {agno-2.3.21 → agno-2.3.22}/agno/utils/knowledge.py +0 -0
  558. {agno-2.3.21 → agno-2.3.22}/agno/utils/location.py +0 -0
  559. {agno-2.3.21 → agno-2.3.22}/agno/utils/log.py +0 -0
  560. {agno-2.3.21 → agno-2.3.22}/agno/utils/media.py +0 -0
  561. {agno-2.3.21 → agno-2.3.22}/agno/utils/merge_dict.py +0 -0
  562. {agno-2.3.21 → agno-2.3.22}/agno/utils/message.py +0 -0
  563. {agno-2.3.21 → agno-2.3.22}/agno/utils/models/__init__.py +0 -0
  564. {agno-2.3.21 → agno-2.3.22}/agno/utils/models/ai_foundry.py +0 -0
  565. {agno-2.3.21 → agno-2.3.22}/agno/utils/models/claude.py +0 -0
  566. {agno-2.3.21 → agno-2.3.22}/agno/utils/models/cohere.py +0 -0
  567. {agno-2.3.21 → agno-2.3.22}/agno/utils/models/llama.py +0 -0
  568. {agno-2.3.21 → agno-2.3.22}/agno/utils/models/mistral.py +0 -0
  569. {agno-2.3.21 → agno-2.3.22}/agno/utils/models/openai_responses.py +0 -0
  570. {agno-2.3.21 → agno-2.3.22}/agno/utils/models/schema_utils.py +0 -0
  571. {agno-2.3.21 → agno-2.3.22}/agno/utils/models/watsonx.py +0 -0
  572. {agno-2.3.21 → agno-2.3.22}/agno/utils/openai.py +0 -0
  573. {agno-2.3.21 → agno-2.3.22}/agno/utils/os.py +0 -0
  574. {agno-2.3.21 → agno-2.3.22}/agno/utils/pickle.py +0 -0
  575. {agno-2.3.21 → agno-2.3.22}/agno/utils/pprint.py +0 -0
  576. {agno-2.3.21 → agno-2.3.22}/agno/utils/print_response/__init__.py +0 -0
  577. {agno-2.3.21 → agno-2.3.22}/agno/utils/print_response/agent.py +0 -0
  578. {agno-2.3.21 → agno-2.3.22}/agno/utils/print_response/team.py +0 -0
  579. {agno-2.3.21 → agno-2.3.22}/agno/utils/print_response/workflow.py +0 -0
  580. {agno-2.3.21 → agno-2.3.22}/agno/utils/prompts.py +0 -0
  581. {agno-2.3.21 → agno-2.3.22}/agno/utils/reasoning.py +0 -0
  582. {agno-2.3.21 → agno-2.3.22}/agno/utils/remote.py +0 -0
  583. {agno-2.3.21 → agno-2.3.22}/agno/utils/response.py +0 -0
  584. {agno-2.3.21 → agno-2.3.22}/agno/utils/response_iterator.py +0 -0
  585. {agno-2.3.21 → agno-2.3.22}/agno/utils/safe_formatter.py +0 -0
  586. {agno-2.3.21 → agno-2.3.22}/agno/utils/serialize.py +0 -0
  587. {agno-2.3.21 → agno-2.3.22}/agno/utils/shell.py +0 -0
  588. {agno-2.3.21 → agno-2.3.22}/agno/utils/streamlit.py +0 -0
  589. {agno-2.3.21 → agno-2.3.22}/agno/utils/team.py +0 -0
  590. {agno-2.3.21 → agno-2.3.22}/agno/utils/timer.py +0 -0
  591. {agno-2.3.21 → agno-2.3.22}/agno/utils/tokens.py +0 -0
  592. {agno-2.3.21 → agno-2.3.22}/agno/utils/tools.py +0 -0
  593. {agno-2.3.21 → agno-2.3.22}/agno/utils/web.py +0 -0
  594. {agno-2.3.21 → agno-2.3.22}/agno/utils/whatsapp.py +0 -0
  595. {agno-2.3.21 → agno-2.3.22}/agno/utils/yaml_io.py +0 -0
  596. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/__init__.py +0 -0
  597. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/base.py +0 -0
  598. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/cassandra/__init__.py +0 -0
  599. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/cassandra/cassandra.py +0 -0
  600. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  601. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/cassandra/index.py +0 -0
  602. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/chroma/__init__.py +0 -0
  603. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/chroma/chromadb.py +0 -0
  604. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/clickhouse/__init__.py +0 -0
  605. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  606. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/clickhouse/index.py +0 -0
  607. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/couchbase/__init__.py +0 -0
  608. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/couchbase/couchbase.py +0 -0
  609. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/distance.py +0 -0
  610. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/lancedb/__init__.py +0 -0
  611. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/lancedb/lance_db.py +0 -0
  612. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/langchaindb/__init__.py +0 -0
  613. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  614. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/lightrag/__init__.py +0 -0
  615. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/lightrag/lightrag.py +0 -0
  616. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/llamaindex/__init__.py +0 -0
  617. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  618. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/milvus/__init__.py +0 -0
  619. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/milvus/milvus.py +0 -0
  620. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/mongodb/__init__.py +0 -0
  621. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/mongodb/mongodb.py +0 -0
  622. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/pgvector/__init__.py +0 -0
  623. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/pgvector/index.py +0 -0
  624. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/pgvector/pgvector.py +0 -0
  625. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/pineconedb/__init__.py +0 -0
  626. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  627. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/qdrant/__init__.py +0 -0
  628. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/qdrant/qdrant.py +0 -0
  629. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/redis/__init__.py +0 -0
  630. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/redis/redisdb.py +0 -0
  631. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/search.py +0 -0
  632. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/singlestore/__init__.py +0 -0
  633. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/singlestore/index.py +0 -0
  634. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/singlestore/singlestore.py +0 -0
  635. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/surrealdb/__init__.py +0 -0
  636. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  637. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/upstashdb/__init__.py +0 -0
  638. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  639. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/weaviate/__init__.py +0 -0
  640. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/weaviate/index.py +0 -0
  641. {agno-2.3.21 → agno-2.3.22}/agno/vectordb/weaviate/weaviate.py +0 -0
  642. {agno-2.3.21 → agno-2.3.22}/agno/workflow/__init__.py +0 -0
  643. {agno-2.3.21 → agno-2.3.22}/agno/workflow/agent.py +0 -0
  644. {agno-2.3.21 → agno-2.3.22}/agno/workflow/parallel.py +0 -0
  645. {agno-2.3.21 → agno-2.3.22}/agno/workflow/step.py +0 -0
  646. {agno-2.3.21 → agno-2.3.22}/agno/workflow/types.py +0 -0
  647. {agno-2.3.21 → agno-2.3.22}/agno/workflow/workflow.py +0 -0
  648. {agno-2.3.21 → agno-2.3.22}/agno.egg-info/dependency_links.txt +0 -0
  649. {agno-2.3.21 → agno-2.3.22}/agno.egg-info/top_level.txt +0 -0
  650. {agno-2.3.21 → agno-2.3.22}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.3.21
3
+ Version: 2.3.22
4
4
  Summary: Agno: a lightweight library for building Multi-Agent Systems
5
5
  Author-email: Ashpreet Bedi <ashpreet@agno.com>
6
6
  Project-URL: homepage, https://agno.com
@@ -157,7 +157,7 @@ Requires-Dist: mcp>=1.9.2; extra == "mcp"
157
157
  Provides-Extra: mem0
158
158
  Requires-Dist: mem0ai; extra == "mem0"
159
159
  Provides-Extra: memori
160
- Requires-Dist: memorisdk==3.0.5; extra == "memori"
160
+ Requires-Dist: memori>=3.0.5; extra == "memori"
161
161
  Provides-Extra: newspaper
162
162
  Requires-Dist: newspaper4k; extra == "newspaper"
163
163
  Requires-Dist: lxml_html_clean; extra == "newspaper"
@@ -425,23 +425,22 @@ Dynamic: license-file
425
425
 
426
426
  Agno is a multi-agent framework, runtime, and control plane. Use it to build private and secure AI products that run in your cloud.
427
427
 
428
- - **Build** agents, teams, and workflows with memory, knowledge, guardrails, and 100+ toolkits.
428
+ - **Build** agents, teams, and workflows with memory, knowledge, guardrails and 100+ integrations.
429
429
  - **Run** in production with a stateless FastAPI runtime. Horizontally scalable.
430
430
  - **Manage** with a control plane that connects directly to your runtime — no data leaves your environment.
431
431
 
432
432
  ## Why Agno?
433
433
 
434
- - **Your cloud, your data:** AgentOS runs entirely in your infrastructure. Zero data leaves your environment.
435
- - **Production-ready from day one:** Pre-built FastAPI runtime with SSE endpoints, ready to deploy.
436
- - **Actually fast:** 529× faster than LangGraph, 24× lower memory. Matters at scale.
434
+ - **Your cloud, your data:** Runs entirely in your infrastructure. Nothing leaves your environment.
435
+ - **Ready for production on day one:** Pre-built FastAPI runtime with SSE endpoints, ready to deploy.
436
+ - **Incredibly fast:** 529× faster than LangGraph, 24× lower memory.
437
437
 
438
438
  ## Getting Started
439
439
 
440
- New to Agno? Start with the [getting started guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_getting_started).
440
+ Start with the [getting started guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_getting_started), then:
441
441
 
442
- Then:
443
442
  - Browse the [cookbooks](https://github.com/agno-agi/agno/tree/main/cookbook) for real-world examples
444
- - Read the [docs](https://docs.agno.com) to learn more.
443
+ - Read the [docs](https://docs.agno.com) to learn more
445
444
 
446
445
  ## Resources
447
446
 
@@ -509,26 +508,26 @@ This isn't a privacy mode or enterprise add-on. It's how Agno works.
509
508
 
510
509
  ## Features
511
510
 
512
- **Core**
511
+ ### Core:
513
512
  - Model agnostic — works with OpenAI, Anthropic, Google, local models, whatever
514
513
  - Type-safe I/O with `input_schema` and `output_schema`
515
514
  - Async-first, built for long-running tasks
516
515
  - Natively multimodal (text, images, audio, video, files)
517
516
 
518
- **Memory & Knowledge**
517
+ ### Memory & Knowledge:
519
518
  - Persistent storage for session history and state
520
519
  - User memory that persists across sessions
521
520
  - Agentic RAG with 20+ vector stores, hybrid search, reranking
522
521
  - Culture — shared long-term memory across agents
523
522
 
524
- **Execution**
523
+ ### Execution:
525
524
  - Human-in-the-loop (confirmations, approvals, overrides)
526
525
  - Guardrails for validation and security
527
526
  - Pre/post hooks for the agent lifecycle
528
527
  - First-class MCP and A2A support
529
528
  - 100+ built-in toolkits
530
529
 
531
- **Production**
530
+ ### Production:
532
531
  - Ready-to-use FastAPI runtime
533
532
  - Integrated control plane UI
534
533
  - Evals for accuracy, performance, latency
@@ -546,7 +545,7 @@ We're obsessive about performance because agent workloads spawn hundreds of inst
546
545
  | Instantiation | **3μs** | 1,587μs (529× slower) | 170μs (57× slower) | 210μs (70× slower) |
547
546
  | Memory | **6.6 KiB** | 161 KiB (24× higher) | 29 KiB (4× higher) | 66 KiB (10× higher) |
548
547
 
549
- Run the benchmarks yourself: [`cookbook/evals/performance`](https://github.com/agno-agi/agno/tree/main/cookbook/evals/performance)
548
+ Run the benchmarks yourself: [`cookbook/12_evals/performance`](https://github.com/agno-agi/agno/tree/main/cookbook/12_evals/performance)
550
549
 
551
550
  https://github.com/user-attachments/assets/54b98576-1859-4880-9f2d-15e1a426719d
552
551
 
@@ -21,23 +21,22 @@
21
21
 
22
22
  Agno is a multi-agent framework, runtime, and control plane. Use it to build private and secure AI products that run in your cloud.
23
23
 
24
- - **Build** agents, teams, and workflows with memory, knowledge, guardrails, and 100+ toolkits.
24
+ - **Build** agents, teams, and workflows with memory, knowledge, guardrails and 100+ integrations.
25
25
  - **Run** in production with a stateless FastAPI runtime. Horizontally scalable.
26
26
  - **Manage** with a control plane that connects directly to your runtime — no data leaves your environment.
27
27
 
28
28
  ## Why Agno?
29
29
 
30
- - **Your cloud, your data:** AgentOS runs entirely in your infrastructure. Zero data leaves your environment.
31
- - **Production-ready from day one:** Pre-built FastAPI runtime with SSE endpoints, ready to deploy.
32
- - **Actually fast:** 529× faster than LangGraph, 24× lower memory. Matters at scale.
30
+ - **Your cloud, your data:** Runs entirely in your infrastructure. Nothing leaves your environment.
31
+ - **Ready for production on day one:** Pre-built FastAPI runtime with SSE endpoints, ready to deploy.
32
+ - **Incredibly fast:** 529× faster than LangGraph, 24× lower memory.
33
33
 
34
34
  ## Getting Started
35
35
 
36
- New to Agno? Start with the [getting started guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_getting_started).
36
+ Start with the [getting started guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_getting_started), then:
37
37
 
38
- Then:
39
38
  - Browse the [cookbooks](https://github.com/agno-agi/agno/tree/main/cookbook) for real-world examples
40
- - Read the [docs](https://docs.agno.com) to learn more.
39
+ - Read the [docs](https://docs.agno.com) to learn more
41
40
 
42
41
  ## Resources
43
42
 
@@ -105,26 +104,26 @@ This isn't a privacy mode or enterprise add-on. It's how Agno works.
105
104
 
106
105
  ## Features
107
106
 
108
- **Core**
107
+ ### Core:
109
108
  - Model agnostic — works with OpenAI, Anthropic, Google, local models, whatever
110
109
  - Type-safe I/O with `input_schema` and `output_schema`
111
110
  - Async-first, built for long-running tasks
112
111
  - Natively multimodal (text, images, audio, video, files)
113
112
 
114
- **Memory & Knowledge**
113
+ ### Memory & Knowledge:
115
114
  - Persistent storage for session history and state
116
115
  - User memory that persists across sessions
117
116
  - Agentic RAG with 20+ vector stores, hybrid search, reranking
118
117
  - Culture — shared long-term memory across agents
119
118
 
120
- **Execution**
119
+ ### Execution:
121
120
  - Human-in-the-loop (confirmations, approvals, overrides)
122
121
  - Guardrails for validation and security
123
122
  - Pre/post hooks for the agent lifecycle
124
123
  - First-class MCP and A2A support
125
124
  - 100+ built-in toolkits
126
125
 
127
- **Production**
126
+ ### Production:
128
127
  - Ready-to-use FastAPI runtime
129
128
  - Integrated control plane UI
130
129
  - Evals for accuracy, performance, latency
@@ -142,7 +141,7 @@ We're obsessive about performance because agent workloads spawn hundreds of inst
142
141
  | Instantiation | **3μs** | 1,587μs (529× slower) | 170μs (57× slower) | 210μs (70× slower) |
143
142
  | Memory | **6.6 KiB** | 161 KiB (24× higher) | 29 KiB (4× higher) | 66 KiB (10× higher) |
144
143
 
145
- Run the benchmarks yourself: [`cookbook/evals/performance`](https://github.com/agno-agi/agno/tree/main/cookbook/evals/performance)
144
+ Run the benchmarks yourself: [`cookbook/12_evals/performance`](https://github.com/agno-agi/agno/tree/main/cookbook/12_evals/performance)
146
145
 
147
146
  https://github.com/user-attachments/assets/54b98576-1859-4880-9f2d-15e1a426719d
148
147
 
@@ -77,6 +77,7 @@ from agno.run.requirement import RunRequirement
77
77
  from agno.run.team import TeamRunOutputEvent
78
78
  from agno.session import AgentSession, SessionSummaryManager, TeamSession, WorkflowSession
79
79
  from agno.session.summary import SessionSummary
80
+ from agno.skills import Skills
80
81
  from agno.tools import Toolkit
81
82
  from agno.tools.function import Function
82
83
  from agno.utils.agent import (
@@ -264,6 +265,10 @@ class Agent:
264
265
  knowledge_retriever: Optional[Callable[..., Optional[List[Union[Dict, str]]]]] = None
265
266
  references_format: Literal["json", "yaml"] = "json"
266
267
 
268
+ # --- Skills ---
269
+ # Skills provide structured instructions, reference docs, and scripts for agents
270
+ skills: Optional[Skills] = None
271
+
267
272
  # --- Agent Tools ---
268
273
  # A list of tools provided to the Model.
269
274
  # Tools are functions the model may generate JSON inputs for.
@@ -487,6 +492,7 @@ class Agent:
487
492
  add_knowledge_to_context: bool = False,
488
493
  knowledge_retriever: Optional[Callable[..., Optional[List[Union[Dict, str]]]]] = None,
489
494
  references_format: Literal["json", "yaml"] = "json",
495
+ skills: Optional[Skills] = None,
490
496
  metadata: Optional[Dict[str, Any]] = None,
491
497
  tools: Optional[Sequence[Union[Toolkit, Callable, Function, Dict]]] = None,
492
498
  tool_call_limit: Optional[int] = None,
@@ -610,6 +616,8 @@ class Agent:
610
616
  self.knowledge_retriever = knowledge_retriever
611
617
  self.references_format = references_format
612
618
 
619
+ self.skills = skills
620
+
613
621
  self.metadata = metadata
614
622
 
615
623
  self.tools = list(tools) if tools else []
@@ -6396,6 +6404,10 @@ class Agent:
6396
6404
  if self.update_knowledge:
6397
6405
  agent_tools.append(self.add_to_knowledge)
6398
6406
 
6407
+ # Add tools for accessing skills
6408
+ if self.skills is not None:
6409
+ agent_tools.extend(self.skills.get_tools())
6410
+
6399
6411
  return agent_tools
6400
6412
 
6401
6413
  async def aget_tools(
@@ -6489,6 +6501,10 @@ class Agent:
6489
6501
  if self.update_knowledge:
6490
6502
  agent_tools.append(self.add_to_knowledge)
6491
6503
 
6504
+ # Add tools for accessing skills
6505
+ if self.skills is not None:
6506
+ agent_tools.extend(self.skills.get_tools())
6507
+
6492
6508
  return agent_tools
6493
6509
 
6494
6510
  def _determine_tools_for_model(
@@ -7171,7 +7187,6 @@ class Agent:
7171
7187
  """
7172
7188
  if self._has_async_db():
7173
7189
  raise ValueError("Async database not supported for save_session")
7174
-
7175
7190
  # If the agent is a member of a team, do not save the session to the database
7176
7191
  if (
7177
7192
  self.db is not None
@@ -7937,6 +7952,11 @@ class Agent:
7937
7952
  # 3.3.8 Then add additional context
7938
7953
  if self.additional_context is not None:
7939
7954
  system_message_content += f"{self.additional_context}\n"
7955
+ # 3.3.8.1 Then add skills to the system prompt
7956
+ if self.skills is not None:
7957
+ skills_snippet = self.skills.get_system_prompt_snippet()
7958
+ if skills_snippet:
7959
+ system_message_content += f"\n{skills_snippet}\n"
7940
7960
  # 3.3.9 Then add memories to the system prompt
7941
7961
  if self.add_memories_to_context:
7942
7962
  _memory_manager_not_set = False
@@ -8281,6 +8301,11 @@ class Agent:
8281
8301
  # 3.3.8 Then add additional context
8282
8302
  if self.additional_context is not None:
8283
8303
  system_message_content += f"{self.additional_context}\n"
8304
+ # 3.3.8.1 Then add skills to the system prompt
8305
+ if self.skills is not None:
8306
+ skills_snippet = self.skills.get_system_prompt_snippet()
8307
+ if skills_snippet:
8308
+ system_message_content += f"\n{skills_snippet}\n"
8284
8309
  # 3.3.9 Then add memories to the system prompt
8285
8310
  if self.add_memories_to_context:
8286
8311
  _memory_manager_not_set = False
@@ -1,5 +1,4 @@
1
1
  import json
2
- import time
3
2
  from dataclasses import dataclass, field
4
3
  from typing import TYPE_CHECKING, Any, AsyncIterator, Dict, List, Literal, Optional, Sequence, Tuple, Union, overload
5
4
 
@@ -29,19 +28,25 @@ class RemoteAgent(BaseRemote):
29
28
  base_url: str,
30
29
  agent_id: str,
31
30
  timeout: float = 60.0,
31
+ protocol: Literal["agentos", "a2a"] = "agentos",
32
+ a2a_protocol: Literal["json-rpc", "rest"] = "rest",
32
33
  config_ttl: float = 300.0,
33
34
  ):
34
- """Initialize AgentOSRunner for local or remote execution.
35
+ """Initialize RemoteAgent for remote execution.
35
36
 
36
- For remote execution, provide base_url and agent_id.
37
+ Supports two protocols:
38
+ - "agentos": Agno's proprietary AgentOS REST API (default)
39
+ - "a2a": A2A (Agent-to-Agent) protocol for cross-framework communication
37
40
 
38
41
  Args:
39
- base_url: Base URL for remote AgentOS instance (e.g., "http://localhost:7777")
40
- agent_id: ID of remote agent
42
+ base_url: Base URL for remote instance (e.g., "http://localhost:7777")
43
+ agent_id: ID of remote agent on the remote server
41
44
  timeout: Request timeout in seconds (default: 60)
45
+ protocol: Communication protocol - "agentos" (default) or "a2a"
46
+ a2a_protocol: For A2A protocol only - Whether to use JSON-RPC or REST protocol.
42
47
  config_ttl: Time-to-live for cached config in seconds (default: 300)
43
48
  """
44
- super().__init__(base_url, timeout, config_ttl)
49
+ super().__init__(base_url, timeout, protocol, a2a_protocol, config_ttl)
45
50
  self.agent_id = agent_id
46
51
  self._cached_agent_config = None
47
52
 
@@ -50,14 +55,48 @@ class RemoteAgent(BaseRemote):
50
55
  return self.agent_id
51
56
 
52
57
  async def get_agent_config(self) -> "AgentResponse":
53
- """Get the agent config from remote (always fetches fresh)."""
54
- return await self.client.aget_agent(self.agent_id)
58
+ """
59
+ Get the agent config from remote.
60
+
61
+ For A2A protocol, returns a minimal AgentResponse since A2A servers
62
+ don't expose the same config endpoints as AgentOS. For AgentOS, always fetches fresh config.
63
+ """
64
+ from agno.os.routers.agents.schema import AgentResponse
65
+
66
+ if self.a2a_client:
67
+ from agno.client.a2a.schemas import AgentCard
68
+
69
+ agent_card: Optional[AgentCard] = await self.a2a_client.aget_agent_card()
70
+
71
+ return AgentResponse(
72
+ id=self.agent_id,
73
+ name=agent_card.name if agent_card else self.agent_id,
74
+ description=agent_card.description if agent_card else f"A2A agent: {self.agent_id}",
75
+ )
76
+
77
+ return await self.agentos_client.aget_agent(self.agent_id) # type: ignore
55
78
 
56
79
  @property
57
- def _agent_config(self) -> "AgentResponse":
58
- """Get the agent config from remote, cached with TTL."""
80
+ def _agent_config(self) -> Optional["AgentResponse"]:
81
+ """
82
+ Get the agent config from remote, cached with TTL.
83
+ Returns None for A2A protocol since A2A servers don't expose agent config endpoints.
84
+ """
85
+ import time
86
+
59
87
  from agno.os.routers.agents.schema import AgentResponse
60
88
 
89
+ if self.a2a_client:
90
+ from agno.client.a2a.schemas import AgentCard
91
+
92
+ agent_card: Optional[AgentCard] = self.a2a_client.get_agent_card()
93
+
94
+ return AgentResponse(
95
+ id=self.agent_id,
96
+ name=agent_card.name if agent_card else self.agent_id,
97
+ description=agent_card.description if agent_card else f"A2A agent: {self.agent_id}",
98
+ )
99
+
61
100
  current_time = time.time()
62
101
 
63
102
  # Check if cache is valid
@@ -67,15 +106,24 @@ class RemoteAgent(BaseRemote):
67
106
  return config
68
107
 
69
108
  # Fetch fresh config
70
- config: AgentResponse = self.client.get_agent(self.agent_id) # type: ignore
109
+ config: AgentResponse = self.agentos_client.get_agent(self.agent_id) # type: ignore
71
110
  self._cached_agent_config = (config, current_time)
72
111
  return config
73
112
 
74
- def refresh_config(self) -> "AgentResponse":
75
- """Force refresh the cached agent config."""
113
+ async def refresh_config(self) -> Optional["AgentResponse"]:
114
+ """
115
+ Force refresh the cached agent config.
116
+ Returns None for A2A protocol.
117
+ """
118
+ import time
119
+
76
120
  from agno.os.routers.agents.schema import AgentResponse
77
121
 
78
- config: AgentResponse = self.client.get_agent(self.agent_id)
122
+ if self.a2a_client:
123
+ self._cached_agent_config = None
124
+ return None
125
+
126
+ config: AgentResponse = await self.agentos_client.aget_agent(self.agent_id) # type: ignore
79
127
  self._cached_agent_config = (config, time.time())
80
128
  return config
81
129
 
@@ -91,7 +139,6 @@ class RemoteAgent(BaseRemote):
91
139
  return self._agent_config.description
92
140
  return ""
93
141
 
94
- @property
95
142
  def role(self) -> Optional[str]:
96
143
  if self._agent_config is not None:
97
144
  return self._agent_config.role
@@ -109,23 +156,27 @@ class RemoteAgent(BaseRemote):
109
156
 
110
157
  @property
111
158
  def db(self) -> Optional[RemoteDb]:
112
- if self._agent_config is not None and self._agent_config.db_id is not None:
159
+ if (
160
+ self.agentos_client
161
+ and self._config
162
+ and self._agent_config is not None
163
+ and self._agent_config.db_id is not None
164
+ ):
113
165
  return RemoteDb.from_config(
114
166
  db_id=self._agent_config.db_id,
115
- client=self.client,
167
+ client=self.agentos_client,
116
168
  config=self._config,
117
169
  )
118
170
  return None
119
171
 
120
172
  @property
121
173
  def knowledge(self) -> Optional[RemoteKnowledge]:
122
- """Whether the agent has knowledge enabled."""
123
- if self._agent_config is not None and self._agent_config.knowledge is not None:
174
+ if self.agentos_client and self._agent_config is not None and self._agent_config.knowledge is not None:
124
175
  return RemoteKnowledge(
125
- client=self.client,
176
+ client=self.agentos_client,
126
177
  contents_db=RemoteDb(
127
178
  id=self._agent_config.knowledge.get("db_id"), # type: ignore
128
- client=self.client,
179
+ client=self.agentos_client,
129
180
  knowledge_table_name=self._agent_config.knowledge.get("knowledge_table"),
130
181
  )
131
182
  if self._agent_config.knowledge.get("db_id") is not None
@@ -139,7 +190,7 @@ class RemoteAgent(BaseRemote):
139
190
  return None
140
191
 
141
192
  async def aget_tools(self, **kwargs: Any) -> List[Dict]:
142
- if self._agent_config.tools is not None:
193
+ if self._agent_config is not None and self._agent_config.tools is not None:
143
194
  return json.loads(self._agent_config.tools["tools"])
144
195
  return []
145
196
 
@@ -222,52 +273,156 @@ class RemoteAgent(BaseRemote):
222
273
  serialized_input = serialize_input(validated_input)
223
274
  headers = self._get_auth_headers(auth_token)
224
275
 
225
- if stream:
226
- # Handle streaming response
227
- return self.get_client().run_agent_stream(
228
- agent_id=self.agent_id,
276
+ # A2A protocol path
277
+ if self.a2a_client:
278
+ return self._arun_a2a( # type: ignore[return-value]
229
279
  message=serialized_input,
230
- session_id=session_id,
280
+ stream=stream or False,
231
281
  user_id=user_id,
282
+ context_id=session_id, # Map session_id → context_id for A2A
232
283
  audio=audio,
233
284
  images=images,
234
285
  videos=videos,
235
286
  files=files,
236
- session_state=session_state,
237
- stream_events=stream_events,
238
- retries=retries,
239
- knowledge_filters=knowledge_filters,
240
- add_history_to_context=add_history_to_context,
241
- add_dependencies_to_context=add_dependencies_to_context,
242
- add_session_state_to_context=add_session_state_to_context,
243
- dependencies=dependencies,
244
- metadata=metadata,
245
287
  headers=headers,
246
- **kwargs,
247
288
  )
289
+
290
+ # AgentOS protocol path (default)
291
+ if self.agentos_client:
292
+ if stream:
293
+ # Handle streaming response
294
+ return self.agentos_client.run_agent_stream(
295
+ agent_id=self.agent_id,
296
+ message=serialized_input,
297
+ session_id=session_id,
298
+ user_id=user_id,
299
+ audio=audio,
300
+ images=images,
301
+ videos=videos,
302
+ files=files,
303
+ session_state=session_state,
304
+ stream_events=stream_events,
305
+ retries=retries,
306
+ knowledge_filters=knowledge_filters,
307
+ add_history_to_context=add_history_to_context,
308
+ add_dependencies_to_context=add_dependencies_to_context,
309
+ add_session_state_to_context=add_session_state_to_context,
310
+ dependencies=dependencies,
311
+ metadata=metadata,
312
+ headers=headers,
313
+ **kwargs,
314
+ )
315
+ else:
316
+ return self.agentos_client.run_agent( # type: ignore
317
+ agent_id=self.agent_id,
318
+ message=serialized_input,
319
+ session_id=session_id,
320
+ user_id=user_id,
321
+ audio=audio,
322
+ images=images,
323
+ videos=videos,
324
+ files=files,
325
+ session_state=session_state,
326
+ stream_events=stream_events,
327
+ retries=retries,
328
+ knowledge_filters=knowledge_filters,
329
+ add_history_to_context=add_history_to_context,
330
+ add_dependencies_to_context=add_dependencies_to_context,
331
+ add_session_state_to_context=add_session_state_to_context,
332
+ dependencies=dependencies,
333
+ metadata=metadata,
334
+ headers=headers,
335
+ **kwargs,
336
+ )
248
337
  else:
249
- return self.get_client().run_agent( # type: ignore
250
- agent_id=self.agent_id,
251
- message=serialized_input,
252
- session_id=session_id,
338
+ raise ValueError("No client available")
339
+
340
+ def _arun_a2a(
341
+ self,
342
+ message: str,
343
+ stream: bool,
344
+ user_id: Optional[str],
345
+ context_id: Optional[str],
346
+ audio: Optional[Sequence[Audio]],
347
+ images: Optional[Sequence[Image]],
348
+ videos: Optional[Sequence[Video]],
349
+ files: Optional[Sequence[File]],
350
+ headers: Optional[Dict[str, str]],
351
+ ) -> Union[RunOutput, AsyncIterator[RunOutputEvent]]:
352
+ """Execute via A2A protocol.
353
+
354
+ Args:
355
+ message: Serialized message string
356
+ stream: Whether to stream the response
357
+ user_id: User identifier
358
+ context_id: Session/context ID (maps to session_id)
359
+ audio: Audio files to include
360
+ images: Images to include
361
+ videos: Videos to include
362
+ files: Files to include
363
+ headers: HTTP headers to include in the request (optional)
364
+
365
+ Returns:
366
+ RunOutput for non-streaming, AsyncIterator[RunOutputEvent] for streaming
367
+ """
368
+ if not self.a2a_client:
369
+ raise ValueError("A2A client not available")
370
+ from agno.client.a2a.utils import map_stream_events_to_run_events
371
+
372
+ if stream:
373
+ # Return async generator for streaming
374
+ event_stream = self.a2a_client.stream_message(
375
+ message=message,
376
+ context_id=context_id,
253
377
  user_id=user_id,
378
+ images=list(images) if images else None,
379
+ audio=list(audio) if audio else None,
380
+ videos=list(videos) if videos else None,
381
+ files=list(files) if files else None,
382
+ headers=headers,
383
+ )
384
+ return map_stream_events_to_run_events(event_stream, agent_id=self.agent_id)
385
+ else:
386
+ # Return coroutine for non-streaming
387
+ return self._arun_a2a_send( # type: ignore[return-value]
388
+ message=message,
389
+ user_id=user_id,
390
+ context_id=context_id,
254
391
  audio=audio,
255
392
  images=images,
256
393
  videos=videos,
257
394
  files=files,
258
- session_state=session_state,
259
- stream_events=stream_events,
260
- retries=retries,
261
- knowledge_filters=knowledge_filters,
262
- add_history_to_context=add_history_to_context,
263
- add_dependencies_to_context=add_dependencies_to_context,
264
- add_session_state_to_context=add_session_state_to_context,
265
- dependencies=dependencies,
266
- metadata=metadata,
267
395
  headers=headers,
268
- **kwargs,
269
396
  )
270
397
 
398
+ async def _arun_a2a_send(
399
+ self,
400
+ message: str,
401
+ user_id: Optional[str],
402
+ context_id: Optional[str],
403
+ audio: Optional[Sequence[Audio]],
404
+ images: Optional[Sequence[Image]],
405
+ videos: Optional[Sequence[Video]],
406
+ files: Optional[Sequence[File]],
407
+ headers: Optional[Dict[str, str]],
408
+ ) -> RunOutput:
409
+ """Send a non-streaming A2A message and convert response to RunOutput."""
410
+ if not self.a2a_client:
411
+ raise ValueError("A2A client not available")
412
+ from agno.client.a2a.utils import map_task_result_to_run_output
413
+
414
+ task_result = await self.a2a_client.send_message(
415
+ message=message,
416
+ context_id=context_id,
417
+ user_id=user_id,
418
+ images=list(images) if images else None,
419
+ audio=list(audio) if audio else None,
420
+ videos=list(videos) if videos else None,
421
+ files=list(files) if files else None,
422
+ headers=headers,
423
+ )
424
+ return map_task_result_to_run_output(task_result, agent_id=self.agent_id, user_id=user_id)
425
+
271
426
  @overload
272
427
  async def acontinue_run(
273
428
  self,
@@ -307,27 +462,31 @@ class RemoteAgent(BaseRemote):
307
462
  ]:
308
463
  headers = self._get_auth_headers(auth_token)
309
464
 
310
- if stream:
311
- # Handle streaming response
312
- return self.get_client().continue_agent_run_stream( # type: ignore
313
- agent_id=self.agent_id,
314
- run_id=run_id,
315
- user_id=user_id,
316
- session_id=session_id,
317
- tools=updated_tools,
318
- headers=headers,
319
- **kwargs,
320
- )
465
+ if self.agentos_client:
466
+ if stream:
467
+ # Handle streaming response
468
+ return self.agentos_client.continue_agent_run_stream( # type: ignore
469
+ agent_id=self.agent_id,
470
+ run_id=run_id,
471
+ user_id=user_id,
472
+ session_id=session_id,
473
+ tools=updated_tools,
474
+ headers=headers,
475
+ **kwargs,
476
+ )
477
+ else:
478
+ return self.agentos_client.continue_agent_run( # type: ignore
479
+ agent_id=self.agent_id,
480
+ run_id=run_id,
481
+ tools=updated_tools,
482
+ user_id=user_id,
483
+ session_id=session_id,
484
+ headers=headers,
485
+ **kwargs,
486
+ )
487
+
321
488
  else:
322
- return self.get_client().continue_agent_run( # type: ignore
323
- agent_id=self.agent_id,
324
- run_id=run_id,
325
- tools=updated_tools,
326
- user_id=user_id,
327
- session_id=session_id,
328
- headers=headers,
329
- **kwargs,
330
- )
489
+ raise ValueError("No client available")
331
490
 
332
491
  async def cancel_run(self, run_id: str, auth_token: Optional[str] = None) -> bool:
333
492
  """Cancel a running agent execution.
@@ -340,8 +499,10 @@ class RemoteAgent(BaseRemote):
340
499
  bool: True if the run was successfully cancelled, False otherwise.
341
500
  """
342
501
  headers = self._get_auth_headers(auth_token)
502
+ if not self.agentos_client:
503
+ raise ValueError("AgentOS client not available")
343
504
  try:
344
- await self.get_client().cancel_agent_run(
505
+ await self.agentos_client.cancel_agent_run(
345
506
  agent_id=self.agent_id,
346
507
  run_id=run_id,
347
508
  headers=headers,
@@ -0,0 +1,10 @@
1
+ from agno.client.a2a.client import A2AClient
2
+ from agno.client.a2a.schemas import AgentCard, Artifact, StreamEvent, TaskResult
3
+
4
+ __all__ = [
5
+ "A2AClient",
6
+ "AgentCard",
7
+ "Artifact",
8
+ "StreamEvent",
9
+ "TaskResult",
10
+ ]