agno 1.7.5__tar.gz → 1.7.7__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 (565) hide show
  1. {agno-1.7.5 → agno-1.7.7}/PKG-INFO +20 -3
  2. {agno-1.7.5 → agno-1.7.7}/agno/agent/agent.py +5 -24
  3. {agno-1.7.5 → agno-1.7.7}/agno/app/agui/async_router.py +5 -5
  4. {agno-1.7.5 → agno-1.7.7}/agno/app/agui/sync_router.py +5 -5
  5. {agno-1.7.5 → agno-1.7.7}/agno/app/agui/utils.py +84 -14
  6. {agno-1.7.5 → agno-1.7.7}/agno/app/playground/app.py +3 -2
  7. agno-1.7.7/agno/document/chunking/row.py +39 -0
  8. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/base.py +0 -7
  9. agno-1.7.7/agno/embedder/jina.py +73 -0
  10. {agno-1.7.5 → agno-1.7.7}/agno/embedder/openai.py +5 -1
  11. {agno-1.7.5 → agno-1.7.7}/agno/memory/agent.py +2 -2
  12. {agno-1.7.5 → agno-1.7.7}/agno/memory/team.py +2 -2
  13. {agno-1.7.5 → agno-1.7.7}/agno/models/anthropic/claude.py +9 -1
  14. {agno-1.7.5 → agno-1.7.7}/agno/models/aws/bedrock.py +311 -15
  15. {agno-1.7.5 → agno-1.7.7}/agno/models/google/gemini.py +26 -6
  16. {agno-1.7.5 → agno-1.7.7}/agno/models/litellm/chat.py +38 -7
  17. {agno-1.7.5 → agno-1.7.7}/agno/models/message.py +1 -0
  18. {agno-1.7.5 → agno-1.7.7}/agno/models/openai/chat.py +1 -22
  19. {agno-1.7.5 → agno-1.7.7}/agno/models/openai/responses.py +5 -5
  20. agno-1.7.7/agno/models/portkey/__init__.py +3 -0
  21. agno-1.7.7/agno/models/portkey/portkey.py +88 -0
  22. {agno-1.7.5 → agno-1.7.7}/agno/models/xai/xai.py +54 -0
  23. {agno-1.7.5 → agno-1.7.7}/agno/run/v2/workflow.py +4 -0
  24. {agno-1.7.5 → agno-1.7.7}/agno/storage/mysql.py +2 -0
  25. {agno-1.7.5 → agno-1.7.7}/agno/storage/postgres.py +5 -3
  26. {agno-1.7.5 → agno-1.7.7}/agno/storage/session/v2/workflow.py +29 -5
  27. {agno-1.7.5 → agno-1.7.7}/agno/storage/singlestore.py +4 -1
  28. {agno-1.7.5 → agno-1.7.7}/agno/storage/sqlite.py +0 -1
  29. {agno-1.7.5 → agno-1.7.7}/agno/team/team.py +38 -36
  30. agno-1.7.7/agno/tools/bitbucket.py +292 -0
  31. agno-1.7.7/agno/tools/daytona.py +478 -0
  32. agno-1.7.7/agno/tools/evm.py +123 -0
  33. {agno-1.7.5 → agno-1.7.7}/agno/tools/jina.py +13 -6
  34. agno-1.7.7/agno/tools/linkup.py +54 -0
  35. {agno-1.7.5 → agno-1.7.7}/agno/tools/mcp.py +170 -26
  36. {agno-1.7.5 → agno-1.7.7}/agno/tools/mem0.py +15 -2
  37. agno-1.7.7/agno/tools/models/morph.py +186 -0
  38. agno-1.7.7/agno/tools/postgres.py +265 -0
  39. {agno-1.7.5 → agno-1.7.7}/agno/tools/zep.py +21 -32
  40. {agno-1.7.5 → agno-1.7.7}/agno/utils/log.py +16 -0
  41. {agno-1.7.5 → agno-1.7.7}/agno/utils/models/claude.py +1 -0
  42. {agno-1.7.5 → agno-1.7.7}/agno/utils/string.py +14 -0
  43. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/pgvector/pgvector.py +4 -5
  44. {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/workflow.py +152 -25
  45. {agno-1.7.5 → agno-1.7.7}/agno/workflow/workflow.py +90 -63
  46. {agno-1.7.5 → agno-1.7.7}/agno.egg-info/PKG-INFO +20 -3
  47. {agno-1.7.5 → agno-1.7.7}/agno.egg-info/SOURCES.txt +8 -0
  48. {agno-1.7.5 → agno-1.7.7}/agno.egg-info/requires.txt +24 -1
  49. {agno-1.7.5 → agno-1.7.7}/pyproject.toml +23 -6
  50. agno-1.7.5/agno/tools/daytona.py +0 -130
  51. agno-1.7.5/agno/tools/postgres.py +0 -247
  52. {agno-1.7.5 → agno-1.7.7}/LICENSE +0 -0
  53. {agno-1.7.5 → agno-1.7.7}/README.md +0 -0
  54. {agno-1.7.5 → agno-1.7.7}/agno/__init__.py +0 -0
  55. {agno-1.7.5 → agno-1.7.7}/agno/agent/__init__.py +0 -0
  56. {agno-1.7.5 → agno-1.7.7}/agno/agent/metrics.py +0 -0
  57. {agno-1.7.5 → agno-1.7.7}/agno/api/__init__.py +0 -0
  58. {agno-1.7.5 → agno-1.7.7}/agno/api/agent.py +0 -0
  59. {agno-1.7.5 → agno-1.7.7}/agno/api/api.py +0 -0
  60. {agno-1.7.5 → agno-1.7.7}/agno/api/app.py +0 -0
  61. {agno-1.7.5 → agno-1.7.7}/agno/api/evals.py +0 -0
  62. {agno-1.7.5 → agno-1.7.7}/agno/api/playground.py +0 -0
  63. {agno-1.7.5 → agno-1.7.7}/agno/api/routes.py +0 -0
  64. {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/__init__.py +0 -0
  65. {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/agent.py +0 -0
  66. {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/app.py +0 -0
  67. {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/evals.py +0 -0
  68. {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/playground.py +0 -0
  69. {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/response.py +0 -0
  70. {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/team.py +0 -0
  71. {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/user.py +0 -0
  72. {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/workflows.py +0 -0
  73. {agno-1.7.5 → agno-1.7.7}/agno/api/schemas/workspace.py +0 -0
  74. {agno-1.7.5 → agno-1.7.7}/agno/api/team.py +0 -0
  75. {agno-1.7.5 → agno-1.7.7}/agno/api/user.py +0 -0
  76. {agno-1.7.5 → agno-1.7.7}/agno/api/workflows.py +0 -0
  77. {agno-1.7.5 → agno-1.7.7}/agno/api/workspace.py +0 -0
  78. {agno-1.7.5 → agno-1.7.7}/agno/app/__init__.py +0 -0
  79. {agno-1.7.5 → agno-1.7.7}/agno/app/agui/__init__.py +0 -0
  80. {agno-1.7.5 → agno-1.7.7}/agno/app/agui/app.py +0 -0
  81. {agno-1.7.5 → agno-1.7.7}/agno/app/base.py +0 -0
  82. {agno-1.7.5 → agno-1.7.7}/agno/app/discord/__init__.py +0 -0
  83. {agno-1.7.5 → agno-1.7.7}/agno/app/discord/client.py +0 -0
  84. {agno-1.7.5 → agno-1.7.7}/agno/app/fastapi/__init__.py +0 -0
  85. {agno-1.7.5 → agno-1.7.7}/agno/app/fastapi/app.py +0 -0
  86. {agno-1.7.5 → agno-1.7.7}/agno/app/fastapi/async_router.py +0 -0
  87. {agno-1.7.5 → agno-1.7.7}/agno/app/fastapi/sync_router.py +0 -0
  88. {agno-1.7.5 → agno-1.7.7}/agno/app/playground/__init__.py +0 -0
  89. {agno-1.7.5 → agno-1.7.7}/agno/app/playground/async_router.py +0 -0
  90. {agno-1.7.5 → agno-1.7.7}/agno/app/playground/deploy.py +0 -0
  91. {agno-1.7.5 → agno-1.7.7}/agno/app/playground/operator.py +0 -0
  92. {agno-1.7.5 → agno-1.7.7}/agno/app/playground/schemas.py +0 -0
  93. {agno-1.7.5 → agno-1.7.7}/agno/app/playground/serve.py +0 -0
  94. {agno-1.7.5 → agno-1.7.7}/agno/app/playground/settings.py +0 -0
  95. {agno-1.7.5 → agno-1.7.7}/agno/app/playground/sync_router.py +0 -0
  96. {agno-1.7.5 → agno-1.7.7}/agno/app/playground/utils.py +0 -0
  97. {agno-1.7.5 → agno-1.7.7}/agno/app/settings.py +0 -0
  98. {agno-1.7.5 → agno-1.7.7}/agno/app/slack/__init__.py +0 -0
  99. {agno-1.7.5 → agno-1.7.7}/agno/app/slack/app.py +0 -0
  100. {agno-1.7.5 → agno-1.7.7}/agno/app/slack/async_router.py +0 -0
  101. {agno-1.7.5 → agno-1.7.7}/agno/app/slack/security.py +0 -0
  102. {agno-1.7.5 → agno-1.7.7}/agno/app/slack/sync_router.py +0 -0
  103. {agno-1.7.5 → agno-1.7.7}/agno/app/utils.py +0 -0
  104. {agno-1.7.5 → agno-1.7.7}/agno/app/whatsapp/__init__.py +0 -0
  105. {agno-1.7.5 → agno-1.7.7}/agno/app/whatsapp/app.py +0 -0
  106. {agno-1.7.5 → agno-1.7.7}/agno/app/whatsapp/async_router.py +0 -0
  107. {agno-1.7.5 → agno-1.7.7}/agno/app/whatsapp/security.py +0 -0
  108. {agno-1.7.5 → agno-1.7.7}/agno/app/whatsapp/sync_router.py +0 -0
  109. {agno-1.7.5 → agno-1.7.7}/agno/cli/__init__.py +0 -0
  110. {agno-1.7.5 → agno-1.7.7}/agno/cli/auth_server.py +0 -0
  111. {agno-1.7.5 → agno-1.7.7}/agno/cli/config.py +0 -0
  112. {agno-1.7.5 → agno-1.7.7}/agno/cli/console.py +0 -0
  113. {agno-1.7.5 → agno-1.7.7}/agno/cli/credentials.py +0 -0
  114. {agno-1.7.5 → agno-1.7.7}/agno/cli/entrypoint.py +0 -0
  115. {agno-1.7.5 → agno-1.7.7}/agno/cli/operator.py +0 -0
  116. {agno-1.7.5 → agno-1.7.7}/agno/cli/settings.py +0 -0
  117. {agno-1.7.5 → agno-1.7.7}/agno/cli/ws/__init__.py +0 -0
  118. {agno-1.7.5 → agno-1.7.7}/agno/cli/ws/ws_cli.py +0 -0
  119. {agno-1.7.5 → agno-1.7.7}/agno/constants.py +0 -0
  120. {agno-1.7.5 → agno-1.7.7}/agno/debug.py +0 -0
  121. {agno-1.7.5 → agno-1.7.7}/agno/document/__init__.py +0 -0
  122. {agno-1.7.5 → agno-1.7.7}/agno/document/base.py +0 -0
  123. {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/__init__.py +0 -0
  124. {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/agentic.py +0 -0
  125. {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/document.py +0 -0
  126. {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/fixed.py +0 -0
  127. {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/markdown.py +0 -0
  128. {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/recursive.py +0 -0
  129. {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/semantic.py +0 -0
  130. {agno-1.7.5 → agno-1.7.7}/agno/document/chunking/strategy.py +0 -0
  131. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/__init__.py +0 -0
  132. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/arxiv_reader.py +0 -0
  133. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/csv_reader.py +0 -0
  134. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/docx_reader.py +0 -0
  135. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/firecrawl_reader.py +0 -0
  136. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/gcs/__init__.py +0 -0
  137. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/gcs/pdf_reader.py +0 -0
  138. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/json_reader.py +0 -0
  139. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/markdown_reader.py +0 -0
  140. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/pdf_reader.py +0 -0
  141. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/s3/__init__.py +0 -0
  142. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/s3/pdf_reader.py +0 -0
  143. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/s3/text_reader.py +0 -0
  144. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/text_reader.py +0 -0
  145. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/url_reader.py +0 -0
  146. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/website_reader.py +0 -0
  147. {agno-1.7.5 → agno-1.7.7}/agno/document/reader/youtube_reader.py +0 -0
  148. {agno-1.7.5 → agno-1.7.7}/agno/embedder/__init__.py +0 -0
  149. {agno-1.7.5 → agno-1.7.7}/agno/embedder/aws_bedrock.py +0 -0
  150. {agno-1.7.5 → agno-1.7.7}/agno/embedder/azure_openai.py +0 -0
  151. {agno-1.7.5 → agno-1.7.7}/agno/embedder/base.py +0 -0
  152. {agno-1.7.5 → agno-1.7.7}/agno/embedder/cohere.py +0 -0
  153. {agno-1.7.5 → agno-1.7.7}/agno/embedder/fastembed.py +0 -0
  154. {agno-1.7.5 → agno-1.7.7}/agno/embedder/fireworks.py +0 -0
  155. {agno-1.7.5 → agno-1.7.7}/agno/embedder/google.py +0 -0
  156. {agno-1.7.5 → agno-1.7.7}/agno/embedder/huggingface.py +0 -0
  157. {agno-1.7.5 → agno-1.7.7}/agno/embedder/langdb.py +0 -0
  158. {agno-1.7.5 → agno-1.7.7}/agno/embedder/mistral.py +0 -0
  159. {agno-1.7.5 → agno-1.7.7}/agno/embedder/nebius.py +0 -0
  160. {agno-1.7.5 → agno-1.7.7}/agno/embedder/ollama.py +0 -0
  161. {agno-1.7.5 → agno-1.7.7}/agno/embedder/sentence_transformer.py +0 -0
  162. {agno-1.7.5 → agno-1.7.7}/agno/embedder/together.py +0 -0
  163. {agno-1.7.5 → agno-1.7.7}/agno/embedder/voyageai.py +0 -0
  164. {agno-1.7.5 → agno-1.7.7}/agno/eval/__init__.py +0 -0
  165. {agno-1.7.5 → agno-1.7.7}/agno/eval/accuracy.py +0 -0
  166. {agno-1.7.5 → agno-1.7.7}/agno/eval/performance.py +0 -0
  167. {agno-1.7.5 → agno-1.7.7}/agno/eval/reliability.py +0 -0
  168. {agno-1.7.5 → agno-1.7.7}/agno/eval/utils.py +0 -0
  169. {agno-1.7.5 → agno-1.7.7}/agno/exceptions.py +0 -0
  170. {agno-1.7.5 → agno-1.7.7}/agno/file/__init__.py +0 -0
  171. {agno-1.7.5 → agno-1.7.7}/agno/file/file.py +0 -0
  172. {agno-1.7.5 → agno-1.7.7}/agno/file/local/__init__.py +0 -0
  173. {agno-1.7.5 → agno-1.7.7}/agno/file/local/csv.py +0 -0
  174. {agno-1.7.5 → agno-1.7.7}/agno/file/local/txt.py +0 -0
  175. {agno-1.7.5 → agno-1.7.7}/agno/infra/__init__.py +0 -0
  176. {agno-1.7.5 → agno-1.7.7}/agno/infra/app.py +0 -0
  177. {agno-1.7.5 → agno-1.7.7}/agno/infra/base.py +0 -0
  178. {agno-1.7.5 → agno-1.7.7}/agno/infra/context.py +0 -0
  179. {agno-1.7.5 → agno-1.7.7}/agno/infra/db_app.py +0 -0
  180. {agno-1.7.5 → agno-1.7.7}/agno/infra/resource.py +0 -0
  181. {agno-1.7.5 → agno-1.7.7}/agno/infra/resources.py +0 -0
  182. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/__init__.py +0 -0
  183. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/agent.py +0 -0
  184. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/arxiv.py +0 -0
  185. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/combined.py +0 -0
  186. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/csv.py +0 -0
  187. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/csv_url.py +0 -0
  188. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/document.py +0 -0
  189. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/docx.py +0 -0
  190. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/firecrawl.py +0 -0
  191. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/gcs/__init__.py +0 -0
  192. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/gcs/base.py +0 -0
  193. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/gcs/pdf.py +0 -0
  194. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/json.py +0 -0
  195. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/langchain.py +0 -0
  196. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/light_rag.py +0 -0
  197. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/llamaindex.py +0 -0
  198. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/markdown.py +0 -0
  199. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/pdf.py +0 -0
  200. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/pdf_bytes.py +0 -0
  201. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/pdf_url.py +0 -0
  202. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/s3/__init__.py +0 -0
  203. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/s3/base.py +0 -0
  204. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/s3/pdf.py +0 -0
  205. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/s3/text.py +0 -0
  206. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/text.py +0 -0
  207. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/url.py +0 -0
  208. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/website.py +0 -0
  209. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/wikipedia.py +0 -0
  210. {agno-1.7.5 → agno-1.7.7}/agno/knowledge/youtube.py +0 -0
  211. {agno-1.7.5 → agno-1.7.7}/agno/media.py +0 -0
  212. {agno-1.7.5 → agno-1.7.7}/agno/memory/__init__.py +0 -0
  213. {agno-1.7.5 → agno-1.7.7}/agno/memory/classifier.py +0 -0
  214. {agno-1.7.5 → agno-1.7.7}/agno/memory/db/__init__.py +0 -0
  215. {agno-1.7.5 → agno-1.7.7}/agno/memory/db/base.py +0 -0
  216. {agno-1.7.5 → agno-1.7.7}/agno/memory/db/mongodb.py +0 -0
  217. {agno-1.7.5 → agno-1.7.7}/agno/memory/db/postgres.py +0 -0
  218. {agno-1.7.5 → agno-1.7.7}/agno/memory/db/sqlite.py +0 -0
  219. {agno-1.7.5 → agno-1.7.7}/agno/memory/manager.py +0 -0
  220. {agno-1.7.5 → agno-1.7.7}/agno/memory/memory.py +0 -0
  221. {agno-1.7.5 → agno-1.7.7}/agno/memory/row.py +0 -0
  222. {agno-1.7.5 → agno-1.7.7}/agno/memory/summarizer.py +0 -0
  223. {agno-1.7.5 → agno-1.7.7}/agno/memory/summary.py +0 -0
  224. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/__init__.py +0 -0
  225. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/__init__.py +0 -0
  226. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/base.py +0 -0
  227. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/firestore.py +0 -0
  228. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/mongodb.py +0 -0
  229. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/postgres.py +0 -0
  230. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/redis.py +0 -0
  231. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/schema.py +0 -0
  232. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/db/sqlite.py +0 -0
  233. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/manager.py +0 -0
  234. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/memory.py +0 -0
  235. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/schema.py +0 -0
  236. {agno-1.7.5 → agno-1.7.7}/agno/memory/v2/summarizer.py +0 -0
  237. {agno-1.7.5 → agno-1.7.7}/agno/memory/workflow.py +0 -0
  238. {agno-1.7.5 → agno-1.7.7}/agno/models/__init__.py +0 -0
  239. {agno-1.7.5 → agno-1.7.7}/agno/models/aimlapi/__init__.py +0 -0
  240. {agno-1.7.5 → agno-1.7.7}/agno/models/aimlapi/aimlapi.py +0 -0
  241. {agno-1.7.5 → agno-1.7.7}/agno/models/anthropic/__init__.py +0 -0
  242. {agno-1.7.5 → agno-1.7.7}/agno/models/aws/__init__.py +0 -0
  243. {agno-1.7.5 → agno-1.7.7}/agno/models/aws/claude.py +0 -0
  244. {agno-1.7.5 → agno-1.7.7}/agno/models/azure/__init__.py +0 -0
  245. {agno-1.7.5 → agno-1.7.7}/agno/models/azure/ai_foundry.py +0 -0
  246. {agno-1.7.5 → agno-1.7.7}/agno/models/azure/openai_chat.py +0 -0
  247. {agno-1.7.5 → agno-1.7.7}/agno/models/base.py +0 -0
  248. {agno-1.7.5 → agno-1.7.7}/agno/models/cerebras/__init__.py +0 -0
  249. {agno-1.7.5 → agno-1.7.7}/agno/models/cerebras/cerebras.py +0 -0
  250. {agno-1.7.5 → agno-1.7.7}/agno/models/cerebras/cerebras_openai.py +0 -0
  251. {agno-1.7.5 → agno-1.7.7}/agno/models/cohere/__init__.py +0 -0
  252. {agno-1.7.5 → agno-1.7.7}/agno/models/cohere/chat.py +0 -0
  253. {agno-1.7.5 → agno-1.7.7}/agno/models/deepinfra/__init__.py +0 -0
  254. {agno-1.7.5 → agno-1.7.7}/agno/models/deepinfra/deepinfra.py +0 -0
  255. {agno-1.7.5 → agno-1.7.7}/agno/models/deepseek/__init__.py +0 -0
  256. {agno-1.7.5 → agno-1.7.7}/agno/models/deepseek/deepseek.py +0 -0
  257. {agno-1.7.5 → agno-1.7.7}/agno/models/defaults.py +0 -0
  258. {agno-1.7.5 → agno-1.7.7}/agno/models/fireworks/__init__.py +0 -0
  259. {agno-1.7.5 → agno-1.7.7}/agno/models/fireworks/fireworks.py +0 -0
  260. {agno-1.7.5 → agno-1.7.7}/agno/models/google/__init__.py +0 -0
  261. {agno-1.7.5 → agno-1.7.7}/agno/models/groq/__init__.py +0 -0
  262. {agno-1.7.5 → agno-1.7.7}/agno/models/groq/groq.py +0 -0
  263. {agno-1.7.5 → agno-1.7.7}/agno/models/huggingface/__init__.py +0 -0
  264. {agno-1.7.5 → agno-1.7.7}/agno/models/huggingface/huggingface.py +0 -0
  265. {agno-1.7.5 → agno-1.7.7}/agno/models/ibm/__init__.py +0 -0
  266. {agno-1.7.5 → agno-1.7.7}/agno/models/ibm/watsonx.py +0 -0
  267. {agno-1.7.5 → agno-1.7.7}/agno/models/internlm/__init__.py +0 -0
  268. {agno-1.7.5 → agno-1.7.7}/agno/models/internlm/internlm.py +0 -0
  269. {agno-1.7.5 → agno-1.7.7}/agno/models/langdb/__init__.py +0 -0
  270. {agno-1.7.5 → agno-1.7.7}/agno/models/langdb/langdb.py +0 -0
  271. {agno-1.7.5 → agno-1.7.7}/agno/models/litellm/__init__.py +0 -0
  272. {agno-1.7.5 → agno-1.7.7}/agno/models/litellm/litellm_openai.py +0 -0
  273. {agno-1.7.5 → agno-1.7.7}/agno/models/lmstudio/__init__.py +0 -0
  274. {agno-1.7.5 → agno-1.7.7}/agno/models/lmstudio/lmstudio.py +0 -0
  275. {agno-1.7.5 → agno-1.7.7}/agno/models/meta/__init__.py +0 -0
  276. {agno-1.7.5 → agno-1.7.7}/agno/models/meta/llama.py +0 -0
  277. {agno-1.7.5 → agno-1.7.7}/agno/models/meta/llama_openai.py +0 -0
  278. {agno-1.7.5 → agno-1.7.7}/agno/models/mistral/__init__.py +0 -0
  279. {agno-1.7.5 → agno-1.7.7}/agno/models/mistral/mistral.py +0 -0
  280. {agno-1.7.5 → agno-1.7.7}/agno/models/nebius/__init__.py +0 -0
  281. {agno-1.7.5 → agno-1.7.7}/agno/models/nebius/nebius.py +0 -0
  282. {agno-1.7.5 → agno-1.7.7}/agno/models/nvidia/__init__.py +0 -0
  283. {agno-1.7.5 → agno-1.7.7}/agno/models/nvidia/nvidia.py +0 -0
  284. {agno-1.7.5 → agno-1.7.7}/agno/models/ollama/__init__.py +0 -0
  285. {agno-1.7.5 → agno-1.7.7}/agno/models/ollama/chat.py +0 -0
  286. {agno-1.7.5 → agno-1.7.7}/agno/models/ollama/tools.py +0 -0
  287. {agno-1.7.5 → agno-1.7.7}/agno/models/openai/__init__.py +0 -0
  288. {agno-1.7.5 → agno-1.7.7}/agno/models/openai/like.py +0 -0
  289. {agno-1.7.5 → agno-1.7.7}/agno/models/openrouter/__init__.py +0 -0
  290. {agno-1.7.5 → agno-1.7.7}/agno/models/openrouter/openrouter.py +0 -0
  291. {agno-1.7.5 → agno-1.7.7}/agno/models/perplexity/__init__.py +0 -0
  292. {agno-1.7.5 → agno-1.7.7}/agno/models/perplexity/perplexity.py +0 -0
  293. {agno-1.7.5 → agno-1.7.7}/agno/models/response.py +0 -0
  294. {agno-1.7.5 → agno-1.7.7}/agno/models/sambanova/__init__.py +0 -0
  295. {agno-1.7.5 → agno-1.7.7}/agno/models/sambanova/sambanova.py +0 -0
  296. {agno-1.7.5 → agno-1.7.7}/agno/models/together/__init__.py +0 -0
  297. {agno-1.7.5 → agno-1.7.7}/agno/models/together/together.py +0 -0
  298. {agno-1.7.5 → agno-1.7.7}/agno/models/vercel/__init__.py +0 -0
  299. {agno-1.7.5 → agno-1.7.7}/agno/models/vercel/v0.py +0 -0
  300. {agno-1.7.5 → agno-1.7.7}/agno/models/vllm/__init__.py +0 -0
  301. {agno-1.7.5 → agno-1.7.7}/agno/models/vllm/vllm.py +0 -0
  302. {agno-1.7.5 → agno-1.7.7}/agno/models/xai/__init__.py +0 -0
  303. {agno-1.7.5 → agno-1.7.7}/agno/playground/__init__.py +0 -0
  304. {agno-1.7.5 → agno-1.7.7}/agno/playground/deploy.py +0 -0
  305. {agno-1.7.5 → agno-1.7.7}/agno/playground/playground.py +0 -0
  306. {agno-1.7.5 → agno-1.7.7}/agno/playground/serve.py +0 -0
  307. {agno-1.7.5 → agno-1.7.7}/agno/playground/settings.py +0 -0
  308. {agno-1.7.5 → agno-1.7.7}/agno/py.typed +0 -0
  309. {agno-1.7.5 → agno-1.7.7}/agno/reasoning/__init__.py +0 -0
  310. {agno-1.7.5 → agno-1.7.7}/agno/reasoning/azure_ai_foundry.py +0 -0
  311. {agno-1.7.5 → agno-1.7.7}/agno/reasoning/deepseek.py +0 -0
  312. {agno-1.7.5 → agno-1.7.7}/agno/reasoning/default.py +0 -0
  313. {agno-1.7.5 → agno-1.7.7}/agno/reasoning/groq.py +0 -0
  314. {agno-1.7.5 → agno-1.7.7}/agno/reasoning/helpers.py +0 -0
  315. {agno-1.7.5 → agno-1.7.7}/agno/reasoning/ollama.py +0 -0
  316. {agno-1.7.5 → agno-1.7.7}/agno/reasoning/openai.py +0 -0
  317. {agno-1.7.5 → agno-1.7.7}/agno/reasoning/step.py +0 -0
  318. {agno-1.7.5 → agno-1.7.7}/agno/reranker/__init__.py +0 -0
  319. {agno-1.7.5 → agno-1.7.7}/agno/reranker/base.py +0 -0
  320. {agno-1.7.5 → agno-1.7.7}/agno/reranker/cohere.py +0 -0
  321. {agno-1.7.5 → agno-1.7.7}/agno/reranker/infinity.py +0 -0
  322. {agno-1.7.5 → agno-1.7.7}/agno/reranker/sentence_transformer.py +0 -0
  323. {agno-1.7.5 → agno-1.7.7}/agno/run/__init__.py +0 -0
  324. {agno-1.7.5 → agno-1.7.7}/agno/run/base.py +0 -0
  325. {agno-1.7.5 → agno-1.7.7}/agno/run/messages.py +0 -0
  326. {agno-1.7.5 → agno-1.7.7}/agno/run/response.py +0 -0
  327. {agno-1.7.5 → agno-1.7.7}/agno/run/team.py +0 -0
  328. {agno-1.7.5 → agno-1.7.7}/agno/run/v2/__init__.py +0 -0
  329. {agno-1.7.5 → agno-1.7.7}/agno/run/workflow.py +0 -0
  330. {agno-1.7.5 → agno-1.7.7}/agno/storage/__init__.py +0 -0
  331. {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/__init__.py +0 -0
  332. {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/dynamodb.py +0 -0
  333. {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/json.py +0 -0
  334. {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/mongodb.py +0 -0
  335. {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/postgres.py +0 -0
  336. {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/singlestore.py +0 -0
  337. {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/sqlite.py +0 -0
  338. {agno-1.7.5 → agno-1.7.7}/agno/storage/agent/yaml.py +0 -0
  339. {agno-1.7.5 → agno-1.7.7}/agno/storage/base.py +0 -0
  340. {agno-1.7.5 → agno-1.7.7}/agno/storage/dynamodb.py +0 -0
  341. {agno-1.7.5 → agno-1.7.7}/agno/storage/firestore.py +0 -0
  342. {agno-1.7.5 → agno-1.7.7}/agno/storage/gcs_json.py +0 -0
  343. {agno-1.7.5 → agno-1.7.7}/agno/storage/json.py +0 -0
  344. {agno-1.7.5 → agno-1.7.7}/agno/storage/mongodb.py +0 -0
  345. {agno-1.7.5 → agno-1.7.7}/agno/storage/redis.py +0 -0
  346. {agno-1.7.5 → agno-1.7.7}/agno/storage/session/__init__.py +0 -0
  347. {agno-1.7.5 → agno-1.7.7}/agno/storage/session/agent.py +0 -0
  348. {agno-1.7.5 → agno-1.7.7}/agno/storage/session/team.py +0 -0
  349. {agno-1.7.5 → agno-1.7.7}/agno/storage/session/v2/__init__.py +0 -0
  350. {agno-1.7.5 → agno-1.7.7}/agno/storage/session/workflow.py +0 -0
  351. {agno-1.7.5 → agno-1.7.7}/agno/storage/workflow/__init__.py +0 -0
  352. {agno-1.7.5 → agno-1.7.7}/agno/storage/workflow/mongodb.py +0 -0
  353. {agno-1.7.5 → agno-1.7.7}/agno/storage/workflow/postgres.py +0 -0
  354. {agno-1.7.5 → agno-1.7.7}/agno/storage/workflow/sqlite.py +0 -0
  355. {agno-1.7.5 → agno-1.7.7}/agno/storage/yaml.py +0 -0
  356. {agno-1.7.5 → agno-1.7.7}/agno/team/__init__.py +0 -0
  357. {agno-1.7.5 → agno-1.7.7}/agno/tools/__init__.py +0 -0
  358. {agno-1.7.5 → agno-1.7.7}/agno/tools/agentql.py +0 -0
  359. {agno-1.7.5 → agno-1.7.7}/agno/tools/airflow.py +0 -0
  360. {agno-1.7.5 → agno-1.7.7}/agno/tools/api.py +0 -0
  361. {agno-1.7.5 → agno-1.7.7}/agno/tools/apify.py +0 -0
  362. {agno-1.7.5 → agno-1.7.7}/agno/tools/arxiv.py +0 -0
  363. {agno-1.7.5 → agno-1.7.7}/agno/tools/aws_lambda.py +0 -0
  364. {agno-1.7.5 → agno-1.7.7}/agno/tools/aws_ses.py +0 -0
  365. {agno-1.7.5 → agno-1.7.7}/agno/tools/baidusearch.py +0 -0
  366. {agno-1.7.5 → agno-1.7.7}/agno/tools/bravesearch.py +0 -0
  367. {agno-1.7.5 → agno-1.7.7}/agno/tools/brightdata.py +0 -0
  368. {agno-1.7.5 → agno-1.7.7}/agno/tools/browserbase.py +0 -0
  369. {agno-1.7.5 → agno-1.7.7}/agno/tools/calcom.py +0 -0
  370. {agno-1.7.5 → agno-1.7.7}/agno/tools/calculator.py +0 -0
  371. {agno-1.7.5 → agno-1.7.7}/agno/tools/cartesia.py +0 -0
  372. {agno-1.7.5 → agno-1.7.7}/agno/tools/clickup_tool.py +0 -0
  373. {agno-1.7.5 → agno-1.7.7}/agno/tools/confluence.py +0 -0
  374. {agno-1.7.5 → agno-1.7.7}/agno/tools/crawl4ai.py +0 -0
  375. {agno-1.7.5 → agno-1.7.7}/agno/tools/csv_toolkit.py +0 -0
  376. {agno-1.7.5 → agno-1.7.7}/agno/tools/dalle.py +0 -0
  377. {agno-1.7.5 → agno-1.7.7}/agno/tools/decorator.py +0 -0
  378. {agno-1.7.5 → agno-1.7.7}/agno/tools/desi_vocal.py +0 -0
  379. {agno-1.7.5 → agno-1.7.7}/agno/tools/discord.py +0 -0
  380. {agno-1.7.5 → agno-1.7.7}/agno/tools/docker.py +0 -0
  381. {agno-1.7.5 → agno-1.7.7}/agno/tools/duckdb.py +0 -0
  382. {agno-1.7.5 → agno-1.7.7}/agno/tools/duckduckgo.py +0 -0
  383. {agno-1.7.5 → agno-1.7.7}/agno/tools/e2b.py +0 -0
  384. {agno-1.7.5 → agno-1.7.7}/agno/tools/eleven_labs.py +0 -0
  385. {agno-1.7.5 → agno-1.7.7}/agno/tools/email.py +0 -0
  386. {agno-1.7.5 → agno-1.7.7}/agno/tools/exa.py +0 -0
  387. {agno-1.7.5 → agno-1.7.7}/agno/tools/fal.py +0 -0
  388. {agno-1.7.5 → agno-1.7.7}/agno/tools/file.py +0 -0
  389. {agno-1.7.5 → agno-1.7.7}/agno/tools/financial_datasets.py +0 -0
  390. {agno-1.7.5 → agno-1.7.7}/agno/tools/firecrawl.py +0 -0
  391. {agno-1.7.5 → agno-1.7.7}/agno/tools/function.py +0 -0
  392. {agno-1.7.5 → agno-1.7.7}/agno/tools/giphy.py +0 -0
  393. {agno-1.7.5 → agno-1.7.7}/agno/tools/github.py +0 -0
  394. {agno-1.7.5 → agno-1.7.7}/agno/tools/gmail.py +0 -0
  395. {agno-1.7.5 → agno-1.7.7}/agno/tools/google_bigquery.py +0 -0
  396. {agno-1.7.5 → agno-1.7.7}/agno/tools/google_maps.py +0 -0
  397. {agno-1.7.5 → agno-1.7.7}/agno/tools/googlecalendar.py +0 -0
  398. {agno-1.7.5 → agno-1.7.7}/agno/tools/googlesearch.py +0 -0
  399. {agno-1.7.5 → agno-1.7.7}/agno/tools/googlesheets.py +0 -0
  400. {agno-1.7.5 → agno-1.7.7}/agno/tools/hackernews.py +0 -0
  401. {agno-1.7.5 → agno-1.7.7}/agno/tools/jira.py +0 -0
  402. {agno-1.7.5 → agno-1.7.7}/agno/tools/knowledge.py +0 -0
  403. {agno-1.7.5 → agno-1.7.7}/agno/tools/linear.py +0 -0
  404. {agno-1.7.5 → agno-1.7.7}/agno/tools/local_file_system.py +0 -0
  405. {agno-1.7.5 → agno-1.7.7}/agno/tools/lumalab.py +0 -0
  406. {agno-1.7.5 → agno-1.7.7}/agno/tools/mlx_transcribe.py +0 -0
  407. {agno-1.7.5 → agno-1.7.7}/agno/tools/models/__init__.py +0 -0
  408. {agno-1.7.5 → agno-1.7.7}/agno/tools/models/azure_openai.py +0 -0
  409. {agno-1.7.5 → agno-1.7.7}/agno/tools/models/gemini.py +0 -0
  410. {agno-1.7.5 → agno-1.7.7}/agno/tools/models/groq.py +0 -0
  411. {agno-1.7.5 → agno-1.7.7}/agno/tools/models/nebius.py +0 -0
  412. {agno-1.7.5 → agno-1.7.7}/agno/tools/models_labs.py +0 -0
  413. {agno-1.7.5 → agno-1.7.7}/agno/tools/moviepy_video.py +0 -0
  414. {agno-1.7.5 → agno-1.7.7}/agno/tools/newspaper.py +0 -0
  415. {agno-1.7.5 → agno-1.7.7}/agno/tools/newspaper4k.py +0 -0
  416. {agno-1.7.5 → agno-1.7.7}/agno/tools/openai.py +0 -0
  417. {agno-1.7.5 → agno-1.7.7}/agno/tools/openbb.py +0 -0
  418. {agno-1.7.5 → agno-1.7.7}/agno/tools/opencv.py +0 -0
  419. {agno-1.7.5 → agno-1.7.7}/agno/tools/openweather.py +0 -0
  420. {agno-1.7.5 → agno-1.7.7}/agno/tools/oxylabs.py +0 -0
  421. {agno-1.7.5 → agno-1.7.7}/agno/tools/pandas.py +0 -0
  422. {agno-1.7.5 → agno-1.7.7}/agno/tools/pubmed.py +0 -0
  423. {agno-1.7.5 → agno-1.7.7}/agno/tools/python.py +0 -0
  424. {agno-1.7.5 → agno-1.7.7}/agno/tools/reasoning.py +0 -0
  425. {agno-1.7.5 → agno-1.7.7}/agno/tools/reddit.py +0 -0
  426. {agno-1.7.5 → agno-1.7.7}/agno/tools/replicate.py +0 -0
  427. {agno-1.7.5 → agno-1.7.7}/agno/tools/resend.py +0 -0
  428. {agno-1.7.5 → agno-1.7.7}/agno/tools/scrapegraph.py +0 -0
  429. {agno-1.7.5 → agno-1.7.7}/agno/tools/searxng.py +0 -0
  430. {agno-1.7.5 → agno-1.7.7}/agno/tools/serpapi.py +0 -0
  431. {agno-1.7.5 → agno-1.7.7}/agno/tools/serper.py +0 -0
  432. {agno-1.7.5 → agno-1.7.7}/agno/tools/shell.py +0 -0
  433. {agno-1.7.5 → agno-1.7.7}/agno/tools/slack.py +0 -0
  434. {agno-1.7.5 → agno-1.7.7}/agno/tools/sleep.py +0 -0
  435. {agno-1.7.5 → agno-1.7.7}/agno/tools/spider.py +0 -0
  436. {agno-1.7.5 → agno-1.7.7}/agno/tools/sql.py +0 -0
  437. {agno-1.7.5 → agno-1.7.7}/agno/tools/streamlit/__init__.py +0 -0
  438. {agno-1.7.5 → agno-1.7.7}/agno/tools/streamlit/components.py +0 -0
  439. {agno-1.7.5 → agno-1.7.7}/agno/tools/tavily.py +0 -0
  440. {agno-1.7.5 → agno-1.7.7}/agno/tools/telegram.py +0 -0
  441. {agno-1.7.5 → agno-1.7.7}/agno/tools/thinking.py +0 -0
  442. {agno-1.7.5 → agno-1.7.7}/agno/tools/todoist.py +0 -0
  443. {agno-1.7.5 → agno-1.7.7}/agno/tools/tool_registry.py +0 -0
  444. {agno-1.7.5 → agno-1.7.7}/agno/tools/toolkit.py +0 -0
  445. {agno-1.7.5 → agno-1.7.7}/agno/tools/trello.py +0 -0
  446. {agno-1.7.5 → agno-1.7.7}/agno/tools/twilio.py +0 -0
  447. {agno-1.7.5 → agno-1.7.7}/agno/tools/user_control_flow.py +0 -0
  448. {agno-1.7.5 → agno-1.7.7}/agno/tools/valyu.py +0 -0
  449. {agno-1.7.5 → agno-1.7.7}/agno/tools/visualization.py +0 -0
  450. {agno-1.7.5 → agno-1.7.7}/agno/tools/webbrowser.py +0 -0
  451. {agno-1.7.5 → agno-1.7.7}/agno/tools/webex.py +0 -0
  452. {agno-1.7.5 → agno-1.7.7}/agno/tools/website.py +0 -0
  453. {agno-1.7.5 → agno-1.7.7}/agno/tools/webtools.py +0 -0
  454. {agno-1.7.5 → agno-1.7.7}/agno/tools/whatsapp.py +0 -0
  455. {agno-1.7.5 → agno-1.7.7}/agno/tools/wikipedia.py +0 -0
  456. {agno-1.7.5 → agno-1.7.7}/agno/tools/x.py +0 -0
  457. {agno-1.7.5 → agno-1.7.7}/agno/tools/yfinance.py +0 -0
  458. {agno-1.7.5 → agno-1.7.7}/agno/tools/youtube.py +0 -0
  459. {agno-1.7.5 → agno-1.7.7}/agno/tools/zendesk.py +0 -0
  460. {agno-1.7.5 → agno-1.7.7}/agno/tools/zoom.py +0 -0
  461. {agno-1.7.5 → agno-1.7.7}/agno/utils/__init__.py +0 -0
  462. {agno-1.7.5 → agno-1.7.7}/agno/utils/audio.py +0 -0
  463. {agno-1.7.5 → agno-1.7.7}/agno/utils/certs.py +0 -0
  464. {agno-1.7.5 → agno-1.7.7}/agno/utils/code_execution.py +0 -0
  465. {agno-1.7.5 → agno-1.7.7}/agno/utils/common.py +0 -0
  466. {agno-1.7.5 → agno-1.7.7}/agno/utils/defaults.py +0 -0
  467. {agno-1.7.5 → agno-1.7.7}/agno/utils/dttm.py +0 -0
  468. {agno-1.7.5 → agno-1.7.7}/agno/utils/enum.py +0 -0
  469. {agno-1.7.5 → agno-1.7.7}/agno/utils/env.py +0 -0
  470. {agno-1.7.5 → agno-1.7.7}/agno/utils/events.py +0 -0
  471. {agno-1.7.5 → agno-1.7.7}/agno/utils/filesystem.py +0 -0
  472. {agno-1.7.5 → agno-1.7.7}/agno/utils/format_str.py +0 -0
  473. {agno-1.7.5 → agno-1.7.7}/agno/utils/functions.py +0 -0
  474. {agno-1.7.5 → agno-1.7.7}/agno/utils/gemini.py +0 -0
  475. {agno-1.7.5 → agno-1.7.7}/agno/utils/git.py +0 -0
  476. {agno-1.7.5 → agno-1.7.7}/agno/utils/http.py +0 -0
  477. {agno-1.7.5 → agno-1.7.7}/agno/utils/json_io.py +0 -0
  478. {agno-1.7.5 → agno-1.7.7}/agno/utils/json_schema.py +0 -0
  479. {agno-1.7.5 → agno-1.7.7}/agno/utils/load_env.py +0 -0
  480. {agno-1.7.5 → agno-1.7.7}/agno/utils/location.py +0 -0
  481. {agno-1.7.5 → agno-1.7.7}/agno/utils/mcp.py +0 -0
  482. {agno-1.7.5 → agno-1.7.7}/agno/utils/media.py +0 -0
  483. {agno-1.7.5 → agno-1.7.7}/agno/utils/merge_dict.py +0 -0
  484. {agno-1.7.5 → agno-1.7.7}/agno/utils/message.py +0 -0
  485. {agno-1.7.5 → agno-1.7.7}/agno/utils/models/__init__.py +0 -0
  486. {agno-1.7.5 → agno-1.7.7}/agno/utils/models/ai_foundry.py +0 -0
  487. {agno-1.7.5 → agno-1.7.7}/agno/utils/models/aws_claude.py +0 -0
  488. {agno-1.7.5 → agno-1.7.7}/agno/utils/models/cohere.py +0 -0
  489. {agno-1.7.5 → agno-1.7.7}/agno/utils/models/llama.py +0 -0
  490. {agno-1.7.5 → agno-1.7.7}/agno/utils/models/mistral.py +0 -0
  491. {agno-1.7.5 → agno-1.7.7}/agno/utils/models/openai_responses.py +0 -0
  492. {agno-1.7.5 → agno-1.7.7}/agno/utils/models/schema_utils.py +0 -0
  493. {agno-1.7.5 → agno-1.7.7}/agno/utils/models/watsonx.py +0 -0
  494. {agno-1.7.5 → agno-1.7.7}/agno/utils/openai.py +0 -0
  495. {agno-1.7.5 → agno-1.7.7}/agno/utils/pickle.py +0 -0
  496. {agno-1.7.5 → agno-1.7.7}/agno/utils/pprint.py +0 -0
  497. {agno-1.7.5 → agno-1.7.7}/agno/utils/prompts.py +0 -0
  498. {agno-1.7.5 → agno-1.7.7}/agno/utils/py_io.py +0 -0
  499. {agno-1.7.5 → agno-1.7.7}/agno/utils/pyproject.py +0 -0
  500. {agno-1.7.5 → agno-1.7.7}/agno/utils/resource_filter.py +0 -0
  501. {agno-1.7.5 → agno-1.7.7}/agno/utils/response.py +0 -0
  502. {agno-1.7.5 → agno-1.7.7}/agno/utils/response_iterator.py +0 -0
  503. {agno-1.7.5 → agno-1.7.7}/agno/utils/safe_formatter.py +0 -0
  504. {agno-1.7.5 → agno-1.7.7}/agno/utils/shell.py +0 -0
  505. {agno-1.7.5 → agno-1.7.7}/agno/utils/timer.py +0 -0
  506. {agno-1.7.5 → agno-1.7.7}/agno/utils/tools.py +0 -0
  507. {agno-1.7.5 → agno-1.7.7}/agno/utils/web.py +0 -0
  508. {agno-1.7.5 → agno-1.7.7}/agno/utils/whatsapp.py +0 -0
  509. {agno-1.7.5 → agno-1.7.7}/agno/utils/yaml_io.py +0 -0
  510. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/__init__.py +0 -0
  511. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/base.py +0 -0
  512. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/cassandra/__init__.py +0 -0
  513. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/cassandra/cassandra.py +0 -0
  514. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  515. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/cassandra/index.py +0 -0
  516. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/chroma/__init__.py +0 -0
  517. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/chroma/chromadb.py +0 -0
  518. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/clickhouse/__init__.py +0 -0
  519. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  520. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/clickhouse/index.py +0 -0
  521. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/couchbase/__init__.py +0 -0
  522. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/couchbase/couchbase.py +0 -0
  523. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/distance.py +0 -0
  524. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/lancedb/__init__.py +0 -0
  525. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/lancedb/lance_db.py +0 -0
  526. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/milvus/__init__.py +0 -0
  527. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/milvus/milvus.py +0 -0
  528. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/mongodb/__init__.py +0 -0
  529. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/mongodb/mongodb.py +0 -0
  530. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/pgvector/__init__.py +0 -0
  531. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/pgvector/index.py +0 -0
  532. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/pineconedb/__init__.py +0 -0
  533. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  534. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/qdrant/__init__.py +0 -0
  535. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/qdrant/qdrant.py +0 -0
  536. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/search.py +0 -0
  537. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/singlestore/__init__.py +0 -0
  538. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/singlestore/index.py +0 -0
  539. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/singlestore/singlestore.py +0 -0
  540. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/surrealdb/__init__.py +0 -0
  541. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  542. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/upstashdb/__init__.py +0 -0
  543. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  544. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/weaviate/__init__.py +0 -0
  545. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/weaviate/index.py +0 -0
  546. {agno-1.7.5 → agno-1.7.7}/agno/vectordb/weaviate/weaviate.py +0 -0
  547. {agno-1.7.5 → agno-1.7.7}/agno/workflow/__init__.py +0 -0
  548. {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/__init__.py +0 -0
  549. {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/condition.py +0 -0
  550. {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/loop.py +0 -0
  551. {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/parallel.py +0 -0
  552. {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/router.py +0 -0
  553. {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/step.py +0 -0
  554. {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/steps.py +0 -0
  555. {agno-1.7.5 → agno-1.7.7}/agno/workflow/v2/types.py +0 -0
  556. {agno-1.7.5 → agno-1.7.7}/agno/workspace/__init__.py +0 -0
  557. {agno-1.7.5 → agno-1.7.7}/agno/workspace/config.py +0 -0
  558. {agno-1.7.5 → agno-1.7.7}/agno/workspace/enums.py +0 -0
  559. {agno-1.7.5 → agno-1.7.7}/agno/workspace/helpers.py +0 -0
  560. {agno-1.7.5 → agno-1.7.7}/agno/workspace/operator.py +0 -0
  561. {agno-1.7.5 → agno-1.7.7}/agno/workspace/settings.py +0 -0
  562. {agno-1.7.5 → agno-1.7.7}/agno.egg-info/dependency_links.txt +0 -0
  563. {agno-1.7.5 → agno-1.7.7}/agno.egg-info/entry_points.txt +0 -0
  564. {agno-1.7.5 → agno-1.7.7}/agno.egg-info/top_level.txt +0 -0
  565. {agno-1.7.5 → agno-1.7.7}/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.7
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.
@@ -421,7 +421,6 @@ Requires-Dist: types-pyyaml; extra == "dev"
421
421
  Requires-Dist: types-aiofiles; extra == "dev"
422
422
  Requires-Dist: fastapi; extra == "dev"
423
423
  Requires-Dist: uvicorn; extra == "dev"
424
- Requires-Dist: arxiv; extra == "dev"
425
424
  Provides-Extra: integration-tests
426
425
  Requires-Dist: exa_py; extra == "integration-tests"
427
426
  Requires-Dist: duckduckgo-search; extra == "integration-tests"
@@ -443,6 +442,9 @@ Requires-Dist: opentelemetry-exporter-otlp-proto-grpc; extra == "arize"
443
442
  Requires-Dist: opentelemetry-distro; extra == "arize"
444
443
  Provides-Extra: langfuse
445
444
  Requires-Dist: langfuse; extra == "langfuse"
445
+ Provides-Extra: aws-bedrock
446
+ Requires-Dist: boto3; extra == "aws-bedrock"
447
+ Requires-Dist: aioboto3; extra == "aws-bedrock"
446
448
  Provides-Extra: anthropic
447
449
  Requires-Dist: anthropic; extra == "anthropic"
448
450
  Provides-Extra: azure
@@ -472,10 +474,14 @@ Provides-Extra: ollama
472
474
  Requires-Dist: ollama; extra == "ollama"
473
475
  Provides-Extra: openai
474
476
  Requires-Dist: openai; extra == "openai"
477
+ Provides-Extra: portkey
478
+ Requires-Dist: portkey-ai; extra == "portkey"
475
479
  Provides-Extra: agentql
476
480
  Requires-Dist: agentql; extra == "agentql"
477
481
  Provides-Extra: apify
478
482
  Requires-Dist: apify-client; extra == "apify"
483
+ Provides-Extra: arxiv
484
+ Requires-Dist: arxiv; extra == "arxiv"
479
485
  Provides-Extra: brave
480
486
  Requires-Dist: brave-search; extra == "brave"
481
487
  Provides-Extra: browserbase
@@ -491,6 +497,8 @@ Provides-Extra: duckdb
491
497
  Requires-Dist: duckdb; extra == "duckdb"
492
498
  Provides-Extra: elevenlabs
493
499
  Requires-Dist: elevenlabs; extra == "elevenlabs"
500
+ Provides-Extra: evm
501
+ Requires-Dist: web3; extra == "evm"
494
502
  Provides-Extra: exa
495
503
  Requires-Dist: exa_py; extra == "exa"
496
504
  Provides-Extra: fal
@@ -521,6 +529,9 @@ Requires-Dist: newspaper4k; extra == "newspaper"
521
529
  Requires-Dist: lxml_html_clean; extra == "newspaper"
522
530
  Provides-Extra: opencv
523
531
  Requires-Dist: opencv-python; extra == "opencv"
532
+ Provides-Extra: psycopg
533
+ Requires-Dist: psycopg-binary; extra == "psycopg"
534
+ Requires-Dist: psycopg; extra == "psycopg"
524
535
  Provides-Extra: todoist
525
536
  Requires-Dist: todoist-api-python; extra == "todoist"
526
537
  Provides-Extra: valyu
@@ -533,13 +544,14 @@ Provides-Extra: youtube
533
544
  Requires-Dist: youtube_transcript_api; extra == "youtube"
534
545
  Provides-Extra: zep
535
546
  Requires-Dist: zep-cloud; extra == "zep"
547
+ Provides-Extra: daytona
548
+ Requires-Dist: daytona; extra == "daytona"
536
549
  Provides-Extra: oxylabs
537
550
  Requires-Dist: oxylabs; extra == "oxylabs"
538
551
  Provides-Extra: sql
539
552
  Requires-Dist: sqlalchemy; extra == "sql"
540
553
  Provides-Extra: postgres
541
554
  Requires-Dist: psycopg-binary; extra == "postgres"
542
- Requires-Dist: psycopg; extra == "postgres"
543
555
  Provides-Extra: sqlite
544
556
  Requires-Dist: sqlalchemy; extra == "sqlite"
545
557
  Provides-Extra: gcs
@@ -603,6 +615,7 @@ Provides-Extra: aws
603
615
  Requires-Dist: agno-aws; extra == "aws"
604
616
  Requires-Dist: agno-docker; extra == "aws"
605
617
  Provides-Extra: models
618
+ Requires-Dist: agno[aws-bedrock]; extra == "models"
606
619
  Requires-Dist: agno[anthropic]; extra == "models"
607
620
  Requires-Dist: agno[azure]; extra == "models"
608
621
  Requires-Dist: agno[cerebras]; extra == "models"
@@ -617,8 +630,10 @@ Requires-Dist: agno[meta]; extra == "models"
617
630
  Requires-Dist: agno[mistral]; extra == "models"
618
631
  Requires-Dist: agno[ollama]; extra == "models"
619
632
  Requires-Dist: agno[openai]; extra == "models"
633
+ Requires-Dist: agno[portkey]; extra == "models"
620
634
  Provides-Extra: tools
621
635
  Requires-Dist: agno[apify]; extra == "tools"
636
+ Requires-Dist: agno[arxiv]; extra == "tools"
622
637
  Requires-Dist: agno[brave]; extra == "tools"
623
638
  Requires-Dist: agno[exa]; extra == "tools"
624
639
  Requires-Dist: agno[cartesia]; extra == "tools"
@@ -634,6 +649,7 @@ Requires-Dist: agno[googlemaps]; extra == "tools"
634
649
  Requires-Dist: agno[todoist]; extra == "tools"
635
650
  Requires-Dist: agno[matplotlib]; extra == "tools"
636
651
  Requires-Dist: agno[elevenlabs]; extra == "tools"
652
+ Requires-Dist: agno[evm]; extra == "tools"
637
653
  Requires-Dist: agno[fal]; extra == "tools"
638
654
  Requires-Dist: agno[webex]; extra == "tools"
639
655
  Requires-Dist: agno[mcp]; extra == "tools"
@@ -646,6 +662,7 @@ Requires-Dist: agno[oxylabs]; extra == "tools"
646
662
  Requires-Dist: agno[zep]; extra == "tools"
647
663
  Requires-Dist: agno[mem0]; extra == "tools"
648
664
  Requires-Dist: agno[google_bigquery]; extra == "tools"
665
+ Requires-Dist: agno[psycopg]; extra == "tools"
649
666
  Provides-Extra: storage
650
667
  Requires-Dist: agno[sql]; extra == "storage"
651
668
  Requires-Dist: agno[postgres]; extra == "storage"
@@ -713,15 +713,6 @@ class Agent:
713
713
  if self.workflow_session_state is not None:
714
714
  self.workflow_session_state["current_user_id"] = user_id
715
715
 
716
- def _reset_session_state(self) -> None:
717
- """Reset the session state for the agent."""
718
- if self.team_session_state is not None:
719
- self.team_session_state.pop("current_session_id", None)
720
- self.team_session_state.pop("current_user_id", None)
721
- if self.session_state is not None:
722
- self.session_state.pop("current_session_id", None)
723
- self.session_state.pop("current_user_id", None)
724
-
725
716
  def _initialize_session(
726
717
  self,
727
718
  session_id: Optional[str] = None,
@@ -1162,8 +1153,6 @@ class Agent:
1162
1153
  )
1163
1154
  else:
1164
1155
  return self.run_response
1165
- finally:
1166
- self._reset_session_state()
1167
1156
 
1168
1157
  # If we get here, all retries failed
1169
1158
  if last_exception is not None:
@@ -1540,8 +1529,6 @@ class Agent:
1540
1529
  )
1541
1530
  else:
1542
1531
  return self.run_response
1543
- finally:
1544
- self._reset_session_state()
1545
1532
 
1546
1533
  # If we get here, all retries failed
1547
1534
  if last_exception is not None:
@@ -1797,8 +1784,6 @@ class Agent:
1797
1784
  return self.create_run_response(
1798
1785
  run_state=RunStatus.cancelled, content="Operation cancelled by user", run_response=run_response
1799
1786
  )
1800
- finally:
1801
- self._reset_session_state()
1802
1787
 
1803
1788
  # If we get here, all retries failed
1804
1789
  if last_exception is not None:
@@ -2196,8 +2181,6 @@ class Agent:
2196
2181
  return self.create_run_response(
2197
2182
  run_state=RunStatus.cancelled, content="Operation cancelled by user", run_response=run_response
2198
2183
  )
2199
- finally:
2200
- self._reset_session_state()
2201
2184
 
2202
2185
  # If we get here, all retries failed
2203
2186
  if last_exception is not None:
@@ -4369,7 +4352,6 @@ class Agent:
4369
4352
  # Format the system message with the session state variables
4370
4353
  if self.add_state_in_messages:
4371
4354
  sys_message_content = self.format_message_with_state_variables(sys_message_content)
4372
- print("HELLO", sys_message_content)
4373
4355
 
4374
4356
  # Add the JSON output prompt if response_model is provided and the model does not support native structured outputs or JSON schema outputs
4375
4357
  # or if use_json_mode is True
@@ -5300,6 +5282,8 @@ class Agent:
5300
5282
  """
5301
5283
  from agno.document import Document
5302
5284
 
5285
+ if num_documents is None and self.knowledge is not None:
5286
+ num_documents = self.knowledge.num_documents
5303
5287
  # Validate the filters against known valid filter keys
5304
5288
  if self.knowledge is not None:
5305
5289
  valid_filters, invalid_keys = self.knowledge.validate_filters(filters) # type: ignore
@@ -5339,9 +5323,6 @@ class Agent:
5339
5323
  ):
5340
5324
  return None
5341
5325
 
5342
- if num_documents is None:
5343
- num_documents = self.knowledge.num_documents
5344
-
5345
5326
  log_debug(f"Searching knowledge base with filters: {filters}")
5346
5327
  relevant_docs: List[Document] = self.knowledge.search(
5347
5328
  query=query, num_documents=num_documents, filters=filters
@@ -5362,6 +5343,9 @@ class Agent:
5362
5343
  """Get relevant documents from knowledge base asynchronously."""
5363
5344
  from agno.document import Document
5364
5345
 
5346
+ if num_documents is None and self.knowledge is not None:
5347
+ num_documents = self.knowledge.num_documents
5348
+
5365
5349
  # Validate the filters against known valid filter keys
5366
5350
  if self.knowledge is not None:
5367
5351
  valid_filters, invalid_keys = self.knowledge.validate_filters(filters) # type: ignore
@@ -5405,9 +5389,6 @@ class Agent:
5405
5389
  ):
5406
5390
  return None
5407
5391
 
5408
- if num_documents is None:
5409
- num_documents = self.knowledge.num_documents
5410
-
5411
5392
  log_debug(f"Searching knowledge base with filters: {filters}")
5412
5393
  relevant_docs: List[Document] = await self.knowledge.async_search(
5413
5394
  query=query, num_documents=num_documents, filters=filters
@@ -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:
@@ -1,5 +1,5 @@
1
1
  from os import getenv
2
- from typing import Any, Dict, List, Optional, Union
2
+ from typing import Any, Callable, Dict, List, Optional, Union
3
3
  from urllib.parse import quote
4
4
  from uuid import uuid4
5
5
 
@@ -110,13 +110,14 @@ class Playground:
110
110
  def get_async_router(self) -> APIRouter:
111
111
  return get_async_playground_router(self.agents, self.workflows, self.teams, self.app_id)
112
112
 
113
- def get_app(self, use_async: bool = True, prefix: str = "/v1") -> FastAPI:
113
+ def get_app(self, use_async: bool = True, prefix: str = "/v1", lifespan: Optional[Callable] = None) -> FastAPI:
114
114
  if not self.api_app:
115
115
  self.api_app = FastAPI(
116
116
  title=self.settings.title,
117
117
  docs_url="/docs" if self.settings.docs_enabled else None,
118
118
  redoc_url="/redoc" if self.settings.docs_enabled else None,
119
119
  openapi_url="/openapi.json" if self.settings.docs_enabled else None,
120
+ lifespan=lifespan,
120
121
  )
121
122
 
122
123
  if not self.api_app:
@@ -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
@@ -16,7 +16,7 @@ except ImportError:
16
16
  @dataclass
17
17
  class OpenAIEmbedder(Embedder):
18
18
  id: str = "text-embedding-3-small"
19
- dimensions: int = 1536
19
+ dimensions: Optional[int] = None
20
20
  encoding_format: Literal["float", "base64"] = "float"
21
21
  user: Optional[str] = None
22
22
  api_key: Optional[str] = None
@@ -26,6 +26,10 @@ class OpenAIEmbedder(Embedder):
26
26
  client_params: Optional[Dict[str, Any]] = None
27
27
  openai_client: Optional[OpenAIClient] = None
28
28
 
29
+ def __post_init__(self):
30
+ if self.dimensions is None:
31
+ self.dimensions = 3072 if self.id == "text-embedding-3-large" else 1536
32
+
29
33
  @property
30
34
  def client(self) -> OpenAIClient:
31
35
  if self.openai_client:
@@ -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
 
@@ -570,8 +570,16 @@ class Claude(Model):
570
570
  }
571
571
 
572
572
  elif isinstance(response, ContentBlockStopEvent):
573
+ # Handle completed thinking content
574
+ if response.content_block.type == "thinking": # type: ignore
575
+ model_response.thinking = response.content_block.thinking # type: ignore
576
+ # Store signature if available
577
+ if hasattr(response.content_block, "signature"): # type: ignore
578
+ model_response.provider_data = {
579
+ "signature": response.content_block.signature, # type: ignore
580
+ }
573
581
  # Handle tool calls
574
- if response.content_block.type == "tool_use": # type: ignore
582
+ elif response.content_block.type == "tool_use": # type: ignore
575
583
  tool_use = response.content_block # type: ignore
576
584
  tool_name = tool_use.name
577
585
  tool_input = tool_use.input