agno 1.7.5__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.5 → agno-1.7.6}/PKG-INFO +16 -1
  2. {agno-1.7.5 → agno-1.7.6}/agno/agent/agent.py +0 -1
  3. {agno-1.7.5 → agno-1.7.6}/agno/app/agui/async_router.py +5 -5
  4. {agno-1.7.5 → agno-1.7.6}/agno/app/agui/sync_router.py +5 -5
  5. {agno-1.7.5 → agno-1.7.6}/agno/app/agui/utils.py +84 -14
  6. agno-1.7.6/agno/document/chunking/row.py +39 -0
  7. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/base.py +0 -7
  8. agno-1.7.6/agno/embedder/jina.py +73 -0
  9. {agno-1.7.5 → agno-1.7.6}/agno/memory/agent.py +2 -2
  10. {agno-1.7.5 → agno-1.7.6}/agno/memory/team.py +2 -2
  11. {agno-1.7.5 → agno-1.7.6}/agno/models/aws/bedrock.py +311 -15
  12. {agno-1.7.5 → agno-1.7.6}/agno/models/litellm/chat.py +12 -3
  13. {agno-1.7.5 → agno-1.7.6}/agno/models/openai/chat.py +1 -22
  14. {agno-1.7.5 → agno-1.7.6}/agno/models/openai/responses.py +5 -5
  15. agno-1.7.6/agno/models/portkey/__init__.py +3 -0
  16. agno-1.7.6/agno/models/portkey/portkey.py +88 -0
  17. {agno-1.7.5 → agno-1.7.6}/agno/models/xai/xai.py +54 -0
  18. {agno-1.7.5 → agno-1.7.6}/agno/run/v2/workflow.py +4 -0
  19. {agno-1.7.5 → agno-1.7.6}/agno/storage/mysql.py +1 -0
  20. {agno-1.7.5 → agno-1.7.6}/agno/storage/postgres.py +1 -0
  21. {agno-1.7.5 → agno-1.7.6}/agno/storage/session/v2/workflow.py +29 -5
  22. {agno-1.7.5 → agno-1.7.6}/agno/storage/singlestore.py +4 -1
  23. {agno-1.7.5 → agno-1.7.6}/agno/storage/sqlite.py +0 -1
  24. {agno-1.7.5 → agno-1.7.6}/agno/team/team.py +32 -17
  25. agno-1.7.6/agno/tools/bitbucket.py +292 -0
  26. agno-1.7.6/agno/tools/daytona.py +478 -0
  27. agno-1.7.6/agno/tools/evm.py +123 -0
  28. agno-1.7.6/agno/tools/linkup.py +54 -0
  29. {agno-1.7.5 → agno-1.7.6}/agno/tools/mcp.py +10 -3
  30. {agno-1.7.5 → agno-1.7.6}/agno/tools/mem0.py +15 -2
  31. agno-1.7.6/agno/tools/postgres.py +260 -0
  32. {agno-1.7.5 → agno-1.7.6}/agno/utils/log.py +16 -0
  33. {agno-1.7.5 → agno-1.7.6}/agno/utils/string.py +14 -0
  34. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/pgvector/pgvector.py +4 -5
  35. {agno-1.7.5 → agno-1.7.6}/agno/workflow/v2/workflow.py +146 -19
  36. {agno-1.7.5 → agno-1.7.6}/agno/workflow/workflow.py +90 -63
  37. {agno-1.7.5 → agno-1.7.6}/agno.egg-info/PKG-INFO +16 -1
  38. {agno-1.7.5 → agno-1.7.6}/agno.egg-info/SOURCES.txt +7 -0
  39. {agno-1.7.5 → agno-1.7.6}/agno.egg-info/requires.txt +20 -0
  40. {agno-1.7.5 → agno-1.7.6}/pyproject.toml +19 -3
  41. agno-1.7.5/agno/tools/daytona.py +0 -130
  42. agno-1.7.5/agno/tools/postgres.py +0 -247
  43. {agno-1.7.5 → agno-1.7.6}/LICENSE +0 -0
  44. {agno-1.7.5 → agno-1.7.6}/README.md +0 -0
  45. {agno-1.7.5 → agno-1.7.6}/agno/__init__.py +0 -0
  46. {agno-1.7.5 → agno-1.7.6}/agno/agent/__init__.py +0 -0
  47. {agno-1.7.5 → agno-1.7.6}/agno/agent/metrics.py +0 -0
  48. {agno-1.7.5 → agno-1.7.6}/agno/api/__init__.py +0 -0
  49. {agno-1.7.5 → agno-1.7.6}/agno/api/agent.py +0 -0
  50. {agno-1.7.5 → agno-1.7.6}/agno/api/api.py +0 -0
  51. {agno-1.7.5 → agno-1.7.6}/agno/api/app.py +0 -0
  52. {agno-1.7.5 → agno-1.7.6}/agno/api/evals.py +0 -0
  53. {agno-1.7.5 → agno-1.7.6}/agno/api/playground.py +0 -0
  54. {agno-1.7.5 → agno-1.7.6}/agno/api/routes.py +0 -0
  55. {agno-1.7.5 → agno-1.7.6}/agno/api/schemas/__init__.py +0 -0
  56. {agno-1.7.5 → agno-1.7.6}/agno/api/schemas/agent.py +0 -0
  57. {agno-1.7.5 → agno-1.7.6}/agno/api/schemas/app.py +0 -0
  58. {agno-1.7.5 → agno-1.7.6}/agno/api/schemas/evals.py +0 -0
  59. {agno-1.7.5 → agno-1.7.6}/agno/api/schemas/playground.py +0 -0
  60. {agno-1.7.5 → agno-1.7.6}/agno/api/schemas/response.py +0 -0
  61. {agno-1.7.5 → agno-1.7.6}/agno/api/schemas/team.py +0 -0
  62. {agno-1.7.5 → agno-1.7.6}/agno/api/schemas/user.py +0 -0
  63. {agno-1.7.5 → agno-1.7.6}/agno/api/schemas/workflows.py +0 -0
  64. {agno-1.7.5 → agno-1.7.6}/agno/api/schemas/workspace.py +0 -0
  65. {agno-1.7.5 → agno-1.7.6}/agno/api/team.py +0 -0
  66. {agno-1.7.5 → agno-1.7.6}/agno/api/user.py +0 -0
  67. {agno-1.7.5 → agno-1.7.6}/agno/api/workflows.py +0 -0
  68. {agno-1.7.5 → agno-1.7.6}/agno/api/workspace.py +0 -0
  69. {agno-1.7.5 → agno-1.7.6}/agno/app/__init__.py +0 -0
  70. {agno-1.7.5 → agno-1.7.6}/agno/app/agui/__init__.py +0 -0
  71. {agno-1.7.5 → agno-1.7.6}/agno/app/agui/app.py +0 -0
  72. {agno-1.7.5 → agno-1.7.6}/agno/app/base.py +0 -0
  73. {agno-1.7.5 → agno-1.7.6}/agno/app/discord/__init__.py +0 -0
  74. {agno-1.7.5 → agno-1.7.6}/agno/app/discord/client.py +0 -0
  75. {agno-1.7.5 → agno-1.7.6}/agno/app/fastapi/__init__.py +0 -0
  76. {agno-1.7.5 → agno-1.7.6}/agno/app/fastapi/app.py +0 -0
  77. {agno-1.7.5 → agno-1.7.6}/agno/app/fastapi/async_router.py +0 -0
  78. {agno-1.7.5 → agno-1.7.6}/agno/app/fastapi/sync_router.py +0 -0
  79. {agno-1.7.5 → agno-1.7.6}/agno/app/playground/__init__.py +0 -0
  80. {agno-1.7.5 → agno-1.7.6}/agno/app/playground/app.py +0 -0
  81. {agno-1.7.5 → agno-1.7.6}/agno/app/playground/async_router.py +0 -0
  82. {agno-1.7.5 → agno-1.7.6}/agno/app/playground/deploy.py +0 -0
  83. {agno-1.7.5 → agno-1.7.6}/agno/app/playground/operator.py +0 -0
  84. {agno-1.7.5 → agno-1.7.6}/agno/app/playground/schemas.py +0 -0
  85. {agno-1.7.5 → agno-1.7.6}/agno/app/playground/serve.py +0 -0
  86. {agno-1.7.5 → agno-1.7.6}/agno/app/playground/settings.py +0 -0
  87. {agno-1.7.5 → agno-1.7.6}/agno/app/playground/sync_router.py +0 -0
  88. {agno-1.7.5 → agno-1.7.6}/agno/app/playground/utils.py +0 -0
  89. {agno-1.7.5 → agno-1.7.6}/agno/app/settings.py +0 -0
  90. {agno-1.7.5 → agno-1.7.6}/agno/app/slack/__init__.py +0 -0
  91. {agno-1.7.5 → agno-1.7.6}/agno/app/slack/app.py +0 -0
  92. {agno-1.7.5 → agno-1.7.6}/agno/app/slack/async_router.py +0 -0
  93. {agno-1.7.5 → agno-1.7.6}/agno/app/slack/security.py +0 -0
  94. {agno-1.7.5 → agno-1.7.6}/agno/app/slack/sync_router.py +0 -0
  95. {agno-1.7.5 → agno-1.7.6}/agno/app/utils.py +0 -0
  96. {agno-1.7.5 → agno-1.7.6}/agno/app/whatsapp/__init__.py +0 -0
  97. {agno-1.7.5 → agno-1.7.6}/agno/app/whatsapp/app.py +0 -0
  98. {agno-1.7.5 → agno-1.7.6}/agno/app/whatsapp/async_router.py +0 -0
  99. {agno-1.7.5 → agno-1.7.6}/agno/app/whatsapp/security.py +0 -0
  100. {agno-1.7.5 → agno-1.7.6}/agno/app/whatsapp/sync_router.py +0 -0
  101. {agno-1.7.5 → agno-1.7.6}/agno/cli/__init__.py +0 -0
  102. {agno-1.7.5 → agno-1.7.6}/agno/cli/auth_server.py +0 -0
  103. {agno-1.7.5 → agno-1.7.6}/agno/cli/config.py +0 -0
  104. {agno-1.7.5 → agno-1.7.6}/agno/cli/console.py +0 -0
  105. {agno-1.7.5 → agno-1.7.6}/agno/cli/credentials.py +0 -0
  106. {agno-1.7.5 → agno-1.7.6}/agno/cli/entrypoint.py +0 -0
  107. {agno-1.7.5 → agno-1.7.6}/agno/cli/operator.py +0 -0
  108. {agno-1.7.5 → agno-1.7.6}/agno/cli/settings.py +0 -0
  109. {agno-1.7.5 → agno-1.7.6}/agno/cli/ws/__init__.py +0 -0
  110. {agno-1.7.5 → agno-1.7.6}/agno/cli/ws/ws_cli.py +0 -0
  111. {agno-1.7.5 → agno-1.7.6}/agno/constants.py +0 -0
  112. {agno-1.7.5 → agno-1.7.6}/agno/debug.py +0 -0
  113. {agno-1.7.5 → agno-1.7.6}/agno/document/__init__.py +0 -0
  114. {agno-1.7.5 → agno-1.7.6}/agno/document/base.py +0 -0
  115. {agno-1.7.5 → agno-1.7.6}/agno/document/chunking/__init__.py +0 -0
  116. {agno-1.7.5 → agno-1.7.6}/agno/document/chunking/agentic.py +0 -0
  117. {agno-1.7.5 → agno-1.7.6}/agno/document/chunking/document.py +0 -0
  118. {agno-1.7.5 → agno-1.7.6}/agno/document/chunking/fixed.py +0 -0
  119. {agno-1.7.5 → agno-1.7.6}/agno/document/chunking/markdown.py +0 -0
  120. {agno-1.7.5 → agno-1.7.6}/agno/document/chunking/recursive.py +0 -0
  121. {agno-1.7.5 → agno-1.7.6}/agno/document/chunking/semantic.py +0 -0
  122. {agno-1.7.5 → agno-1.7.6}/agno/document/chunking/strategy.py +0 -0
  123. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/__init__.py +0 -0
  124. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/arxiv_reader.py +0 -0
  125. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/csv_reader.py +0 -0
  126. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/docx_reader.py +0 -0
  127. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/firecrawl_reader.py +0 -0
  128. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/gcs/__init__.py +0 -0
  129. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/gcs/pdf_reader.py +0 -0
  130. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/json_reader.py +0 -0
  131. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/markdown_reader.py +0 -0
  132. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/pdf_reader.py +0 -0
  133. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/s3/__init__.py +0 -0
  134. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/s3/pdf_reader.py +0 -0
  135. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/s3/text_reader.py +0 -0
  136. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/text_reader.py +0 -0
  137. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/url_reader.py +0 -0
  138. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/website_reader.py +0 -0
  139. {agno-1.7.5 → agno-1.7.6}/agno/document/reader/youtube_reader.py +0 -0
  140. {agno-1.7.5 → agno-1.7.6}/agno/embedder/__init__.py +0 -0
  141. {agno-1.7.5 → agno-1.7.6}/agno/embedder/aws_bedrock.py +0 -0
  142. {agno-1.7.5 → agno-1.7.6}/agno/embedder/azure_openai.py +0 -0
  143. {agno-1.7.5 → agno-1.7.6}/agno/embedder/base.py +0 -0
  144. {agno-1.7.5 → agno-1.7.6}/agno/embedder/cohere.py +0 -0
  145. {agno-1.7.5 → agno-1.7.6}/agno/embedder/fastembed.py +0 -0
  146. {agno-1.7.5 → agno-1.7.6}/agno/embedder/fireworks.py +0 -0
  147. {agno-1.7.5 → agno-1.7.6}/agno/embedder/google.py +0 -0
  148. {agno-1.7.5 → agno-1.7.6}/agno/embedder/huggingface.py +0 -0
  149. {agno-1.7.5 → agno-1.7.6}/agno/embedder/langdb.py +0 -0
  150. {agno-1.7.5 → agno-1.7.6}/agno/embedder/mistral.py +0 -0
  151. {agno-1.7.5 → agno-1.7.6}/agno/embedder/nebius.py +0 -0
  152. {agno-1.7.5 → agno-1.7.6}/agno/embedder/ollama.py +0 -0
  153. {agno-1.7.5 → agno-1.7.6}/agno/embedder/openai.py +0 -0
  154. {agno-1.7.5 → agno-1.7.6}/agno/embedder/sentence_transformer.py +0 -0
  155. {agno-1.7.5 → agno-1.7.6}/agno/embedder/together.py +0 -0
  156. {agno-1.7.5 → agno-1.7.6}/agno/embedder/voyageai.py +0 -0
  157. {agno-1.7.5 → agno-1.7.6}/agno/eval/__init__.py +0 -0
  158. {agno-1.7.5 → agno-1.7.6}/agno/eval/accuracy.py +0 -0
  159. {agno-1.7.5 → agno-1.7.6}/agno/eval/performance.py +0 -0
  160. {agno-1.7.5 → agno-1.7.6}/agno/eval/reliability.py +0 -0
  161. {agno-1.7.5 → agno-1.7.6}/agno/eval/utils.py +0 -0
  162. {agno-1.7.5 → agno-1.7.6}/agno/exceptions.py +0 -0
  163. {agno-1.7.5 → agno-1.7.6}/agno/file/__init__.py +0 -0
  164. {agno-1.7.5 → agno-1.7.6}/agno/file/file.py +0 -0
  165. {agno-1.7.5 → agno-1.7.6}/agno/file/local/__init__.py +0 -0
  166. {agno-1.7.5 → agno-1.7.6}/agno/file/local/csv.py +0 -0
  167. {agno-1.7.5 → agno-1.7.6}/agno/file/local/txt.py +0 -0
  168. {agno-1.7.5 → agno-1.7.6}/agno/infra/__init__.py +0 -0
  169. {agno-1.7.5 → agno-1.7.6}/agno/infra/app.py +0 -0
  170. {agno-1.7.5 → agno-1.7.6}/agno/infra/base.py +0 -0
  171. {agno-1.7.5 → agno-1.7.6}/agno/infra/context.py +0 -0
  172. {agno-1.7.5 → agno-1.7.6}/agno/infra/db_app.py +0 -0
  173. {agno-1.7.5 → agno-1.7.6}/agno/infra/resource.py +0 -0
  174. {agno-1.7.5 → agno-1.7.6}/agno/infra/resources.py +0 -0
  175. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/__init__.py +0 -0
  176. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/agent.py +0 -0
  177. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/arxiv.py +0 -0
  178. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/combined.py +0 -0
  179. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/csv.py +0 -0
  180. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/csv_url.py +0 -0
  181. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/document.py +0 -0
  182. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/docx.py +0 -0
  183. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/firecrawl.py +0 -0
  184. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/gcs/__init__.py +0 -0
  185. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/gcs/base.py +0 -0
  186. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/gcs/pdf.py +0 -0
  187. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/json.py +0 -0
  188. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/langchain.py +0 -0
  189. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/light_rag.py +0 -0
  190. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/llamaindex.py +0 -0
  191. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/markdown.py +0 -0
  192. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/pdf.py +0 -0
  193. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/pdf_bytes.py +0 -0
  194. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/pdf_url.py +0 -0
  195. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/s3/__init__.py +0 -0
  196. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/s3/base.py +0 -0
  197. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/s3/pdf.py +0 -0
  198. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/s3/text.py +0 -0
  199. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/text.py +0 -0
  200. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/url.py +0 -0
  201. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/website.py +0 -0
  202. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/wikipedia.py +0 -0
  203. {agno-1.7.5 → agno-1.7.6}/agno/knowledge/youtube.py +0 -0
  204. {agno-1.7.5 → agno-1.7.6}/agno/media.py +0 -0
  205. {agno-1.7.5 → agno-1.7.6}/agno/memory/__init__.py +0 -0
  206. {agno-1.7.5 → agno-1.7.6}/agno/memory/classifier.py +0 -0
  207. {agno-1.7.5 → agno-1.7.6}/agno/memory/db/__init__.py +0 -0
  208. {agno-1.7.5 → agno-1.7.6}/agno/memory/db/base.py +0 -0
  209. {agno-1.7.5 → agno-1.7.6}/agno/memory/db/mongodb.py +0 -0
  210. {agno-1.7.5 → agno-1.7.6}/agno/memory/db/postgres.py +0 -0
  211. {agno-1.7.5 → agno-1.7.6}/agno/memory/db/sqlite.py +0 -0
  212. {agno-1.7.5 → agno-1.7.6}/agno/memory/manager.py +0 -0
  213. {agno-1.7.5 → agno-1.7.6}/agno/memory/memory.py +0 -0
  214. {agno-1.7.5 → agno-1.7.6}/agno/memory/row.py +0 -0
  215. {agno-1.7.5 → agno-1.7.6}/agno/memory/summarizer.py +0 -0
  216. {agno-1.7.5 → agno-1.7.6}/agno/memory/summary.py +0 -0
  217. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/__init__.py +0 -0
  218. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/db/__init__.py +0 -0
  219. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/db/base.py +0 -0
  220. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/db/firestore.py +0 -0
  221. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/db/mongodb.py +0 -0
  222. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/db/postgres.py +0 -0
  223. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/db/redis.py +0 -0
  224. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/db/schema.py +0 -0
  225. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/db/sqlite.py +0 -0
  226. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/manager.py +0 -0
  227. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/memory.py +0 -0
  228. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/schema.py +0 -0
  229. {agno-1.7.5 → agno-1.7.6}/agno/memory/v2/summarizer.py +0 -0
  230. {agno-1.7.5 → agno-1.7.6}/agno/memory/workflow.py +0 -0
  231. {agno-1.7.5 → agno-1.7.6}/agno/models/__init__.py +0 -0
  232. {agno-1.7.5 → agno-1.7.6}/agno/models/aimlapi/__init__.py +0 -0
  233. {agno-1.7.5 → agno-1.7.6}/agno/models/aimlapi/aimlapi.py +0 -0
  234. {agno-1.7.5 → agno-1.7.6}/agno/models/anthropic/__init__.py +0 -0
  235. {agno-1.7.5 → agno-1.7.6}/agno/models/anthropic/claude.py +0 -0
  236. {agno-1.7.5 → agno-1.7.6}/agno/models/aws/__init__.py +0 -0
  237. {agno-1.7.5 → agno-1.7.6}/agno/models/aws/claude.py +0 -0
  238. {agno-1.7.5 → agno-1.7.6}/agno/models/azure/__init__.py +0 -0
  239. {agno-1.7.5 → agno-1.7.6}/agno/models/azure/ai_foundry.py +0 -0
  240. {agno-1.7.5 → agno-1.7.6}/agno/models/azure/openai_chat.py +0 -0
  241. {agno-1.7.5 → agno-1.7.6}/agno/models/base.py +0 -0
  242. {agno-1.7.5 → agno-1.7.6}/agno/models/cerebras/__init__.py +0 -0
  243. {agno-1.7.5 → agno-1.7.6}/agno/models/cerebras/cerebras.py +0 -0
  244. {agno-1.7.5 → agno-1.7.6}/agno/models/cerebras/cerebras_openai.py +0 -0
  245. {agno-1.7.5 → agno-1.7.6}/agno/models/cohere/__init__.py +0 -0
  246. {agno-1.7.5 → agno-1.7.6}/agno/models/cohere/chat.py +0 -0
  247. {agno-1.7.5 → agno-1.7.6}/agno/models/deepinfra/__init__.py +0 -0
  248. {agno-1.7.5 → agno-1.7.6}/agno/models/deepinfra/deepinfra.py +0 -0
  249. {agno-1.7.5 → agno-1.7.6}/agno/models/deepseek/__init__.py +0 -0
  250. {agno-1.7.5 → agno-1.7.6}/agno/models/deepseek/deepseek.py +0 -0
  251. {agno-1.7.5 → agno-1.7.6}/agno/models/defaults.py +0 -0
  252. {agno-1.7.5 → agno-1.7.6}/agno/models/fireworks/__init__.py +0 -0
  253. {agno-1.7.5 → agno-1.7.6}/agno/models/fireworks/fireworks.py +0 -0
  254. {agno-1.7.5 → agno-1.7.6}/agno/models/google/__init__.py +0 -0
  255. {agno-1.7.5 → agno-1.7.6}/agno/models/google/gemini.py +0 -0
  256. {agno-1.7.5 → agno-1.7.6}/agno/models/groq/__init__.py +0 -0
  257. {agno-1.7.5 → agno-1.7.6}/agno/models/groq/groq.py +0 -0
  258. {agno-1.7.5 → agno-1.7.6}/agno/models/huggingface/__init__.py +0 -0
  259. {agno-1.7.5 → agno-1.7.6}/agno/models/huggingface/huggingface.py +0 -0
  260. {agno-1.7.5 → agno-1.7.6}/agno/models/ibm/__init__.py +0 -0
  261. {agno-1.7.5 → agno-1.7.6}/agno/models/ibm/watsonx.py +0 -0
  262. {agno-1.7.5 → agno-1.7.6}/agno/models/internlm/__init__.py +0 -0
  263. {agno-1.7.5 → agno-1.7.6}/agno/models/internlm/internlm.py +0 -0
  264. {agno-1.7.5 → agno-1.7.6}/agno/models/langdb/__init__.py +0 -0
  265. {agno-1.7.5 → agno-1.7.6}/agno/models/langdb/langdb.py +0 -0
  266. {agno-1.7.5 → agno-1.7.6}/agno/models/litellm/__init__.py +0 -0
  267. {agno-1.7.5 → agno-1.7.6}/agno/models/litellm/litellm_openai.py +0 -0
  268. {agno-1.7.5 → agno-1.7.6}/agno/models/lmstudio/__init__.py +0 -0
  269. {agno-1.7.5 → agno-1.7.6}/agno/models/lmstudio/lmstudio.py +0 -0
  270. {agno-1.7.5 → agno-1.7.6}/agno/models/message.py +0 -0
  271. {agno-1.7.5 → agno-1.7.6}/agno/models/meta/__init__.py +0 -0
  272. {agno-1.7.5 → agno-1.7.6}/agno/models/meta/llama.py +0 -0
  273. {agno-1.7.5 → agno-1.7.6}/agno/models/meta/llama_openai.py +0 -0
  274. {agno-1.7.5 → agno-1.7.6}/agno/models/mistral/__init__.py +0 -0
  275. {agno-1.7.5 → agno-1.7.6}/agno/models/mistral/mistral.py +0 -0
  276. {agno-1.7.5 → agno-1.7.6}/agno/models/nebius/__init__.py +0 -0
  277. {agno-1.7.5 → agno-1.7.6}/agno/models/nebius/nebius.py +0 -0
  278. {agno-1.7.5 → agno-1.7.6}/agno/models/nvidia/__init__.py +0 -0
  279. {agno-1.7.5 → agno-1.7.6}/agno/models/nvidia/nvidia.py +0 -0
  280. {agno-1.7.5 → agno-1.7.6}/agno/models/ollama/__init__.py +0 -0
  281. {agno-1.7.5 → agno-1.7.6}/agno/models/ollama/chat.py +0 -0
  282. {agno-1.7.5 → agno-1.7.6}/agno/models/ollama/tools.py +0 -0
  283. {agno-1.7.5 → agno-1.7.6}/agno/models/openai/__init__.py +0 -0
  284. {agno-1.7.5 → agno-1.7.6}/agno/models/openai/like.py +0 -0
  285. {agno-1.7.5 → agno-1.7.6}/agno/models/openrouter/__init__.py +0 -0
  286. {agno-1.7.5 → agno-1.7.6}/agno/models/openrouter/openrouter.py +0 -0
  287. {agno-1.7.5 → agno-1.7.6}/agno/models/perplexity/__init__.py +0 -0
  288. {agno-1.7.5 → agno-1.7.6}/agno/models/perplexity/perplexity.py +0 -0
  289. {agno-1.7.5 → agno-1.7.6}/agno/models/response.py +0 -0
  290. {agno-1.7.5 → agno-1.7.6}/agno/models/sambanova/__init__.py +0 -0
  291. {agno-1.7.5 → agno-1.7.6}/agno/models/sambanova/sambanova.py +0 -0
  292. {agno-1.7.5 → agno-1.7.6}/agno/models/together/__init__.py +0 -0
  293. {agno-1.7.5 → agno-1.7.6}/agno/models/together/together.py +0 -0
  294. {agno-1.7.5 → agno-1.7.6}/agno/models/vercel/__init__.py +0 -0
  295. {agno-1.7.5 → agno-1.7.6}/agno/models/vercel/v0.py +0 -0
  296. {agno-1.7.5 → agno-1.7.6}/agno/models/vllm/__init__.py +0 -0
  297. {agno-1.7.5 → agno-1.7.6}/agno/models/vllm/vllm.py +0 -0
  298. {agno-1.7.5 → agno-1.7.6}/agno/models/xai/__init__.py +0 -0
  299. {agno-1.7.5 → agno-1.7.6}/agno/playground/__init__.py +0 -0
  300. {agno-1.7.5 → agno-1.7.6}/agno/playground/deploy.py +0 -0
  301. {agno-1.7.5 → agno-1.7.6}/agno/playground/playground.py +0 -0
  302. {agno-1.7.5 → agno-1.7.6}/agno/playground/serve.py +0 -0
  303. {agno-1.7.5 → agno-1.7.6}/agno/playground/settings.py +0 -0
  304. {agno-1.7.5 → agno-1.7.6}/agno/py.typed +0 -0
  305. {agno-1.7.5 → agno-1.7.6}/agno/reasoning/__init__.py +0 -0
  306. {agno-1.7.5 → agno-1.7.6}/agno/reasoning/azure_ai_foundry.py +0 -0
  307. {agno-1.7.5 → agno-1.7.6}/agno/reasoning/deepseek.py +0 -0
  308. {agno-1.7.5 → agno-1.7.6}/agno/reasoning/default.py +0 -0
  309. {agno-1.7.5 → agno-1.7.6}/agno/reasoning/groq.py +0 -0
  310. {agno-1.7.5 → agno-1.7.6}/agno/reasoning/helpers.py +0 -0
  311. {agno-1.7.5 → agno-1.7.6}/agno/reasoning/ollama.py +0 -0
  312. {agno-1.7.5 → agno-1.7.6}/agno/reasoning/openai.py +0 -0
  313. {agno-1.7.5 → agno-1.7.6}/agno/reasoning/step.py +0 -0
  314. {agno-1.7.5 → agno-1.7.6}/agno/reranker/__init__.py +0 -0
  315. {agno-1.7.5 → agno-1.7.6}/agno/reranker/base.py +0 -0
  316. {agno-1.7.5 → agno-1.7.6}/agno/reranker/cohere.py +0 -0
  317. {agno-1.7.5 → agno-1.7.6}/agno/reranker/infinity.py +0 -0
  318. {agno-1.7.5 → agno-1.7.6}/agno/reranker/sentence_transformer.py +0 -0
  319. {agno-1.7.5 → agno-1.7.6}/agno/run/__init__.py +0 -0
  320. {agno-1.7.5 → agno-1.7.6}/agno/run/base.py +0 -0
  321. {agno-1.7.5 → agno-1.7.6}/agno/run/messages.py +0 -0
  322. {agno-1.7.5 → agno-1.7.6}/agno/run/response.py +0 -0
  323. {agno-1.7.5 → agno-1.7.6}/agno/run/team.py +0 -0
  324. {agno-1.7.5 → agno-1.7.6}/agno/run/v2/__init__.py +0 -0
  325. {agno-1.7.5 → agno-1.7.6}/agno/run/workflow.py +0 -0
  326. {agno-1.7.5 → agno-1.7.6}/agno/storage/__init__.py +0 -0
  327. {agno-1.7.5 → agno-1.7.6}/agno/storage/agent/__init__.py +0 -0
  328. {agno-1.7.5 → agno-1.7.6}/agno/storage/agent/dynamodb.py +0 -0
  329. {agno-1.7.5 → agno-1.7.6}/agno/storage/agent/json.py +0 -0
  330. {agno-1.7.5 → agno-1.7.6}/agno/storage/agent/mongodb.py +0 -0
  331. {agno-1.7.5 → agno-1.7.6}/agno/storage/agent/postgres.py +0 -0
  332. {agno-1.7.5 → agno-1.7.6}/agno/storage/agent/singlestore.py +0 -0
  333. {agno-1.7.5 → agno-1.7.6}/agno/storage/agent/sqlite.py +0 -0
  334. {agno-1.7.5 → agno-1.7.6}/agno/storage/agent/yaml.py +0 -0
  335. {agno-1.7.5 → agno-1.7.6}/agno/storage/base.py +0 -0
  336. {agno-1.7.5 → agno-1.7.6}/agno/storage/dynamodb.py +0 -0
  337. {agno-1.7.5 → agno-1.7.6}/agno/storage/firestore.py +0 -0
  338. {agno-1.7.5 → agno-1.7.6}/agno/storage/gcs_json.py +0 -0
  339. {agno-1.7.5 → agno-1.7.6}/agno/storage/json.py +0 -0
  340. {agno-1.7.5 → agno-1.7.6}/agno/storage/mongodb.py +0 -0
  341. {agno-1.7.5 → agno-1.7.6}/agno/storage/redis.py +0 -0
  342. {agno-1.7.5 → agno-1.7.6}/agno/storage/session/__init__.py +0 -0
  343. {agno-1.7.5 → agno-1.7.6}/agno/storage/session/agent.py +0 -0
  344. {agno-1.7.5 → agno-1.7.6}/agno/storage/session/team.py +0 -0
  345. {agno-1.7.5 → agno-1.7.6}/agno/storage/session/v2/__init__.py +0 -0
  346. {agno-1.7.5 → agno-1.7.6}/agno/storage/session/workflow.py +0 -0
  347. {agno-1.7.5 → agno-1.7.6}/agno/storage/workflow/__init__.py +0 -0
  348. {agno-1.7.5 → agno-1.7.6}/agno/storage/workflow/mongodb.py +0 -0
  349. {agno-1.7.5 → agno-1.7.6}/agno/storage/workflow/postgres.py +0 -0
  350. {agno-1.7.5 → agno-1.7.6}/agno/storage/workflow/sqlite.py +0 -0
  351. {agno-1.7.5 → agno-1.7.6}/agno/storage/yaml.py +0 -0
  352. {agno-1.7.5 → agno-1.7.6}/agno/team/__init__.py +0 -0
  353. {agno-1.7.5 → agno-1.7.6}/agno/tools/__init__.py +0 -0
  354. {agno-1.7.5 → agno-1.7.6}/agno/tools/agentql.py +0 -0
  355. {agno-1.7.5 → agno-1.7.6}/agno/tools/airflow.py +0 -0
  356. {agno-1.7.5 → agno-1.7.6}/agno/tools/api.py +0 -0
  357. {agno-1.7.5 → agno-1.7.6}/agno/tools/apify.py +0 -0
  358. {agno-1.7.5 → agno-1.7.6}/agno/tools/arxiv.py +0 -0
  359. {agno-1.7.5 → agno-1.7.6}/agno/tools/aws_lambda.py +0 -0
  360. {agno-1.7.5 → agno-1.7.6}/agno/tools/aws_ses.py +0 -0
  361. {agno-1.7.5 → agno-1.7.6}/agno/tools/baidusearch.py +0 -0
  362. {agno-1.7.5 → agno-1.7.6}/agno/tools/bravesearch.py +0 -0
  363. {agno-1.7.5 → agno-1.7.6}/agno/tools/brightdata.py +0 -0
  364. {agno-1.7.5 → agno-1.7.6}/agno/tools/browserbase.py +0 -0
  365. {agno-1.7.5 → agno-1.7.6}/agno/tools/calcom.py +0 -0
  366. {agno-1.7.5 → agno-1.7.6}/agno/tools/calculator.py +0 -0
  367. {agno-1.7.5 → agno-1.7.6}/agno/tools/cartesia.py +0 -0
  368. {agno-1.7.5 → agno-1.7.6}/agno/tools/clickup_tool.py +0 -0
  369. {agno-1.7.5 → agno-1.7.6}/agno/tools/confluence.py +0 -0
  370. {agno-1.7.5 → agno-1.7.6}/agno/tools/crawl4ai.py +0 -0
  371. {agno-1.7.5 → agno-1.7.6}/agno/tools/csv_toolkit.py +0 -0
  372. {agno-1.7.5 → agno-1.7.6}/agno/tools/dalle.py +0 -0
  373. {agno-1.7.5 → agno-1.7.6}/agno/tools/decorator.py +0 -0
  374. {agno-1.7.5 → agno-1.7.6}/agno/tools/desi_vocal.py +0 -0
  375. {agno-1.7.5 → agno-1.7.6}/agno/tools/discord.py +0 -0
  376. {agno-1.7.5 → agno-1.7.6}/agno/tools/docker.py +0 -0
  377. {agno-1.7.5 → agno-1.7.6}/agno/tools/duckdb.py +0 -0
  378. {agno-1.7.5 → agno-1.7.6}/agno/tools/duckduckgo.py +0 -0
  379. {agno-1.7.5 → agno-1.7.6}/agno/tools/e2b.py +0 -0
  380. {agno-1.7.5 → agno-1.7.6}/agno/tools/eleven_labs.py +0 -0
  381. {agno-1.7.5 → agno-1.7.6}/agno/tools/email.py +0 -0
  382. {agno-1.7.5 → agno-1.7.6}/agno/tools/exa.py +0 -0
  383. {agno-1.7.5 → agno-1.7.6}/agno/tools/fal.py +0 -0
  384. {agno-1.7.5 → agno-1.7.6}/agno/tools/file.py +0 -0
  385. {agno-1.7.5 → agno-1.7.6}/agno/tools/financial_datasets.py +0 -0
  386. {agno-1.7.5 → agno-1.7.6}/agno/tools/firecrawl.py +0 -0
  387. {agno-1.7.5 → agno-1.7.6}/agno/tools/function.py +0 -0
  388. {agno-1.7.5 → agno-1.7.6}/agno/tools/giphy.py +0 -0
  389. {agno-1.7.5 → agno-1.7.6}/agno/tools/github.py +0 -0
  390. {agno-1.7.5 → agno-1.7.6}/agno/tools/gmail.py +0 -0
  391. {agno-1.7.5 → agno-1.7.6}/agno/tools/google_bigquery.py +0 -0
  392. {agno-1.7.5 → agno-1.7.6}/agno/tools/google_maps.py +0 -0
  393. {agno-1.7.5 → agno-1.7.6}/agno/tools/googlecalendar.py +0 -0
  394. {agno-1.7.5 → agno-1.7.6}/agno/tools/googlesearch.py +0 -0
  395. {agno-1.7.5 → agno-1.7.6}/agno/tools/googlesheets.py +0 -0
  396. {agno-1.7.5 → agno-1.7.6}/agno/tools/hackernews.py +0 -0
  397. {agno-1.7.5 → agno-1.7.6}/agno/tools/jina.py +0 -0
  398. {agno-1.7.5 → agno-1.7.6}/agno/tools/jira.py +0 -0
  399. {agno-1.7.5 → agno-1.7.6}/agno/tools/knowledge.py +0 -0
  400. {agno-1.7.5 → agno-1.7.6}/agno/tools/linear.py +0 -0
  401. {agno-1.7.5 → agno-1.7.6}/agno/tools/local_file_system.py +0 -0
  402. {agno-1.7.5 → agno-1.7.6}/agno/tools/lumalab.py +0 -0
  403. {agno-1.7.5 → agno-1.7.6}/agno/tools/mlx_transcribe.py +0 -0
  404. {agno-1.7.5 → agno-1.7.6}/agno/tools/models/__init__.py +0 -0
  405. {agno-1.7.5 → agno-1.7.6}/agno/tools/models/azure_openai.py +0 -0
  406. {agno-1.7.5 → agno-1.7.6}/agno/tools/models/gemini.py +0 -0
  407. {agno-1.7.5 → agno-1.7.6}/agno/tools/models/groq.py +0 -0
  408. {agno-1.7.5 → agno-1.7.6}/agno/tools/models/nebius.py +0 -0
  409. {agno-1.7.5 → agno-1.7.6}/agno/tools/models_labs.py +0 -0
  410. {agno-1.7.5 → agno-1.7.6}/agno/tools/moviepy_video.py +0 -0
  411. {agno-1.7.5 → agno-1.7.6}/agno/tools/newspaper.py +0 -0
  412. {agno-1.7.5 → agno-1.7.6}/agno/tools/newspaper4k.py +0 -0
  413. {agno-1.7.5 → agno-1.7.6}/agno/tools/openai.py +0 -0
  414. {agno-1.7.5 → agno-1.7.6}/agno/tools/openbb.py +0 -0
  415. {agno-1.7.5 → agno-1.7.6}/agno/tools/opencv.py +0 -0
  416. {agno-1.7.5 → agno-1.7.6}/agno/tools/openweather.py +0 -0
  417. {agno-1.7.5 → agno-1.7.6}/agno/tools/oxylabs.py +0 -0
  418. {agno-1.7.5 → agno-1.7.6}/agno/tools/pandas.py +0 -0
  419. {agno-1.7.5 → agno-1.7.6}/agno/tools/pubmed.py +0 -0
  420. {agno-1.7.5 → agno-1.7.6}/agno/tools/python.py +0 -0
  421. {agno-1.7.5 → agno-1.7.6}/agno/tools/reasoning.py +0 -0
  422. {agno-1.7.5 → agno-1.7.6}/agno/tools/reddit.py +0 -0
  423. {agno-1.7.5 → agno-1.7.6}/agno/tools/replicate.py +0 -0
  424. {agno-1.7.5 → agno-1.7.6}/agno/tools/resend.py +0 -0
  425. {agno-1.7.5 → agno-1.7.6}/agno/tools/scrapegraph.py +0 -0
  426. {agno-1.7.5 → agno-1.7.6}/agno/tools/searxng.py +0 -0
  427. {agno-1.7.5 → agno-1.7.6}/agno/tools/serpapi.py +0 -0
  428. {agno-1.7.5 → agno-1.7.6}/agno/tools/serper.py +0 -0
  429. {agno-1.7.5 → agno-1.7.6}/agno/tools/shell.py +0 -0
  430. {agno-1.7.5 → agno-1.7.6}/agno/tools/slack.py +0 -0
  431. {agno-1.7.5 → agno-1.7.6}/agno/tools/sleep.py +0 -0
  432. {agno-1.7.5 → agno-1.7.6}/agno/tools/spider.py +0 -0
  433. {agno-1.7.5 → agno-1.7.6}/agno/tools/sql.py +0 -0
  434. {agno-1.7.5 → agno-1.7.6}/agno/tools/streamlit/__init__.py +0 -0
  435. {agno-1.7.5 → agno-1.7.6}/agno/tools/streamlit/components.py +0 -0
  436. {agno-1.7.5 → agno-1.7.6}/agno/tools/tavily.py +0 -0
  437. {agno-1.7.5 → agno-1.7.6}/agno/tools/telegram.py +0 -0
  438. {agno-1.7.5 → agno-1.7.6}/agno/tools/thinking.py +0 -0
  439. {agno-1.7.5 → agno-1.7.6}/agno/tools/todoist.py +0 -0
  440. {agno-1.7.5 → agno-1.7.6}/agno/tools/tool_registry.py +0 -0
  441. {agno-1.7.5 → agno-1.7.6}/agno/tools/toolkit.py +0 -0
  442. {agno-1.7.5 → agno-1.7.6}/agno/tools/trello.py +0 -0
  443. {agno-1.7.5 → agno-1.7.6}/agno/tools/twilio.py +0 -0
  444. {agno-1.7.5 → agno-1.7.6}/agno/tools/user_control_flow.py +0 -0
  445. {agno-1.7.5 → agno-1.7.6}/agno/tools/valyu.py +0 -0
  446. {agno-1.7.5 → agno-1.7.6}/agno/tools/visualization.py +0 -0
  447. {agno-1.7.5 → agno-1.7.6}/agno/tools/webbrowser.py +0 -0
  448. {agno-1.7.5 → agno-1.7.6}/agno/tools/webex.py +0 -0
  449. {agno-1.7.5 → agno-1.7.6}/agno/tools/website.py +0 -0
  450. {agno-1.7.5 → agno-1.7.6}/agno/tools/webtools.py +0 -0
  451. {agno-1.7.5 → agno-1.7.6}/agno/tools/whatsapp.py +0 -0
  452. {agno-1.7.5 → agno-1.7.6}/agno/tools/wikipedia.py +0 -0
  453. {agno-1.7.5 → agno-1.7.6}/agno/tools/x.py +0 -0
  454. {agno-1.7.5 → agno-1.7.6}/agno/tools/yfinance.py +0 -0
  455. {agno-1.7.5 → agno-1.7.6}/agno/tools/youtube.py +0 -0
  456. {agno-1.7.5 → agno-1.7.6}/agno/tools/zendesk.py +0 -0
  457. {agno-1.7.5 → agno-1.7.6}/agno/tools/zep.py +0 -0
  458. {agno-1.7.5 → agno-1.7.6}/agno/tools/zoom.py +0 -0
  459. {agno-1.7.5 → agno-1.7.6}/agno/utils/__init__.py +0 -0
  460. {agno-1.7.5 → agno-1.7.6}/agno/utils/audio.py +0 -0
  461. {agno-1.7.5 → agno-1.7.6}/agno/utils/certs.py +0 -0
  462. {agno-1.7.5 → agno-1.7.6}/agno/utils/code_execution.py +0 -0
  463. {agno-1.7.5 → agno-1.7.6}/agno/utils/common.py +0 -0
  464. {agno-1.7.5 → agno-1.7.6}/agno/utils/defaults.py +0 -0
  465. {agno-1.7.5 → agno-1.7.6}/agno/utils/dttm.py +0 -0
  466. {agno-1.7.5 → agno-1.7.6}/agno/utils/enum.py +0 -0
  467. {agno-1.7.5 → agno-1.7.6}/agno/utils/env.py +0 -0
  468. {agno-1.7.5 → agno-1.7.6}/agno/utils/events.py +0 -0
  469. {agno-1.7.5 → agno-1.7.6}/agno/utils/filesystem.py +0 -0
  470. {agno-1.7.5 → agno-1.7.6}/agno/utils/format_str.py +0 -0
  471. {agno-1.7.5 → agno-1.7.6}/agno/utils/functions.py +0 -0
  472. {agno-1.7.5 → agno-1.7.6}/agno/utils/gemini.py +0 -0
  473. {agno-1.7.5 → agno-1.7.6}/agno/utils/git.py +0 -0
  474. {agno-1.7.5 → agno-1.7.6}/agno/utils/http.py +0 -0
  475. {agno-1.7.5 → agno-1.7.6}/agno/utils/json_io.py +0 -0
  476. {agno-1.7.5 → agno-1.7.6}/agno/utils/json_schema.py +0 -0
  477. {agno-1.7.5 → agno-1.7.6}/agno/utils/load_env.py +0 -0
  478. {agno-1.7.5 → agno-1.7.6}/agno/utils/location.py +0 -0
  479. {agno-1.7.5 → agno-1.7.6}/agno/utils/mcp.py +0 -0
  480. {agno-1.7.5 → agno-1.7.6}/agno/utils/media.py +0 -0
  481. {agno-1.7.5 → agno-1.7.6}/agno/utils/merge_dict.py +0 -0
  482. {agno-1.7.5 → agno-1.7.6}/agno/utils/message.py +0 -0
  483. {agno-1.7.5 → agno-1.7.6}/agno/utils/models/__init__.py +0 -0
  484. {agno-1.7.5 → agno-1.7.6}/agno/utils/models/ai_foundry.py +0 -0
  485. {agno-1.7.5 → agno-1.7.6}/agno/utils/models/aws_claude.py +0 -0
  486. {agno-1.7.5 → agno-1.7.6}/agno/utils/models/claude.py +0 -0
  487. {agno-1.7.5 → agno-1.7.6}/agno/utils/models/cohere.py +0 -0
  488. {agno-1.7.5 → agno-1.7.6}/agno/utils/models/llama.py +0 -0
  489. {agno-1.7.5 → agno-1.7.6}/agno/utils/models/mistral.py +0 -0
  490. {agno-1.7.5 → agno-1.7.6}/agno/utils/models/openai_responses.py +0 -0
  491. {agno-1.7.5 → agno-1.7.6}/agno/utils/models/schema_utils.py +0 -0
  492. {agno-1.7.5 → agno-1.7.6}/agno/utils/models/watsonx.py +0 -0
  493. {agno-1.7.5 → agno-1.7.6}/agno/utils/openai.py +0 -0
  494. {agno-1.7.5 → agno-1.7.6}/agno/utils/pickle.py +0 -0
  495. {agno-1.7.5 → agno-1.7.6}/agno/utils/pprint.py +0 -0
  496. {agno-1.7.5 → agno-1.7.6}/agno/utils/prompts.py +0 -0
  497. {agno-1.7.5 → agno-1.7.6}/agno/utils/py_io.py +0 -0
  498. {agno-1.7.5 → agno-1.7.6}/agno/utils/pyproject.py +0 -0
  499. {agno-1.7.5 → agno-1.7.6}/agno/utils/resource_filter.py +0 -0
  500. {agno-1.7.5 → agno-1.7.6}/agno/utils/response.py +0 -0
  501. {agno-1.7.5 → agno-1.7.6}/agno/utils/response_iterator.py +0 -0
  502. {agno-1.7.5 → agno-1.7.6}/agno/utils/safe_formatter.py +0 -0
  503. {agno-1.7.5 → agno-1.7.6}/agno/utils/shell.py +0 -0
  504. {agno-1.7.5 → agno-1.7.6}/agno/utils/timer.py +0 -0
  505. {agno-1.7.5 → agno-1.7.6}/agno/utils/tools.py +0 -0
  506. {agno-1.7.5 → agno-1.7.6}/agno/utils/web.py +0 -0
  507. {agno-1.7.5 → agno-1.7.6}/agno/utils/whatsapp.py +0 -0
  508. {agno-1.7.5 → agno-1.7.6}/agno/utils/yaml_io.py +0 -0
  509. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/__init__.py +0 -0
  510. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/base.py +0 -0
  511. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/cassandra/__init__.py +0 -0
  512. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/cassandra/cassandra.py +0 -0
  513. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  514. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/cassandra/index.py +0 -0
  515. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/chroma/__init__.py +0 -0
  516. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/chroma/chromadb.py +0 -0
  517. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/clickhouse/__init__.py +0 -0
  518. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  519. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/clickhouse/index.py +0 -0
  520. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/couchbase/__init__.py +0 -0
  521. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/couchbase/couchbase.py +0 -0
  522. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/distance.py +0 -0
  523. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/lancedb/__init__.py +0 -0
  524. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/lancedb/lance_db.py +0 -0
  525. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/milvus/__init__.py +0 -0
  526. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/milvus/milvus.py +0 -0
  527. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/mongodb/__init__.py +0 -0
  528. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/mongodb/mongodb.py +0 -0
  529. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/pgvector/__init__.py +0 -0
  530. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/pgvector/index.py +0 -0
  531. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/pineconedb/__init__.py +0 -0
  532. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  533. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/qdrant/__init__.py +0 -0
  534. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/qdrant/qdrant.py +0 -0
  535. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/search.py +0 -0
  536. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/singlestore/__init__.py +0 -0
  537. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/singlestore/index.py +0 -0
  538. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/singlestore/singlestore.py +0 -0
  539. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/surrealdb/__init__.py +0 -0
  540. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  541. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/upstashdb/__init__.py +0 -0
  542. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  543. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/weaviate/__init__.py +0 -0
  544. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/weaviate/index.py +0 -0
  545. {agno-1.7.5 → agno-1.7.6}/agno/vectordb/weaviate/weaviate.py +0 -0
  546. {agno-1.7.5 → agno-1.7.6}/agno/workflow/__init__.py +0 -0
  547. {agno-1.7.5 → agno-1.7.6}/agno/workflow/v2/__init__.py +0 -0
  548. {agno-1.7.5 → agno-1.7.6}/agno/workflow/v2/condition.py +0 -0
  549. {agno-1.7.5 → agno-1.7.6}/agno/workflow/v2/loop.py +0 -0
  550. {agno-1.7.5 → agno-1.7.6}/agno/workflow/v2/parallel.py +0 -0
  551. {agno-1.7.5 → agno-1.7.6}/agno/workflow/v2/router.py +0 -0
  552. {agno-1.7.5 → agno-1.7.6}/agno/workflow/v2/step.py +0 -0
  553. {agno-1.7.5 → agno-1.7.6}/agno/workflow/v2/steps.py +0 -0
  554. {agno-1.7.5 → agno-1.7.6}/agno/workflow/v2/types.py +0 -0
  555. {agno-1.7.5 → agno-1.7.6}/agno/workspace/__init__.py +0 -0
  556. {agno-1.7.5 → agno-1.7.6}/agno/workspace/config.py +0 -0
  557. {agno-1.7.5 → agno-1.7.6}/agno/workspace/enums.py +0 -0
  558. {agno-1.7.5 → agno-1.7.6}/agno/workspace/helpers.py +0 -0
  559. {agno-1.7.5 → agno-1.7.6}/agno/workspace/operator.py +0 -0
  560. {agno-1.7.5 → agno-1.7.6}/agno/workspace/settings.py +0 -0
  561. {agno-1.7.5 → agno-1.7.6}/agno.egg-info/dependency_links.txt +0 -0
  562. {agno-1.7.5 → agno-1.7.6}/agno.egg-info/entry_points.txt +0 -0
  563. {agno-1.7.5 → agno-1.7.6}/agno.egg-info/top_level.txt +0 -0
  564. {agno-1.7.5 → 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.5
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
@@ -603,6 +614,7 @@ Provides-Extra: aws
603
614
  Requires-Dist: agno-aws; extra == "aws"
604
615
  Requires-Dist: agno-docker; extra == "aws"
605
616
  Provides-Extra: models
617
+ Requires-Dist: agno[aws-bedrock]; extra == "models"
606
618
  Requires-Dist: agno[anthropic]; extra == "models"
607
619
  Requires-Dist: agno[azure]; extra == "models"
608
620
  Requires-Dist: agno[cerebras]; extra == "models"
@@ -617,6 +629,7 @@ Requires-Dist: agno[meta]; extra == "models"
617
629
  Requires-Dist: agno[mistral]; extra == "models"
618
630
  Requires-Dist: agno[ollama]; extra == "models"
619
631
  Requires-Dist: agno[openai]; extra == "models"
632
+ Requires-Dist: agno[portkey]; extra == "models"
620
633
  Provides-Extra: tools
621
634
  Requires-Dist: agno[apify]; extra == "tools"
622
635
  Requires-Dist: agno[brave]; extra == "tools"
@@ -634,6 +647,7 @@ Requires-Dist: agno[googlemaps]; extra == "tools"
634
647
  Requires-Dist: agno[todoist]; extra == "tools"
635
648
  Requires-Dist: agno[matplotlib]; extra == "tools"
636
649
  Requires-Dist: agno[elevenlabs]; extra == "tools"
650
+ Requires-Dist: agno[evm]; extra == "tools"
637
651
  Requires-Dist: agno[fal]; extra == "tools"
638
652
  Requires-Dist: agno[webex]; extra == "tools"
639
653
  Requires-Dist: agno[mcp]; extra == "tools"
@@ -646,6 +660,7 @@ Requires-Dist: agno[oxylabs]; extra == "tools"
646
660
  Requires-Dist: agno[zep]; extra == "tools"
647
661
  Requires-Dist: agno[mem0]; extra == "tools"
648
662
  Requires-Dist: agno[google_bigquery]; extra == "tools"
663
+ Requires-Dist: agno[psycopg2]; extra == "tools"
649
664
  Provides-Extra: storage
650
665
  Requires-Dist: agno[sql]; extra == "storage"
651
666
  Requires-Dist: agno[postgres]; extra == "storage"
@@ -4369,7 +4369,6 @@ class Agent:
4369
4369
  # Format the system message with the session state variables
4370
4370
  if self.add_state_in_messages:
4371
4371
  sys_message_content = self.format_message_with_state_variables(sys_message_content)
4372
- print("HELLO", sys_message_content)
4373
4372
 
4374
4373
  # Add the JSON output prompt if response_model is provided and the model does not support native structured outputs or JSON schema outputs
4375
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:
@@ -0,0 +1,39 @@
1
+ from typing import List
2
+
3
+ from agno.document.base import Document
4
+ from agno.document.chunking.strategy import ChunkingStrategy
5
+
6
+
7
+ class RowChunking(ChunkingStrategy):
8
+ def __init__(self, skip_header: bool = False, clean_rows: bool = True):
9
+ self.skip_header = skip_header
10
+ self.clean_rows = clean_rows
11
+
12
+ def chunk(self, document: Document) -> List[Document]:
13
+ if not document or not document.content:
14
+ return []
15
+
16
+ if not isinstance(document.content, str):
17
+ raise ValueError("Document content must be a string")
18
+
19
+ rows = document.content.splitlines()
20
+
21
+ if self.skip_header and rows:
22
+ rows = rows[1:]
23
+ start_index = 2
24
+ else:
25
+ start_index = 1
26
+
27
+ chunks = []
28
+ for i, row in enumerate(rows):
29
+ if self.clean_rows:
30
+ chunk_content = " ".join(row.split()) # Normalize internal whitespace
31
+ else:
32
+ chunk_content = row.strip()
33
+
34
+ if chunk_content: # Skip empty rows
35
+ meta_data = document.meta_data.copy()
36
+ meta_data["row_number"] = start_index + i # Preserve logical row numbering
37
+ chunk_id = f"{document.id}_row_{start_index + i}" if document.id else None
38
+ chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk_content))
39
+ return chunks
@@ -16,13 +16,6 @@ class Reader:
16
16
  separators: List[str] = field(default_factory=lambda: ["\n", "\n\n", "\r", "\r\n", "\n\r", "\t", " ", " "])
17
17
  chunking_strategy: Optional[ChunkingStrategy] = None
18
18
 
19
- def __init__(
20
- self, chunk: bool = True, chunk_size: int = 5000, chunking_strategy: Optional[ChunkingStrategy] = None
21
- ) -> None:
22
- self.chunk = chunk
23
- self.chunk_size = chunk_size
24
- self.chunking_strategy = chunking_strategy
25
-
26
19
  def read(self, obj: Any) -> List[Document]:
27
20
  raise NotImplementedError
28
21
 
@@ -0,0 +1,73 @@
1
+ from dataclasses import dataclass
2
+ from os import getenv
3
+ from typing import Any, Dict, List, Optional, Tuple
4
+
5
+ from typing_extensions import Literal
6
+
7
+ from agno.embedder.base import Embedder
8
+ from agno.utils.log import logger
9
+
10
+ try:
11
+ import requests
12
+ except ImportError:
13
+ raise ImportError("requests not installed, use pip install requests")
14
+
15
+
16
+ @dataclass
17
+ class JinaEmbedder(Embedder):
18
+ id: str = "jina-embeddings-v3"
19
+ dimensions: int = 1024
20
+ embedding_type: Literal["float", "base64", "int8"] = "float"
21
+ late_chunking: bool = False
22
+ user: Optional[str] = None
23
+ api_key: Optional[str] = getenv("JINA_API_KEY")
24
+ base_url: str = "https://api.jina.ai/v1/embeddings"
25
+ headers: Optional[Dict[str, str]] = None
26
+ request_params: Optional[Dict[str, Any]] = None
27
+ timeout: Optional[float] = None
28
+
29
+ def _get_headers(self) -> Dict[str, str]:
30
+ if not self.api_key:
31
+ raise ValueError(
32
+ "API key is required for Jina embedder. Set JINA_API_KEY environment variable or pass api_key parameter."
33
+ )
34
+
35
+ headers = {"Content-Type": "application/json", "Authorization": f"Bearer {self.api_key}"}
36
+ if self.headers:
37
+ headers.update(self.headers)
38
+ return headers
39
+
40
+ def _response(self, text: str) -> Dict[str, Any]:
41
+ data = {
42
+ "model": self.id,
43
+ "late_chunking": self.late_chunking,
44
+ "dimensions": self.dimensions,
45
+ "embedding_type": self.embedding_type,
46
+ "input": [text], # Jina API expects a list
47
+ }
48
+ if self.user is not None:
49
+ data["user"] = self.user
50
+ if self.request_params:
51
+ data.update(self.request_params)
52
+
53
+ response = requests.post(self.base_url, headers=self._get_headers(), json=data, timeout=self.timeout)
54
+ response.raise_for_status()
55
+ return response.json()
56
+
57
+ def get_embedding(self, text: str) -> List[float]:
58
+ try:
59
+ result = self._response(text)
60
+ return result["data"][0]["embedding"]
61
+ except Exception as e:
62
+ logger.warning(f"Failed to get embedding: {e}")
63
+ return []
64
+
65
+ def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict]]:
66
+ try:
67
+ result = self._response(text)
68
+ embedding = result["data"][0]["embedding"]
69
+ usage = result.get("usage")
70
+ return embedding, usage
71
+ except Exception as e:
72
+ logger.warning(f"Failed to get embedding and usage: {e}")
73
+ return [], None
@@ -273,7 +273,7 @@ class AgentMemory(BaseModel):
273
273
 
274
274
  self.classifier.existing_memories = self.memories
275
275
  classifier_response = self.classifier.run(input)
276
- if classifier_response == "yes":
276
+ if classifier_response and classifier_response.lower() == "yes":
277
277
  return True
278
278
  return False
279
279
 
@@ -286,7 +286,7 @@ class AgentMemory(BaseModel):
286
286
 
287
287
  self.classifier.existing_memories = self.memories
288
288
  classifier_response = await self.classifier.arun(input)
289
- if classifier_response == "yes":
289
+ if classifier_response and classifier_response.lower() == "yes":
290
290
  return True
291
291
  return False
292
292
 
@@ -313,7 +313,7 @@ class TeamMemory:
313
313
 
314
314
  self.classifier.existing_memories = self.memories
315
315
  classifier_response = self.classifier.run(input)
316
- if classifier_response == "yes":
316
+ if classifier_response and classifier_response.lower() == "yes":
317
317
  return True
318
318
  return False
319
319
 
@@ -326,7 +326,7 @@ class TeamMemory:
326
326
 
327
327
  self.classifier.existing_memories = self.memories
328
328
  classifier_response = await self.classifier.arun(input)
329
- if classifier_response == "yes":
329
+ if classifier_response and classifier_response.lower() == "yes":
330
330
  return True
331
331
  return False
332
332