agno 1.7.4__tar.gz → 1.7.6__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 (564) hide show
  1. {agno-1.7.4 → agno-1.7.6}/PKG-INFO +19 -1
  2. {agno-1.7.4 → agno-1.7.6}/agno/agent/agent.py +28 -15
  3. {agno-1.7.4 → agno-1.7.6}/agno/app/agui/async_router.py +5 -5
  4. {agno-1.7.4 → agno-1.7.6}/agno/app/agui/sync_router.py +5 -5
  5. {agno-1.7.4 → agno-1.7.6}/agno/app/agui/utils.py +84 -14
  6. {agno-1.7.4 → agno-1.7.6}/agno/app/fastapi/app.py +1 -1
  7. {agno-1.7.4 → agno-1.7.6}/agno/app/fastapi/async_router.py +67 -16
  8. {agno-1.7.4 → agno-1.7.6}/agno/app/fastapi/sync_router.py +80 -14
  9. agno-1.7.6/agno/document/chunking/row.py +39 -0
  10. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/base.py +0 -7
  11. agno-1.7.6/agno/embedder/jina.py +73 -0
  12. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/agent.py +39 -2
  13. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/combined.py +1 -1
  14. {agno-1.7.4 → agno-1.7.6}/agno/memory/agent.py +2 -2
  15. {agno-1.7.4 → agno-1.7.6}/agno/memory/team.py +2 -2
  16. {agno-1.7.4 → agno-1.7.6}/agno/models/aws/bedrock.py +311 -15
  17. {agno-1.7.4 → agno-1.7.6}/agno/models/litellm/chat.py +12 -3
  18. {agno-1.7.4 → agno-1.7.6}/agno/models/openai/chat.py +1 -22
  19. {agno-1.7.4 → agno-1.7.6}/agno/models/openai/responses.py +5 -5
  20. agno-1.7.6/agno/models/portkey/__init__.py +3 -0
  21. agno-1.7.6/agno/models/portkey/portkey.py +88 -0
  22. {agno-1.7.4 → agno-1.7.6}/agno/models/xai/xai.py +54 -0
  23. {agno-1.7.4 → agno-1.7.6}/agno/run/v2/workflow.py +4 -0
  24. {agno-1.7.4 → agno-1.7.6}/agno/storage/mysql.py +1 -0
  25. {agno-1.7.4 → agno-1.7.6}/agno/storage/postgres.py +1 -0
  26. {agno-1.7.4 → agno-1.7.6}/agno/storage/session/v2/workflow.py +29 -5
  27. {agno-1.7.4 → agno-1.7.6}/agno/storage/singlestore.py +4 -1
  28. {agno-1.7.4 → agno-1.7.6}/agno/storage/sqlite.py +0 -1
  29. {agno-1.7.4 → agno-1.7.6}/agno/team/team.py +52 -22
  30. agno-1.7.6/agno/tools/bitbucket.py +292 -0
  31. agno-1.7.6/agno/tools/daytona.py +478 -0
  32. {agno-1.7.4 → agno-1.7.6}/agno/tools/decorator.py +45 -2
  33. agno-1.7.6/agno/tools/evm.py +123 -0
  34. {agno-1.7.4 → agno-1.7.6}/agno/tools/function.py +16 -12
  35. agno-1.7.6/agno/tools/linkup.py +54 -0
  36. {agno-1.7.4 → agno-1.7.6}/agno/tools/mcp.py +10 -3
  37. {agno-1.7.4 → agno-1.7.6}/agno/tools/mem0.py +15 -2
  38. agno-1.7.6/agno/tools/postgres.py +260 -0
  39. {agno-1.7.4 → agno-1.7.6}/agno/utils/log.py +16 -0
  40. {agno-1.7.4 → agno-1.7.6}/agno/utils/pprint.py +2 -0
  41. {agno-1.7.4 → agno-1.7.6}/agno/utils/string.py +14 -0
  42. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/pgvector/pgvector.py +4 -5
  43. agno-1.7.6/agno/vectordb/surrealdb/__init__.py +3 -0
  44. agno-1.7.6/agno/vectordb/surrealdb/surrealdb.py +493 -0
  45. {agno-1.7.4 → agno-1.7.6}/agno/workflow/v2/workflow.py +144 -19
  46. {agno-1.7.4 → agno-1.7.6}/agno/workflow/workflow.py +90 -63
  47. {agno-1.7.4 → agno-1.7.6}/agno.egg-info/PKG-INFO +19 -1
  48. {agno-1.7.4 → agno-1.7.6}/agno.egg-info/SOURCES.txt +9 -0
  49. {agno-1.7.4 → agno-1.7.6}/agno.egg-info/requires.txt +24 -0
  50. {agno-1.7.4 → agno-1.7.6}/pyproject.toml +24 -5
  51. agno-1.7.4/agno/tools/daytona.py +0 -130
  52. agno-1.7.4/agno/tools/postgres.py +0 -247
  53. {agno-1.7.4 → agno-1.7.6}/LICENSE +0 -0
  54. {agno-1.7.4 → agno-1.7.6}/README.md +0 -0
  55. {agno-1.7.4 → agno-1.7.6}/agno/__init__.py +0 -0
  56. {agno-1.7.4 → agno-1.7.6}/agno/agent/__init__.py +0 -0
  57. {agno-1.7.4 → agno-1.7.6}/agno/agent/metrics.py +0 -0
  58. {agno-1.7.4 → agno-1.7.6}/agno/api/__init__.py +0 -0
  59. {agno-1.7.4 → agno-1.7.6}/agno/api/agent.py +0 -0
  60. {agno-1.7.4 → agno-1.7.6}/agno/api/api.py +0 -0
  61. {agno-1.7.4 → agno-1.7.6}/agno/api/app.py +0 -0
  62. {agno-1.7.4 → agno-1.7.6}/agno/api/evals.py +0 -0
  63. {agno-1.7.4 → agno-1.7.6}/agno/api/playground.py +0 -0
  64. {agno-1.7.4 → agno-1.7.6}/agno/api/routes.py +0 -0
  65. {agno-1.7.4 → agno-1.7.6}/agno/api/schemas/__init__.py +0 -0
  66. {agno-1.7.4 → agno-1.7.6}/agno/api/schemas/agent.py +0 -0
  67. {agno-1.7.4 → agno-1.7.6}/agno/api/schemas/app.py +0 -0
  68. {agno-1.7.4 → agno-1.7.6}/agno/api/schemas/evals.py +0 -0
  69. {agno-1.7.4 → agno-1.7.6}/agno/api/schemas/playground.py +0 -0
  70. {agno-1.7.4 → agno-1.7.6}/agno/api/schemas/response.py +0 -0
  71. {agno-1.7.4 → agno-1.7.6}/agno/api/schemas/team.py +0 -0
  72. {agno-1.7.4 → agno-1.7.6}/agno/api/schemas/user.py +0 -0
  73. {agno-1.7.4 → agno-1.7.6}/agno/api/schemas/workflows.py +0 -0
  74. {agno-1.7.4 → agno-1.7.6}/agno/api/schemas/workspace.py +0 -0
  75. {agno-1.7.4 → agno-1.7.6}/agno/api/team.py +0 -0
  76. {agno-1.7.4 → agno-1.7.6}/agno/api/user.py +0 -0
  77. {agno-1.7.4 → agno-1.7.6}/agno/api/workflows.py +0 -0
  78. {agno-1.7.4 → agno-1.7.6}/agno/api/workspace.py +0 -0
  79. {agno-1.7.4 → agno-1.7.6}/agno/app/__init__.py +0 -0
  80. {agno-1.7.4 → agno-1.7.6}/agno/app/agui/__init__.py +0 -0
  81. {agno-1.7.4 → agno-1.7.6}/agno/app/agui/app.py +0 -0
  82. {agno-1.7.4 → agno-1.7.6}/agno/app/base.py +0 -0
  83. {agno-1.7.4 → agno-1.7.6}/agno/app/discord/__init__.py +0 -0
  84. {agno-1.7.4 → agno-1.7.6}/agno/app/discord/client.py +0 -0
  85. {agno-1.7.4 → agno-1.7.6}/agno/app/fastapi/__init__.py +0 -0
  86. {agno-1.7.4 → agno-1.7.6}/agno/app/playground/__init__.py +0 -0
  87. {agno-1.7.4 → agno-1.7.6}/agno/app/playground/app.py +0 -0
  88. {agno-1.7.4 → agno-1.7.6}/agno/app/playground/async_router.py +0 -0
  89. {agno-1.7.4 → agno-1.7.6}/agno/app/playground/deploy.py +0 -0
  90. {agno-1.7.4 → agno-1.7.6}/agno/app/playground/operator.py +0 -0
  91. {agno-1.7.4 → agno-1.7.6}/agno/app/playground/schemas.py +0 -0
  92. {agno-1.7.4 → agno-1.7.6}/agno/app/playground/serve.py +0 -0
  93. {agno-1.7.4 → agno-1.7.6}/agno/app/playground/settings.py +0 -0
  94. {agno-1.7.4 → agno-1.7.6}/agno/app/playground/sync_router.py +0 -0
  95. {agno-1.7.4 → agno-1.7.6}/agno/app/playground/utils.py +0 -0
  96. {agno-1.7.4 → agno-1.7.6}/agno/app/settings.py +0 -0
  97. {agno-1.7.4 → agno-1.7.6}/agno/app/slack/__init__.py +0 -0
  98. {agno-1.7.4 → agno-1.7.6}/agno/app/slack/app.py +0 -0
  99. {agno-1.7.4 → agno-1.7.6}/agno/app/slack/async_router.py +0 -0
  100. {agno-1.7.4 → agno-1.7.6}/agno/app/slack/security.py +0 -0
  101. {agno-1.7.4 → agno-1.7.6}/agno/app/slack/sync_router.py +0 -0
  102. {agno-1.7.4 → agno-1.7.6}/agno/app/utils.py +0 -0
  103. {agno-1.7.4 → agno-1.7.6}/agno/app/whatsapp/__init__.py +0 -0
  104. {agno-1.7.4 → agno-1.7.6}/agno/app/whatsapp/app.py +0 -0
  105. {agno-1.7.4 → agno-1.7.6}/agno/app/whatsapp/async_router.py +0 -0
  106. {agno-1.7.4 → agno-1.7.6}/agno/app/whatsapp/security.py +0 -0
  107. {agno-1.7.4 → agno-1.7.6}/agno/app/whatsapp/sync_router.py +0 -0
  108. {agno-1.7.4 → agno-1.7.6}/agno/cli/__init__.py +0 -0
  109. {agno-1.7.4 → agno-1.7.6}/agno/cli/auth_server.py +0 -0
  110. {agno-1.7.4 → agno-1.7.6}/agno/cli/config.py +0 -0
  111. {agno-1.7.4 → agno-1.7.6}/agno/cli/console.py +0 -0
  112. {agno-1.7.4 → agno-1.7.6}/agno/cli/credentials.py +0 -0
  113. {agno-1.7.4 → agno-1.7.6}/agno/cli/entrypoint.py +0 -0
  114. {agno-1.7.4 → agno-1.7.6}/agno/cli/operator.py +0 -0
  115. {agno-1.7.4 → agno-1.7.6}/agno/cli/settings.py +0 -0
  116. {agno-1.7.4 → agno-1.7.6}/agno/cli/ws/__init__.py +0 -0
  117. {agno-1.7.4 → agno-1.7.6}/agno/cli/ws/ws_cli.py +0 -0
  118. {agno-1.7.4 → agno-1.7.6}/agno/constants.py +0 -0
  119. {agno-1.7.4 → agno-1.7.6}/agno/debug.py +0 -0
  120. {agno-1.7.4 → agno-1.7.6}/agno/document/__init__.py +0 -0
  121. {agno-1.7.4 → agno-1.7.6}/agno/document/base.py +0 -0
  122. {agno-1.7.4 → agno-1.7.6}/agno/document/chunking/__init__.py +0 -0
  123. {agno-1.7.4 → agno-1.7.6}/agno/document/chunking/agentic.py +0 -0
  124. {agno-1.7.4 → agno-1.7.6}/agno/document/chunking/document.py +0 -0
  125. {agno-1.7.4 → agno-1.7.6}/agno/document/chunking/fixed.py +0 -0
  126. {agno-1.7.4 → agno-1.7.6}/agno/document/chunking/markdown.py +0 -0
  127. {agno-1.7.4 → agno-1.7.6}/agno/document/chunking/recursive.py +0 -0
  128. {agno-1.7.4 → agno-1.7.6}/agno/document/chunking/semantic.py +0 -0
  129. {agno-1.7.4 → agno-1.7.6}/agno/document/chunking/strategy.py +0 -0
  130. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/__init__.py +0 -0
  131. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/arxiv_reader.py +0 -0
  132. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/csv_reader.py +0 -0
  133. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/docx_reader.py +0 -0
  134. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/firecrawl_reader.py +0 -0
  135. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/gcs/__init__.py +0 -0
  136. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/gcs/pdf_reader.py +0 -0
  137. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/json_reader.py +0 -0
  138. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/markdown_reader.py +0 -0
  139. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/pdf_reader.py +0 -0
  140. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/s3/__init__.py +0 -0
  141. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/s3/pdf_reader.py +0 -0
  142. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/s3/text_reader.py +0 -0
  143. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/text_reader.py +0 -0
  144. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/url_reader.py +0 -0
  145. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/website_reader.py +0 -0
  146. {agno-1.7.4 → agno-1.7.6}/agno/document/reader/youtube_reader.py +0 -0
  147. {agno-1.7.4 → agno-1.7.6}/agno/embedder/__init__.py +0 -0
  148. {agno-1.7.4 → agno-1.7.6}/agno/embedder/aws_bedrock.py +0 -0
  149. {agno-1.7.4 → agno-1.7.6}/agno/embedder/azure_openai.py +0 -0
  150. {agno-1.7.4 → agno-1.7.6}/agno/embedder/base.py +0 -0
  151. {agno-1.7.4 → agno-1.7.6}/agno/embedder/cohere.py +0 -0
  152. {agno-1.7.4 → agno-1.7.6}/agno/embedder/fastembed.py +0 -0
  153. {agno-1.7.4 → agno-1.7.6}/agno/embedder/fireworks.py +0 -0
  154. {agno-1.7.4 → agno-1.7.6}/agno/embedder/google.py +0 -0
  155. {agno-1.7.4 → agno-1.7.6}/agno/embedder/huggingface.py +0 -0
  156. {agno-1.7.4 → agno-1.7.6}/agno/embedder/langdb.py +0 -0
  157. {agno-1.7.4 → agno-1.7.6}/agno/embedder/mistral.py +0 -0
  158. {agno-1.7.4 → agno-1.7.6}/agno/embedder/nebius.py +0 -0
  159. {agno-1.7.4 → agno-1.7.6}/agno/embedder/ollama.py +0 -0
  160. {agno-1.7.4 → agno-1.7.6}/agno/embedder/openai.py +0 -0
  161. {agno-1.7.4 → agno-1.7.6}/agno/embedder/sentence_transformer.py +0 -0
  162. {agno-1.7.4 → agno-1.7.6}/agno/embedder/together.py +0 -0
  163. {agno-1.7.4 → agno-1.7.6}/agno/embedder/voyageai.py +0 -0
  164. {agno-1.7.4 → agno-1.7.6}/agno/eval/__init__.py +0 -0
  165. {agno-1.7.4 → agno-1.7.6}/agno/eval/accuracy.py +0 -0
  166. {agno-1.7.4 → agno-1.7.6}/agno/eval/performance.py +0 -0
  167. {agno-1.7.4 → agno-1.7.6}/agno/eval/reliability.py +0 -0
  168. {agno-1.7.4 → agno-1.7.6}/agno/eval/utils.py +0 -0
  169. {agno-1.7.4 → agno-1.7.6}/agno/exceptions.py +0 -0
  170. {agno-1.7.4 → agno-1.7.6}/agno/file/__init__.py +0 -0
  171. {agno-1.7.4 → agno-1.7.6}/agno/file/file.py +0 -0
  172. {agno-1.7.4 → agno-1.7.6}/agno/file/local/__init__.py +0 -0
  173. {agno-1.7.4 → agno-1.7.6}/agno/file/local/csv.py +0 -0
  174. {agno-1.7.4 → agno-1.7.6}/agno/file/local/txt.py +0 -0
  175. {agno-1.7.4 → agno-1.7.6}/agno/infra/__init__.py +0 -0
  176. {agno-1.7.4 → agno-1.7.6}/agno/infra/app.py +0 -0
  177. {agno-1.7.4 → agno-1.7.6}/agno/infra/base.py +0 -0
  178. {agno-1.7.4 → agno-1.7.6}/agno/infra/context.py +0 -0
  179. {agno-1.7.4 → agno-1.7.6}/agno/infra/db_app.py +0 -0
  180. {agno-1.7.4 → agno-1.7.6}/agno/infra/resource.py +0 -0
  181. {agno-1.7.4 → agno-1.7.6}/agno/infra/resources.py +0 -0
  182. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/__init__.py +0 -0
  183. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/arxiv.py +0 -0
  184. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/csv.py +0 -0
  185. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/csv_url.py +0 -0
  186. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/document.py +0 -0
  187. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/docx.py +0 -0
  188. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/firecrawl.py +0 -0
  189. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/gcs/__init__.py +0 -0
  190. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/gcs/base.py +0 -0
  191. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/gcs/pdf.py +0 -0
  192. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/json.py +0 -0
  193. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/langchain.py +0 -0
  194. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/light_rag.py +0 -0
  195. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/llamaindex.py +0 -0
  196. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/markdown.py +0 -0
  197. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/pdf.py +0 -0
  198. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/pdf_bytes.py +0 -0
  199. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/pdf_url.py +0 -0
  200. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/s3/__init__.py +0 -0
  201. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/s3/base.py +0 -0
  202. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/s3/pdf.py +0 -0
  203. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/s3/text.py +0 -0
  204. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/text.py +0 -0
  205. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/url.py +0 -0
  206. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/website.py +0 -0
  207. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/wikipedia.py +0 -0
  208. {agno-1.7.4 → agno-1.7.6}/agno/knowledge/youtube.py +0 -0
  209. {agno-1.7.4 → agno-1.7.6}/agno/media.py +0 -0
  210. {agno-1.7.4 → agno-1.7.6}/agno/memory/__init__.py +0 -0
  211. {agno-1.7.4 → agno-1.7.6}/agno/memory/classifier.py +0 -0
  212. {agno-1.7.4 → agno-1.7.6}/agno/memory/db/__init__.py +0 -0
  213. {agno-1.7.4 → agno-1.7.6}/agno/memory/db/base.py +0 -0
  214. {agno-1.7.4 → agno-1.7.6}/agno/memory/db/mongodb.py +0 -0
  215. {agno-1.7.4 → agno-1.7.6}/agno/memory/db/postgres.py +0 -0
  216. {agno-1.7.4 → agno-1.7.6}/agno/memory/db/sqlite.py +0 -0
  217. {agno-1.7.4 → agno-1.7.6}/agno/memory/manager.py +0 -0
  218. {agno-1.7.4 → agno-1.7.6}/agno/memory/memory.py +0 -0
  219. {agno-1.7.4 → agno-1.7.6}/agno/memory/row.py +0 -0
  220. {agno-1.7.4 → agno-1.7.6}/agno/memory/summarizer.py +0 -0
  221. {agno-1.7.4 → agno-1.7.6}/agno/memory/summary.py +0 -0
  222. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/__init__.py +0 -0
  223. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/db/__init__.py +0 -0
  224. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/db/base.py +0 -0
  225. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/db/firestore.py +0 -0
  226. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/db/mongodb.py +0 -0
  227. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/db/postgres.py +0 -0
  228. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/db/redis.py +0 -0
  229. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/db/schema.py +0 -0
  230. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/db/sqlite.py +0 -0
  231. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/manager.py +0 -0
  232. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/memory.py +0 -0
  233. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/schema.py +0 -0
  234. {agno-1.7.4 → agno-1.7.6}/agno/memory/v2/summarizer.py +0 -0
  235. {agno-1.7.4 → agno-1.7.6}/agno/memory/workflow.py +0 -0
  236. {agno-1.7.4 → agno-1.7.6}/agno/models/__init__.py +0 -0
  237. {agno-1.7.4 → agno-1.7.6}/agno/models/aimlapi/__init__.py +0 -0
  238. {agno-1.7.4 → agno-1.7.6}/agno/models/aimlapi/aimlapi.py +0 -0
  239. {agno-1.7.4 → agno-1.7.6}/agno/models/anthropic/__init__.py +0 -0
  240. {agno-1.7.4 → agno-1.7.6}/agno/models/anthropic/claude.py +0 -0
  241. {agno-1.7.4 → agno-1.7.6}/agno/models/aws/__init__.py +0 -0
  242. {agno-1.7.4 → agno-1.7.6}/agno/models/aws/claude.py +0 -0
  243. {agno-1.7.4 → agno-1.7.6}/agno/models/azure/__init__.py +0 -0
  244. {agno-1.7.4 → agno-1.7.6}/agno/models/azure/ai_foundry.py +0 -0
  245. {agno-1.7.4 → agno-1.7.6}/agno/models/azure/openai_chat.py +0 -0
  246. {agno-1.7.4 → agno-1.7.6}/agno/models/base.py +0 -0
  247. {agno-1.7.4 → agno-1.7.6}/agno/models/cerebras/__init__.py +0 -0
  248. {agno-1.7.4 → agno-1.7.6}/agno/models/cerebras/cerebras.py +0 -0
  249. {agno-1.7.4 → agno-1.7.6}/agno/models/cerebras/cerebras_openai.py +0 -0
  250. {agno-1.7.4 → agno-1.7.6}/agno/models/cohere/__init__.py +0 -0
  251. {agno-1.7.4 → agno-1.7.6}/agno/models/cohere/chat.py +0 -0
  252. {agno-1.7.4 → agno-1.7.6}/agno/models/deepinfra/__init__.py +0 -0
  253. {agno-1.7.4 → agno-1.7.6}/agno/models/deepinfra/deepinfra.py +0 -0
  254. {agno-1.7.4 → agno-1.7.6}/agno/models/deepseek/__init__.py +0 -0
  255. {agno-1.7.4 → agno-1.7.6}/agno/models/deepseek/deepseek.py +0 -0
  256. {agno-1.7.4 → agno-1.7.6}/agno/models/defaults.py +0 -0
  257. {agno-1.7.4 → agno-1.7.6}/agno/models/fireworks/__init__.py +0 -0
  258. {agno-1.7.4 → agno-1.7.6}/agno/models/fireworks/fireworks.py +0 -0
  259. {agno-1.7.4 → agno-1.7.6}/agno/models/google/__init__.py +0 -0
  260. {agno-1.7.4 → agno-1.7.6}/agno/models/google/gemini.py +0 -0
  261. {agno-1.7.4 → agno-1.7.6}/agno/models/groq/__init__.py +0 -0
  262. {agno-1.7.4 → agno-1.7.6}/agno/models/groq/groq.py +0 -0
  263. {agno-1.7.4 → agno-1.7.6}/agno/models/huggingface/__init__.py +0 -0
  264. {agno-1.7.4 → agno-1.7.6}/agno/models/huggingface/huggingface.py +0 -0
  265. {agno-1.7.4 → agno-1.7.6}/agno/models/ibm/__init__.py +0 -0
  266. {agno-1.7.4 → agno-1.7.6}/agno/models/ibm/watsonx.py +0 -0
  267. {agno-1.7.4 → agno-1.7.6}/agno/models/internlm/__init__.py +0 -0
  268. {agno-1.7.4 → agno-1.7.6}/agno/models/internlm/internlm.py +0 -0
  269. {agno-1.7.4 → agno-1.7.6}/agno/models/langdb/__init__.py +0 -0
  270. {agno-1.7.4 → agno-1.7.6}/agno/models/langdb/langdb.py +0 -0
  271. {agno-1.7.4 → agno-1.7.6}/agno/models/litellm/__init__.py +0 -0
  272. {agno-1.7.4 → agno-1.7.6}/agno/models/litellm/litellm_openai.py +0 -0
  273. {agno-1.7.4 → agno-1.7.6}/agno/models/lmstudio/__init__.py +0 -0
  274. {agno-1.7.4 → agno-1.7.6}/agno/models/lmstudio/lmstudio.py +0 -0
  275. {agno-1.7.4 → agno-1.7.6}/agno/models/message.py +0 -0
  276. {agno-1.7.4 → agno-1.7.6}/agno/models/meta/__init__.py +0 -0
  277. {agno-1.7.4 → agno-1.7.6}/agno/models/meta/llama.py +0 -0
  278. {agno-1.7.4 → agno-1.7.6}/agno/models/meta/llama_openai.py +0 -0
  279. {agno-1.7.4 → agno-1.7.6}/agno/models/mistral/__init__.py +0 -0
  280. {agno-1.7.4 → agno-1.7.6}/agno/models/mistral/mistral.py +0 -0
  281. {agno-1.7.4 → agno-1.7.6}/agno/models/nebius/__init__.py +0 -0
  282. {agno-1.7.4 → agno-1.7.6}/agno/models/nebius/nebius.py +0 -0
  283. {agno-1.7.4 → agno-1.7.6}/agno/models/nvidia/__init__.py +0 -0
  284. {agno-1.7.4 → agno-1.7.6}/agno/models/nvidia/nvidia.py +0 -0
  285. {agno-1.7.4 → agno-1.7.6}/agno/models/ollama/__init__.py +0 -0
  286. {agno-1.7.4 → agno-1.7.6}/agno/models/ollama/chat.py +0 -0
  287. {agno-1.7.4 → agno-1.7.6}/agno/models/ollama/tools.py +0 -0
  288. {agno-1.7.4 → agno-1.7.6}/agno/models/openai/__init__.py +0 -0
  289. {agno-1.7.4 → agno-1.7.6}/agno/models/openai/like.py +0 -0
  290. {agno-1.7.4 → agno-1.7.6}/agno/models/openrouter/__init__.py +0 -0
  291. {agno-1.7.4 → agno-1.7.6}/agno/models/openrouter/openrouter.py +0 -0
  292. {agno-1.7.4 → agno-1.7.6}/agno/models/perplexity/__init__.py +0 -0
  293. {agno-1.7.4 → agno-1.7.6}/agno/models/perplexity/perplexity.py +0 -0
  294. {agno-1.7.4 → agno-1.7.6}/agno/models/response.py +0 -0
  295. {agno-1.7.4 → agno-1.7.6}/agno/models/sambanova/__init__.py +0 -0
  296. {agno-1.7.4 → agno-1.7.6}/agno/models/sambanova/sambanova.py +0 -0
  297. {agno-1.7.4 → agno-1.7.6}/agno/models/together/__init__.py +0 -0
  298. {agno-1.7.4 → agno-1.7.6}/agno/models/together/together.py +0 -0
  299. {agno-1.7.4 → agno-1.7.6}/agno/models/vercel/__init__.py +0 -0
  300. {agno-1.7.4 → agno-1.7.6}/agno/models/vercel/v0.py +0 -0
  301. {agno-1.7.4 → agno-1.7.6}/agno/models/vllm/__init__.py +0 -0
  302. {agno-1.7.4 → agno-1.7.6}/agno/models/vllm/vllm.py +0 -0
  303. {agno-1.7.4 → agno-1.7.6}/agno/models/xai/__init__.py +0 -0
  304. {agno-1.7.4 → agno-1.7.6}/agno/playground/__init__.py +0 -0
  305. {agno-1.7.4 → agno-1.7.6}/agno/playground/deploy.py +0 -0
  306. {agno-1.7.4 → agno-1.7.6}/agno/playground/playground.py +0 -0
  307. {agno-1.7.4 → agno-1.7.6}/agno/playground/serve.py +0 -0
  308. {agno-1.7.4 → agno-1.7.6}/agno/playground/settings.py +0 -0
  309. {agno-1.7.4 → agno-1.7.6}/agno/py.typed +0 -0
  310. {agno-1.7.4 → agno-1.7.6}/agno/reasoning/__init__.py +0 -0
  311. {agno-1.7.4 → agno-1.7.6}/agno/reasoning/azure_ai_foundry.py +0 -0
  312. {agno-1.7.4 → agno-1.7.6}/agno/reasoning/deepseek.py +0 -0
  313. {agno-1.7.4 → agno-1.7.6}/agno/reasoning/default.py +0 -0
  314. {agno-1.7.4 → agno-1.7.6}/agno/reasoning/groq.py +0 -0
  315. {agno-1.7.4 → agno-1.7.6}/agno/reasoning/helpers.py +0 -0
  316. {agno-1.7.4 → agno-1.7.6}/agno/reasoning/ollama.py +0 -0
  317. {agno-1.7.4 → agno-1.7.6}/agno/reasoning/openai.py +0 -0
  318. {agno-1.7.4 → agno-1.7.6}/agno/reasoning/step.py +0 -0
  319. {agno-1.7.4 → agno-1.7.6}/agno/reranker/__init__.py +0 -0
  320. {agno-1.7.4 → agno-1.7.6}/agno/reranker/base.py +0 -0
  321. {agno-1.7.4 → agno-1.7.6}/agno/reranker/cohere.py +0 -0
  322. {agno-1.7.4 → agno-1.7.6}/agno/reranker/infinity.py +0 -0
  323. {agno-1.7.4 → agno-1.7.6}/agno/reranker/sentence_transformer.py +0 -0
  324. {agno-1.7.4 → agno-1.7.6}/agno/run/__init__.py +0 -0
  325. {agno-1.7.4 → agno-1.7.6}/agno/run/base.py +0 -0
  326. {agno-1.7.4 → agno-1.7.6}/agno/run/messages.py +0 -0
  327. {agno-1.7.4 → agno-1.7.6}/agno/run/response.py +0 -0
  328. {agno-1.7.4 → agno-1.7.6}/agno/run/team.py +0 -0
  329. {agno-1.7.4 → agno-1.7.6}/agno/run/v2/__init__.py +0 -0
  330. {agno-1.7.4 → agno-1.7.6}/agno/run/workflow.py +0 -0
  331. {agno-1.7.4 → agno-1.7.6}/agno/storage/__init__.py +0 -0
  332. {agno-1.7.4 → agno-1.7.6}/agno/storage/agent/__init__.py +0 -0
  333. {agno-1.7.4 → agno-1.7.6}/agno/storage/agent/dynamodb.py +0 -0
  334. {agno-1.7.4 → agno-1.7.6}/agno/storage/agent/json.py +0 -0
  335. {agno-1.7.4 → agno-1.7.6}/agno/storage/agent/mongodb.py +0 -0
  336. {agno-1.7.4 → agno-1.7.6}/agno/storage/agent/postgres.py +0 -0
  337. {agno-1.7.4 → agno-1.7.6}/agno/storage/agent/singlestore.py +0 -0
  338. {agno-1.7.4 → agno-1.7.6}/agno/storage/agent/sqlite.py +0 -0
  339. {agno-1.7.4 → agno-1.7.6}/agno/storage/agent/yaml.py +0 -0
  340. {agno-1.7.4 → agno-1.7.6}/agno/storage/base.py +0 -0
  341. {agno-1.7.4 → agno-1.7.6}/agno/storage/dynamodb.py +0 -0
  342. {agno-1.7.4 → agno-1.7.6}/agno/storage/firestore.py +0 -0
  343. {agno-1.7.4 → agno-1.7.6}/agno/storage/gcs_json.py +0 -0
  344. {agno-1.7.4 → agno-1.7.6}/agno/storage/json.py +0 -0
  345. {agno-1.7.4 → agno-1.7.6}/agno/storage/mongodb.py +0 -0
  346. {agno-1.7.4 → agno-1.7.6}/agno/storage/redis.py +0 -0
  347. {agno-1.7.4 → agno-1.7.6}/agno/storage/session/__init__.py +0 -0
  348. {agno-1.7.4 → agno-1.7.6}/agno/storage/session/agent.py +0 -0
  349. {agno-1.7.4 → agno-1.7.6}/agno/storage/session/team.py +0 -0
  350. {agno-1.7.4 → agno-1.7.6}/agno/storage/session/v2/__init__.py +0 -0
  351. {agno-1.7.4 → agno-1.7.6}/agno/storage/session/workflow.py +0 -0
  352. {agno-1.7.4 → agno-1.7.6}/agno/storage/workflow/__init__.py +0 -0
  353. {agno-1.7.4 → agno-1.7.6}/agno/storage/workflow/mongodb.py +0 -0
  354. {agno-1.7.4 → agno-1.7.6}/agno/storage/workflow/postgres.py +0 -0
  355. {agno-1.7.4 → agno-1.7.6}/agno/storage/workflow/sqlite.py +0 -0
  356. {agno-1.7.4 → agno-1.7.6}/agno/storage/yaml.py +0 -0
  357. {agno-1.7.4 → agno-1.7.6}/agno/team/__init__.py +0 -0
  358. {agno-1.7.4 → agno-1.7.6}/agno/tools/__init__.py +0 -0
  359. {agno-1.7.4 → agno-1.7.6}/agno/tools/agentql.py +0 -0
  360. {agno-1.7.4 → agno-1.7.6}/agno/tools/airflow.py +0 -0
  361. {agno-1.7.4 → agno-1.7.6}/agno/tools/api.py +0 -0
  362. {agno-1.7.4 → agno-1.7.6}/agno/tools/apify.py +0 -0
  363. {agno-1.7.4 → agno-1.7.6}/agno/tools/arxiv.py +0 -0
  364. {agno-1.7.4 → agno-1.7.6}/agno/tools/aws_lambda.py +0 -0
  365. {agno-1.7.4 → agno-1.7.6}/agno/tools/aws_ses.py +0 -0
  366. {agno-1.7.4 → agno-1.7.6}/agno/tools/baidusearch.py +0 -0
  367. {agno-1.7.4 → agno-1.7.6}/agno/tools/bravesearch.py +0 -0
  368. {agno-1.7.4 → agno-1.7.6}/agno/tools/brightdata.py +0 -0
  369. {agno-1.7.4 → agno-1.7.6}/agno/tools/browserbase.py +0 -0
  370. {agno-1.7.4 → agno-1.7.6}/agno/tools/calcom.py +0 -0
  371. {agno-1.7.4 → agno-1.7.6}/agno/tools/calculator.py +0 -0
  372. {agno-1.7.4 → agno-1.7.6}/agno/tools/cartesia.py +0 -0
  373. {agno-1.7.4 → agno-1.7.6}/agno/tools/clickup_tool.py +0 -0
  374. {agno-1.7.4 → agno-1.7.6}/agno/tools/confluence.py +0 -0
  375. {agno-1.7.4 → agno-1.7.6}/agno/tools/crawl4ai.py +0 -0
  376. {agno-1.7.4 → agno-1.7.6}/agno/tools/csv_toolkit.py +0 -0
  377. {agno-1.7.4 → agno-1.7.6}/agno/tools/dalle.py +0 -0
  378. {agno-1.7.4 → agno-1.7.6}/agno/tools/desi_vocal.py +0 -0
  379. {agno-1.7.4 → agno-1.7.6}/agno/tools/discord.py +0 -0
  380. {agno-1.7.4 → agno-1.7.6}/agno/tools/docker.py +0 -0
  381. {agno-1.7.4 → agno-1.7.6}/agno/tools/duckdb.py +0 -0
  382. {agno-1.7.4 → agno-1.7.6}/agno/tools/duckduckgo.py +0 -0
  383. {agno-1.7.4 → agno-1.7.6}/agno/tools/e2b.py +0 -0
  384. {agno-1.7.4 → agno-1.7.6}/agno/tools/eleven_labs.py +0 -0
  385. {agno-1.7.4 → agno-1.7.6}/agno/tools/email.py +0 -0
  386. {agno-1.7.4 → agno-1.7.6}/agno/tools/exa.py +0 -0
  387. {agno-1.7.4 → agno-1.7.6}/agno/tools/fal.py +0 -0
  388. {agno-1.7.4 → agno-1.7.6}/agno/tools/file.py +0 -0
  389. {agno-1.7.4 → agno-1.7.6}/agno/tools/financial_datasets.py +0 -0
  390. {agno-1.7.4 → agno-1.7.6}/agno/tools/firecrawl.py +0 -0
  391. {agno-1.7.4 → agno-1.7.6}/agno/tools/giphy.py +0 -0
  392. {agno-1.7.4 → agno-1.7.6}/agno/tools/github.py +0 -0
  393. {agno-1.7.4 → agno-1.7.6}/agno/tools/gmail.py +0 -0
  394. {agno-1.7.4 → agno-1.7.6}/agno/tools/google_bigquery.py +0 -0
  395. {agno-1.7.4 → agno-1.7.6}/agno/tools/google_maps.py +0 -0
  396. {agno-1.7.4 → agno-1.7.6}/agno/tools/googlecalendar.py +0 -0
  397. {agno-1.7.4 → agno-1.7.6}/agno/tools/googlesearch.py +0 -0
  398. {agno-1.7.4 → agno-1.7.6}/agno/tools/googlesheets.py +0 -0
  399. {agno-1.7.4 → agno-1.7.6}/agno/tools/hackernews.py +0 -0
  400. {agno-1.7.4 → agno-1.7.6}/agno/tools/jina.py +0 -0
  401. {agno-1.7.4 → agno-1.7.6}/agno/tools/jira.py +0 -0
  402. {agno-1.7.4 → agno-1.7.6}/agno/tools/knowledge.py +0 -0
  403. {agno-1.7.4 → agno-1.7.6}/agno/tools/linear.py +0 -0
  404. {agno-1.7.4 → agno-1.7.6}/agno/tools/local_file_system.py +0 -0
  405. {agno-1.7.4 → agno-1.7.6}/agno/tools/lumalab.py +0 -0
  406. {agno-1.7.4 → agno-1.7.6}/agno/tools/mlx_transcribe.py +0 -0
  407. {agno-1.7.4 → agno-1.7.6}/agno/tools/models/__init__.py +0 -0
  408. {agno-1.7.4 → agno-1.7.6}/agno/tools/models/azure_openai.py +0 -0
  409. {agno-1.7.4 → agno-1.7.6}/agno/tools/models/gemini.py +0 -0
  410. {agno-1.7.4 → agno-1.7.6}/agno/tools/models/groq.py +0 -0
  411. {agno-1.7.4 → agno-1.7.6}/agno/tools/models/nebius.py +0 -0
  412. {agno-1.7.4 → agno-1.7.6}/agno/tools/models_labs.py +0 -0
  413. {agno-1.7.4 → agno-1.7.6}/agno/tools/moviepy_video.py +0 -0
  414. {agno-1.7.4 → agno-1.7.6}/agno/tools/newspaper.py +0 -0
  415. {agno-1.7.4 → agno-1.7.6}/agno/tools/newspaper4k.py +0 -0
  416. {agno-1.7.4 → agno-1.7.6}/agno/tools/openai.py +0 -0
  417. {agno-1.7.4 → agno-1.7.6}/agno/tools/openbb.py +0 -0
  418. {agno-1.7.4 → agno-1.7.6}/agno/tools/opencv.py +0 -0
  419. {agno-1.7.4 → agno-1.7.6}/agno/tools/openweather.py +0 -0
  420. {agno-1.7.4 → agno-1.7.6}/agno/tools/oxylabs.py +0 -0
  421. {agno-1.7.4 → agno-1.7.6}/agno/tools/pandas.py +0 -0
  422. {agno-1.7.4 → agno-1.7.6}/agno/tools/pubmed.py +0 -0
  423. {agno-1.7.4 → agno-1.7.6}/agno/tools/python.py +0 -0
  424. {agno-1.7.4 → agno-1.7.6}/agno/tools/reasoning.py +0 -0
  425. {agno-1.7.4 → agno-1.7.6}/agno/tools/reddit.py +0 -0
  426. {agno-1.7.4 → agno-1.7.6}/agno/tools/replicate.py +0 -0
  427. {agno-1.7.4 → agno-1.7.6}/agno/tools/resend.py +0 -0
  428. {agno-1.7.4 → agno-1.7.6}/agno/tools/scrapegraph.py +0 -0
  429. {agno-1.7.4 → agno-1.7.6}/agno/tools/searxng.py +0 -0
  430. {agno-1.7.4 → agno-1.7.6}/agno/tools/serpapi.py +0 -0
  431. {agno-1.7.4 → agno-1.7.6}/agno/tools/serper.py +0 -0
  432. {agno-1.7.4 → agno-1.7.6}/agno/tools/shell.py +0 -0
  433. {agno-1.7.4 → agno-1.7.6}/agno/tools/slack.py +0 -0
  434. {agno-1.7.4 → agno-1.7.6}/agno/tools/sleep.py +0 -0
  435. {agno-1.7.4 → agno-1.7.6}/agno/tools/spider.py +0 -0
  436. {agno-1.7.4 → agno-1.7.6}/agno/tools/sql.py +0 -0
  437. {agno-1.7.4 → agno-1.7.6}/agno/tools/streamlit/__init__.py +0 -0
  438. {agno-1.7.4 → agno-1.7.6}/agno/tools/streamlit/components.py +0 -0
  439. {agno-1.7.4 → agno-1.7.6}/agno/tools/tavily.py +0 -0
  440. {agno-1.7.4 → agno-1.7.6}/agno/tools/telegram.py +0 -0
  441. {agno-1.7.4 → agno-1.7.6}/agno/tools/thinking.py +0 -0
  442. {agno-1.7.4 → agno-1.7.6}/agno/tools/todoist.py +0 -0
  443. {agno-1.7.4 → agno-1.7.6}/agno/tools/tool_registry.py +0 -0
  444. {agno-1.7.4 → agno-1.7.6}/agno/tools/toolkit.py +0 -0
  445. {agno-1.7.4 → agno-1.7.6}/agno/tools/trello.py +0 -0
  446. {agno-1.7.4 → agno-1.7.6}/agno/tools/twilio.py +0 -0
  447. {agno-1.7.4 → agno-1.7.6}/agno/tools/user_control_flow.py +0 -0
  448. {agno-1.7.4 → agno-1.7.6}/agno/tools/valyu.py +0 -0
  449. {agno-1.7.4 → agno-1.7.6}/agno/tools/visualization.py +0 -0
  450. {agno-1.7.4 → agno-1.7.6}/agno/tools/webbrowser.py +0 -0
  451. {agno-1.7.4 → agno-1.7.6}/agno/tools/webex.py +0 -0
  452. {agno-1.7.4 → agno-1.7.6}/agno/tools/website.py +0 -0
  453. {agno-1.7.4 → agno-1.7.6}/agno/tools/webtools.py +0 -0
  454. {agno-1.7.4 → agno-1.7.6}/agno/tools/whatsapp.py +0 -0
  455. {agno-1.7.4 → agno-1.7.6}/agno/tools/wikipedia.py +0 -0
  456. {agno-1.7.4 → agno-1.7.6}/agno/tools/x.py +0 -0
  457. {agno-1.7.4 → agno-1.7.6}/agno/tools/yfinance.py +0 -0
  458. {agno-1.7.4 → agno-1.7.6}/agno/tools/youtube.py +0 -0
  459. {agno-1.7.4 → agno-1.7.6}/agno/tools/zendesk.py +0 -0
  460. {agno-1.7.4 → agno-1.7.6}/agno/tools/zep.py +0 -0
  461. {agno-1.7.4 → agno-1.7.6}/agno/tools/zoom.py +0 -0
  462. {agno-1.7.4 → agno-1.7.6}/agno/utils/__init__.py +0 -0
  463. {agno-1.7.4 → agno-1.7.6}/agno/utils/audio.py +0 -0
  464. {agno-1.7.4 → agno-1.7.6}/agno/utils/certs.py +0 -0
  465. {agno-1.7.4 → agno-1.7.6}/agno/utils/code_execution.py +0 -0
  466. {agno-1.7.4 → agno-1.7.6}/agno/utils/common.py +0 -0
  467. {agno-1.7.4 → agno-1.7.6}/agno/utils/defaults.py +0 -0
  468. {agno-1.7.4 → agno-1.7.6}/agno/utils/dttm.py +0 -0
  469. {agno-1.7.4 → agno-1.7.6}/agno/utils/enum.py +0 -0
  470. {agno-1.7.4 → agno-1.7.6}/agno/utils/env.py +0 -0
  471. {agno-1.7.4 → agno-1.7.6}/agno/utils/events.py +0 -0
  472. {agno-1.7.4 → agno-1.7.6}/agno/utils/filesystem.py +0 -0
  473. {agno-1.7.4 → agno-1.7.6}/agno/utils/format_str.py +0 -0
  474. {agno-1.7.4 → agno-1.7.6}/agno/utils/functions.py +0 -0
  475. {agno-1.7.4 → agno-1.7.6}/agno/utils/gemini.py +0 -0
  476. {agno-1.7.4 → agno-1.7.6}/agno/utils/git.py +0 -0
  477. {agno-1.7.4 → agno-1.7.6}/agno/utils/http.py +0 -0
  478. {agno-1.7.4 → agno-1.7.6}/agno/utils/json_io.py +0 -0
  479. {agno-1.7.4 → agno-1.7.6}/agno/utils/json_schema.py +0 -0
  480. {agno-1.7.4 → agno-1.7.6}/agno/utils/load_env.py +0 -0
  481. {agno-1.7.4 → agno-1.7.6}/agno/utils/location.py +0 -0
  482. {agno-1.7.4 → agno-1.7.6}/agno/utils/mcp.py +0 -0
  483. {agno-1.7.4 → agno-1.7.6}/agno/utils/media.py +0 -0
  484. {agno-1.7.4 → agno-1.7.6}/agno/utils/merge_dict.py +0 -0
  485. {agno-1.7.4 → agno-1.7.6}/agno/utils/message.py +0 -0
  486. {agno-1.7.4 → agno-1.7.6}/agno/utils/models/__init__.py +0 -0
  487. {agno-1.7.4 → agno-1.7.6}/agno/utils/models/ai_foundry.py +0 -0
  488. {agno-1.7.4 → agno-1.7.6}/agno/utils/models/aws_claude.py +0 -0
  489. {agno-1.7.4 → agno-1.7.6}/agno/utils/models/claude.py +0 -0
  490. {agno-1.7.4 → agno-1.7.6}/agno/utils/models/cohere.py +0 -0
  491. {agno-1.7.4 → agno-1.7.6}/agno/utils/models/llama.py +0 -0
  492. {agno-1.7.4 → agno-1.7.6}/agno/utils/models/mistral.py +0 -0
  493. {agno-1.7.4 → agno-1.7.6}/agno/utils/models/openai_responses.py +0 -0
  494. {agno-1.7.4 → agno-1.7.6}/agno/utils/models/schema_utils.py +0 -0
  495. {agno-1.7.4 → agno-1.7.6}/agno/utils/models/watsonx.py +0 -0
  496. {agno-1.7.4 → agno-1.7.6}/agno/utils/openai.py +0 -0
  497. {agno-1.7.4 → agno-1.7.6}/agno/utils/pickle.py +0 -0
  498. {agno-1.7.4 → agno-1.7.6}/agno/utils/prompts.py +0 -0
  499. {agno-1.7.4 → agno-1.7.6}/agno/utils/py_io.py +0 -0
  500. {agno-1.7.4 → agno-1.7.6}/agno/utils/pyproject.py +0 -0
  501. {agno-1.7.4 → agno-1.7.6}/agno/utils/resource_filter.py +0 -0
  502. {agno-1.7.4 → agno-1.7.6}/agno/utils/response.py +0 -0
  503. {agno-1.7.4 → agno-1.7.6}/agno/utils/response_iterator.py +0 -0
  504. {agno-1.7.4 → agno-1.7.6}/agno/utils/safe_formatter.py +0 -0
  505. {agno-1.7.4 → agno-1.7.6}/agno/utils/shell.py +0 -0
  506. {agno-1.7.4 → agno-1.7.6}/agno/utils/timer.py +0 -0
  507. {agno-1.7.4 → agno-1.7.6}/agno/utils/tools.py +0 -0
  508. {agno-1.7.4 → agno-1.7.6}/agno/utils/web.py +0 -0
  509. {agno-1.7.4 → agno-1.7.6}/agno/utils/whatsapp.py +0 -0
  510. {agno-1.7.4 → agno-1.7.6}/agno/utils/yaml_io.py +0 -0
  511. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/__init__.py +0 -0
  512. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/base.py +0 -0
  513. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/cassandra/__init__.py +0 -0
  514. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/cassandra/cassandra.py +0 -0
  515. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  516. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/cassandra/index.py +0 -0
  517. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/chroma/__init__.py +0 -0
  518. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/chroma/chromadb.py +0 -0
  519. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/clickhouse/__init__.py +0 -0
  520. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  521. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/clickhouse/index.py +0 -0
  522. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/couchbase/__init__.py +0 -0
  523. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/couchbase/couchbase.py +0 -0
  524. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/distance.py +0 -0
  525. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/lancedb/__init__.py +0 -0
  526. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/lancedb/lance_db.py +0 -0
  527. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/milvus/__init__.py +0 -0
  528. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/milvus/milvus.py +0 -0
  529. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/mongodb/__init__.py +0 -0
  530. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/mongodb/mongodb.py +0 -0
  531. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/pgvector/__init__.py +0 -0
  532. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/pgvector/index.py +0 -0
  533. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/pineconedb/__init__.py +0 -0
  534. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  535. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/qdrant/__init__.py +0 -0
  536. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/qdrant/qdrant.py +0 -0
  537. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/search.py +0 -0
  538. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/singlestore/__init__.py +0 -0
  539. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/singlestore/index.py +0 -0
  540. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/singlestore/singlestore.py +0 -0
  541. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/upstashdb/__init__.py +0 -0
  542. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  543. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/weaviate/__init__.py +0 -0
  544. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/weaviate/index.py +0 -0
  545. {agno-1.7.4 → agno-1.7.6}/agno/vectordb/weaviate/weaviate.py +0 -0
  546. {agno-1.7.4 → agno-1.7.6}/agno/workflow/__init__.py +0 -0
  547. {agno-1.7.4 → agno-1.7.6}/agno/workflow/v2/__init__.py +0 -0
  548. {agno-1.7.4 → agno-1.7.6}/agno/workflow/v2/condition.py +0 -0
  549. {agno-1.7.4 → agno-1.7.6}/agno/workflow/v2/loop.py +0 -0
  550. {agno-1.7.4 → agno-1.7.6}/agno/workflow/v2/parallel.py +0 -0
  551. {agno-1.7.4 → agno-1.7.6}/agno/workflow/v2/router.py +0 -0
  552. {agno-1.7.4 → agno-1.7.6}/agno/workflow/v2/step.py +0 -0
  553. {agno-1.7.4 → agno-1.7.6}/agno/workflow/v2/steps.py +0 -0
  554. {agno-1.7.4 → agno-1.7.6}/agno/workflow/v2/types.py +0 -0
  555. {agno-1.7.4 → agno-1.7.6}/agno/workspace/__init__.py +0 -0
  556. {agno-1.7.4 → agno-1.7.6}/agno/workspace/config.py +0 -0
  557. {agno-1.7.4 → agno-1.7.6}/agno/workspace/enums.py +0 -0
  558. {agno-1.7.4 → agno-1.7.6}/agno/workspace/helpers.py +0 -0
  559. {agno-1.7.4 → agno-1.7.6}/agno/workspace/operator.py +0 -0
  560. {agno-1.7.4 → agno-1.7.6}/agno/workspace/settings.py +0 -0
  561. {agno-1.7.4 → agno-1.7.6}/agno.egg-info/dependency_links.txt +0 -0
  562. {agno-1.7.4 → agno-1.7.6}/agno.egg-info/entry_points.txt +0 -0
  563. {agno-1.7.4 → agno-1.7.6}/agno.egg-info/top_level.txt +0 -0
  564. {agno-1.7.4 → agno-1.7.6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 1.7.4
3
+ Version: 1.7.6
4
4
  Summary: Agno: a lightweight library for building Multi-Agent Systems
5
5
  Author-email: Ashpreet Bedi <ashpreet@agno.com>
6
6
  License: Copyright (c) Agno, Inc.
@@ -443,6 +443,9 @@ Requires-Dist: opentelemetry-exporter-otlp-proto-grpc; extra == "arize"
443
443
  Requires-Dist: opentelemetry-distro; extra == "arize"
444
444
  Provides-Extra: langfuse
445
445
  Requires-Dist: langfuse; extra == "langfuse"
446
+ Provides-Extra: aws-bedrock
447
+ Requires-Dist: boto3; extra == "aws-bedrock"
448
+ Requires-Dist: aioboto3; extra == "aws-bedrock"
446
449
  Provides-Extra: anthropic
447
450
  Requires-Dist: anthropic; extra == "anthropic"
448
451
  Provides-Extra: azure
@@ -472,6 +475,8 @@ Provides-Extra: ollama
472
475
  Requires-Dist: ollama; extra == "ollama"
473
476
  Provides-Extra: openai
474
477
  Requires-Dist: openai; extra == "openai"
478
+ Provides-Extra: portkey
479
+ Requires-Dist: portkey-ai; extra == "portkey"
475
480
  Provides-Extra: agentql
476
481
  Requires-Dist: agentql; extra == "agentql"
477
482
  Provides-Extra: apify
@@ -491,6 +496,8 @@ Provides-Extra: duckdb
491
496
  Requires-Dist: duckdb; extra == "duckdb"
492
497
  Provides-Extra: elevenlabs
493
498
  Requires-Dist: elevenlabs; extra == "elevenlabs"
499
+ Provides-Extra: evm
500
+ Requires-Dist: web3; extra == "evm"
494
501
  Provides-Extra: exa
495
502
  Requires-Dist: exa_py; extra == "exa"
496
503
  Provides-Extra: fal
@@ -521,6 +528,8 @@ Requires-Dist: newspaper4k; extra == "newspaper"
521
528
  Requires-Dist: lxml_html_clean; extra == "newspaper"
522
529
  Provides-Extra: opencv
523
530
  Requires-Dist: opencv-python; extra == "opencv"
531
+ Provides-Extra: psycopg2
532
+ Requires-Dist: psycopg2-binary; extra == "psycopg2"
524
533
  Provides-Extra: todoist
525
534
  Requires-Dist: todoist-api-python; extra == "todoist"
526
535
  Provides-Extra: valyu
@@ -533,6 +542,8 @@ Provides-Extra: youtube
533
542
  Requires-Dist: youtube_transcript_api; extra == "youtube"
534
543
  Provides-Extra: zep
535
544
  Requires-Dist: zep-cloud; extra == "zep"
545
+ Provides-Extra: daytona
546
+ Requires-Dist: daytona; extra == "daytona"
536
547
  Provides-Extra: oxylabs
537
548
  Requires-Dist: oxylabs; extra == "oxylabs"
538
549
  Provides-Extra: sql
@@ -573,6 +584,8 @@ Provides-Extra: clickhouse
573
584
  Requires-Dist: clickhouse-connect; extra == "clickhouse"
574
585
  Provides-Extra: pinecone
575
586
  Requires-Dist: pinecone==5.4.2; extra == "pinecone"
587
+ Provides-Extra: surrealdb
588
+ Requires-Dist: surrealdb>=1.0.4; extra == "surrealdb"
576
589
  Provides-Extra: pdf
577
590
  Requires-Dist: pypdf; extra == "pdf"
578
591
  Requires-Dist: rapidocr_onnxruntime; extra == "pdf"
@@ -601,6 +614,7 @@ Provides-Extra: aws
601
614
  Requires-Dist: agno-aws; extra == "aws"
602
615
  Requires-Dist: agno-docker; extra == "aws"
603
616
  Provides-Extra: models
617
+ Requires-Dist: agno[aws-bedrock]; extra == "models"
604
618
  Requires-Dist: agno[anthropic]; extra == "models"
605
619
  Requires-Dist: agno[azure]; extra == "models"
606
620
  Requires-Dist: agno[cerebras]; extra == "models"
@@ -615,6 +629,7 @@ Requires-Dist: agno[meta]; extra == "models"
615
629
  Requires-Dist: agno[mistral]; extra == "models"
616
630
  Requires-Dist: agno[ollama]; extra == "models"
617
631
  Requires-Dist: agno[openai]; extra == "models"
632
+ Requires-Dist: agno[portkey]; extra == "models"
618
633
  Provides-Extra: tools
619
634
  Requires-Dist: agno[apify]; extra == "tools"
620
635
  Requires-Dist: agno[brave]; extra == "tools"
@@ -632,6 +647,7 @@ Requires-Dist: agno[googlemaps]; extra == "tools"
632
647
  Requires-Dist: agno[todoist]; extra == "tools"
633
648
  Requires-Dist: agno[matplotlib]; extra == "tools"
634
649
  Requires-Dist: agno[elevenlabs]; extra == "tools"
650
+ Requires-Dist: agno[evm]; extra == "tools"
635
651
  Requires-Dist: agno[fal]; extra == "tools"
636
652
  Requires-Dist: agno[webex]; extra == "tools"
637
653
  Requires-Dist: agno[mcp]; extra == "tools"
@@ -644,6 +660,7 @@ Requires-Dist: agno[oxylabs]; extra == "tools"
644
660
  Requires-Dist: agno[zep]; extra == "tools"
645
661
  Requires-Dist: agno[mem0]; extra == "tools"
646
662
  Requires-Dist: agno[google_bigquery]; extra == "tools"
663
+ Requires-Dist: agno[psycopg2]; extra == "tools"
647
664
  Provides-Extra: storage
648
665
  Requires-Dist: agno[sql]; extra == "storage"
649
666
  Requires-Dist: agno[postgres]; extra == "storage"
@@ -664,6 +681,7 @@ Requires-Dist: agno[weaviate]; extra == "vectordbs"
664
681
  Requires-Dist: agno[milvusdb]; extra == "vectordbs"
665
682
  Requires-Dist: agno[clickhouse]; extra == "vectordbs"
666
683
  Requires-Dist: agno[pinecone]; extra == "vectordbs"
684
+ Requires-Dist: agno[surrealdb]; extra == "vectordbs"
667
685
  Provides-Extra: knowledge
668
686
  Requires-Dist: agno[pdf]; extra == "knowledge"
669
687
  Requires-Dist: agno[docx]; extra == "knowledge"
@@ -119,6 +119,8 @@ class Agent:
119
119
  session_state: Optional[Dict[str, Any]] = None
120
120
  search_previous_sessions_history: Optional[bool] = False
121
121
  num_history_sessions: Optional[int] = None
122
+ # If True, cache the session in memory
123
+ cache_session: bool = True
122
124
 
123
125
  # --- Agent Context ---
124
126
  # Context available for tools and prompt functions
@@ -351,6 +353,7 @@ class Agent:
351
353
  session_state: Optional[Dict[str, Any]] = None,
352
354
  search_previous_sessions_history: Optional[bool] = False,
353
355
  num_history_sessions: Optional[int] = None,
356
+ cache_session: bool = True,
354
357
  context: Optional[Dict[str, Any]] = None,
355
358
  add_context: bool = False,
356
359
  resolve_context: bool = True,
@@ -441,6 +444,8 @@ class Agent:
441
444
  self.search_previous_sessions_history = search_previous_sessions_history
442
445
  self.num_history_sessions = num_history_sessions
443
446
 
447
+ self.cache_session = cache_session
448
+
444
449
  self.context = context
445
450
  self.add_context = add_context
446
451
  self.resolve_context = resolve_context
@@ -754,9 +759,6 @@ class Agent:
754
759
 
755
760
  self._initialize_session_state(user_id=user_id, session_id=session_id)
756
761
 
757
- # Read existing session from storage
758
- self.read_from_storage(session_id=session_id)
759
-
760
762
  return session_id, user_id
761
763
 
762
764
  def _run(
@@ -996,16 +998,18 @@ class Agent:
996
998
  **kwargs: Any,
997
999
  ) -> Union[RunResponse, Iterator[RunResponseEvent]]:
998
1000
  """Run the Agent and return the response."""
999
-
1000
1001
  session_id, user_id = self._initialize_session(
1001
1002
  session_id=session_id, user_id=user_id, session_state=session_state
1002
1003
  )
1003
1004
 
1004
- log_debug(f"Session ID: {session_id}", center=True)
1005
-
1006
1005
  # Initialize the Agent
1007
1006
  self.initialize_agent()
1008
1007
 
1008
+ # Read existing session from storage
1009
+ self.read_from_storage(session_id=session_id)
1010
+
1011
+ log_debug(f"Session ID: {session_id}", center=True)
1012
+
1009
1013
  # Initialize Knowledge Filters
1010
1014
  effective_filters = knowledge_filters
1011
1015
 
@@ -1382,6 +1386,9 @@ class Agent:
1382
1386
  # Initialize the Agent
1383
1387
  self.initialize_agent()
1384
1388
 
1389
+ # Read existing session from storage
1390
+ self.read_from_storage(session_id=session_id)
1391
+
1385
1392
  effective_filters = knowledge_filters
1386
1393
  # When filters are passed manually
1387
1394
  if self.knowledge_filters or knowledge_filters:
@@ -1606,6 +1613,9 @@ class Agent:
1606
1613
  retries: The number of retries to continue the run for.
1607
1614
  knowledge_filters: The knowledge filters to use for the run.
1608
1615
  """
1616
+ # Initialize the Agent
1617
+ self.initialize_agent()
1618
+
1609
1619
  if session_id is not None:
1610
1620
  self.reset_run_state()
1611
1621
  # Reset session state if a session_id is provided. Session name and session state will be loaded from storage.
@@ -1614,9 +1624,6 @@ class Agent:
1614
1624
  if self.session_id is not None and session_id != self.session_id:
1615
1625
  self.session_state = None
1616
1626
 
1617
- # Initialize the Agent
1618
- self.initialize_agent()
1619
-
1620
1627
  # Initialize Session
1621
1628
  # Use the default user_id and session_id when necessary
1622
1629
  user_id = user_id if user_id is not None else self.user_id
@@ -1996,6 +2003,9 @@ class Agent:
1996
2003
  retries: The number of retries to continue the run for.
1997
2004
  knowledge_filters: The knowledge filters to use for the run.
1998
2005
  """
2006
+ # Initialize the Agent
2007
+ self.initialize_agent()
2008
+
1999
2009
  if session_id is not None:
2000
2010
  self.reset_run_state()
2001
2011
  # Reset session state if a session_id is provided. Session name and session state will be loaded from storage.
@@ -2004,9 +2014,6 @@ class Agent:
2004
2014
  if self.session_id is not None and session_id != self.session_id:
2005
2015
  self.session_state = None
2006
2016
 
2007
- # Initialize the Agent
2008
- self.initialize_agent()
2009
-
2010
2017
  # Initialize Session
2011
2018
  # Use the default user_id and session_id when necessary
2012
2019
  user_id = user_id if user_id is not None else self.user_id
@@ -4056,6 +4063,7 @@ class Agent:
4056
4063
  # Convert dict to Memory
4057
4064
  elif isinstance(self.memory, dict):
4058
4065
  memory_dict = self.memory
4066
+
4059
4067
  memory_dict.pop("runs")
4060
4068
  self.memory = Memory(**memory_dict)
4061
4069
  else:
@@ -4111,6 +4119,7 @@ class Agent:
4111
4119
  self.memory.runs[session.session_id] = []
4112
4120
  for run in session.memory["runs"]:
4113
4121
  run_session_id = run["session_id"]
4122
+
4114
4123
  if "team_id" in run:
4115
4124
  self.memory.runs[run_session_id].append(TeamRunResponse.from_dict(run))
4116
4125
  else:
@@ -4179,10 +4188,10 @@ class Agent:
4179
4188
  if not self.storage:
4180
4189
  return
4181
4190
 
4182
- agent_session_from_db = self.storage.read(session_id=session_id) # type: ignore
4191
+ agent_session_from_db = self.storage.read(session_id=session_id) # type: ignore
4183
4192
  if (
4184
4193
  agent_session_from_db is not None
4185
- and agent_session_from_db.memory is not None # type: ignore
4194
+ and agent_session_from_db.memory is not None # type: ignore
4186
4195
  and "runs" in agent_session_from_db.memory # type: ignore
4187
4196
  ):
4188
4197
  if isinstance(self.memory, AgentMemory):
@@ -4224,6 +4233,11 @@ class Agent:
4224
4233
  AgentSession,
4225
4234
  self.storage.upsert(session=self.get_agent_session(session_id=session_id, user_id=user_id)),
4226
4235
  )
4236
+
4237
+ if not self.cache_session:
4238
+ if self.memory is not None and self.memory.runs is not None and session_id in self.memory.runs:
4239
+ self.memory.runs.pop(session_id) # type: ignore
4240
+
4227
4241
  return self.agent_session
4228
4242
 
4229
4243
  def add_introduction(self, introduction: str) -> None:
@@ -4355,7 +4369,6 @@ class Agent:
4355
4369
  # Format the system message with the session state variables
4356
4370
  if self.add_state_in_messages:
4357
4371
  sys_message_content = self.format_message_with_state_variables(sys_message_content)
4358
- print("HELLO", sys_message_content)
4359
4372
 
4360
4373
  # Add the JSON output prompt if response_model is provided and the model does not support native structured outputs or JSON schema outputs
4361
4374
  # or if use_json_mode is True
@@ -16,7 +16,7 @@ from fastapi import APIRouter
16
16
  from fastapi.responses import StreamingResponse
17
17
 
18
18
  from agno.agent.agent import Agent
19
- from agno.app.agui.utils import async_stream_agno_response_as_agui_events, get_last_user_message
19
+ from agno.app.agui.utils import async_stream_agno_response_as_agui_events, convert_agui_messages_to_agno_messages
20
20
  from agno.team.team import Team
21
21
 
22
22
  logger = logging.getLogger(__name__)
@@ -28,12 +28,12 @@ async def run_agent(agent: Agent, run_input: RunAgentInput) -> AsyncIterator[Bas
28
28
 
29
29
  try:
30
30
  # Preparing the input for the Agent and emitting the run started event
31
- message = get_last_user_message(run_input.messages)
31
+ messages = convert_agui_messages_to_agno_messages(run_input.messages or [])
32
32
  yield RunStartedEvent(type=EventType.RUN_STARTED, thread_id=run_input.thread_id, run_id=run_id)
33
33
 
34
34
  # Request streaming response from agent
35
35
  response_stream = await agent.arun(
36
- message=message,
36
+ messages=messages,
37
37
  session_id=run_input.thread_id,
38
38
  stream=True,
39
39
  stream_intermediate_steps=True,
@@ -56,12 +56,12 @@ async def run_team(team: Team, input: RunAgentInput) -> AsyncIterator[BaseEvent]
56
56
  run_id = input.run_id or str(uuid.uuid4())
57
57
  try:
58
58
  # Extract the last user message for team execution
59
- user_message = get_last_user_message(input.messages) if input.messages else ""
59
+ messages = convert_agui_messages_to_agno_messages(input.messages or [])
60
60
  yield RunStartedEvent(type=EventType.RUN_STARTED, thread_id=input.thread_id, run_id=run_id)
61
61
 
62
62
  # Request streaming response from team
63
63
  response_stream = await team.arun(
64
- message=user_message,
64
+ message=messages,
65
65
  session_id=input.thread_id,
66
66
  stream=True,
67
67
  stream_intermediate_steps=True,
@@ -16,7 +16,7 @@ from fastapi import APIRouter
16
16
  from fastapi.responses import StreamingResponse
17
17
 
18
18
  from agno.agent.agent import Agent
19
- from agno.app.agui.utils import get_last_user_message, stream_agno_response_as_agui_events
19
+ from agno.app.agui.utils import convert_agui_messages_to_agno_messages, stream_agno_response_as_agui_events
20
20
  from agno.team.team import Team
21
21
 
22
22
  logger = logging.getLogger(__name__)
@@ -28,12 +28,12 @@ def run_agent(agent: Agent, run_input: RunAgentInput) -> Iterator[BaseEvent]:
28
28
 
29
29
  try:
30
30
  # Preparing the input for the Agent and emitting the run started event
31
- message = get_last_user_message(run_input.messages)
31
+ messages = convert_agui_messages_to_agno_messages(run_input.messages or [])
32
32
  yield RunStartedEvent(type=EventType.RUN_STARTED, thread_id=run_input.thread_id, run_id=run_id)
33
33
 
34
34
  # Request streaming response from agent
35
35
  response_stream = agent.run(
36
- message=message,
36
+ messages=messages,
37
37
  session_id=run_input.thread_id,
38
38
  stream=True,
39
39
  stream_intermediate_steps=True,
@@ -56,12 +56,12 @@ def run_team(team: Team, input: RunAgentInput) -> Iterator[BaseEvent]:
56
56
  run_id = input.run_id or str(uuid.uuid4())
57
57
  try:
58
58
  # Extract the last user message for team execution
59
- user_message = get_last_user_message(input.messages) if input.messages else ""
59
+ messages = convert_agui_messages_to_agno_messages(input.messages or [])
60
60
  yield RunStartedEvent(type=EventType.RUN_STARTED, thread_id=input.thread_id, run_id=run_id)
61
61
 
62
62
  # Request streaming response from team
63
63
  response_stream = team.run(
64
- message=user_message,
64
+ message=messages,
65
65
  session_id=input.thread_id,
66
66
  stream=True,
67
67
  stream_intermediate_steps=True,
@@ -1,5 +1,6 @@
1
1
  """Logic used by the AG-UI router."""
2
2
 
3
+ import json
3
4
  import uuid
4
5
  from collections import deque
5
6
  from collections.abc import Iterator
@@ -17,11 +18,13 @@ from ag_ui.core import (
17
18
  TextMessageStartEvent,
18
19
  ToolCallArgsEvent,
19
20
  ToolCallEndEvent,
21
+ ToolCallResultEvent,
20
22
  ToolCallStartEvent,
21
23
  )
22
24
  from ag_ui.core.types import Message as AGUIMessage
23
25
 
24
- from agno.run.response import RunEvent, RunResponseContentEvent, RunResponseEvent
26
+ from agno.models.message import Message
27
+ from agno.run.response import RunEvent, RunResponseContentEvent, RunResponseEvent, RunResponsePausedEvent
25
28
  from agno.run.team import RunResponseContentEvent as TeamRunResponseContentEvent
26
29
  from agno.run.team import TeamRunEvent, TeamRunResponseEvent
27
30
 
@@ -64,13 +67,26 @@ class EventBuffer:
64
67
  return False
65
68
 
66
69
 
67
- def get_last_user_message(messages: Optional[List[AGUIMessage]]) -> str:
68
- if not messages:
69
- return ""
70
- for msg in reversed(messages):
71
- if msg.role == "user" and msg.content:
72
- return msg.content
73
- return ""
70
+ def convert_agui_messages_to_agno_messages(messages: List[AGUIMessage]) -> List[Message]:
71
+ """Convert AG-UI messages to Agno messages."""
72
+ result = []
73
+ for msg in messages:
74
+ if msg.role == "tool":
75
+ result.append(Message(role="tool", tool_call_id=msg.tool_call_id, content=msg.content))
76
+ elif msg.role == "assistant":
77
+ tool_calls = None
78
+ if msg.tool_calls:
79
+ tool_calls = [call.model_dump() for call in msg.tool_calls]
80
+ result.append(
81
+ Message(
82
+ role="assistant",
83
+ content=msg.content,
84
+ tool_calls=tool_calls,
85
+ )
86
+ )
87
+ elif msg.role == "user":
88
+ result.append(Message(role="user", content=msg.content))
89
+ return result
74
90
 
75
91
 
76
92
  def extract_team_response_chunk_content(response: TeamRunResponseContentEvent) -> str:
@@ -159,7 +175,7 @@ def _create_events_from_chunk(
159
175
  args_event = ToolCallArgsEvent(
160
176
  type=EventType.TOOL_CALL_ARGS,
161
177
  tool_call_id=tool_call.tool_call_id, # type: ignore
162
- delta=str(tool_call.tool_args),
178
+ delta=json.dumps(tool_call.tool_args),
163
179
  )
164
180
  events_to_emit.append(args_event)
165
181
 
@@ -174,6 +190,16 @@ def _create_events_from_chunk(
174
190
  )
175
191
  events_to_emit.append(end_event)
176
192
 
193
+ if tool_call.result is not None:
194
+ result_event = ToolCallResultEvent(
195
+ type=EventType.TOOL_CALL_RESULT,
196
+ tool_call_id=tool_call.tool_call_id, # type: ignore
197
+ content=str(tool_call.result),
198
+ role="tool",
199
+ message_id=str(uuid.uuid4()),
200
+ )
201
+ events_to_emit.append(result_event)
202
+
177
203
  # Handle reasoning
178
204
  elif chunk.event == RunEvent.reasoning_started:
179
205
  step_event = StepStartedEvent(type=EventType.STEP_STARTED, step_name="reasoning")
@@ -186,7 +212,12 @@ def _create_events_from_chunk(
186
212
 
187
213
 
188
214
  def _create_completion_events(
189
- event_buffer: EventBuffer, message_started: bool, message_id: str, thread_id: str, run_id: str
215
+ chunk: Union[RunResponseEvent, TeamRunResponseEvent],
216
+ event_buffer: EventBuffer,
217
+ message_started: bool,
218
+ message_id: str,
219
+ thread_id: str,
220
+ run_id: str,
190
221
  ) -> List[BaseEvent]:
191
222
  """Create events for run completion."""
192
223
  events_to_emit = []
@@ -205,6 +236,33 @@ def _create_completion_events(
205
236
  end_message_event = TextMessageEndEvent(type=EventType.TEXT_MESSAGE_END, message_id=message_id)
206
237
  events_to_emit.append(end_message_event)
207
238
 
239
+ # emit frontend tool calls, i.e. external_execution=True
240
+ if isinstance(chunk, RunResponsePausedEvent) and chunk.tools is not None:
241
+ for tool in chunk.tools:
242
+ if tool.tool_call_id is None or tool.tool_name is None:
243
+ continue
244
+
245
+ start_event = ToolCallStartEvent(
246
+ type=EventType.TOOL_CALL_START,
247
+ tool_call_id=tool.tool_call_id,
248
+ tool_call_name=tool.tool_name,
249
+ parent_message_id=message_id,
250
+ )
251
+ events_to_emit.append(start_event)
252
+
253
+ args_event = ToolCallArgsEvent(
254
+ type=EventType.TOOL_CALL_ARGS,
255
+ tool_call_id=tool.tool_call_id,
256
+ delta=json.dumps(tool.tool_args),
257
+ )
258
+ events_to_emit.append(args_event)
259
+
260
+ end_event = ToolCallEndEvent(
261
+ type=EventType.TOOL_CALL_END,
262
+ tool_call_id=tool.tool_call_id,
263
+ )
264
+ events_to_emit.append(end_event)
265
+
208
266
  run_finished_event = RunFinishedEvent(type=EventType.RUN_FINISHED, thread_id=thread_id, run_id=run_id)
209
267
  events_to_emit.append(run_finished_event)
210
268
 
@@ -271,8 +329,14 @@ def stream_agno_response_as_agui_events(
271
329
 
272
330
  for chunk in response_stream:
273
331
  # Handle the lifecycle end event
274
- if chunk.event == RunEvent.run_completed or chunk.event == TeamRunEvent.run_completed:
275
- completion_events = _create_completion_events(event_buffer, message_started, message_id, thread_id, run_id)
332
+ if (
333
+ chunk.event == RunEvent.run_completed
334
+ or chunk.event == TeamRunEvent.run_completed
335
+ or chunk.event == RunEvent.run_paused
336
+ ):
337
+ completion_events = _create_completion_events(
338
+ chunk, event_buffer, message_started, message_id, thread_id, run_id
339
+ )
276
340
  for event in completion_events:
277
341
  events_to_emit = _emit_event_logic(event_buffer=event_buffer, event=event)
278
342
  for emit_event in events_to_emit:
@@ -302,8 +366,14 @@ async def async_stream_agno_response_as_agui_events(
302
366
 
303
367
  async for chunk in response_stream:
304
368
  # Handle the lifecycle end event
305
- if chunk.event == RunEvent.run_completed or chunk.event == TeamRunEvent.run_completed:
306
- completion_events = _create_completion_events(event_buffer, message_started, message_id, thread_id, run_id)
369
+ if (
370
+ chunk.event == RunEvent.run_completed
371
+ or chunk.event == TeamRunEvent.run_completed
372
+ or chunk.event == RunEvent.run_paused
373
+ ):
374
+ completion_events = _create_completion_events(
375
+ chunk, event_buffer, message_started, message_id, thread_id, run_id
376
+ )
307
377
  for event in completion_events:
308
378
  events_to_emit = _emit_event_logic(event_buffer=event_buffer, event=event)
309
379
  for emit_event in events_to_emit:
@@ -77,7 +77,7 @@ class FastAPIApp(BaseAPIApp):
77
77
 
78
78
  if self.workflows:
79
79
  for workflow in self.workflows:
80
- if not workflow.app_id:
80
+ if hasattr(workflow, "app_id") and not workflow.app_id:
81
81
  workflow.app_id = self.app_id
82
82
  if not workflow.workflow_id:
83
83
  workflow.workflow_id = generate_id(workflow.name)
@@ -1,7 +1,7 @@
1
1
  import json
2
2
  from dataclasses import asdict
3
3
  from io import BytesIO
4
- from typing import AsyncGenerator, List, Optional, cast
4
+ from typing import Any, AsyncGenerator, Dict, List, Optional, Union, cast
5
5
  from uuid import uuid4
6
6
 
7
7
  from fastapi import APIRouter, File, Form, HTTPException, Query, UploadFile
@@ -14,8 +14,10 @@ from agno.media import File as FileMedia
14
14
  from agno.run.response import RunResponseErrorEvent
15
15
  from agno.run.team import RunResponseErrorEvent as TeamRunResponseErrorEvent
16
16
  from agno.run.team import TeamRunResponseEvent
17
+ from agno.run.v2.workflow import WorkflowErrorEvent
17
18
  from agno.team.team import Team
18
19
  from agno.utils.log import logger
20
+ from agno.workflow.v2.workflow import Workflow as WorkflowV2
19
21
  from agno.workflow.workflow import Workflow
20
22
 
21
23
 
@@ -83,6 +85,42 @@ async def team_chat_response_streamer(
83
85
  return
84
86
 
85
87
 
88
+ async def workflow_response_streamer(
89
+ workflow: WorkflowV2,
90
+ body: Union[Dict[str, Any], str],
91
+ session_id: Optional[str] = None,
92
+ user_id: Optional[str] = None,
93
+ ) -> AsyncGenerator:
94
+ try:
95
+ if isinstance(body, dict):
96
+ run_response = await workflow.arun( # type: ignore
97
+ **body,
98
+ user_id=user_id,
99
+ session_id=session_id,
100
+ stream=True,
101
+ stream_intermediate_steps=True,
102
+ )
103
+ else:
104
+ run_response = await workflow.arun( # type: ignore
105
+ body,
106
+ user_id=user_id,
107
+ session_id=session_id,
108
+ stream=True,
109
+ stream_intermediate_steps=True,
110
+ )
111
+ async for run_response_chunk in run_response:
112
+ yield run_response_chunk.to_json()
113
+ except Exception as e:
114
+ import traceback
115
+
116
+ traceback.print_exc(limit=3)
117
+ error_response = WorkflowErrorEvent(
118
+ error=str(e),
119
+ )
120
+ yield error_response.to_json()
121
+ return
122
+
123
+
86
124
  def get_async_router(
87
125
  agents: Optional[List[Agent]] = None, teams: Optional[List[Team]] = None, workflows: Optional[List[Workflow]] = None
88
126
  ) -> APIRouter:
@@ -351,17 +389,24 @@ def get_async_router(
351
389
  media_type="text/event-stream",
352
390
  )
353
391
  elif workflow:
354
- workflow_instance = workflow.deep_copy(update={"workflow_id": workflow_id})
355
- workflow_instance.user_id = user_id
356
- workflow_instance.session_name = None
357
- if isinstance(workflow_input, dict):
358
- return StreamingResponse(
359
- (json.dumps(asdict(result)) for result in await workflow_instance.arun(**workflow_input)),
360
- media_type="text/event-stream",
361
- )
392
+ if isinstance(workflow, Workflow):
393
+ workflow_instance = workflow.deep_copy(update={"workflow_id": workflow_id})
394
+ workflow_instance.user_id = user_id
395
+ workflow_instance.session_name = None
396
+
397
+ if isinstance(workflow_input, dict):
398
+ return StreamingResponse(
399
+ (json.dumps(asdict(result)) for result in await workflow_instance.arun(**workflow_input)),
400
+ media_type="text/event-stream",
401
+ )
402
+ else:
403
+ return StreamingResponse(
404
+ (json.dumps(asdict(result)) for result in await workflow_instance.arun(workflow_input)), # type: ignore
405
+ media_type="text/event-stream",
406
+ )
362
407
  else:
363
408
  return StreamingResponse(
364
- (json.dumps(asdict(result)) for result in await workflow_instance.arun(workflow_input)), # type: ignore
409
+ workflow_response_streamer(workflow, workflow_input, session_id=session_id, user_id=user_id), # type: ignore
365
410
  media_type="text/event-stream",
366
411
  )
367
412
  else:
@@ -392,12 +437,18 @@ def get_async_router(
392
437
  )
393
438
  return team_run_response.to_dict()
394
439
  elif workflow:
395
- workflow_instance = workflow.deep_copy(update={"workflow_id": workflow_id})
396
- workflow_instance.user_id = user_id
397
- workflow_instance.session_name = None
398
- if isinstance(workflow_input, dict):
399
- return (await workflow_instance.arun(**workflow_input)).to_dict()
440
+ if isinstance(workflow, Workflow):
441
+ workflow_instance = workflow.deep_copy(update={"workflow_id": workflow_id})
442
+ workflow_instance.user_id = user_id
443
+ workflow_instance.session_name = None
444
+ if isinstance(workflow_input, dict):
445
+ return (await workflow_instance.arun(**workflow_input)).to_dict()
446
+ else:
447
+ return (await workflow_instance.arun(workflow_input)).to_dict() # type: ignore
400
448
  else:
401
- return (await workflow_instance.arun(workflow_input)).to_dict() # type: ignore
449
+ if isinstance(workflow_input, dict):
450
+ return (await workflow.arun(**workflow_input, session_id=session_id, user_id=user_id)).to_dict()
451
+ else:
452
+ return (await workflow.arun(workflow_input, session_id=session_id, user_id=user_id)).to_dict() # type: ignore
402
453
 
403
454
  return router