agno 1.7.3__tar.gz → 1.7.5__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 (555) hide show
  1. {agno-1.7.3 → agno-1.7.5}/PKG-INFO +4 -1
  2. {agno-1.7.3 → agno-1.7.5}/agno/agent/agent.py +113 -31
  3. {agno-1.7.3 → agno-1.7.5}/agno/api/schemas/agent.py +1 -0
  4. {agno-1.7.3 → agno-1.7.5}/agno/api/schemas/team.py +1 -0
  5. {agno-1.7.3 → agno-1.7.5}/agno/app/fastapi/app.py +1 -1
  6. {agno-1.7.3 → agno-1.7.5}/agno/app/fastapi/async_router.py +67 -16
  7. {agno-1.7.3 → agno-1.7.5}/agno/app/fastapi/sync_router.py +80 -14
  8. {agno-1.7.3 → agno-1.7.5}/agno/app/playground/app.py +2 -1
  9. {agno-1.7.3 → agno-1.7.5}/agno/app/playground/async_router.py +97 -28
  10. {agno-1.7.3 → agno-1.7.5}/agno/app/playground/operator.py +25 -19
  11. {agno-1.7.3 → agno-1.7.5}/agno/app/playground/schemas.py +1 -0
  12. {agno-1.7.3 → agno-1.7.5}/agno/app/playground/sync_router.py +93 -26
  13. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/agent.py +39 -2
  14. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/combined.py +1 -1
  15. {agno-1.7.3 → agno-1.7.5}/agno/run/base.py +2 -0
  16. {agno-1.7.3 → agno-1.7.5}/agno/run/response.py +4 -4
  17. {agno-1.7.3 → agno-1.7.5}/agno/run/team.py +6 -6
  18. agno-1.7.5/agno/run/v2/workflow.py +563 -0
  19. {agno-1.7.3 → agno-1.7.5}/agno/storage/base.py +4 -4
  20. {agno-1.7.3 → agno-1.7.5}/agno/storage/dynamodb.py +74 -10
  21. {agno-1.7.3 → agno-1.7.5}/agno/storage/firestore.py +6 -1
  22. {agno-1.7.3 → agno-1.7.5}/agno/storage/gcs_json.py +8 -2
  23. {agno-1.7.3 → agno-1.7.5}/agno/storage/json.py +20 -5
  24. {agno-1.7.3 → agno-1.7.5}/agno/storage/mongodb.py +14 -5
  25. {agno-1.7.3 → agno-1.7.5}/agno/storage/mysql.py +56 -17
  26. {agno-1.7.3 → agno-1.7.5}/agno/storage/postgres.py +55 -13
  27. {agno-1.7.3 → agno-1.7.5}/agno/storage/redis.py +25 -5
  28. {agno-1.7.3 → agno-1.7.5}/agno/storage/session/__init__.py +3 -1
  29. {agno-1.7.3 → agno-1.7.5}/agno/storage/session/agent.py +3 -0
  30. {agno-1.7.3 → agno-1.7.5}/agno/storage/session/team.py +3 -0
  31. agno-1.7.5/agno/storage/session/v2/__init__.py +5 -0
  32. agno-1.7.5/agno/storage/session/v2/workflow.py +89 -0
  33. {agno-1.7.3 → agno-1.7.5}/agno/storage/singlestore.py +74 -12
  34. {agno-1.7.3 → agno-1.7.5}/agno/storage/sqlite.py +64 -18
  35. {agno-1.7.3 → agno-1.7.5}/agno/storage/yaml.py +26 -6
  36. {agno-1.7.3 → agno-1.7.5}/agno/team/team.py +105 -21
  37. {agno-1.7.3 → agno-1.7.5}/agno/tools/decorator.py +45 -2
  38. {agno-1.7.3 → agno-1.7.5}/agno/tools/function.py +16 -12
  39. {agno-1.7.3 → agno-1.7.5}/agno/utils/log.py +12 -0
  40. {agno-1.7.3 → agno-1.7.5}/agno/utils/message.py +5 -1
  41. {agno-1.7.3 → agno-1.7.5}/agno/utils/openai.py +20 -5
  42. {agno-1.7.3 → agno-1.7.5}/agno/utils/pprint.py +34 -8
  43. agno-1.7.5/agno/vectordb/surrealdb/__init__.py +3 -0
  44. agno-1.7.5/agno/vectordb/surrealdb/surrealdb.py +493 -0
  45. agno-1.7.5/agno/workflow/v2/__init__.py +21 -0
  46. agno-1.7.5/agno/workflow/v2/condition.py +554 -0
  47. agno-1.7.5/agno/workflow/v2/loop.py +602 -0
  48. agno-1.7.5/agno/workflow/v2/parallel.py +659 -0
  49. agno-1.7.5/agno/workflow/v2/router.py +521 -0
  50. agno-1.7.5/agno/workflow/v2/step.py +861 -0
  51. agno-1.7.5/agno/workflow/v2/steps.py +465 -0
  52. agno-1.7.5/agno/workflow/v2/types.py +347 -0
  53. agno-1.7.5/agno/workflow/v2/workflow.py +3132 -0
  54. agno-1.7.5/agno/workspace/__init__.py +0 -0
  55. {agno-1.7.3 → agno-1.7.5}/agno.egg-info/PKG-INFO +4 -1
  56. {agno-1.7.3 → agno-1.7.5}/agno.egg-info/SOURCES.txt +15 -0
  57. {agno-1.7.3 → agno-1.7.5}/agno.egg-info/requires.txt +4 -0
  58. {agno-1.7.3 → agno-1.7.5}/pyproject.toml +6 -3
  59. {agno-1.7.3 → agno-1.7.5}/LICENSE +0 -0
  60. {agno-1.7.3 → agno-1.7.5}/README.md +0 -0
  61. {agno-1.7.3 → agno-1.7.5}/agno/__init__.py +0 -0
  62. {agno-1.7.3 → agno-1.7.5}/agno/agent/__init__.py +0 -0
  63. {agno-1.7.3 → agno-1.7.5}/agno/agent/metrics.py +0 -0
  64. {agno-1.7.3 → agno-1.7.5}/agno/api/__init__.py +0 -0
  65. {agno-1.7.3 → agno-1.7.5}/agno/api/agent.py +0 -0
  66. {agno-1.7.3 → agno-1.7.5}/agno/api/api.py +0 -0
  67. {agno-1.7.3 → agno-1.7.5}/agno/api/app.py +0 -0
  68. {agno-1.7.3 → agno-1.7.5}/agno/api/evals.py +0 -0
  69. {agno-1.7.3 → agno-1.7.5}/agno/api/playground.py +0 -0
  70. {agno-1.7.3 → agno-1.7.5}/agno/api/routes.py +0 -0
  71. {agno-1.7.3 → agno-1.7.5}/agno/api/schemas/__init__.py +0 -0
  72. {agno-1.7.3 → agno-1.7.5}/agno/api/schemas/app.py +0 -0
  73. {agno-1.7.3 → agno-1.7.5}/agno/api/schemas/evals.py +0 -0
  74. {agno-1.7.3 → agno-1.7.5}/agno/api/schemas/playground.py +0 -0
  75. {agno-1.7.3 → agno-1.7.5}/agno/api/schemas/response.py +0 -0
  76. {agno-1.7.3 → agno-1.7.5}/agno/api/schemas/user.py +0 -0
  77. {agno-1.7.3 → agno-1.7.5}/agno/api/schemas/workflows.py +0 -0
  78. {agno-1.7.3 → agno-1.7.5}/agno/api/schemas/workspace.py +0 -0
  79. {agno-1.7.3 → agno-1.7.5}/agno/api/team.py +0 -0
  80. {agno-1.7.3 → agno-1.7.5}/agno/api/user.py +0 -0
  81. {agno-1.7.3 → agno-1.7.5}/agno/api/workflows.py +0 -0
  82. {agno-1.7.3 → agno-1.7.5}/agno/api/workspace.py +0 -0
  83. {agno-1.7.3 → agno-1.7.5}/agno/app/__init__.py +0 -0
  84. {agno-1.7.3 → agno-1.7.5}/agno/app/agui/__init__.py +0 -0
  85. {agno-1.7.3 → agno-1.7.5}/agno/app/agui/app.py +0 -0
  86. {agno-1.7.3 → agno-1.7.5}/agno/app/agui/async_router.py +0 -0
  87. {agno-1.7.3 → agno-1.7.5}/agno/app/agui/sync_router.py +0 -0
  88. {agno-1.7.3 → agno-1.7.5}/agno/app/agui/utils.py +0 -0
  89. {agno-1.7.3 → agno-1.7.5}/agno/app/base.py +0 -0
  90. {agno-1.7.3 → agno-1.7.5}/agno/app/discord/__init__.py +0 -0
  91. {agno-1.7.3 → agno-1.7.5}/agno/app/discord/client.py +0 -0
  92. {agno-1.7.3 → agno-1.7.5}/agno/app/fastapi/__init__.py +0 -0
  93. {agno-1.7.3 → agno-1.7.5}/agno/app/playground/__init__.py +0 -0
  94. {agno-1.7.3 → agno-1.7.5}/agno/app/playground/deploy.py +0 -0
  95. {agno-1.7.3 → agno-1.7.5}/agno/app/playground/serve.py +0 -0
  96. {agno-1.7.3 → agno-1.7.5}/agno/app/playground/settings.py +0 -0
  97. {agno-1.7.3 → agno-1.7.5}/agno/app/playground/utils.py +0 -0
  98. {agno-1.7.3 → agno-1.7.5}/agno/app/settings.py +0 -0
  99. {agno-1.7.3 → agno-1.7.5}/agno/app/slack/__init__.py +0 -0
  100. {agno-1.7.3 → agno-1.7.5}/agno/app/slack/app.py +0 -0
  101. {agno-1.7.3 → agno-1.7.5}/agno/app/slack/async_router.py +0 -0
  102. {agno-1.7.3 → agno-1.7.5}/agno/app/slack/security.py +0 -0
  103. {agno-1.7.3 → agno-1.7.5}/agno/app/slack/sync_router.py +0 -0
  104. {agno-1.7.3 → agno-1.7.5}/agno/app/utils.py +0 -0
  105. {agno-1.7.3 → agno-1.7.5}/agno/app/whatsapp/__init__.py +0 -0
  106. {agno-1.7.3 → agno-1.7.5}/agno/app/whatsapp/app.py +0 -0
  107. {agno-1.7.3 → agno-1.7.5}/agno/app/whatsapp/async_router.py +0 -0
  108. {agno-1.7.3 → agno-1.7.5}/agno/app/whatsapp/security.py +0 -0
  109. {agno-1.7.3 → agno-1.7.5}/agno/app/whatsapp/sync_router.py +0 -0
  110. {agno-1.7.3 → agno-1.7.5}/agno/cli/__init__.py +0 -0
  111. {agno-1.7.3 → agno-1.7.5}/agno/cli/auth_server.py +0 -0
  112. {agno-1.7.3 → agno-1.7.5}/agno/cli/config.py +0 -0
  113. {agno-1.7.3 → agno-1.7.5}/agno/cli/console.py +0 -0
  114. {agno-1.7.3 → agno-1.7.5}/agno/cli/credentials.py +0 -0
  115. {agno-1.7.3 → agno-1.7.5}/agno/cli/entrypoint.py +0 -0
  116. {agno-1.7.3 → agno-1.7.5}/agno/cli/operator.py +0 -0
  117. {agno-1.7.3 → agno-1.7.5}/agno/cli/settings.py +0 -0
  118. {agno-1.7.3 → agno-1.7.5}/agno/cli/ws/__init__.py +0 -0
  119. {agno-1.7.3 → agno-1.7.5}/agno/cli/ws/ws_cli.py +0 -0
  120. {agno-1.7.3 → agno-1.7.5}/agno/constants.py +0 -0
  121. {agno-1.7.3 → agno-1.7.5}/agno/debug.py +0 -0
  122. {agno-1.7.3 → agno-1.7.5}/agno/document/__init__.py +0 -0
  123. {agno-1.7.3 → agno-1.7.5}/agno/document/base.py +0 -0
  124. {agno-1.7.3 → agno-1.7.5}/agno/document/chunking/__init__.py +0 -0
  125. {agno-1.7.3 → agno-1.7.5}/agno/document/chunking/agentic.py +0 -0
  126. {agno-1.7.3 → agno-1.7.5}/agno/document/chunking/document.py +0 -0
  127. {agno-1.7.3 → agno-1.7.5}/agno/document/chunking/fixed.py +0 -0
  128. {agno-1.7.3 → agno-1.7.5}/agno/document/chunking/markdown.py +0 -0
  129. {agno-1.7.3 → agno-1.7.5}/agno/document/chunking/recursive.py +0 -0
  130. {agno-1.7.3 → agno-1.7.5}/agno/document/chunking/semantic.py +0 -0
  131. {agno-1.7.3 → agno-1.7.5}/agno/document/chunking/strategy.py +0 -0
  132. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/__init__.py +0 -0
  133. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/arxiv_reader.py +0 -0
  134. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/base.py +0 -0
  135. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/csv_reader.py +0 -0
  136. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/docx_reader.py +0 -0
  137. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/firecrawl_reader.py +0 -0
  138. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/gcs/__init__.py +0 -0
  139. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/gcs/pdf_reader.py +0 -0
  140. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/json_reader.py +0 -0
  141. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/markdown_reader.py +0 -0
  142. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/pdf_reader.py +0 -0
  143. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/s3/__init__.py +0 -0
  144. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/s3/pdf_reader.py +0 -0
  145. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/s3/text_reader.py +0 -0
  146. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/text_reader.py +0 -0
  147. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/url_reader.py +0 -0
  148. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/website_reader.py +0 -0
  149. {agno-1.7.3 → agno-1.7.5}/agno/document/reader/youtube_reader.py +0 -0
  150. {agno-1.7.3 → agno-1.7.5}/agno/embedder/__init__.py +0 -0
  151. {agno-1.7.3 → agno-1.7.5}/agno/embedder/aws_bedrock.py +0 -0
  152. {agno-1.7.3 → agno-1.7.5}/agno/embedder/azure_openai.py +0 -0
  153. {agno-1.7.3 → agno-1.7.5}/agno/embedder/base.py +0 -0
  154. {agno-1.7.3 → agno-1.7.5}/agno/embedder/cohere.py +0 -0
  155. {agno-1.7.3 → agno-1.7.5}/agno/embedder/fastembed.py +0 -0
  156. {agno-1.7.3 → agno-1.7.5}/agno/embedder/fireworks.py +0 -0
  157. {agno-1.7.3 → agno-1.7.5}/agno/embedder/google.py +0 -0
  158. {agno-1.7.3 → agno-1.7.5}/agno/embedder/huggingface.py +0 -0
  159. {agno-1.7.3 → agno-1.7.5}/agno/embedder/langdb.py +0 -0
  160. {agno-1.7.3 → agno-1.7.5}/agno/embedder/mistral.py +0 -0
  161. {agno-1.7.3 → agno-1.7.5}/agno/embedder/nebius.py +0 -0
  162. {agno-1.7.3 → agno-1.7.5}/agno/embedder/ollama.py +0 -0
  163. {agno-1.7.3 → agno-1.7.5}/agno/embedder/openai.py +0 -0
  164. {agno-1.7.3 → agno-1.7.5}/agno/embedder/sentence_transformer.py +0 -0
  165. {agno-1.7.3 → agno-1.7.5}/agno/embedder/together.py +0 -0
  166. {agno-1.7.3 → agno-1.7.5}/agno/embedder/voyageai.py +0 -0
  167. {agno-1.7.3 → agno-1.7.5}/agno/eval/__init__.py +0 -0
  168. {agno-1.7.3 → agno-1.7.5}/agno/eval/accuracy.py +0 -0
  169. {agno-1.7.3 → agno-1.7.5}/agno/eval/performance.py +0 -0
  170. {agno-1.7.3 → agno-1.7.5}/agno/eval/reliability.py +0 -0
  171. {agno-1.7.3 → agno-1.7.5}/agno/eval/utils.py +0 -0
  172. {agno-1.7.3 → agno-1.7.5}/agno/exceptions.py +0 -0
  173. {agno-1.7.3 → agno-1.7.5}/agno/file/__init__.py +0 -0
  174. {agno-1.7.3 → agno-1.7.5}/agno/file/file.py +0 -0
  175. {agno-1.7.3 → agno-1.7.5}/agno/file/local/__init__.py +0 -0
  176. {agno-1.7.3 → agno-1.7.5}/agno/file/local/csv.py +0 -0
  177. {agno-1.7.3 → agno-1.7.5}/agno/file/local/txt.py +0 -0
  178. {agno-1.7.3 → agno-1.7.5}/agno/infra/__init__.py +0 -0
  179. {agno-1.7.3 → agno-1.7.5}/agno/infra/app.py +0 -0
  180. {agno-1.7.3 → agno-1.7.5}/agno/infra/base.py +0 -0
  181. {agno-1.7.3 → agno-1.7.5}/agno/infra/context.py +0 -0
  182. {agno-1.7.3 → agno-1.7.5}/agno/infra/db_app.py +0 -0
  183. {agno-1.7.3 → agno-1.7.5}/agno/infra/resource.py +0 -0
  184. {agno-1.7.3 → agno-1.7.5}/agno/infra/resources.py +0 -0
  185. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/__init__.py +0 -0
  186. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/arxiv.py +0 -0
  187. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/csv.py +0 -0
  188. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/csv_url.py +0 -0
  189. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/document.py +0 -0
  190. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/docx.py +0 -0
  191. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/firecrawl.py +0 -0
  192. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/gcs/__init__.py +0 -0
  193. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/gcs/base.py +0 -0
  194. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/gcs/pdf.py +0 -0
  195. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/json.py +0 -0
  196. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/langchain.py +0 -0
  197. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/light_rag.py +0 -0
  198. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/llamaindex.py +0 -0
  199. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/markdown.py +0 -0
  200. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/pdf.py +0 -0
  201. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/pdf_bytes.py +0 -0
  202. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/pdf_url.py +0 -0
  203. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/s3/__init__.py +0 -0
  204. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/s3/base.py +0 -0
  205. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/s3/pdf.py +0 -0
  206. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/s3/text.py +0 -0
  207. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/text.py +0 -0
  208. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/url.py +0 -0
  209. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/website.py +0 -0
  210. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/wikipedia.py +0 -0
  211. {agno-1.7.3 → agno-1.7.5}/agno/knowledge/youtube.py +0 -0
  212. {agno-1.7.3 → agno-1.7.5}/agno/media.py +0 -0
  213. {agno-1.7.3 → agno-1.7.5}/agno/memory/__init__.py +0 -0
  214. {agno-1.7.3 → agno-1.7.5}/agno/memory/agent.py +0 -0
  215. {agno-1.7.3 → agno-1.7.5}/agno/memory/classifier.py +0 -0
  216. {agno-1.7.3 → agno-1.7.5}/agno/memory/db/__init__.py +0 -0
  217. {agno-1.7.3 → agno-1.7.5}/agno/memory/db/base.py +0 -0
  218. {agno-1.7.3 → agno-1.7.5}/agno/memory/db/mongodb.py +0 -0
  219. {agno-1.7.3 → agno-1.7.5}/agno/memory/db/postgres.py +0 -0
  220. {agno-1.7.3 → agno-1.7.5}/agno/memory/db/sqlite.py +0 -0
  221. {agno-1.7.3 → agno-1.7.5}/agno/memory/manager.py +0 -0
  222. {agno-1.7.3 → agno-1.7.5}/agno/memory/memory.py +0 -0
  223. {agno-1.7.3 → agno-1.7.5}/agno/memory/row.py +0 -0
  224. {agno-1.7.3 → agno-1.7.5}/agno/memory/summarizer.py +0 -0
  225. {agno-1.7.3 → agno-1.7.5}/agno/memory/summary.py +0 -0
  226. {agno-1.7.3 → agno-1.7.5}/agno/memory/team.py +0 -0
  227. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/__init__.py +0 -0
  228. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/db/__init__.py +0 -0
  229. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/db/base.py +0 -0
  230. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/db/firestore.py +0 -0
  231. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/db/mongodb.py +0 -0
  232. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/db/postgres.py +0 -0
  233. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/db/redis.py +0 -0
  234. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/db/schema.py +0 -0
  235. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/db/sqlite.py +0 -0
  236. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/manager.py +0 -0
  237. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/memory.py +0 -0
  238. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/schema.py +0 -0
  239. {agno-1.7.3 → agno-1.7.5}/agno/memory/v2/summarizer.py +0 -0
  240. {agno-1.7.3 → agno-1.7.5}/agno/memory/workflow.py +0 -0
  241. {agno-1.7.3 → agno-1.7.5}/agno/models/__init__.py +0 -0
  242. {agno-1.7.3 → agno-1.7.5}/agno/models/aimlapi/__init__.py +0 -0
  243. {agno-1.7.3 → agno-1.7.5}/agno/models/aimlapi/aimlapi.py +0 -0
  244. {agno-1.7.3 → agno-1.7.5}/agno/models/anthropic/__init__.py +0 -0
  245. {agno-1.7.3 → agno-1.7.5}/agno/models/anthropic/claude.py +0 -0
  246. {agno-1.7.3 → agno-1.7.5}/agno/models/aws/__init__.py +0 -0
  247. {agno-1.7.3 → agno-1.7.5}/agno/models/aws/bedrock.py +0 -0
  248. {agno-1.7.3 → agno-1.7.5}/agno/models/aws/claude.py +0 -0
  249. {agno-1.7.3 → agno-1.7.5}/agno/models/azure/__init__.py +0 -0
  250. {agno-1.7.3 → agno-1.7.5}/agno/models/azure/ai_foundry.py +0 -0
  251. {agno-1.7.3 → agno-1.7.5}/agno/models/azure/openai_chat.py +0 -0
  252. {agno-1.7.3 → agno-1.7.5}/agno/models/base.py +0 -0
  253. {agno-1.7.3 → agno-1.7.5}/agno/models/cerebras/__init__.py +0 -0
  254. {agno-1.7.3 → agno-1.7.5}/agno/models/cerebras/cerebras.py +0 -0
  255. {agno-1.7.3 → agno-1.7.5}/agno/models/cerebras/cerebras_openai.py +0 -0
  256. {agno-1.7.3 → agno-1.7.5}/agno/models/cohere/__init__.py +0 -0
  257. {agno-1.7.3 → agno-1.7.5}/agno/models/cohere/chat.py +0 -0
  258. {agno-1.7.3 → agno-1.7.5}/agno/models/deepinfra/__init__.py +0 -0
  259. {agno-1.7.3 → agno-1.7.5}/agno/models/deepinfra/deepinfra.py +0 -0
  260. {agno-1.7.3 → agno-1.7.5}/agno/models/deepseek/__init__.py +0 -0
  261. {agno-1.7.3 → agno-1.7.5}/agno/models/deepseek/deepseek.py +0 -0
  262. {agno-1.7.3 → agno-1.7.5}/agno/models/defaults.py +0 -0
  263. {agno-1.7.3 → agno-1.7.5}/agno/models/fireworks/__init__.py +0 -0
  264. {agno-1.7.3 → agno-1.7.5}/agno/models/fireworks/fireworks.py +0 -0
  265. {agno-1.7.3 → agno-1.7.5}/agno/models/google/__init__.py +0 -0
  266. {agno-1.7.3 → agno-1.7.5}/agno/models/google/gemini.py +0 -0
  267. {agno-1.7.3 → agno-1.7.5}/agno/models/groq/__init__.py +0 -0
  268. {agno-1.7.3 → agno-1.7.5}/agno/models/groq/groq.py +0 -0
  269. {agno-1.7.3 → agno-1.7.5}/agno/models/huggingface/__init__.py +0 -0
  270. {agno-1.7.3 → agno-1.7.5}/agno/models/huggingface/huggingface.py +0 -0
  271. {agno-1.7.3 → agno-1.7.5}/agno/models/ibm/__init__.py +0 -0
  272. {agno-1.7.3 → agno-1.7.5}/agno/models/ibm/watsonx.py +0 -0
  273. {agno-1.7.3 → agno-1.7.5}/agno/models/internlm/__init__.py +0 -0
  274. {agno-1.7.3 → agno-1.7.5}/agno/models/internlm/internlm.py +0 -0
  275. {agno-1.7.3 → agno-1.7.5}/agno/models/langdb/__init__.py +0 -0
  276. {agno-1.7.3 → agno-1.7.5}/agno/models/langdb/langdb.py +0 -0
  277. {agno-1.7.3 → agno-1.7.5}/agno/models/litellm/__init__.py +0 -0
  278. {agno-1.7.3 → agno-1.7.5}/agno/models/litellm/chat.py +0 -0
  279. {agno-1.7.3 → agno-1.7.5}/agno/models/litellm/litellm_openai.py +0 -0
  280. {agno-1.7.3 → agno-1.7.5}/agno/models/lmstudio/__init__.py +0 -0
  281. {agno-1.7.3 → agno-1.7.5}/agno/models/lmstudio/lmstudio.py +0 -0
  282. {agno-1.7.3 → agno-1.7.5}/agno/models/message.py +0 -0
  283. {agno-1.7.3 → agno-1.7.5}/agno/models/meta/__init__.py +0 -0
  284. {agno-1.7.3 → agno-1.7.5}/agno/models/meta/llama.py +0 -0
  285. {agno-1.7.3 → agno-1.7.5}/agno/models/meta/llama_openai.py +0 -0
  286. {agno-1.7.3 → agno-1.7.5}/agno/models/mistral/__init__.py +0 -0
  287. {agno-1.7.3 → agno-1.7.5}/agno/models/mistral/mistral.py +0 -0
  288. {agno-1.7.3 → agno-1.7.5}/agno/models/nebius/__init__.py +0 -0
  289. {agno-1.7.3 → agno-1.7.5}/agno/models/nebius/nebius.py +0 -0
  290. {agno-1.7.3 → agno-1.7.5}/agno/models/nvidia/__init__.py +0 -0
  291. {agno-1.7.3 → agno-1.7.5}/agno/models/nvidia/nvidia.py +0 -0
  292. {agno-1.7.3 → agno-1.7.5}/agno/models/ollama/__init__.py +0 -0
  293. {agno-1.7.3 → agno-1.7.5}/agno/models/ollama/chat.py +0 -0
  294. {agno-1.7.3 → agno-1.7.5}/agno/models/ollama/tools.py +0 -0
  295. {agno-1.7.3 → agno-1.7.5}/agno/models/openai/__init__.py +0 -0
  296. {agno-1.7.3 → agno-1.7.5}/agno/models/openai/chat.py +0 -0
  297. {agno-1.7.3 → agno-1.7.5}/agno/models/openai/like.py +0 -0
  298. {agno-1.7.3 → agno-1.7.5}/agno/models/openai/responses.py +0 -0
  299. {agno-1.7.3 → agno-1.7.5}/agno/models/openrouter/__init__.py +0 -0
  300. {agno-1.7.3 → agno-1.7.5}/agno/models/openrouter/openrouter.py +0 -0
  301. {agno-1.7.3 → agno-1.7.5}/agno/models/perplexity/__init__.py +0 -0
  302. {agno-1.7.3 → agno-1.7.5}/agno/models/perplexity/perplexity.py +0 -0
  303. {agno-1.7.3 → agno-1.7.5}/agno/models/response.py +0 -0
  304. {agno-1.7.3 → agno-1.7.5}/agno/models/sambanova/__init__.py +0 -0
  305. {agno-1.7.3 → agno-1.7.5}/agno/models/sambanova/sambanova.py +0 -0
  306. {agno-1.7.3 → agno-1.7.5}/agno/models/together/__init__.py +0 -0
  307. {agno-1.7.3 → agno-1.7.5}/agno/models/together/together.py +0 -0
  308. {agno-1.7.3 → agno-1.7.5}/agno/models/vercel/__init__.py +0 -0
  309. {agno-1.7.3 → agno-1.7.5}/agno/models/vercel/v0.py +0 -0
  310. {agno-1.7.3 → agno-1.7.5}/agno/models/vllm/__init__.py +0 -0
  311. {agno-1.7.3 → agno-1.7.5}/agno/models/vllm/vllm.py +0 -0
  312. {agno-1.7.3 → agno-1.7.5}/agno/models/xai/__init__.py +0 -0
  313. {agno-1.7.3 → agno-1.7.5}/agno/models/xai/xai.py +0 -0
  314. {agno-1.7.3 → agno-1.7.5}/agno/playground/__init__.py +0 -0
  315. {agno-1.7.3 → agno-1.7.5}/agno/playground/deploy.py +0 -0
  316. {agno-1.7.3 → agno-1.7.5}/agno/playground/playground.py +0 -0
  317. {agno-1.7.3 → agno-1.7.5}/agno/playground/serve.py +0 -0
  318. {agno-1.7.3 → agno-1.7.5}/agno/playground/settings.py +0 -0
  319. {agno-1.7.3 → agno-1.7.5}/agno/py.typed +0 -0
  320. {agno-1.7.3 → agno-1.7.5}/agno/reasoning/__init__.py +0 -0
  321. {agno-1.7.3 → agno-1.7.5}/agno/reasoning/azure_ai_foundry.py +0 -0
  322. {agno-1.7.3 → agno-1.7.5}/agno/reasoning/deepseek.py +0 -0
  323. {agno-1.7.3 → agno-1.7.5}/agno/reasoning/default.py +0 -0
  324. {agno-1.7.3 → agno-1.7.5}/agno/reasoning/groq.py +0 -0
  325. {agno-1.7.3 → agno-1.7.5}/agno/reasoning/helpers.py +0 -0
  326. {agno-1.7.3 → agno-1.7.5}/agno/reasoning/ollama.py +0 -0
  327. {agno-1.7.3 → agno-1.7.5}/agno/reasoning/openai.py +0 -0
  328. {agno-1.7.3 → agno-1.7.5}/agno/reasoning/step.py +0 -0
  329. {agno-1.7.3 → agno-1.7.5}/agno/reranker/__init__.py +0 -0
  330. {agno-1.7.3 → agno-1.7.5}/agno/reranker/base.py +0 -0
  331. {agno-1.7.3 → agno-1.7.5}/agno/reranker/cohere.py +0 -0
  332. {agno-1.7.3 → agno-1.7.5}/agno/reranker/infinity.py +0 -0
  333. {agno-1.7.3 → agno-1.7.5}/agno/reranker/sentence_transformer.py +0 -0
  334. {agno-1.7.3 → agno-1.7.5}/agno/run/__init__.py +0 -0
  335. {agno-1.7.3 → agno-1.7.5}/agno/run/messages.py +0 -0
  336. {agno-1.7.3/agno/storage → agno-1.7.5/agno/run/v2}/__init__.py +0 -0
  337. {agno-1.7.3 → agno-1.7.5}/agno/run/workflow.py +0 -0
  338. {agno-1.7.3/agno/storage/agent → agno-1.7.5/agno/storage}/__init__.py +0 -0
  339. {agno-1.7.3/agno/storage/workflow → agno-1.7.5/agno/storage/agent}/__init__.py +0 -0
  340. {agno-1.7.3 → agno-1.7.5}/agno/storage/agent/dynamodb.py +0 -0
  341. {agno-1.7.3 → agno-1.7.5}/agno/storage/agent/json.py +0 -0
  342. {agno-1.7.3 → agno-1.7.5}/agno/storage/agent/mongodb.py +0 -0
  343. {agno-1.7.3 → agno-1.7.5}/agno/storage/agent/postgres.py +0 -0
  344. {agno-1.7.3 → agno-1.7.5}/agno/storage/agent/singlestore.py +0 -0
  345. {agno-1.7.3 → agno-1.7.5}/agno/storage/agent/sqlite.py +0 -0
  346. {agno-1.7.3 → agno-1.7.5}/agno/storage/agent/yaml.py +0 -0
  347. {agno-1.7.3 → agno-1.7.5}/agno/storage/session/workflow.py +0 -0
  348. {agno-1.7.3/agno/tools/models → agno-1.7.5/agno/storage/workflow}/__init__.py +0 -0
  349. {agno-1.7.3 → agno-1.7.5}/agno/storage/workflow/mongodb.py +0 -0
  350. {agno-1.7.3 → agno-1.7.5}/agno/storage/workflow/postgres.py +0 -0
  351. {agno-1.7.3 → agno-1.7.5}/agno/storage/workflow/sqlite.py +0 -0
  352. {agno-1.7.3 → agno-1.7.5}/agno/team/__init__.py +0 -0
  353. {agno-1.7.3 → agno-1.7.5}/agno/tools/__init__.py +0 -0
  354. {agno-1.7.3 → agno-1.7.5}/agno/tools/agentql.py +0 -0
  355. {agno-1.7.3 → agno-1.7.5}/agno/tools/airflow.py +0 -0
  356. {agno-1.7.3 → agno-1.7.5}/agno/tools/api.py +0 -0
  357. {agno-1.7.3 → agno-1.7.5}/agno/tools/apify.py +0 -0
  358. {agno-1.7.3 → agno-1.7.5}/agno/tools/arxiv.py +0 -0
  359. {agno-1.7.3 → agno-1.7.5}/agno/tools/aws_lambda.py +0 -0
  360. {agno-1.7.3 → agno-1.7.5}/agno/tools/aws_ses.py +0 -0
  361. {agno-1.7.3 → agno-1.7.5}/agno/tools/baidusearch.py +0 -0
  362. {agno-1.7.3 → agno-1.7.5}/agno/tools/bravesearch.py +0 -0
  363. {agno-1.7.3 → agno-1.7.5}/agno/tools/brightdata.py +0 -0
  364. {agno-1.7.3 → agno-1.7.5}/agno/tools/browserbase.py +0 -0
  365. {agno-1.7.3 → agno-1.7.5}/agno/tools/calcom.py +0 -0
  366. {agno-1.7.3 → agno-1.7.5}/agno/tools/calculator.py +0 -0
  367. {agno-1.7.3 → agno-1.7.5}/agno/tools/cartesia.py +0 -0
  368. {agno-1.7.3 → agno-1.7.5}/agno/tools/clickup_tool.py +0 -0
  369. {agno-1.7.3 → agno-1.7.5}/agno/tools/confluence.py +0 -0
  370. {agno-1.7.3 → agno-1.7.5}/agno/tools/crawl4ai.py +0 -0
  371. {agno-1.7.3 → agno-1.7.5}/agno/tools/csv_toolkit.py +0 -0
  372. {agno-1.7.3 → agno-1.7.5}/agno/tools/dalle.py +0 -0
  373. {agno-1.7.3 → agno-1.7.5}/agno/tools/daytona.py +0 -0
  374. {agno-1.7.3 → agno-1.7.5}/agno/tools/desi_vocal.py +0 -0
  375. {agno-1.7.3 → agno-1.7.5}/agno/tools/discord.py +0 -0
  376. {agno-1.7.3 → agno-1.7.5}/agno/tools/docker.py +0 -0
  377. {agno-1.7.3 → agno-1.7.5}/agno/tools/duckdb.py +0 -0
  378. {agno-1.7.3 → agno-1.7.5}/agno/tools/duckduckgo.py +0 -0
  379. {agno-1.7.3 → agno-1.7.5}/agno/tools/e2b.py +0 -0
  380. {agno-1.7.3 → agno-1.7.5}/agno/tools/eleven_labs.py +0 -0
  381. {agno-1.7.3 → agno-1.7.5}/agno/tools/email.py +0 -0
  382. {agno-1.7.3 → agno-1.7.5}/agno/tools/exa.py +0 -0
  383. {agno-1.7.3 → agno-1.7.5}/agno/tools/fal.py +0 -0
  384. {agno-1.7.3 → agno-1.7.5}/agno/tools/file.py +0 -0
  385. {agno-1.7.3 → agno-1.7.5}/agno/tools/financial_datasets.py +0 -0
  386. {agno-1.7.3 → agno-1.7.5}/agno/tools/firecrawl.py +0 -0
  387. {agno-1.7.3 → agno-1.7.5}/agno/tools/giphy.py +0 -0
  388. {agno-1.7.3 → agno-1.7.5}/agno/tools/github.py +0 -0
  389. {agno-1.7.3 → agno-1.7.5}/agno/tools/gmail.py +0 -0
  390. {agno-1.7.3 → agno-1.7.5}/agno/tools/google_bigquery.py +0 -0
  391. {agno-1.7.3 → agno-1.7.5}/agno/tools/google_maps.py +0 -0
  392. {agno-1.7.3 → agno-1.7.5}/agno/tools/googlecalendar.py +0 -0
  393. {agno-1.7.3 → agno-1.7.5}/agno/tools/googlesearch.py +0 -0
  394. {agno-1.7.3 → agno-1.7.5}/agno/tools/googlesheets.py +0 -0
  395. {agno-1.7.3 → agno-1.7.5}/agno/tools/hackernews.py +0 -0
  396. {agno-1.7.3 → agno-1.7.5}/agno/tools/jina.py +0 -0
  397. {agno-1.7.3 → agno-1.7.5}/agno/tools/jira.py +0 -0
  398. {agno-1.7.3 → agno-1.7.5}/agno/tools/knowledge.py +0 -0
  399. {agno-1.7.3 → agno-1.7.5}/agno/tools/linear.py +0 -0
  400. {agno-1.7.3 → agno-1.7.5}/agno/tools/local_file_system.py +0 -0
  401. {agno-1.7.3 → agno-1.7.5}/agno/tools/lumalab.py +0 -0
  402. {agno-1.7.3 → agno-1.7.5}/agno/tools/mcp.py +0 -0
  403. {agno-1.7.3 → agno-1.7.5}/agno/tools/mem0.py +0 -0
  404. {agno-1.7.3 → agno-1.7.5}/agno/tools/mlx_transcribe.py +0 -0
  405. {agno-1.7.3/agno/tools/streamlit → agno-1.7.5/agno/tools/models}/__init__.py +0 -0
  406. {agno-1.7.3 → agno-1.7.5}/agno/tools/models/azure_openai.py +0 -0
  407. {agno-1.7.3 → agno-1.7.5}/agno/tools/models/gemini.py +0 -0
  408. {agno-1.7.3 → agno-1.7.5}/agno/tools/models/groq.py +0 -0
  409. {agno-1.7.3 → agno-1.7.5}/agno/tools/models/nebius.py +0 -0
  410. {agno-1.7.3 → agno-1.7.5}/agno/tools/models_labs.py +0 -0
  411. {agno-1.7.3 → agno-1.7.5}/agno/tools/moviepy_video.py +0 -0
  412. {agno-1.7.3 → agno-1.7.5}/agno/tools/newspaper.py +0 -0
  413. {agno-1.7.3 → agno-1.7.5}/agno/tools/newspaper4k.py +0 -0
  414. {agno-1.7.3 → agno-1.7.5}/agno/tools/openai.py +0 -0
  415. {agno-1.7.3 → agno-1.7.5}/agno/tools/openbb.py +0 -0
  416. {agno-1.7.3 → agno-1.7.5}/agno/tools/opencv.py +0 -0
  417. {agno-1.7.3 → agno-1.7.5}/agno/tools/openweather.py +0 -0
  418. {agno-1.7.3 → agno-1.7.5}/agno/tools/oxylabs.py +0 -0
  419. {agno-1.7.3 → agno-1.7.5}/agno/tools/pandas.py +0 -0
  420. {agno-1.7.3 → agno-1.7.5}/agno/tools/postgres.py +0 -0
  421. {agno-1.7.3 → agno-1.7.5}/agno/tools/pubmed.py +0 -0
  422. {agno-1.7.3 → agno-1.7.5}/agno/tools/python.py +0 -0
  423. {agno-1.7.3 → agno-1.7.5}/agno/tools/reasoning.py +0 -0
  424. {agno-1.7.3 → agno-1.7.5}/agno/tools/reddit.py +0 -0
  425. {agno-1.7.3 → agno-1.7.5}/agno/tools/replicate.py +0 -0
  426. {agno-1.7.3 → agno-1.7.5}/agno/tools/resend.py +0 -0
  427. {agno-1.7.3 → agno-1.7.5}/agno/tools/scrapegraph.py +0 -0
  428. {agno-1.7.3 → agno-1.7.5}/agno/tools/searxng.py +0 -0
  429. {agno-1.7.3 → agno-1.7.5}/agno/tools/serpapi.py +0 -0
  430. {agno-1.7.3 → agno-1.7.5}/agno/tools/serper.py +0 -0
  431. {agno-1.7.3 → agno-1.7.5}/agno/tools/shell.py +0 -0
  432. {agno-1.7.3 → agno-1.7.5}/agno/tools/slack.py +0 -0
  433. {agno-1.7.3 → agno-1.7.5}/agno/tools/sleep.py +0 -0
  434. {agno-1.7.3 → agno-1.7.5}/agno/tools/spider.py +0 -0
  435. {agno-1.7.3 → agno-1.7.5}/agno/tools/sql.py +0 -0
  436. {agno-1.7.3/agno/utils → agno-1.7.5/agno/tools/streamlit}/__init__.py +0 -0
  437. {agno-1.7.3 → agno-1.7.5}/agno/tools/streamlit/components.py +0 -0
  438. {agno-1.7.3 → agno-1.7.5}/agno/tools/tavily.py +0 -0
  439. {agno-1.7.3 → agno-1.7.5}/agno/tools/telegram.py +0 -0
  440. {agno-1.7.3 → agno-1.7.5}/agno/tools/thinking.py +0 -0
  441. {agno-1.7.3 → agno-1.7.5}/agno/tools/todoist.py +0 -0
  442. {agno-1.7.3 → agno-1.7.5}/agno/tools/tool_registry.py +0 -0
  443. {agno-1.7.3 → agno-1.7.5}/agno/tools/toolkit.py +0 -0
  444. {agno-1.7.3 → agno-1.7.5}/agno/tools/trello.py +0 -0
  445. {agno-1.7.3 → agno-1.7.5}/agno/tools/twilio.py +0 -0
  446. {agno-1.7.3 → agno-1.7.5}/agno/tools/user_control_flow.py +0 -0
  447. {agno-1.7.3 → agno-1.7.5}/agno/tools/valyu.py +0 -0
  448. {agno-1.7.3 → agno-1.7.5}/agno/tools/visualization.py +0 -0
  449. {agno-1.7.3 → agno-1.7.5}/agno/tools/webbrowser.py +0 -0
  450. {agno-1.7.3 → agno-1.7.5}/agno/tools/webex.py +0 -0
  451. {agno-1.7.3 → agno-1.7.5}/agno/tools/website.py +0 -0
  452. {agno-1.7.3 → agno-1.7.5}/agno/tools/webtools.py +0 -0
  453. {agno-1.7.3 → agno-1.7.5}/agno/tools/whatsapp.py +0 -0
  454. {agno-1.7.3 → agno-1.7.5}/agno/tools/wikipedia.py +0 -0
  455. {agno-1.7.3 → agno-1.7.5}/agno/tools/x.py +0 -0
  456. {agno-1.7.3 → agno-1.7.5}/agno/tools/yfinance.py +0 -0
  457. {agno-1.7.3 → agno-1.7.5}/agno/tools/youtube.py +0 -0
  458. {agno-1.7.3 → agno-1.7.5}/agno/tools/zendesk.py +0 -0
  459. {agno-1.7.3 → agno-1.7.5}/agno/tools/zep.py +0 -0
  460. {agno-1.7.3 → agno-1.7.5}/agno/tools/zoom.py +0 -0
  461. {agno-1.7.3/agno/utils/models → agno-1.7.5/agno/utils}/__init__.py +0 -0
  462. {agno-1.7.3 → agno-1.7.5}/agno/utils/audio.py +0 -0
  463. {agno-1.7.3 → agno-1.7.5}/agno/utils/certs.py +0 -0
  464. {agno-1.7.3 → agno-1.7.5}/agno/utils/code_execution.py +0 -0
  465. {agno-1.7.3 → agno-1.7.5}/agno/utils/common.py +0 -0
  466. {agno-1.7.3 → agno-1.7.5}/agno/utils/defaults.py +0 -0
  467. {agno-1.7.3 → agno-1.7.5}/agno/utils/dttm.py +0 -0
  468. {agno-1.7.3 → agno-1.7.5}/agno/utils/enum.py +0 -0
  469. {agno-1.7.3 → agno-1.7.5}/agno/utils/env.py +0 -0
  470. {agno-1.7.3 → agno-1.7.5}/agno/utils/events.py +0 -0
  471. {agno-1.7.3 → agno-1.7.5}/agno/utils/filesystem.py +0 -0
  472. {agno-1.7.3 → agno-1.7.5}/agno/utils/format_str.py +0 -0
  473. {agno-1.7.3 → agno-1.7.5}/agno/utils/functions.py +0 -0
  474. {agno-1.7.3 → agno-1.7.5}/agno/utils/gemini.py +0 -0
  475. {agno-1.7.3 → agno-1.7.5}/agno/utils/git.py +0 -0
  476. {agno-1.7.3 → agno-1.7.5}/agno/utils/http.py +0 -0
  477. {agno-1.7.3 → agno-1.7.5}/agno/utils/json_io.py +0 -0
  478. {agno-1.7.3 → agno-1.7.5}/agno/utils/json_schema.py +0 -0
  479. {agno-1.7.3 → agno-1.7.5}/agno/utils/load_env.py +0 -0
  480. {agno-1.7.3 → agno-1.7.5}/agno/utils/location.py +0 -0
  481. {agno-1.7.3 → agno-1.7.5}/agno/utils/mcp.py +0 -0
  482. {agno-1.7.3 → agno-1.7.5}/agno/utils/media.py +0 -0
  483. {agno-1.7.3 → agno-1.7.5}/agno/utils/merge_dict.py +0 -0
  484. {agno-1.7.3/agno/workspace → agno-1.7.5/agno/utils/models}/__init__.py +0 -0
  485. {agno-1.7.3 → agno-1.7.5}/agno/utils/models/ai_foundry.py +0 -0
  486. {agno-1.7.3 → agno-1.7.5}/agno/utils/models/aws_claude.py +0 -0
  487. {agno-1.7.3 → agno-1.7.5}/agno/utils/models/claude.py +0 -0
  488. {agno-1.7.3 → agno-1.7.5}/agno/utils/models/cohere.py +0 -0
  489. {agno-1.7.3 → agno-1.7.5}/agno/utils/models/llama.py +0 -0
  490. {agno-1.7.3 → agno-1.7.5}/agno/utils/models/mistral.py +0 -0
  491. {agno-1.7.3 → agno-1.7.5}/agno/utils/models/openai_responses.py +0 -0
  492. {agno-1.7.3 → agno-1.7.5}/agno/utils/models/schema_utils.py +0 -0
  493. {agno-1.7.3 → agno-1.7.5}/agno/utils/models/watsonx.py +0 -0
  494. {agno-1.7.3 → agno-1.7.5}/agno/utils/pickle.py +0 -0
  495. {agno-1.7.3 → agno-1.7.5}/agno/utils/prompts.py +0 -0
  496. {agno-1.7.3 → agno-1.7.5}/agno/utils/py_io.py +0 -0
  497. {agno-1.7.3 → agno-1.7.5}/agno/utils/pyproject.py +0 -0
  498. {agno-1.7.3 → agno-1.7.5}/agno/utils/resource_filter.py +0 -0
  499. {agno-1.7.3 → agno-1.7.5}/agno/utils/response.py +0 -0
  500. {agno-1.7.3 → agno-1.7.5}/agno/utils/response_iterator.py +0 -0
  501. {agno-1.7.3 → agno-1.7.5}/agno/utils/safe_formatter.py +0 -0
  502. {agno-1.7.3 → agno-1.7.5}/agno/utils/shell.py +0 -0
  503. {agno-1.7.3 → agno-1.7.5}/agno/utils/string.py +0 -0
  504. {agno-1.7.3 → agno-1.7.5}/agno/utils/timer.py +0 -0
  505. {agno-1.7.3 → agno-1.7.5}/agno/utils/tools.py +0 -0
  506. {agno-1.7.3 → agno-1.7.5}/agno/utils/web.py +0 -0
  507. {agno-1.7.3 → agno-1.7.5}/agno/utils/whatsapp.py +0 -0
  508. {agno-1.7.3 → agno-1.7.5}/agno/utils/yaml_io.py +0 -0
  509. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/__init__.py +0 -0
  510. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/base.py +0 -0
  511. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/cassandra/__init__.py +0 -0
  512. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/cassandra/cassandra.py +0 -0
  513. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  514. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/cassandra/index.py +0 -0
  515. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/chroma/__init__.py +0 -0
  516. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/chroma/chromadb.py +0 -0
  517. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/clickhouse/__init__.py +0 -0
  518. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  519. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/clickhouse/index.py +0 -0
  520. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/couchbase/__init__.py +0 -0
  521. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/couchbase/couchbase.py +0 -0
  522. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/distance.py +0 -0
  523. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/lancedb/__init__.py +0 -0
  524. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/lancedb/lance_db.py +0 -0
  525. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/milvus/__init__.py +0 -0
  526. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/milvus/milvus.py +0 -0
  527. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/mongodb/__init__.py +0 -0
  528. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/mongodb/mongodb.py +0 -0
  529. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/pgvector/__init__.py +0 -0
  530. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/pgvector/index.py +0 -0
  531. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/pgvector/pgvector.py +0 -0
  532. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/pineconedb/__init__.py +0 -0
  533. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  534. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/qdrant/__init__.py +0 -0
  535. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/qdrant/qdrant.py +0 -0
  536. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/search.py +0 -0
  537. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/singlestore/__init__.py +0 -0
  538. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/singlestore/index.py +0 -0
  539. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/singlestore/singlestore.py +0 -0
  540. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/upstashdb/__init__.py +0 -0
  541. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  542. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/weaviate/__init__.py +0 -0
  543. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/weaviate/index.py +0 -0
  544. {agno-1.7.3 → agno-1.7.5}/agno/vectordb/weaviate/weaviate.py +0 -0
  545. {agno-1.7.3 → agno-1.7.5}/agno/workflow/__init__.py +0 -0
  546. {agno-1.7.3 → agno-1.7.5}/agno/workflow/workflow.py +0 -0
  547. {agno-1.7.3 → agno-1.7.5}/agno/workspace/config.py +0 -0
  548. {agno-1.7.3 → agno-1.7.5}/agno/workspace/enums.py +0 -0
  549. {agno-1.7.3 → agno-1.7.5}/agno/workspace/helpers.py +0 -0
  550. {agno-1.7.3 → agno-1.7.5}/agno/workspace/operator.py +0 -0
  551. {agno-1.7.3 → agno-1.7.5}/agno/workspace/settings.py +0 -0
  552. {agno-1.7.3 → agno-1.7.5}/agno.egg-info/dependency_links.txt +0 -0
  553. {agno-1.7.3 → agno-1.7.5}/agno.egg-info/entry_points.txt +0 -0
  554. {agno-1.7.3 → agno-1.7.5}/agno.egg-info/top_level.txt +0 -0
  555. {agno-1.7.3 → agno-1.7.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 1.7.3
3
+ Version: 1.7.5
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.
@@ -573,6 +573,8 @@ Provides-Extra: clickhouse
573
573
  Requires-Dist: clickhouse-connect; extra == "clickhouse"
574
574
  Provides-Extra: pinecone
575
575
  Requires-Dist: pinecone==5.4.2; extra == "pinecone"
576
+ Provides-Extra: surrealdb
577
+ Requires-Dist: surrealdb>=1.0.4; extra == "surrealdb"
576
578
  Provides-Extra: pdf
577
579
  Requires-Dist: pypdf; extra == "pdf"
578
580
  Requires-Dist: rapidocr_onnxruntime; extra == "pdf"
@@ -664,6 +666,7 @@ Requires-Dist: agno[weaviate]; extra == "vectordbs"
664
666
  Requires-Dist: agno[milvusdb]; extra == "vectordbs"
665
667
  Requires-Dist: agno[clickhouse]; extra == "vectordbs"
666
668
  Requires-Dist: agno[pinecone]; extra == "vectordbs"
669
+ Requires-Dist: agno[surrealdb]; extra == "vectordbs"
667
670
  Provides-Extra: knowledge
668
671
  Requires-Dist: agno[pdf]; extra == "knowledge"
669
672
  Requires-Dist: agno[docx]; extra == "knowledge"
@@ -119,6 +119,8 @@ class Agent:
119
119
  session_state: Optional[Dict[str, Any]] = None
120
120
  search_previous_sessions_history: Optional[bool] = False
121
121
  num_history_sessions: Optional[int] = None
122
+ # If True, cache the session in memory
123
+ cache_session: bool = True
122
124
 
123
125
  # --- Agent Context ---
124
126
  # Context available for tools and prompt functions
@@ -318,9 +320,13 @@ class Agent:
318
320
 
319
321
  # Optional workflow ID. Indicates this agent is part of a workflow.
320
322
  workflow_id: Optional[str] = None
323
+ # Set when this agent is part of a workflow.
324
+ workflow_session_id: Optional[str] = None
321
325
 
322
326
  # Optional team session state. Set by the team leader agent.
323
327
  team_session_state: Optional[Dict[str, Any]] = None
328
+ # Optional workflow session state. Set by the workflow.
329
+ workflow_session_state: Optional[Dict[str, Any]] = None
324
330
 
325
331
  # --- Debug & Monitoring ---
326
332
  # Enable debug logs
@@ -347,6 +353,7 @@ class Agent:
347
353
  session_state: Optional[Dict[str, Any]] = None,
348
354
  search_previous_sessions_history: Optional[bool] = False,
349
355
  num_history_sessions: Optional[int] = None,
356
+ cache_session: bool = True,
350
357
  context: Optional[Dict[str, Any]] = None,
351
358
  add_context: bool = False,
352
359
  resolve_context: bool = True,
@@ -437,6 +444,8 @@ class Agent:
437
444
  self.search_previous_sessions_history = search_previous_sessions_history
438
445
  self.num_history_sessions = num_history_sessions
439
446
 
447
+ self.cache_session = cache_session
448
+
440
449
  self.context = context
441
450
  self.add_context = add_context
442
451
  self.resolve_context = resolve_context
@@ -543,7 +552,7 @@ class Agent:
543
552
  self.session_metrics: Optional[SessionMetrics] = None
544
553
 
545
554
  self.run_id: Optional[str] = None
546
- self.run_input: Optional[Union[str, List, Dict, Message]] = None
555
+ self.run_input: Optional[Union[str, List, Dict, Message, BaseModel]] = None
547
556
  self.run_messages: Optional[RunMessages] = None
548
557
  self.run_response: Optional[RunResponse] = None
549
558
 
@@ -695,10 +704,14 @@ class Agent:
695
704
  self.session_state["current_user_id"] = user_id
696
705
  if self.team_session_state is not None:
697
706
  self.team_session_state["current_user_id"] = user_id
707
+ if self.workflow_session_state is not None:
708
+ self.workflow_session_state["current_user_id"] = user_id
698
709
  if session_id is not None:
699
710
  self.session_state["current_session_id"] = session_id
700
711
  if self.team_session_state is not None:
701
712
  self.team_session_state["current_session_id"] = session_id
713
+ if self.workflow_session_state is not None:
714
+ self.workflow_session_state["current_user_id"] = user_id
702
715
 
703
716
  def _reset_session_state(self) -> None:
704
717
  """Reset the session state for the agent."""
@@ -746,9 +759,6 @@ class Agent:
746
759
 
747
760
  self._initialize_session_state(user_id=user_id, session_id=session_id)
748
761
 
749
- # Read existing session from storage
750
- self.read_from_storage(session_id=session_id)
751
-
752
762
  return session_id, user_id
753
763
 
754
764
  def _run(
@@ -929,7 +939,7 @@ class Agent:
929
939
  @overload
930
940
  def run(
931
941
  self,
932
- message: Optional[Union[str, List, Dict, Message]] = None,
942
+ message: Optional[Union[str, List, Dict, Message, BaseModel]] = None,
933
943
  *,
934
944
  stream: Literal[False] = False,
935
945
  stream_intermediate_steps: Optional[bool] = None,
@@ -950,7 +960,7 @@ class Agent:
950
960
  @overload
951
961
  def run(
952
962
  self,
953
- message: Optional[Union[str, List, Dict, Message]] = None,
963
+ message: Optional[Union[str, List, Dict, Message, BaseModel]] = None,
954
964
  *,
955
965
  stream: Literal[True] = True,
956
966
  stream_intermediate_steps: Optional[bool] = None,
@@ -970,7 +980,7 @@ class Agent:
970
980
 
971
981
  def run(
972
982
  self,
973
- message: Optional[Union[str, List, Dict, Message]] = None,
983
+ message: Optional[Union[str, List, Dict, Message, BaseModel]] = None,
974
984
  *,
975
985
  stream: Optional[bool] = None,
976
986
  stream_intermediate_steps: Optional[bool] = None,
@@ -988,16 +998,18 @@ class Agent:
988
998
  **kwargs: Any,
989
999
  ) -> Union[RunResponse, Iterator[RunResponseEvent]]:
990
1000
  """Run the Agent and return the response."""
991
-
992
1001
  session_id, user_id = self._initialize_session(
993
1002
  session_id=session_id, user_id=user_id, session_state=session_state
994
1003
  )
995
1004
 
996
- log_debug(f"Session ID: {session_id}", center=True)
997
-
998
1005
  # Initialize the Agent
999
1006
  self.initialize_agent()
1000
1007
 
1008
+ # Read existing session from storage
1009
+ self.read_from_storage(session_id=session_id)
1010
+
1011
+ log_debug(f"Session ID: {session_id}", center=True)
1012
+
1001
1013
  # Initialize Knowledge Filters
1002
1014
  effective_filters = knowledge_filters
1003
1015
 
@@ -1346,7 +1358,7 @@ class Agent:
1346
1358
 
1347
1359
  async def arun(
1348
1360
  self,
1349
- message: Optional[Union[str, List, Dict, Message]] = None,
1361
+ message: Optional[Union[str, List, Dict, Message, BaseModel]] = None,
1350
1362
  *,
1351
1363
  stream: Optional[bool] = None,
1352
1364
  user_id: Optional[str] = None,
@@ -1374,6 +1386,9 @@ class Agent:
1374
1386
  # Initialize the Agent
1375
1387
  self.initialize_agent()
1376
1388
 
1389
+ # Read existing session from storage
1390
+ self.read_from_storage(session_id=session_id)
1391
+
1377
1392
  effective_filters = knowledge_filters
1378
1393
  # When filters are passed manually
1379
1394
  if self.knowledge_filters or knowledge_filters:
@@ -1598,6 +1613,9 @@ class Agent:
1598
1613
  retries: The number of retries to continue the run for.
1599
1614
  knowledge_filters: The knowledge filters to use for the run.
1600
1615
  """
1616
+ # Initialize the Agent
1617
+ self.initialize_agent()
1618
+
1601
1619
  if session_id is not None:
1602
1620
  self.reset_run_state()
1603
1621
  # Reset session state if a session_id is provided. Session name and session state will be loaded from storage.
@@ -1606,9 +1624,6 @@ class Agent:
1606
1624
  if self.session_id is not None and session_id != self.session_id:
1607
1625
  self.session_state = None
1608
1626
 
1609
- # Initialize the Agent
1610
- self.initialize_agent()
1611
-
1612
1627
  # Initialize Session
1613
1628
  # Use the default user_id and session_id when necessary
1614
1629
  user_id = user_id if user_id is not None else self.user_id
@@ -1988,6 +2003,9 @@ class Agent:
1988
2003
  retries: The number of retries to continue the run for.
1989
2004
  knowledge_filters: The knowledge filters to use for the run.
1990
2005
  """
2006
+ # Initialize the Agent
2007
+ self.initialize_agent()
2008
+
1991
2009
  if session_id is not None:
1992
2010
  self.reset_run_state()
1993
2011
  # Reset session state if a session_id is provided. Session name and session state will be loaded from storage.
@@ -1996,9 +2014,6 @@ class Agent:
1996
2014
  if self.session_id is not None and session_id != self.session_id:
1997
2015
  self.session_state = None
1998
2016
 
1999
- # Initialize the Agent
2000
- self.initialize_agent()
2001
-
2002
2017
  # Initialize Session
2003
2018
  # Use the default user_id and session_id when necessary
2004
2019
  user_id = user_id if user_id is not None else self.user_id
@@ -3869,6 +3884,8 @@ class Agent:
3869
3884
  session_data["session_state"] = self.session_state
3870
3885
  if self.team_session_state is not None and len(self.team_session_state) > 0:
3871
3886
  session_data["team_session_state"] = self.team_session_state
3887
+ if self.workflow_session_state is not None and len(self.workflow_session_state) > 0:
3888
+ session_data["workflow_session_state"] = self.workflow_session_state
3872
3889
  if self.session_metrics is not None:
3873
3890
  session_data["session_metrics"] = asdict(self.session_metrics) if self.session_metrics is not None else None
3874
3891
  if self.team_data is not None:
@@ -3905,12 +3922,15 @@ class Agent:
3905
3922
  memory_dict = None
3906
3923
 
3907
3924
  self.team_session_id = cast(str, self.team_session_id)
3925
+ self.workflow_session_id = cast(str, self.workflow_session_id)
3926
+
3908
3927
  self.agent_id = cast(str, self.agent_id)
3909
3928
  return AgentSession(
3910
3929
  session_id=session_id,
3911
3930
  agent_id=self.agent_id,
3912
3931
  user_id=user_id,
3913
3932
  team_session_id=self.team_session_id,
3933
+ workflow_session_id=self.workflow_session_id,
3914
3934
  memory=memory_dict,
3915
3935
  agent_data=self.get_agent_data(),
3916
3936
  session_data=self.get_session_data(),
@@ -3921,6 +3941,9 @@ class Agent:
3921
3941
  def load_agent_session(self, session: AgentSession):
3922
3942
  """Load the existing Agent from an AgentSession (from the database)"""
3923
3943
 
3944
+ if not hasattr(session, "memory"):
3945
+ return
3946
+
3924
3947
  from agno.utils.merge_dict import merge_dictionaries
3925
3948
 
3926
3949
  # Get the agent_id, user_id and session_id from the database
@@ -3977,6 +4000,22 @@ class Agent:
3977
4000
  # Update the current team_session_state
3978
4001
  self.team_session_state = team_session_state_from_db
3979
4002
 
4003
+ if "workflow_session_state" in session.session_data:
4004
+ workflow_session_state_from_db = session.session_data.get("workflow_session_state")
4005
+ if (
4006
+ workflow_session_state_from_db is not None
4007
+ and isinstance(workflow_session_state_from_db, dict)
4008
+ and len(workflow_session_state_from_db) > 0
4009
+ ):
4010
+ # If the workflow_session_state is already set, merge the workflow_session_state from the database with the current workflow_session_state
4011
+ if self.workflow_session_state is not None and len(self.workflow_session_state) > 0:
4012
+ # This updates workflow_session_state_from_db
4013
+ # If there are conflicting keys, values from workflow_session_state_from_db will take precedence
4014
+ merge_dictionaries(self.workflow_session_state, workflow_session_state_from_db)
4015
+ else:
4016
+ # Update the current workflow_session_state
4017
+ self.workflow_session_state = workflow_session_state_from_db
4018
+
3980
4019
  # Get the session_metrics from the database
3981
4020
  if "session_metrics" in session.session_data:
3982
4021
  session_metrics_from_db = session.session_data.get("session_metrics")
@@ -4024,6 +4063,7 @@ class Agent:
4024
4063
  # Convert dict to Memory
4025
4064
  elif isinstance(self.memory, dict):
4026
4065
  memory_dict = self.memory
4066
+
4027
4067
  memory_dict.pop("runs")
4028
4068
  self.memory = Memory(**memory_dict)
4029
4069
  else:
@@ -4079,6 +4119,7 @@ class Agent:
4079
4119
  self.memory.runs[session.session_id] = []
4080
4120
  for run in session.memory["runs"]:
4081
4121
  run_session_id = run["session_id"]
4122
+
4082
4123
  if "team_id" in run:
4083
4124
  self.memory.runs[run_session_id].append(TeamRunResponse.from_dict(run))
4084
4125
  else:
@@ -4147,10 +4188,10 @@ class Agent:
4147
4188
  if not self.storage:
4148
4189
  return
4149
4190
 
4150
- agent_session_from_db = self.storage.read(session_id=session_id)
4191
+ agent_session_from_db = self.storage.read(session_id=session_id) # type: ignore
4151
4192
  if (
4152
4193
  agent_session_from_db is not None
4153
- and agent_session_from_db.memory is not None
4194
+ and agent_session_from_db.memory is not None # type: ignore
4154
4195
  and "runs" in agent_session_from_db.memory # type: ignore
4155
4196
  ):
4156
4197
  if isinstance(self.memory, AgentMemory):
@@ -4192,6 +4233,11 @@ class Agent:
4192
4233
  AgentSession,
4193
4234
  self.storage.upsert(session=self.get_agent_session(session_id=session_id, user_id=user_id)),
4194
4235
  )
4236
+
4237
+ if not self.cache_session:
4238
+ if self.memory is not None and self.memory.runs is not None and session_id in self.memory.runs:
4239
+ self.memory.runs.pop(session_id) # type: ignore
4240
+
4195
4241
  return self.agent_session
4196
4242
 
4197
4243
  def add_introduction(self, introduction: str) -> None:
@@ -4278,6 +4324,7 @@ class Agent:
4278
4324
  format_variables = ChainMap(
4279
4325
  self.session_state or {},
4280
4326
  self.team_session_state or {},
4327
+ self.workflow_session_state or {},
4281
4328
  self.context or {},
4282
4329
  self.extra_data or {},
4283
4330
  {"user_id": self.user_id} if self.user_id is not None else {},
@@ -4614,7 +4661,7 @@ class Agent:
4614
4661
  def get_user_message(
4615
4662
  self,
4616
4663
  *,
4617
- message: Optional[Union[str, List]],
4664
+ message: Optional[Union[str, List, Dict, Message, BaseModel]] = None,
4618
4665
  audio: Optional[Sequence[Audio]] = None,
4619
4666
  images: Optional[Sequence[Image]] = None,
4620
4667
  videos: Optional[Sequence[Video]] = None,
@@ -4687,7 +4734,7 @@ class Agent:
4687
4734
  )
4688
4735
 
4689
4736
  # 2. If create_default_user_message is False or message is a list, return the message as is.
4690
- if not self.create_default_user_message or isinstance(message, list):
4737
+ if not self.create_default_user_message:
4691
4738
  return Message(
4692
4739
  role=self.user_message_role,
4693
4740
  content=message,
@@ -4698,6 +4745,24 @@ class Agent:
4698
4745
  **kwargs,
4699
4746
  )
4700
4747
 
4748
+ # Handle list messages by converting to string
4749
+ if isinstance(message, list):
4750
+ # Convert list to string (join with newlines if all elements are strings)
4751
+ if all(isinstance(item, str) for item in message):
4752
+ message_content = "\n".join(message)
4753
+ else:
4754
+ message_content = str(message)
4755
+
4756
+ return Message(
4757
+ role=self.user_message_role,
4758
+ content=message_content,
4759
+ images=images,
4760
+ audio=audio,
4761
+ videos=videos,
4762
+ files=files,
4763
+ **kwargs,
4764
+ )
4765
+
4701
4766
  # 3. Build the default user message for the Agent
4702
4767
  if message is None:
4703
4768
  # If we have any media, return a message with empty content
@@ -4719,6 +4784,10 @@ class Agent:
4719
4784
  # Format the message with the session state variables
4720
4785
  if self.add_state_in_messages:
4721
4786
  user_msg_content = self.format_message_with_state_variables(message)
4787
+
4788
+ # Convert to string for concatenation operations
4789
+ user_msg_content_str = get_text_from_message(user_msg_content) if user_msg_content is not None else ""
4790
+
4722
4791
  # 4.1 Add references to user message
4723
4792
  if (
4724
4793
  self.add_references
@@ -4726,15 +4795,18 @@ class Agent:
4726
4795
  and references.references is not None
4727
4796
  and len(references.references) > 0
4728
4797
  ):
4729
- user_msg_content += "\n\nUse the following references from the knowledge base if it helps:\n"
4730
- user_msg_content += "<references>\n"
4731
- user_msg_content += self.convert_documents_to_string(references.references) + "\n"
4732
- user_msg_content += "</references>"
4798
+ user_msg_content_str += "\n\nUse the following references from the knowledge base if it helps:\n"
4799
+ user_msg_content_str += "<references>\n"
4800
+ user_msg_content_str += self.convert_documents_to_string(references.references) + "\n"
4801
+ user_msg_content_str += "</references>"
4733
4802
  # 4.2 Add context to user message
4734
4803
  if self.add_context and self.context is not None:
4735
- user_msg_content += "\n\n<context>\n"
4736
- user_msg_content += self.convert_context_to_string(self.context) + "\n"
4737
- user_msg_content += "</context>"
4804
+ user_msg_content_str += "\n\n<context>\n"
4805
+ user_msg_content_str += self.convert_context_to_string(self.context) + "\n"
4806
+ user_msg_content_str += "</context>"
4807
+
4808
+ # Use the string version for the final content
4809
+ user_msg_content = user_msg_content_str
4738
4810
 
4739
4811
  # Return the user message
4740
4812
  return Message(
@@ -4750,7 +4822,7 @@ class Agent:
4750
4822
  def get_run_messages(
4751
4823
  self,
4752
4824
  *,
4753
- message: Optional[Union[str, List, Dict, Message]] = None,
4825
+ message: Optional[Union[str, List, Dict, Message, BaseModel]] = None,
4754
4826
  session_id: str,
4755
4827
  user_id: Optional[str] = None,
4756
4828
  audio: Optional[Sequence[Audio]] = None,
@@ -4877,6 +4949,14 @@ class Agent:
4877
4949
  user_message = Message.model_validate(message)
4878
4950
  except Exception as e:
4879
4951
  log_warning(f"Failed to validate message: {e}")
4952
+ # 4.4 If message is provided as a BaseModel, convert it to a Message
4953
+ elif isinstance(message, BaseModel):
4954
+ try:
4955
+ # Create a user message with the BaseModel content
4956
+ content = message.model_dump_json(indent=2, exclude_none=True)
4957
+ user_message = Message(role=self.user_message_role, content=content)
4958
+ except Exception as e:
4959
+ log_warning(f"Failed to convert BaseModel to message: {e}")
4880
4960
  # Add user message to run_messages
4881
4961
  if user_message is not None:
4882
4962
  run_messages.user_message = user_message
@@ -6731,6 +6811,7 @@ class Agent:
6731
6811
  session_id=agent_session.session_id,
6732
6812
  agent_data=agent_session.to_dict() if self.monitoring else agent_session.telemetry_data(),
6733
6813
  team_session_id=agent_session.team_session_id,
6814
+ workflow_session_id=agent_session.workflow_session_id,
6734
6815
  ),
6735
6816
  monitor=self.monitoring,
6736
6817
  )
@@ -6758,6 +6839,7 @@ class Agent:
6758
6839
  session_id=agent_session.session_id,
6759
6840
  agent_data=agent_session.to_dict() if self.monitoring else agent_session.telemetry_data(),
6760
6841
  team_session_id=agent_session.team_session_id,
6842
+ workflow_session_id=agent_session.workflow_session_id,
6761
6843
  ),
6762
6844
  monitor=self.monitoring,
6763
6845
  )
@@ -6770,7 +6852,7 @@ class Agent:
6770
6852
 
6771
6853
  def print_response(
6772
6854
  self,
6773
- message: Optional[Union[List, Dict, str, Message]] = None,
6855
+ message: Optional[Union[List, Dict, str, Message, BaseModel]] = None,
6774
6856
  *,
6775
6857
  session_id: Optional[str] = None,
6776
6858
  session_state: Optional[Dict[str, Any]] = None,
@@ -7219,7 +7301,7 @@ class Agent:
7219
7301
 
7220
7302
  async def aprint_response(
7221
7303
  self,
7222
- message: Optional[Union[List, Dict, str, Message]] = None,
7304
+ message: Optional[Union[List, Dict, str, Message, BaseModel]] = None,
7223
7305
  *,
7224
7306
  messages: Optional[List[Union[Dict, Message]]] = None,
7225
7307
  session_id: Optional[str] = None,
@@ -15,6 +15,7 @@ class AgentRunCreate(BaseModel):
15
15
 
16
16
  session_id: str
17
17
  team_session_id: Optional[str] = None
18
+ workflow_session_id: Optional[str] = None
18
19
  run_id: Optional[str] = None
19
20
  run_data: Optional[Dict[str, Any]] = None
20
21
  agent_data: Optional[Dict[str, Any]] = None
@@ -15,6 +15,7 @@ class TeamRunCreate(BaseModel):
15
15
 
16
16
  session_id: str
17
17
  team_session_id: Optional[str] = None
18
+ workflow_session_id: Optional[str] = None
18
19
  run_id: Optional[str] = None
19
20
  run_data: Optional[Dict[str, Any]] = None
20
21
  team_data: Optional[Dict[str, Any]] = None
@@ -77,7 +77,7 @@ class FastAPIApp(BaseAPIApp):
77
77
 
78
78
  if self.workflows:
79
79
  for workflow in self.workflows:
80
- if not workflow.app_id:
80
+ if hasattr(workflow, "app_id") and not workflow.app_id:
81
81
  workflow.app_id = self.app_id
82
82
  if not workflow.workflow_id:
83
83
  workflow.workflow_id = generate_id(workflow.name)
@@ -1,7 +1,7 @@
1
1
  import json
2
2
  from dataclasses import asdict
3
3
  from io import BytesIO
4
- from typing import AsyncGenerator, List, Optional, cast
4
+ from typing import Any, AsyncGenerator, Dict, List, Optional, Union, cast
5
5
  from uuid import uuid4
6
6
 
7
7
  from fastapi import APIRouter, File, Form, HTTPException, Query, UploadFile
@@ -14,8 +14,10 @@ from agno.media import File as FileMedia
14
14
  from agno.run.response import RunResponseErrorEvent
15
15
  from agno.run.team import RunResponseErrorEvent as TeamRunResponseErrorEvent
16
16
  from agno.run.team import TeamRunResponseEvent
17
+ from agno.run.v2.workflow import WorkflowErrorEvent
17
18
  from agno.team.team import Team
18
19
  from agno.utils.log import logger
20
+ from agno.workflow.v2.workflow import Workflow as WorkflowV2
19
21
  from agno.workflow.workflow import Workflow
20
22
 
21
23
 
@@ -83,6 +85,42 @@ async def team_chat_response_streamer(
83
85
  return
84
86
 
85
87
 
88
+ async def workflow_response_streamer(
89
+ workflow: WorkflowV2,
90
+ body: Union[Dict[str, Any], str],
91
+ session_id: Optional[str] = None,
92
+ user_id: Optional[str] = None,
93
+ ) -> AsyncGenerator:
94
+ try:
95
+ if isinstance(body, dict):
96
+ run_response = await workflow.arun( # type: ignore
97
+ **body,
98
+ user_id=user_id,
99
+ session_id=session_id,
100
+ stream=True,
101
+ stream_intermediate_steps=True,
102
+ )
103
+ else:
104
+ run_response = await workflow.arun( # type: ignore
105
+ body,
106
+ user_id=user_id,
107
+ session_id=session_id,
108
+ stream=True,
109
+ stream_intermediate_steps=True,
110
+ )
111
+ async for run_response_chunk in run_response:
112
+ yield run_response_chunk.to_json()
113
+ except Exception as e:
114
+ import traceback
115
+
116
+ traceback.print_exc(limit=3)
117
+ error_response = WorkflowErrorEvent(
118
+ error=str(e),
119
+ )
120
+ yield error_response.to_json()
121
+ return
122
+
123
+
86
124
  def get_async_router(
87
125
  agents: Optional[List[Agent]] = None, teams: Optional[List[Team]] = None, workflows: Optional[List[Workflow]] = None
88
126
  ) -> APIRouter:
@@ -351,17 +389,24 @@ def get_async_router(
351
389
  media_type="text/event-stream",
352
390
  )
353
391
  elif workflow:
354
- workflow_instance = workflow.deep_copy(update={"workflow_id": workflow_id})
355
- workflow_instance.user_id = user_id
356
- workflow_instance.session_name = None
357
- if isinstance(workflow_input, dict):
358
- return StreamingResponse(
359
- (json.dumps(asdict(result)) for result in await workflow_instance.arun(**workflow_input)),
360
- media_type="text/event-stream",
361
- )
392
+ if isinstance(workflow, Workflow):
393
+ workflow_instance = workflow.deep_copy(update={"workflow_id": workflow_id})
394
+ workflow_instance.user_id = user_id
395
+ workflow_instance.session_name = None
396
+
397
+ if isinstance(workflow_input, dict):
398
+ return StreamingResponse(
399
+ (json.dumps(asdict(result)) for result in await workflow_instance.arun(**workflow_input)),
400
+ media_type="text/event-stream",
401
+ )
402
+ else:
403
+ return StreamingResponse(
404
+ (json.dumps(asdict(result)) for result in await workflow_instance.arun(workflow_input)), # type: ignore
405
+ media_type="text/event-stream",
406
+ )
362
407
  else:
363
408
  return StreamingResponse(
364
- (json.dumps(asdict(result)) for result in await workflow_instance.arun(workflow_input)), # type: ignore
409
+ workflow_response_streamer(workflow, workflow_input, session_id=session_id, user_id=user_id), # type: ignore
365
410
  media_type="text/event-stream",
366
411
  )
367
412
  else:
@@ -392,12 +437,18 @@ def get_async_router(
392
437
  )
393
438
  return team_run_response.to_dict()
394
439
  elif workflow:
395
- workflow_instance = workflow.deep_copy(update={"workflow_id": workflow_id})
396
- workflow_instance.user_id = user_id
397
- workflow_instance.session_name = None
398
- if isinstance(workflow_input, dict):
399
- return (await workflow_instance.arun(**workflow_input)).to_dict()
440
+ if isinstance(workflow, Workflow):
441
+ workflow_instance = workflow.deep_copy(update={"workflow_id": workflow_id})
442
+ workflow_instance.user_id = user_id
443
+ workflow_instance.session_name = None
444
+ if isinstance(workflow_input, dict):
445
+ return (await workflow_instance.arun(**workflow_input)).to_dict()
446
+ else:
447
+ return (await workflow_instance.arun(workflow_input)).to_dict() # type: ignore
400
448
  else:
401
- return (await workflow_instance.arun(workflow_input)).to_dict() # type: ignore
449
+ if isinstance(workflow_input, dict):
450
+ return (await workflow.arun(**workflow_input, session_id=session_id, user_id=user_id)).to_dict()
451
+ else:
452
+ return (await workflow.arun(workflow_input, session_id=session_id, user_id=user_id)).to_dict() # type: ignore
402
453
 
403
454
  return router