agno 2.1.5__tar.gz → 2.1.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (564) hide show
  1. {agno-2.1.5 → agno-2.1.6}/PKG-INFO +1 -1
  2. {agno-2.1.5 → agno-2.1.6}/agno/agent/agent.py +37 -32
  3. {agno-2.1.5 → agno-2.1.6}/agno/db/migrations/v1_to_v2.py +13 -0
  4. {agno-2.1.5 → agno-2.1.6}/agno/db/mongo/mongo.py +2 -6
  5. {agno-2.1.5 → agno-2.1.6}/agno/db/mongo/utils.py +0 -4
  6. {agno-2.1.5 → agno-2.1.6}/agno/db/mysql/mysql.py +4 -16
  7. {agno-2.1.5 → agno-2.1.6}/agno/db/postgres/postgres.py +8 -20
  8. {agno-2.1.5 → agno-2.1.6}/agno/db/singlestore/singlestore.py +17 -8
  9. {agno-2.1.5 → agno-2.1.6}/agno/db/sqlite/sqlite.py +4 -16
  10. agno-2.1.6/agno/db/surrealdb/__init__.py +3 -0
  11. agno-2.1.6/agno/db/surrealdb/metrics.py +292 -0
  12. agno-2.1.6/agno/db/surrealdb/models.py +259 -0
  13. agno-2.1.6/agno/db/surrealdb/queries.py +71 -0
  14. agno-2.1.6/agno/db/surrealdb/surrealdb.py +1193 -0
  15. agno-2.1.6/agno/db/surrealdb/utils.py +87 -0
  16. {agno-2.1.5 → agno-2.1.6}/agno/memory/manager.py +13 -13
  17. {agno-2.1.5 → agno-2.1.6}/agno/os/utils.py +8 -10
  18. {agno-2.1.5 → agno-2.1.6}/agno/team/team.py +88 -42
  19. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/surrealdb/surrealdb.py +0 -1
  20. {agno-2.1.5 → agno-2.1.6}/agno/workflow/step.py +8 -0
  21. {agno-2.1.5 → agno-2.1.6}/agno.egg-info/PKG-INFO +1 -1
  22. {agno-2.1.5 → agno-2.1.6}/agno.egg-info/SOURCES.txt +6 -0
  23. {agno-2.1.5 → agno-2.1.6}/pyproject.toml +1 -1
  24. {agno-2.1.5 → agno-2.1.6}/LICENSE +0 -0
  25. {agno-2.1.5 → agno-2.1.6}/README.md +0 -0
  26. {agno-2.1.5 → agno-2.1.6}/agno/__init__.py +0 -0
  27. {agno-2.1.5 → agno-2.1.6}/agno/agent/__init__.py +0 -0
  28. {agno-2.1.5 → agno-2.1.6}/agno/api/__init__.py +0 -0
  29. {agno-2.1.5 → agno-2.1.6}/agno/api/agent.py +0 -0
  30. {agno-2.1.5 → agno-2.1.6}/agno/api/api.py +0 -0
  31. {agno-2.1.5 → agno-2.1.6}/agno/api/evals.py +0 -0
  32. {agno-2.1.5 → agno-2.1.6}/agno/api/os.py +0 -0
  33. {agno-2.1.5 → agno-2.1.6}/agno/api/routes.py +0 -0
  34. {agno-2.1.5 → agno-2.1.6}/agno/api/schemas/__init__.py +0 -0
  35. {agno-2.1.5 → agno-2.1.6}/agno/api/schemas/agent.py +0 -0
  36. {agno-2.1.5 → agno-2.1.6}/agno/api/schemas/evals.py +0 -0
  37. {agno-2.1.5 → agno-2.1.6}/agno/api/schemas/os.py +0 -0
  38. {agno-2.1.5 → agno-2.1.6}/agno/api/schemas/response.py +0 -0
  39. {agno-2.1.5 → agno-2.1.6}/agno/api/schemas/team.py +0 -0
  40. {agno-2.1.5 → agno-2.1.6}/agno/api/schemas/utils.py +0 -0
  41. {agno-2.1.5 → agno-2.1.6}/agno/api/schemas/workflows.py +0 -0
  42. {agno-2.1.5 → agno-2.1.6}/agno/api/settings.py +0 -0
  43. {agno-2.1.5 → agno-2.1.6}/agno/api/team.py +0 -0
  44. {agno-2.1.5 → agno-2.1.6}/agno/api/workflow.py +0 -0
  45. {agno-2.1.5 → agno-2.1.6}/agno/cloud/aws/base.py +0 -0
  46. {agno-2.1.5 → agno-2.1.6}/agno/cloud/aws/s3/__init__.py +0 -0
  47. {agno-2.1.5 → agno-2.1.6}/agno/cloud/aws/s3/api_client.py +0 -0
  48. {agno-2.1.5 → agno-2.1.6}/agno/cloud/aws/s3/bucket.py +0 -0
  49. {agno-2.1.5 → agno-2.1.6}/agno/cloud/aws/s3/object.py +0 -0
  50. {agno-2.1.5 → agno-2.1.6}/agno/db/__init__.py +0 -0
  51. {agno-2.1.5 → agno-2.1.6}/agno/db/async_postgres/__init__.py +0 -0
  52. {agno-2.1.5 → agno-2.1.6}/agno/db/async_postgres/async_postgres.py +0 -0
  53. {agno-2.1.5 → agno-2.1.6}/agno/db/async_postgres/schemas.py +0 -0
  54. {agno-2.1.5 → agno-2.1.6}/agno/db/async_postgres/utils.py +0 -0
  55. {agno-2.1.5 → agno-2.1.6}/agno/db/base.py +0 -0
  56. {agno-2.1.5 → agno-2.1.6}/agno/db/dynamo/__init__.py +0 -0
  57. {agno-2.1.5 → agno-2.1.6}/agno/db/dynamo/dynamo.py +0 -0
  58. {agno-2.1.5 → agno-2.1.6}/agno/db/dynamo/schemas.py +0 -0
  59. {agno-2.1.5 → agno-2.1.6}/agno/db/dynamo/utils.py +0 -0
  60. {agno-2.1.5 → agno-2.1.6}/agno/db/firestore/__init__.py +0 -0
  61. {agno-2.1.5 → agno-2.1.6}/agno/db/firestore/firestore.py +0 -0
  62. {agno-2.1.5 → agno-2.1.6}/agno/db/firestore/schemas.py +0 -0
  63. {agno-2.1.5 → agno-2.1.6}/agno/db/firestore/utils.py +0 -0
  64. {agno-2.1.5 → agno-2.1.6}/agno/db/gcs_json/__init__.py +0 -0
  65. {agno-2.1.5 → agno-2.1.6}/agno/db/gcs_json/gcs_json_db.py +0 -0
  66. {agno-2.1.5 → agno-2.1.6}/agno/db/gcs_json/utils.py +0 -0
  67. {agno-2.1.5 → agno-2.1.6}/agno/db/in_memory/__init__.py +0 -0
  68. {agno-2.1.5 → agno-2.1.6}/agno/db/in_memory/in_memory_db.py +0 -0
  69. {agno-2.1.5 → agno-2.1.6}/agno/db/in_memory/utils.py +0 -0
  70. {agno-2.1.5 → agno-2.1.6}/agno/db/json/__init__.py +0 -0
  71. {agno-2.1.5 → agno-2.1.6}/agno/db/json/json_db.py +0 -0
  72. {agno-2.1.5 → agno-2.1.6}/agno/db/json/utils.py +0 -0
  73. {agno-2.1.5 → agno-2.1.6}/agno/db/migrations/__init__.py +0 -0
  74. {agno-2.1.5 → agno-2.1.6}/agno/db/mongo/__init__.py +0 -0
  75. {agno-2.1.5 → agno-2.1.6}/agno/db/mongo/schemas.py +0 -0
  76. {agno-2.1.5 → agno-2.1.6}/agno/db/mysql/__init__.py +0 -0
  77. {agno-2.1.5 → agno-2.1.6}/agno/db/mysql/schemas.py +0 -0
  78. {agno-2.1.5 → agno-2.1.6}/agno/db/mysql/utils.py +0 -0
  79. {agno-2.1.5 → agno-2.1.6}/agno/db/postgres/__init__.py +0 -0
  80. {agno-2.1.5 → agno-2.1.6}/agno/db/postgres/schemas.py +0 -0
  81. {agno-2.1.5 → agno-2.1.6}/agno/db/postgres/utils.py +0 -0
  82. {agno-2.1.5 → agno-2.1.6}/agno/db/redis/__init__.py +0 -0
  83. {agno-2.1.5 → agno-2.1.6}/agno/db/redis/redis.py +0 -0
  84. {agno-2.1.5 → agno-2.1.6}/agno/db/redis/schemas.py +0 -0
  85. {agno-2.1.5 → agno-2.1.6}/agno/db/redis/utils.py +0 -0
  86. {agno-2.1.5 → agno-2.1.6}/agno/db/schemas/__init__.py +0 -0
  87. {agno-2.1.5 → agno-2.1.6}/agno/db/schemas/evals.py +0 -0
  88. {agno-2.1.5 → agno-2.1.6}/agno/db/schemas/knowledge.py +0 -0
  89. {agno-2.1.5 → agno-2.1.6}/agno/db/schemas/memory.py +0 -0
  90. {agno-2.1.5 → agno-2.1.6}/agno/db/schemas/metrics.py +0 -0
  91. {agno-2.1.5 → agno-2.1.6}/agno/db/singlestore/__init__.py +0 -0
  92. {agno-2.1.5 → agno-2.1.6}/agno/db/singlestore/schemas.py +0 -0
  93. {agno-2.1.5 → agno-2.1.6}/agno/db/singlestore/utils.py +0 -0
  94. {agno-2.1.5 → agno-2.1.6}/agno/db/sqlite/__init__.py +0 -0
  95. {agno-2.1.5 → agno-2.1.6}/agno/db/sqlite/schemas.py +0 -0
  96. {agno-2.1.5 → agno-2.1.6}/agno/db/sqlite/utils.py +0 -0
  97. {agno-2.1.5 → agno-2.1.6}/agno/db/utils.py +0 -0
  98. {agno-2.1.5 → agno-2.1.6}/agno/debug.py +0 -0
  99. {agno-2.1.5 → agno-2.1.6}/agno/eval/__init__.py +0 -0
  100. {agno-2.1.5 → agno-2.1.6}/agno/eval/accuracy.py +0 -0
  101. {agno-2.1.5 → agno-2.1.6}/agno/eval/performance.py +0 -0
  102. {agno-2.1.5 → agno-2.1.6}/agno/eval/reliability.py +0 -0
  103. {agno-2.1.5 → agno-2.1.6}/agno/eval/utils.py +0 -0
  104. {agno-2.1.5 → agno-2.1.6}/agno/exceptions.py +0 -0
  105. {agno-2.1.5 → agno-2.1.6}/agno/guardrails/__init__.py +0 -0
  106. {agno-2.1.5 → agno-2.1.6}/agno/guardrails/base.py +0 -0
  107. {agno-2.1.5 → agno-2.1.6}/agno/guardrails/openai.py +0 -0
  108. {agno-2.1.5 → agno-2.1.6}/agno/guardrails/pii.py +0 -0
  109. {agno-2.1.5 → agno-2.1.6}/agno/guardrails/prompt_injection.py +0 -0
  110. {agno-2.1.5 → agno-2.1.6}/agno/integrations/__init__.py +0 -0
  111. {agno-2.1.5 → agno-2.1.6}/agno/integrations/discord/__init__.py +0 -0
  112. {agno-2.1.5 → agno-2.1.6}/agno/integrations/discord/client.py +0 -0
  113. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/__init__.py +0 -0
  114. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/chunking/__init__.py +0 -0
  115. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/chunking/agentic.py +0 -0
  116. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/chunking/document.py +0 -0
  117. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/chunking/fixed.py +0 -0
  118. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/chunking/markdown.py +0 -0
  119. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/chunking/recursive.py +0 -0
  120. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/chunking/row.py +0 -0
  121. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/chunking/semantic.py +0 -0
  122. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/chunking/strategy.py +0 -0
  123. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/content.py +0 -0
  124. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/document/__init__.py +0 -0
  125. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/document/base.py +0 -0
  126. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/__init__.py +0 -0
  127. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  128. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/azure_openai.py +0 -0
  129. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/base.py +0 -0
  130. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/cohere.py +0 -0
  131. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/fastembed.py +0 -0
  132. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/fireworks.py +0 -0
  133. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/google.py +0 -0
  134. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/huggingface.py +0 -0
  135. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/jina.py +0 -0
  136. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/langdb.py +0 -0
  137. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/mistral.py +0 -0
  138. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/nebius.py +0 -0
  139. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/ollama.py +0 -0
  140. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/openai.py +0 -0
  141. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  142. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/together.py +0 -0
  143. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/embedder/voyageai.py +0 -0
  144. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/knowledge.py +0 -0
  145. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/__init__.py +0 -0
  146. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/arxiv_reader.py +0 -0
  147. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/base.py +0 -0
  148. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/csv_reader.py +0 -0
  149. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/docx_reader.py +0 -0
  150. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
  151. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  152. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/json_reader.py +0 -0
  153. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/markdown_reader.py +0 -0
  154. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/pdf_reader.py +0 -0
  155. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/reader_factory.py +0 -0
  156. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/s3_reader.py +0 -0
  157. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/text_reader.py +0 -0
  158. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/web_search_reader.py +0 -0
  159. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/website_reader.py +0 -0
  160. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  161. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reader/youtube_reader.py +0 -0
  162. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/remote_content/__init__.py +0 -0
  163. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/remote_content/remote_content.py +0 -0
  164. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reranker/__init__.py +0 -0
  165. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reranker/base.py +0 -0
  166. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reranker/cohere.py +0 -0
  167. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reranker/infinity.py +0 -0
  168. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  169. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/types.py +0 -0
  170. {agno-2.1.5 → agno-2.1.6}/agno/knowledge/utils.py +0 -0
  171. {agno-2.1.5 → agno-2.1.6}/agno/media.py +0 -0
  172. {agno-2.1.5 → agno-2.1.6}/agno/memory/__init__.py +0 -0
  173. {agno-2.1.5 → agno-2.1.6}/agno/models/__init__.py +0 -0
  174. {agno-2.1.5 → agno-2.1.6}/agno/models/aimlapi/__init__.py +0 -0
  175. {agno-2.1.5 → agno-2.1.6}/agno/models/aimlapi/aimlapi.py +0 -0
  176. {agno-2.1.5 → agno-2.1.6}/agno/models/anthropic/__init__.py +0 -0
  177. {agno-2.1.5 → agno-2.1.6}/agno/models/anthropic/claude.py +0 -0
  178. {agno-2.1.5 → agno-2.1.6}/agno/models/aws/__init__.py +0 -0
  179. {agno-2.1.5 → agno-2.1.6}/agno/models/aws/bedrock.py +0 -0
  180. {agno-2.1.5 → agno-2.1.6}/agno/models/aws/claude.py +0 -0
  181. {agno-2.1.5 → agno-2.1.6}/agno/models/azure/__init__.py +0 -0
  182. {agno-2.1.5 → agno-2.1.6}/agno/models/azure/ai_foundry.py +0 -0
  183. {agno-2.1.5 → agno-2.1.6}/agno/models/azure/openai_chat.py +0 -0
  184. {agno-2.1.5 → agno-2.1.6}/agno/models/base.py +0 -0
  185. {agno-2.1.5 → agno-2.1.6}/agno/models/cerebras/__init__.py +0 -0
  186. {agno-2.1.5 → agno-2.1.6}/agno/models/cerebras/cerebras.py +0 -0
  187. {agno-2.1.5 → agno-2.1.6}/agno/models/cerebras/cerebras_openai.py +0 -0
  188. {agno-2.1.5 → agno-2.1.6}/agno/models/cohere/__init__.py +0 -0
  189. {agno-2.1.5 → agno-2.1.6}/agno/models/cohere/chat.py +0 -0
  190. {agno-2.1.5 → agno-2.1.6}/agno/models/cometapi/__init__.py +0 -0
  191. {agno-2.1.5 → agno-2.1.6}/agno/models/cometapi/cometapi.py +0 -0
  192. {agno-2.1.5 → agno-2.1.6}/agno/models/dashscope/__init__.py +0 -0
  193. {agno-2.1.5 → agno-2.1.6}/agno/models/dashscope/dashscope.py +0 -0
  194. {agno-2.1.5 → agno-2.1.6}/agno/models/deepinfra/__init__.py +0 -0
  195. {agno-2.1.5 → agno-2.1.6}/agno/models/deepinfra/deepinfra.py +0 -0
  196. {agno-2.1.5 → agno-2.1.6}/agno/models/deepseek/__init__.py +0 -0
  197. {agno-2.1.5 → agno-2.1.6}/agno/models/deepseek/deepseek.py +0 -0
  198. {agno-2.1.5 → agno-2.1.6}/agno/models/defaults.py +0 -0
  199. {agno-2.1.5 → agno-2.1.6}/agno/models/fireworks/__init__.py +0 -0
  200. {agno-2.1.5 → agno-2.1.6}/agno/models/fireworks/fireworks.py +0 -0
  201. {agno-2.1.5 → agno-2.1.6}/agno/models/google/__init__.py +0 -0
  202. {agno-2.1.5 → agno-2.1.6}/agno/models/google/gemini.py +0 -0
  203. {agno-2.1.5 → agno-2.1.6}/agno/models/groq/__init__.py +0 -0
  204. {agno-2.1.5 → agno-2.1.6}/agno/models/groq/groq.py +0 -0
  205. {agno-2.1.5 → agno-2.1.6}/agno/models/huggingface/__init__.py +0 -0
  206. {agno-2.1.5 → agno-2.1.6}/agno/models/huggingface/huggingface.py +0 -0
  207. {agno-2.1.5 → agno-2.1.6}/agno/models/ibm/__init__.py +0 -0
  208. {agno-2.1.5 → agno-2.1.6}/agno/models/ibm/watsonx.py +0 -0
  209. {agno-2.1.5 → agno-2.1.6}/agno/models/internlm/__init__.py +0 -0
  210. {agno-2.1.5 → agno-2.1.6}/agno/models/internlm/internlm.py +0 -0
  211. {agno-2.1.5 → agno-2.1.6}/agno/models/langdb/__init__.py +0 -0
  212. {agno-2.1.5 → agno-2.1.6}/agno/models/langdb/langdb.py +0 -0
  213. {agno-2.1.5 → agno-2.1.6}/agno/models/litellm/__init__.py +0 -0
  214. {agno-2.1.5 → agno-2.1.6}/agno/models/litellm/chat.py +0 -0
  215. {agno-2.1.5 → agno-2.1.6}/agno/models/litellm/litellm_openai.py +0 -0
  216. {agno-2.1.5 → agno-2.1.6}/agno/models/llama_cpp/__init__.py +0 -0
  217. {agno-2.1.5 → agno-2.1.6}/agno/models/llama_cpp/llama_cpp.py +0 -0
  218. {agno-2.1.5 → agno-2.1.6}/agno/models/lmstudio/__init__.py +0 -0
  219. {agno-2.1.5 → agno-2.1.6}/agno/models/lmstudio/lmstudio.py +0 -0
  220. {agno-2.1.5 → agno-2.1.6}/agno/models/message.py +0 -0
  221. {agno-2.1.5 → agno-2.1.6}/agno/models/meta/__init__.py +0 -0
  222. {agno-2.1.5 → agno-2.1.6}/agno/models/meta/llama.py +0 -0
  223. {agno-2.1.5 → agno-2.1.6}/agno/models/meta/llama_openai.py +0 -0
  224. {agno-2.1.5 → agno-2.1.6}/agno/models/metrics.py +0 -0
  225. {agno-2.1.5 → agno-2.1.6}/agno/models/mistral/__init__.py +0 -0
  226. {agno-2.1.5 → agno-2.1.6}/agno/models/mistral/mistral.py +0 -0
  227. {agno-2.1.5 → agno-2.1.6}/agno/models/nebius/__init__.py +0 -0
  228. {agno-2.1.5 → agno-2.1.6}/agno/models/nebius/nebius.py +0 -0
  229. {agno-2.1.5 → agno-2.1.6}/agno/models/nexus/__init__.py +0 -0
  230. {agno-2.1.5 → agno-2.1.6}/agno/models/nexus/nexus.py +0 -0
  231. {agno-2.1.5 → agno-2.1.6}/agno/models/nvidia/__init__.py +0 -0
  232. {agno-2.1.5 → agno-2.1.6}/agno/models/nvidia/nvidia.py +0 -0
  233. {agno-2.1.5 → agno-2.1.6}/agno/models/ollama/__init__.py +0 -0
  234. {agno-2.1.5 → agno-2.1.6}/agno/models/ollama/chat.py +0 -0
  235. {agno-2.1.5 → agno-2.1.6}/agno/models/openai/__init__.py +0 -0
  236. {agno-2.1.5 → agno-2.1.6}/agno/models/openai/chat.py +0 -0
  237. {agno-2.1.5 → agno-2.1.6}/agno/models/openai/like.py +0 -0
  238. {agno-2.1.5 → agno-2.1.6}/agno/models/openai/responses.py +0 -0
  239. {agno-2.1.5 → agno-2.1.6}/agno/models/openrouter/__init__.py +0 -0
  240. {agno-2.1.5 → agno-2.1.6}/agno/models/openrouter/openrouter.py +0 -0
  241. {agno-2.1.5 → agno-2.1.6}/agno/models/perplexity/__init__.py +0 -0
  242. {agno-2.1.5 → agno-2.1.6}/agno/models/perplexity/perplexity.py +0 -0
  243. {agno-2.1.5 → agno-2.1.6}/agno/models/portkey/__init__.py +0 -0
  244. {agno-2.1.5 → agno-2.1.6}/agno/models/portkey/portkey.py +0 -0
  245. {agno-2.1.5 → agno-2.1.6}/agno/models/requesty/__init__.py +0 -0
  246. {agno-2.1.5 → agno-2.1.6}/agno/models/requesty/requesty.py +0 -0
  247. {agno-2.1.5 → agno-2.1.6}/agno/models/response.py +0 -0
  248. {agno-2.1.5 → agno-2.1.6}/agno/models/sambanova/__init__.py +0 -0
  249. {agno-2.1.5 → agno-2.1.6}/agno/models/sambanova/sambanova.py +0 -0
  250. {agno-2.1.5 → agno-2.1.6}/agno/models/siliconflow/__init__.py +0 -0
  251. {agno-2.1.5 → agno-2.1.6}/agno/models/siliconflow/siliconflow.py +0 -0
  252. {agno-2.1.5 → agno-2.1.6}/agno/models/together/__init__.py +0 -0
  253. {agno-2.1.5 → agno-2.1.6}/agno/models/together/together.py +0 -0
  254. {agno-2.1.5 → agno-2.1.6}/agno/models/utils.py +0 -0
  255. {agno-2.1.5 → agno-2.1.6}/agno/models/vercel/__init__.py +0 -0
  256. {agno-2.1.5 → agno-2.1.6}/agno/models/vercel/v0.py +0 -0
  257. {agno-2.1.5 → agno-2.1.6}/agno/models/vertexai/__init__.py +0 -0
  258. {agno-2.1.5 → agno-2.1.6}/agno/models/vertexai/claude.py +0 -0
  259. {agno-2.1.5 → agno-2.1.6}/agno/models/vllm/__init__.py +0 -0
  260. {agno-2.1.5 → agno-2.1.6}/agno/models/vllm/vllm.py +0 -0
  261. {agno-2.1.5 → agno-2.1.6}/agno/models/xai/__init__.py +0 -0
  262. {agno-2.1.5 → agno-2.1.6}/agno/models/xai/xai.py +0 -0
  263. {agno-2.1.5 → agno-2.1.6}/agno/os/__init__.py +0 -0
  264. {agno-2.1.5 → agno-2.1.6}/agno/os/app.py +0 -0
  265. {agno-2.1.5 → agno-2.1.6}/agno/os/auth.py +0 -0
  266. {agno-2.1.5 → agno-2.1.6}/agno/os/config.py +0 -0
  267. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/__init__.py +0 -0
  268. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/a2a/__init__.py +0 -0
  269. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/a2a/a2a.py +0 -0
  270. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/a2a/router.py +0 -0
  271. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/a2a/utils.py +0 -0
  272. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/agui/__init__.py +0 -0
  273. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/agui/agui.py +0 -0
  274. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/agui/router.py +0 -0
  275. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/agui/utils.py +0 -0
  276. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/base.py +0 -0
  277. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/slack/__init__.py +0 -0
  278. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/slack/router.py +0 -0
  279. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/slack/security.py +0 -0
  280. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/slack/slack.py +0 -0
  281. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  282. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/whatsapp/router.py +0 -0
  283. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/whatsapp/security.py +0 -0
  284. {agno-2.1.5 → agno-2.1.6}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  285. {agno-2.1.5 → agno-2.1.6}/agno/os/mcp.py +0 -0
  286. {agno-2.1.5 → agno-2.1.6}/agno/os/middleware/__init__.py +0 -0
  287. {agno-2.1.5 → agno-2.1.6}/agno/os/middleware/jwt.py +0 -0
  288. {agno-2.1.5 → agno-2.1.6}/agno/os/router.py +0 -0
  289. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/__init__.py +0 -0
  290. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/evals/__init__.py +0 -0
  291. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/evals/evals.py +0 -0
  292. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/evals/schemas.py +0 -0
  293. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/evals/utils.py +0 -0
  294. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/health.py +0 -0
  295. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/home.py +0 -0
  296. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/knowledge/__init__.py +0 -0
  297. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/knowledge/knowledge.py +0 -0
  298. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/knowledge/schemas.py +0 -0
  299. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/memory/__init__.py +0 -0
  300. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/memory/memory.py +0 -0
  301. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/memory/schemas.py +0 -0
  302. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/metrics/__init__.py +0 -0
  303. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/metrics/metrics.py +0 -0
  304. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/metrics/schemas.py +0 -0
  305. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/session/__init__.py +0 -0
  306. {agno-2.1.5 → agno-2.1.6}/agno/os/routers/session/session.py +0 -0
  307. {agno-2.1.5 → agno-2.1.6}/agno/os/schema.py +0 -0
  308. {agno-2.1.5 → agno-2.1.6}/agno/os/settings.py +0 -0
  309. {agno-2.1.5 → agno-2.1.6}/agno/py.typed +0 -0
  310. {agno-2.1.5 → agno-2.1.6}/agno/reasoning/__init__.py +0 -0
  311. {agno-2.1.5 → agno-2.1.6}/agno/reasoning/anthropic.py +0 -0
  312. {agno-2.1.5 → agno-2.1.6}/agno/reasoning/azure_ai_foundry.py +0 -0
  313. {agno-2.1.5 → agno-2.1.6}/agno/reasoning/deepseek.py +0 -0
  314. {agno-2.1.5 → agno-2.1.6}/agno/reasoning/default.py +0 -0
  315. {agno-2.1.5 → agno-2.1.6}/agno/reasoning/gemini.py +0 -0
  316. {agno-2.1.5 → agno-2.1.6}/agno/reasoning/groq.py +0 -0
  317. {agno-2.1.5 → agno-2.1.6}/agno/reasoning/helpers.py +0 -0
  318. {agno-2.1.5 → agno-2.1.6}/agno/reasoning/ollama.py +0 -0
  319. {agno-2.1.5 → agno-2.1.6}/agno/reasoning/openai.py +0 -0
  320. {agno-2.1.5 → agno-2.1.6}/agno/reasoning/step.py +0 -0
  321. {agno-2.1.5 → agno-2.1.6}/agno/reasoning/vertexai.py +0 -0
  322. {agno-2.1.5 → agno-2.1.6}/agno/run/__init__.py +0 -0
  323. {agno-2.1.5 → agno-2.1.6}/agno/run/agent.py +0 -0
  324. {agno-2.1.5 → agno-2.1.6}/agno/run/base.py +0 -0
  325. {agno-2.1.5 → agno-2.1.6}/agno/run/cancel.py +0 -0
  326. {agno-2.1.5 → agno-2.1.6}/agno/run/messages.py +0 -0
  327. {agno-2.1.5 → agno-2.1.6}/agno/run/team.py +0 -0
  328. {agno-2.1.5 → agno-2.1.6}/agno/run/workflow.py +0 -0
  329. {agno-2.1.5 → agno-2.1.6}/agno/session/__init__.py +0 -0
  330. {agno-2.1.5 → agno-2.1.6}/agno/session/agent.py +0 -0
  331. {agno-2.1.5 → agno-2.1.6}/agno/session/summary.py +0 -0
  332. {agno-2.1.5 → agno-2.1.6}/agno/session/team.py +0 -0
  333. {agno-2.1.5 → agno-2.1.6}/agno/session/workflow.py +0 -0
  334. {agno-2.1.5 → agno-2.1.6}/agno/team/__init__.py +0 -0
  335. {agno-2.1.5 → agno-2.1.6}/agno/tools/__init__.py +0 -0
  336. {agno-2.1.5 → agno-2.1.6}/agno/tools/agentql.py +0 -0
  337. {agno-2.1.5 → agno-2.1.6}/agno/tools/airflow.py +0 -0
  338. {agno-2.1.5 → agno-2.1.6}/agno/tools/api.py +0 -0
  339. {agno-2.1.5 → agno-2.1.6}/agno/tools/apify.py +0 -0
  340. {agno-2.1.5 → agno-2.1.6}/agno/tools/arxiv.py +0 -0
  341. {agno-2.1.5 → agno-2.1.6}/agno/tools/aws_lambda.py +0 -0
  342. {agno-2.1.5 → agno-2.1.6}/agno/tools/aws_ses.py +0 -0
  343. {agno-2.1.5 → agno-2.1.6}/agno/tools/baidusearch.py +0 -0
  344. {agno-2.1.5 → agno-2.1.6}/agno/tools/bitbucket.py +0 -0
  345. {agno-2.1.5 → agno-2.1.6}/agno/tools/brandfetch.py +0 -0
  346. {agno-2.1.5 → agno-2.1.6}/agno/tools/bravesearch.py +0 -0
  347. {agno-2.1.5 → agno-2.1.6}/agno/tools/brightdata.py +0 -0
  348. {agno-2.1.5 → agno-2.1.6}/agno/tools/browserbase.py +0 -0
  349. {agno-2.1.5 → agno-2.1.6}/agno/tools/calcom.py +0 -0
  350. {agno-2.1.5 → agno-2.1.6}/agno/tools/calculator.py +0 -0
  351. {agno-2.1.5 → agno-2.1.6}/agno/tools/cartesia.py +0 -0
  352. {agno-2.1.5 → agno-2.1.6}/agno/tools/clickup.py +0 -0
  353. {agno-2.1.5 → agno-2.1.6}/agno/tools/confluence.py +0 -0
  354. {agno-2.1.5 → agno-2.1.6}/agno/tools/crawl4ai.py +0 -0
  355. {agno-2.1.5 → agno-2.1.6}/agno/tools/csv_toolkit.py +0 -0
  356. {agno-2.1.5 → agno-2.1.6}/agno/tools/dalle.py +0 -0
  357. {agno-2.1.5 → agno-2.1.6}/agno/tools/daytona.py +0 -0
  358. {agno-2.1.5 → agno-2.1.6}/agno/tools/decorator.py +0 -0
  359. {agno-2.1.5 → agno-2.1.6}/agno/tools/desi_vocal.py +0 -0
  360. {agno-2.1.5 → agno-2.1.6}/agno/tools/discord.py +0 -0
  361. {agno-2.1.5 → agno-2.1.6}/agno/tools/docker.py +0 -0
  362. {agno-2.1.5 → agno-2.1.6}/agno/tools/duckdb.py +0 -0
  363. {agno-2.1.5 → agno-2.1.6}/agno/tools/duckduckgo.py +0 -0
  364. {agno-2.1.5 → agno-2.1.6}/agno/tools/e2b.py +0 -0
  365. {agno-2.1.5 → agno-2.1.6}/agno/tools/eleven_labs.py +0 -0
  366. {agno-2.1.5 → agno-2.1.6}/agno/tools/email.py +0 -0
  367. {agno-2.1.5 → agno-2.1.6}/agno/tools/evm.py +0 -0
  368. {agno-2.1.5 → agno-2.1.6}/agno/tools/exa.py +0 -0
  369. {agno-2.1.5 → agno-2.1.6}/agno/tools/fal.py +0 -0
  370. {agno-2.1.5 → agno-2.1.6}/agno/tools/file.py +0 -0
  371. {agno-2.1.5 → agno-2.1.6}/agno/tools/file_generation.py +0 -0
  372. {agno-2.1.5 → agno-2.1.6}/agno/tools/financial_datasets.py +0 -0
  373. {agno-2.1.5 → agno-2.1.6}/agno/tools/firecrawl.py +0 -0
  374. {agno-2.1.5 → agno-2.1.6}/agno/tools/function.py +0 -0
  375. {agno-2.1.5 → agno-2.1.6}/agno/tools/giphy.py +0 -0
  376. {agno-2.1.5 → agno-2.1.6}/agno/tools/github.py +0 -0
  377. {agno-2.1.5 → agno-2.1.6}/agno/tools/gmail.py +0 -0
  378. {agno-2.1.5 → agno-2.1.6}/agno/tools/google_bigquery.py +0 -0
  379. {agno-2.1.5 → agno-2.1.6}/agno/tools/google_drive.py +0 -0
  380. {agno-2.1.5 → agno-2.1.6}/agno/tools/google_maps.py +0 -0
  381. {agno-2.1.5 → agno-2.1.6}/agno/tools/googlecalendar.py +0 -0
  382. {agno-2.1.5 → agno-2.1.6}/agno/tools/googlesearch.py +0 -0
  383. {agno-2.1.5 → agno-2.1.6}/agno/tools/googlesheets.py +0 -0
  384. {agno-2.1.5 → agno-2.1.6}/agno/tools/hackernews.py +0 -0
  385. {agno-2.1.5 → agno-2.1.6}/agno/tools/jina.py +0 -0
  386. {agno-2.1.5 → agno-2.1.6}/agno/tools/jira.py +0 -0
  387. {agno-2.1.5 → agno-2.1.6}/agno/tools/knowledge.py +0 -0
  388. {agno-2.1.5 → agno-2.1.6}/agno/tools/linear.py +0 -0
  389. {agno-2.1.5 → agno-2.1.6}/agno/tools/linkup.py +0 -0
  390. {agno-2.1.5 → agno-2.1.6}/agno/tools/local_file_system.py +0 -0
  391. {agno-2.1.5 → agno-2.1.6}/agno/tools/lumalab.py +0 -0
  392. {agno-2.1.5 → agno-2.1.6}/agno/tools/mcp.py +0 -0
  393. {agno-2.1.5 → agno-2.1.6}/agno/tools/mcp_toolbox.py +0 -0
  394. {agno-2.1.5 → agno-2.1.6}/agno/tools/mem0.py +0 -0
  395. {agno-2.1.5 → agno-2.1.6}/agno/tools/memori.py +0 -0
  396. {agno-2.1.5 → agno-2.1.6}/agno/tools/memory.py +0 -0
  397. {agno-2.1.5 → agno-2.1.6}/agno/tools/mlx_transcribe.py +0 -0
  398. {agno-2.1.5 → agno-2.1.6}/agno/tools/models/__init__.py +0 -0
  399. {agno-2.1.5 → agno-2.1.6}/agno/tools/models/azure_openai.py +0 -0
  400. {agno-2.1.5 → agno-2.1.6}/agno/tools/models/gemini.py +0 -0
  401. {agno-2.1.5 → agno-2.1.6}/agno/tools/models/groq.py +0 -0
  402. {agno-2.1.5 → agno-2.1.6}/agno/tools/models/morph.py +0 -0
  403. {agno-2.1.5 → agno-2.1.6}/agno/tools/models/nebius.py +0 -0
  404. {agno-2.1.5 → agno-2.1.6}/agno/tools/models_labs.py +0 -0
  405. {agno-2.1.5 → agno-2.1.6}/agno/tools/moviepy_video.py +0 -0
  406. {agno-2.1.5 → agno-2.1.6}/agno/tools/neo4j.py +0 -0
  407. {agno-2.1.5 → agno-2.1.6}/agno/tools/newspaper.py +0 -0
  408. {agno-2.1.5 → agno-2.1.6}/agno/tools/newspaper4k.py +0 -0
  409. {agno-2.1.5 → agno-2.1.6}/agno/tools/openai.py +0 -0
  410. {agno-2.1.5 → agno-2.1.6}/agno/tools/openbb.py +0 -0
  411. {agno-2.1.5 → agno-2.1.6}/agno/tools/opencv.py +0 -0
  412. {agno-2.1.5 → agno-2.1.6}/agno/tools/openweather.py +0 -0
  413. {agno-2.1.5 → agno-2.1.6}/agno/tools/oxylabs.py +0 -0
  414. {agno-2.1.5 → agno-2.1.6}/agno/tools/pandas.py +0 -0
  415. {agno-2.1.5 → agno-2.1.6}/agno/tools/postgres.py +0 -0
  416. {agno-2.1.5 → agno-2.1.6}/agno/tools/pubmed.py +0 -0
  417. {agno-2.1.5 → agno-2.1.6}/agno/tools/python.py +0 -0
  418. {agno-2.1.5 → agno-2.1.6}/agno/tools/reasoning.py +0 -0
  419. {agno-2.1.5 → agno-2.1.6}/agno/tools/reddit.py +0 -0
  420. {agno-2.1.5 → agno-2.1.6}/agno/tools/replicate.py +0 -0
  421. {agno-2.1.5 → agno-2.1.6}/agno/tools/resend.py +0 -0
  422. {agno-2.1.5 → agno-2.1.6}/agno/tools/scrapegraph.py +0 -0
  423. {agno-2.1.5 → agno-2.1.6}/agno/tools/searxng.py +0 -0
  424. {agno-2.1.5 → agno-2.1.6}/agno/tools/serpapi.py +0 -0
  425. {agno-2.1.5 → agno-2.1.6}/agno/tools/serper.py +0 -0
  426. {agno-2.1.5 → agno-2.1.6}/agno/tools/shell.py +0 -0
  427. {agno-2.1.5 → agno-2.1.6}/agno/tools/slack.py +0 -0
  428. {agno-2.1.5 → agno-2.1.6}/agno/tools/sleep.py +0 -0
  429. {agno-2.1.5 → agno-2.1.6}/agno/tools/spider.py +0 -0
  430. {agno-2.1.5 → agno-2.1.6}/agno/tools/sql.py +0 -0
  431. {agno-2.1.5 → agno-2.1.6}/agno/tools/streamlit/__init__.py +0 -0
  432. {agno-2.1.5 → agno-2.1.6}/agno/tools/streamlit/components.py +0 -0
  433. {agno-2.1.5 → agno-2.1.6}/agno/tools/tavily.py +0 -0
  434. {agno-2.1.5 → agno-2.1.6}/agno/tools/telegram.py +0 -0
  435. {agno-2.1.5 → agno-2.1.6}/agno/tools/todoist.py +0 -0
  436. {agno-2.1.5 → agno-2.1.6}/agno/tools/tool_registry.py +0 -0
  437. {agno-2.1.5 → agno-2.1.6}/agno/tools/toolkit.py +0 -0
  438. {agno-2.1.5 → agno-2.1.6}/agno/tools/trafilatura.py +0 -0
  439. {agno-2.1.5 → agno-2.1.6}/agno/tools/trello.py +0 -0
  440. {agno-2.1.5 → agno-2.1.6}/agno/tools/twilio.py +0 -0
  441. {agno-2.1.5 → agno-2.1.6}/agno/tools/user_control_flow.py +0 -0
  442. {agno-2.1.5 → agno-2.1.6}/agno/tools/valyu.py +0 -0
  443. {agno-2.1.5 → agno-2.1.6}/agno/tools/visualization.py +0 -0
  444. {agno-2.1.5 → agno-2.1.6}/agno/tools/webbrowser.py +0 -0
  445. {agno-2.1.5 → agno-2.1.6}/agno/tools/webex.py +0 -0
  446. {agno-2.1.5 → agno-2.1.6}/agno/tools/website.py +0 -0
  447. {agno-2.1.5 → agno-2.1.6}/agno/tools/webtools.py +0 -0
  448. {agno-2.1.5 → agno-2.1.6}/agno/tools/whatsapp.py +0 -0
  449. {agno-2.1.5 → agno-2.1.6}/agno/tools/wikipedia.py +0 -0
  450. {agno-2.1.5 → agno-2.1.6}/agno/tools/workflow.py +0 -0
  451. {agno-2.1.5 → agno-2.1.6}/agno/tools/x.py +0 -0
  452. {agno-2.1.5 → agno-2.1.6}/agno/tools/yfinance.py +0 -0
  453. {agno-2.1.5 → agno-2.1.6}/agno/tools/youtube.py +0 -0
  454. {agno-2.1.5 → agno-2.1.6}/agno/tools/zendesk.py +0 -0
  455. {agno-2.1.5 → agno-2.1.6}/agno/tools/zep.py +0 -0
  456. {agno-2.1.5 → agno-2.1.6}/agno/tools/zoom.py +0 -0
  457. {agno-2.1.5 → agno-2.1.6}/agno/utils/__init__.py +0 -0
  458. {agno-2.1.5 → agno-2.1.6}/agno/utils/audio.py +0 -0
  459. {agno-2.1.5 → agno-2.1.6}/agno/utils/certs.py +0 -0
  460. {agno-2.1.5 → agno-2.1.6}/agno/utils/code_execution.py +0 -0
  461. {agno-2.1.5 → agno-2.1.6}/agno/utils/common.py +0 -0
  462. {agno-2.1.5 → agno-2.1.6}/agno/utils/dttm.py +0 -0
  463. {agno-2.1.5 → agno-2.1.6}/agno/utils/enum.py +0 -0
  464. {agno-2.1.5 → agno-2.1.6}/agno/utils/env.py +0 -0
  465. {agno-2.1.5 → agno-2.1.6}/agno/utils/events.py +0 -0
  466. {agno-2.1.5 → agno-2.1.6}/agno/utils/format_str.py +0 -0
  467. {agno-2.1.5 → agno-2.1.6}/agno/utils/functions.py +0 -0
  468. {agno-2.1.5 → agno-2.1.6}/agno/utils/gemini.py +0 -0
  469. {agno-2.1.5 → agno-2.1.6}/agno/utils/hooks.py +0 -0
  470. {agno-2.1.5 → agno-2.1.6}/agno/utils/http.py +0 -0
  471. {agno-2.1.5 → agno-2.1.6}/agno/utils/json_schema.py +0 -0
  472. {agno-2.1.5 → agno-2.1.6}/agno/utils/knowledge.py +0 -0
  473. {agno-2.1.5 → agno-2.1.6}/agno/utils/location.py +0 -0
  474. {agno-2.1.5 → agno-2.1.6}/agno/utils/log.py +0 -0
  475. {agno-2.1.5 → agno-2.1.6}/agno/utils/mcp.py +0 -0
  476. {agno-2.1.5 → agno-2.1.6}/agno/utils/media.py +0 -0
  477. {agno-2.1.5 → agno-2.1.6}/agno/utils/merge_dict.py +0 -0
  478. {agno-2.1.5 → agno-2.1.6}/agno/utils/message.py +0 -0
  479. {agno-2.1.5 → agno-2.1.6}/agno/utils/models/__init__.py +0 -0
  480. {agno-2.1.5 → agno-2.1.6}/agno/utils/models/ai_foundry.py +0 -0
  481. {agno-2.1.5 → agno-2.1.6}/agno/utils/models/claude.py +0 -0
  482. {agno-2.1.5 → agno-2.1.6}/agno/utils/models/cohere.py +0 -0
  483. {agno-2.1.5 → agno-2.1.6}/agno/utils/models/llama.py +0 -0
  484. {agno-2.1.5 → agno-2.1.6}/agno/utils/models/mistral.py +0 -0
  485. {agno-2.1.5 → agno-2.1.6}/agno/utils/models/openai_responses.py +0 -0
  486. {agno-2.1.5 → agno-2.1.6}/agno/utils/models/schema_utils.py +0 -0
  487. {agno-2.1.5 → agno-2.1.6}/agno/utils/models/watsonx.py +0 -0
  488. {agno-2.1.5 → agno-2.1.6}/agno/utils/openai.py +0 -0
  489. {agno-2.1.5 → agno-2.1.6}/agno/utils/pickle.py +0 -0
  490. {agno-2.1.5 → agno-2.1.6}/agno/utils/pprint.py +0 -0
  491. {agno-2.1.5 → agno-2.1.6}/agno/utils/print_response/__init__.py +0 -0
  492. {agno-2.1.5 → agno-2.1.6}/agno/utils/print_response/agent.py +0 -0
  493. {agno-2.1.5 → agno-2.1.6}/agno/utils/print_response/team.py +0 -0
  494. {agno-2.1.5 → agno-2.1.6}/agno/utils/print_response/workflow.py +0 -0
  495. {agno-2.1.5 → agno-2.1.6}/agno/utils/prompts.py +0 -0
  496. {agno-2.1.5 → agno-2.1.6}/agno/utils/reasoning.py +0 -0
  497. {agno-2.1.5 → agno-2.1.6}/agno/utils/response.py +0 -0
  498. {agno-2.1.5 → agno-2.1.6}/agno/utils/response_iterator.py +0 -0
  499. {agno-2.1.5 → agno-2.1.6}/agno/utils/safe_formatter.py +0 -0
  500. {agno-2.1.5 → agno-2.1.6}/agno/utils/serialize.py +0 -0
  501. {agno-2.1.5 → agno-2.1.6}/agno/utils/shell.py +0 -0
  502. {agno-2.1.5 → agno-2.1.6}/agno/utils/streamlit.py +0 -0
  503. {agno-2.1.5 → agno-2.1.6}/agno/utils/string.py +0 -0
  504. {agno-2.1.5 → agno-2.1.6}/agno/utils/team.py +0 -0
  505. {agno-2.1.5 → agno-2.1.6}/agno/utils/timer.py +0 -0
  506. {agno-2.1.5 → agno-2.1.6}/agno/utils/tools.py +0 -0
  507. {agno-2.1.5 → agno-2.1.6}/agno/utils/web.py +0 -0
  508. {agno-2.1.5 → agno-2.1.6}/agno/utils/whatsapp.py +0 -0
  509. {agno-2.1.5 → agno-2.1.6}/agno/utils/yaml_io.py +0 -0
  510. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/__init__.py +0 -0
  511. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/base.py +0 -0
  512. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/cassandra/__init__.py +0 -0
  513. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/cassandra/cassandra.py +0 -0
  514. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  515. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/cassandra/index.py +0 -0
  516. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/chroma/__init__.py +0 -0
  517. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/chroma/chromadb.py +0 -0
  518. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/clickhouse/__init__.py +0 -0
  519. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  520. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/clickhouse/index.py +0 -0
  521. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/couchbase/__init__.py +0 -0
  522. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/couchbase/couchbase.py +0 -0
  523. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/distance.py +0 -0
  524. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/lancedb/__init__.py +0 -0
  525. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/lancedb/lance_db.py +0 -0
  526. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/langchaindb/__init__.py +0 -0
  527. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  528. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/lightrag/__init__.py +0 -0
  529. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/lightrag/lightrag.py +0 -0
  530. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/llamaindex/__init__.py +0 -0
  531. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  532. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/milvus/__init__.py +0 -0
  533. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/milvus/milvus.py +0 -0
  534. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/mongodb/__init__.py +0 -0
  535. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/mongodb/mongodb.py +0 -0
  536. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/pgvector/__init__.py +0 -0
  537. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/pgvector/index.py +0 -0
  538. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/pgvector/pgvector.py +0 -0
  539. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/pineconedb/__init__.py +0 -0
  540. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  541. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/qdrant/__init__.py +0 -0
  542. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/qdrant/qdrant.py +0 -0
  543. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/search.py +0 -0
  544. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/singlestore/__init__.py +0 -0
  545. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/singlestore/index.py +0 -0
  546. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/singlestore/singlestore.py +0 -0
  547. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/surrealdb/__init__.py +0 -0
  548. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/upstashdb/__init__.py +0 -0
  549. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  550. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/weaviate/__init__.py +0 -0
  551. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/weaviate/index.py +0 -0
  552. {agno-2.1.5 → agno-2.1.6}/agno/vectordb/weaviate/weaviate.py +0 -0
  553. {agno-2.1.5 → agno-2.1.6}/agno/workflow/__init__.py +0 -0
  554. {agno-2.1.5 → agno-2.1.6}/agno/workflow/condition.py +0 -0
  555. {agno-2.1.5 → agno-2.1.6}/agno/workflow/loop.py +0 -0
  556. {agno-2.1.5 → agno-2.1.6}/agno/workflow/parallel.py +0 -0
  557. {agno-2.1.5 → agno-2.1.6}/agno/workflow/router.py +0 -0
  558. {agno-2.1.5 → agno-2.1.6}/agno/workflow/steps.py +0 -0
  559. {agno-2.1.5 → agno-2.1.6}/agno/workflow/types.py +0 -0
  560. {agno-2.1.5 → agno-2.1.6}/agno/workflow/workflow.py +0 -0
  561. {agno-2.1.5 → agno-2.1.6}/agno.egg-info/dependency_links.txt +0 -0
  562. {agno-2.1.5 → agno-2.1.6}/agno.egg-info/requires.txt +0 -0
  563. {agno-2.1.5 → agno-2.1.6}/agno.egg-info/top_level.txt +0 -0
  564. {agno-2.1.5 → agno-2.1.6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.1.5
3
+ Version: 2.1.6
4
4
  Summary: Agno: a lightweight library for building Multi-Agent Systems
5
5
  Author-email: Ashpreet Bedi <ashpreet@agno.com>
6
6
  Project-URL: homepage, https://agno.com
@@ -248,7 +248,7 @@ class Agent:
248
248
  # If True, store media in run output
249
249
  store_media: bool = True
250
250
  # If True, store tool results in run output
251
- store_tool_results: bool = True
251
+ store_tool_messages: bool = True
252
252
  # If True, store history messages in run output
253
253
  store_history_messages: bool = True
254
254
 
@@ -388,7 +388,7 @@ class Agent:
388
388
  add_history_to_context: bool = False,
389
389
  num_history_runs: int = 3,
390
390
  store_media: bool = True,
391
- store_tool_results: bool = True,
391
+ store_tool_messages: bool = True,
392
392
  store_history_messages: bool = True,
393
393
  knowledge: Optional[Knowledge] = None,
394
394
  knowledge_filters: Optional[Dict[str, Any]] = None,
@@ -490,7 +490,7 @@ class Agent:
490
490
  )
491
491
 
492
492
  self.store_media = store_media
493
- self.store_tool_results = store_tool_results
493
+ self.store_tool_messages = store_tool_messages
494
494
  self.store_history_messages = store_history_messages
495
495
 
496
496
  self.knowledge = knowledge
@@ -1473,7 +1473,6 @@ class Agent:
1473
1473
 
1474
1474
  async def _arun(
1475
1475
  self,
1476
- input: Union[str, List, Dict, Message, BaseModel, List[Message]],
1477
1476
  run_response: RunOutput,
1478
1477
  session_id: str,
1479
1478
  session_state: Optional[Dict[str, Any]] = None,
@@ -1696,7 +1695,6 @@ class Agent:
1696
1695
 
1697
1696
  async def _arun_stream(
1698
1697
  self,
1699
- input: Union[str, List, Dict, Message, BaseModel, List[Message]],
1700
1698
  run_response: RunOutput,
1701
1699
  session_id: str,
1702
1700
  session_state: Optional[Dict[str, Any]] = None,
@@ -2133,7 +2131,6 @@ class Agent:
2133
2131
  # Pass the new run_response to _arun
2134
2132
  if stream:
2135
2133
  return self._arun_stream( # type: ignore
2136
- input=validated_input,
2137
2134
  run_response=run_response,
2138
2135
  user_id=user_id,
2139
2136
  response_format=response_format,
@@ -2152,7 +2149,6 @@ class Agent:
2152
2149
  ) # type: ignore[assignment]
2153
2150
  else:
2154
2151
  return self._arun( # type: ignore
2155
- input=validated_input,
2156
2152
  run_response=run_response,
2157
2153
  user_id=user_id,
2158
2154
  response_format=response_format,
@@ -4421,7 +4417,9 @@ class Agent:
4421
4417
 
4422
4418
  if len(parsed_messages) > 0:
4423
4419
  tasks.append(
4424
- self.memory_manager.acreate_user_memories(messages=parsed_messages, user_id=user_id, agent_id=self.id)
4420
+ self.memory_manager.acreate_user_memories(
4421
+ messages=parsed_messages, user_id=user_id, agent_id=self.id
4422
+ )
4425
4423
  )
4426
4424
  else:
4427
4425
  log_warning("Unable to add messages to memory")
@@ -5879,9 +5877,7 @@ class Agent:
5879
5877
  user_memories = self.memory_manager.get_user_memories(user_id=user_id) # type: ignore
5880
5878
 
5881
5879
  if user_memories and len(user_memories) > 0:
5882
- system_message_content += (
5883
- "You have access to memories from previous interactions with the user that you can use:\n\n"
5884
- )
5880
+ system_message_content += "You have access to user info and preferences from previous interactions that you can use to personalize your response:\n\n"
5885
5881
  system_message_content += "<memories_from_previous_interactions>"
5886
5882
  for _memory in user_memories: # type: ignore
5887
5883
  system_message_content += f"\n- {_memory.memory}"
@@ -6155,9 +6151,7 @@ class Agent:
6155
6151
  user_memories = self.memory_manager.get_user_memories(user_id=user_id) # type: ignore
6156
6152
 
6157
6153
  if user_memories and len(user_memories) > 0:
6158
- system_message_content += (
6159
- "You have access to memories from previous interactions with the user that you can use:\n\n"
6160
- )
6154
+ system_message_content += "You have access to user info and preferences from previous interactions that you can use to personalize your response:\n\n"
6161
6155
  system_message_content += "<memories_from_previous_interactions>"
6162
6156
  for _memory in user_memories: # type: ignore
6163
6157
  system_message_content += f"\n- {_memory.memory}"
@@ -8837,8 +8831,6 @@ class Agent:
8837
8831
  run_response.input.audios = []
8838
8832
  run_response.input.files = []
8839
8833
 
8840
- # 2. RunOutput artifact media are skipped since we don't store them when store_media=False
8841
-
8842
8834
  # 3. Scrub media from all messages
8843
8835
  if run_response.messages:
8844
8836
  for message in run_response.messages:
@@ -8869,23 +8861,36 @@ class Agent:
8869
8861
 
8870
8862
  def _scrub_tool_results_from_run_output(self, run_response: RunOutput) -> None:
8871
8863
  """
8872
- Remove all tool-related data from RunOutput when store_tool_results=False.
8873
- This includes tool calls, tool results, and tool-related message fields.
8864
+ Remove all tool-related data from RunOutput when store_tool_messages=False.
8865
+ This removes both the tool call and its corresponding result to maintain API consistency.
8874
8866
  """
8875
- # Remove tool results (messages with role="tool")
8876
- if run_response.messages:
8877
- run_response.messages = [msg for msg in run_response.messages if msg.role != "tool"]
8878
- # Also scrub tool-related fields from remaining messages
8879
- for message in run_response.messages:
8880
- self._scrub_tool_data_from_message(message)
8867
+ if not run_response.messages:
8868
+ return
8869
+
8870
+ # Step 1: Collect all tool_call_ids from tool result messages
8871
+ tool_call_ids_to_remove = set()
8872
+ for message in run_response.messages:
8873
+ if message.role == "tool" and message.tool_call_id:
8874
+ tool_call_ids_to_remove.add(message.tool_call_id)
8875
+
8876
+ # Step 2: Remove tool result messages (role="tool")
8877
+ run_response.messages = [msg for msg in run_response.messages if msg.role != "tool"]
8878
+
8879
+ # Step 3: Remove the assistant messages related to the scrubbed tool calls
8880
+ filtered_messages = []
8881
+ for message in run_response.messages:
8882
+ # Check if this assistant message made any of the tool calls we're removing
8883
+ should_remove = False
8884
+ if message.role == "assistant" and message.tool_calls:
8885
+ for tool_call in message.tool_calls:
8886
+ if tool_call.get("id") in tool_call_ids_to_remove:
8887
+ should_remove = True
8888
+ break
8889
+
8890
+ if not should_remove:
8891
+ filtered_messages.append(message)
8881
8892
 
8882
- def _scrub_tool_data_from_message(self, message: Message) -> None:
8883
- """Remove all tool-related data from a Message object."""
8884
- message.tool_calls = None
8885
- message.tool_call_id = None
8886
- message.tool_name = None
8887
- message.tool_args = None
8888
- message.tool_call_error = None
8893
+ run_response.messages = filtered_messages
8889
8894
 
8890
8895
  def _scrub_history_messages_from_run_output(self, run_response: RunOutput) -> None:
8891
8896
  """
@@ -8907,7 +8912,7 @@ class Agent:
8907
8912
  self._scrub_media_from_run_output(run_response)
8908
8913
  scrubbed = True
8909
8914
 
8910
- if not self.store_tool_results:
8915
+ if not self.store_tool_messages:
8911
8916
  self._scrub_tool_results_from_run_output(run_response)
8912
8917
  scrubbed = True
8913
8918
 
@@ -1,5 +1,6 @@
1
1
  """Migration utility to migrate your Agno tables from v1 to v2"""
2
2
 
3
+ import gc
3
4
  import json
4
5
  from typing import Any, Dict, List, Optional, Union, cast
5
6
 
@@ -423,6 +424,18 @@ def migrate_table_in_batches(
423
424
 
424
425
  log_info(f"Completed batch {batch_count}: migrated {batch_size_actual} records")
425
426
 
427
+ # Explicit cleanup to free memory before next batch
428
+ del batch_content
429
+ if v1_table_type in ["agent_sessions", "team_sessions", "workflow_sessions"]:
430
+ del sessions
431
+ elif v1_table_type == "memories":
432
+ del memories
433
+
434
+ # Force garbage collection to return memory to OS
435
+ # This is necessary because Python's memory allocator retains memory after large operations
436
+ # See: https://github.com/sqlalchemy/sqlalchemy/issues/4616
437
+ gc.collect()
438
+
426
439
  log_info(f"✅ Migration completed for table {v1_table_name}: {total_migrated} total records migrated")
427
440
 
428
441
 
@@ -631,11 +631,7 @@ class MongoDb(BaseDb):
631
631
  session_dict = session.to_dict()
632
632
 
633
633
  # Use preserved updated_at if flag is set and value exists, otherwise use current time
634
- updated_at = (
635
- session_dict.get("updated_at")
636
- if preserve_updated_at and session_dict.get("updated_at")
637
- else int(time.time())
638
- )
634
+ updated_at = session_dict.get("updated_at") if preserve_updated_at else int(time.time())
639
635
 
640
636
  if isinstance(session, AgentSession):
641
637
  record = {
@@ -1096,7 +1092,7 @@ class MongoDb(BaseDb):
1096
1092
  memory.memory_id = str(uuid4())
1097
1093
 
1098
1094
  # Use preserved updated_at if flag is set and value exists, otherwise use current time
1099
- updated_at = memory.updated_at if preserve_updated_at and memory.updated_at else current_time
1095
+ updated_at = memory.updated_at if preserve_updated_at else current_time
1100
1096
 
1101
1097
  record = {
1102
1098
  "user_id": memory.user_id,
@@ -16,8 +16,6 @@ except ImportError:
16
16
 
17
17
 
18
18
  # -- DB util methods --
19
-
20
-
21
19
  def create_collection_indexes(collection: Collection, collection_type: str) -> None:
22
20
  """Create all required indexes for a collection"""
23
21
  try:
@@ -58,8 +56,6 @@ def apply_pagination(
58
56
 
59
57
 
60
58
  # -- Metrics util methods --
61
-
62
-
63
59
  def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
64
60
  """Calculate metrics for the given single date."""
65
61
  metrics = {
@@ -760,11 +760,7 @@ class MySQLDb(BaseDb):
760
760
  for session in agent_sessions:
761
761
  session_dict = session.to_dict()
762
762
  # Use preserved updated_at if flag is set and value exists, otherwise use current time
763
- updated_at = (
764
- session_dict.get("updated_at")
765
- if preserve_updated_at and session_dict.get("updated_at")
766
- else int(time.time())
767
- )
763
+ updated_at = session_dict.get("updated_at") if preserve_updated_at else int(time.time())
768
764
  agent_data.append(
769
765
  {
770
766
  "session_id": session_dict.get("session_id"),
@@ -816,11 +812,7 @@ class MySQLDb(BaseDb):
816
812
  for session in team_sessions:
817
813
  session_dict = session.to_dict()
818
814
  # Use preserved updated_at if flag is set and value exists, otherwise use current time
819
- updated_at = (
820
- session_dict.get("updated_at")
821
- if preserve_updated_at and session_dict.get("updated_at")
822
- else int(time.time())
823
- )
815
+ updated_at = session_dict.get("updated_at") if preserve_updated_at else int(time.time())
824
816
  team_data.append(
825
817
  {
826
818
  "session_id": session_dict.get("session_id"),
@@ -872,11 +864,7 @@ class MySQLDb(BaseDb):
872
864
  for session in workflow_sessions:
873
865
  session_dict = session.to_dict()
874
866
  # Use preserved updated_at if flag is set and value exists, otherwise use current time
875
- updated_at = (
876
- session_dict.get("updated_at")
877
- if preserve_updated_at and session_dict.get("updated_at")
878
- else int(time.time())
879
- )
867
+ updated_at = session_dict.get("updated_at") if preserve_updated_at else int(time.time())
880
868
  workflow_data.append(
881
869
  {
882
870
  "session_id": session_dict.get("session_id"),
@@ -1338,7 +1326,7 @@ class MySQLDb(BaseDb):
1338
1326
  memory.memory_id = str(uuid4())
1339
1327
 
1340
1328
  # Use preserved updated_at if flag is set and value exists, otherwise use current time
1341
- updated_at = memory.updated_at if preserve_updated_at and memory.updated_at else current_time
1329
+ updated_at = memory.updated_at if preserve_updated_at else current_time
1342
1330
  bulk_data.append(
1343
1331
  {
1344
1332
  "memory_id": memory.memory_id,
@@ -740,12 +740,8 @@ class PostgresDb(BaseDb):
740
740
  session_records = []
741
741
  for agent_session in agent_sessions:
742
742
  session_dict = agent_session.to_dict()
743
- # Use preserved updated_at if flag is set and value exists, otherwise use current time
744
- updated_at = (
745
- session_dict.get("updated_at")
746
- if preserve_updated_at and session_dict.get("updated_at")
747
- else int(time.time())
748
- )
743
+ # Use preserved updated_at if flag is set (even if None), otherwise use current time
744
+ updated_at = session_dict.get("updated_at") if preserve_updated_at else int(time.time())
749
745
  session_records.append(
750
746
  {
751
747
  "session_id": session_dict.get("session_id"),
@@ -789,12 +785,8 @@ class PostgresDb(BaseDb):
789
785
  session_records = []
790
786
  for team_session in team_sessions:
791
787
  session_dict = team_session.to_dict()
792
- # Use preserved updated_at if flag is set and value exists, otherwise use current time
793
- updated_at = (
794
- session_dict.get("updated_at")
795
- if preserve_updated_at and session_dict.get("updated_at")
796
- else int(time.time())
797
- )
788
+ # Use preserved updated_at if flag is set (even if None), otherwise use current time
789
+ updated_at = session_dict.get("updated_at") if preserve_updated_at else int(time.time())
798
790
  session_records.append(
799
791
  {
800
792
  "session_id": session_dict.get("session_id"),
@@ -838,12 +830,8 @@ class PostgresDb(BaseDb):
838
830
  session_records = []
839
831
  for workflow_session in workflow_sessions:
840
832
  session_dict = workflow_session.to_dict()
841
- # Use preserved updated_at if flag is set and value exists, otherwise use current time
842
- updated_at = (
843
- session_dict.get("updated_at")
844
- if preserve_updated_at and session_dict.get("updated_at")
845
- else int(time.time())
846
- )
833
+ # Use preserved updated_at if flag is set (even if None), otherwise use current time
834
+ updated_at = session_dict.get("updated_at") if preserve_updated_at else int(time.time())
847
835
  session_records.append(
848
836
  {
849
837
  "session_id": session_dict.get("session_id"),
@@ -1286,8 +1274,8 @@ class PostgresDb(BaseDb):
1286
1274
  if memory.memory_id is None:
1287
1275
  memory.memory_id = str(uuid4())
1288
1276
 
1289
- # Use preserved updated_at if flag is set and value exists, otherwise use current time
1290
- updated_at = memory.updated_at if preserve_updated_at and memory.updated_at else current_time
1277
+ # Use preserved updated_at if flag is set (even if None), otherwise use current time
1278
+ updated_at = memory.updated_at if preserve_updated_at else current_time
1291
1279
  memory_records.append(
1292
1280
  {
1293
1281
  "memory_id": memory.memory_id,
@@ -841,6 +841,8 @@ class SingleStoreDb(BaseDb):
841
841
  agent_data = []
842
842
  for session in agent_sessions:
843
843
  session_dict = session.to_dict()
844
+ # Use preserved updated_at if flag is set, otherwise use current time
845
+ updated_at = session_dict.get("updated_at") if preserve_updated_at else int(time.time())
844
846
  agent_data.append(
845
847
  {
846
848
  "session_id": session_dict.get("session_id"),
@@ -853,7 +855,7 @@ class SingleStoreDb(BaseDb):
853
855
  "summary": session_dict.get("summary"),
854
856
  "metadata": session_dict.get("metadata"),
855
857
  "created_at": session_dict.get("created_at"),
856
- "updated_at": session_dict.get("created_at"),
858
+ "updated_at": updated_at,
857
859
  }
858
860
  )
859
861
 
@@ -867,7 +869,7 @@ class SingleStoreDb(BaseDb):
867
869
  summary=stmt.inserted.summary,
868
870
  metadata=stmt.inserted.metadata,
869
871
  runs=stmt.inserted.runs,
870
- updated_at=int(time.time()),
872
+ updated_at=stmt.inserted.updated_at,
871
873
  )
872
874
  sess.execute(stmt, agent_data)
873
875
 
@@ -890,6 +892,8 @@ class SingleStoreDb(BaseDb):
890
892
  team_data = []
891
893
  for session in team_sessions:
892
894
  session_dict = session.to_dict()
895
+ # Use preserved updated_at if flag is set, otherwise use current time
896
+ updated_at = session_dict.get("updated_at") if preserve_updated_at else int(time.time())
893
897
  team_data.append(
894
898
  {
895
899
  "session_id": session_dict.get("session_id"),
@@ -902,7 +906,7 @@ class SingleStoreDb(BaseDb):
902
906
  "summary": session_dict.get("summary"),
903
907
  "metadata": session_dict.get("metadata"),
904
908
  "created_at": session_dict.get("created_at"),
905
- "updated_at": session_dict.get("created_at"),
909
+ "updated_at": updated_at,
906
910
  }
907
911
  )
908
912
 
@@ -916,7 +920,7 @@ class SingleStoreDb(BaseDb):
916
920
  summary=stmt.inserted.summary,
917
921
  metadata=stmt.inserted.metadata,
918
922
  runs=stmt.inserted.runs,
919
- updated_at=int(time.time()),
923
+ updated_at=stmt.inserted.updated_at,
920
924
  )
921
925
  sess.execute(stmt, team_data)
922
926
 
@@ -939,6 +943,8 @@ class SingleStoreDb(BaseDb):
939
943
  workflow_data = []
940
944
  for session in workflow_sessions:
941
945
  session_dict = session.to_dict()
946
+ # Use preserved updated_at if flag is set, otherwise use current time
947
+ updated_at = session_dict.get("updated_at") if preserve_updated_at else int(time.time())
942
948
  workflow_data.append(
943
949
  {
944
950
  "session_id": session_dict.get("session_id"),
@@ -951,7 +957,7 @@ class SingleStoreDb(BaseDb):
951
957
  "summary": session_dict.get("summary"),
952
958
  "metadata": session_dict.get("metadata"),
953
959
  "created_at": session_dict.get("created_at"),
954
- "updated_at": session_dict.get("created_at"),
960
+ "updated_at": updated_at,
955
961
  }
956
962
  )
957
963
 
@@ -965,7 +971,7 @@ class SingleStoreDb(BaseDb):
965
971
  summary=stmt.inserted.summary,
966
972
  metadata=stmt.inserted.metadata,
967
973
  runs=stmt.inserted.runs,
968
- updated_at=int(time.time()),
974
+ updated_at=stmt.inserted.updated_at,
969
975
  )
970
976
  sess.execute(stmt, workflow_data)
971
977
 
@@ -1361,9 +1367,12 @@ class SingleStoreDb(BaseDb):
1361
1367
 
1362
1368
  # Prepare data for bulk insert
1363
1369
  memory_data = []
1370
+ current_time = int(time.time())
1364
1371
  for memory in memories:
1365
1372
  if memory.memory_id is None:
1366
1373
  memory.memory_id = str(uuid4())
1374
+ # Use preserved updated_at if flag is set, otherwise use current time
1375
+ updated_at = memory.updated_at if preserve_updated_at else current_time
1367
1376
  memory_data.append(
1368
1377
  {
1369
1378
  "memory_id": memory.memory_id,
@@ -1373,7 +1382,7 @@ class SingleStoreDb(BaseDb):
1373
1382
  "agent_id": memory.agent_id,
1374
1383
  "team_id": memory.team_id,
1375
1384
  "topics": memory.topics,
1376
- "updated_at": int(time.time()),
1385
+ "updated_at": updated_at,
1377
1386
  }
1378
1387
  )
1379
1388
 
@@ -1389,7 +1398,7 @@ class SingleStoreDb(BaseDb):
1389
1398
  user_id=stmt.inserted.user_id,
1390
1399
  agent_id=stmt.inserted.agent_id,
1391
1400
  team_id=stmt.inserted.team_id,
1392
- updated_at=int(time.time()),
1401
+ updated_at=stmt.inserted.updated_at,
1393
1402
  )
1394
1403
  sess.execute(stmt, memory_data)
1395
1404
 
@@ -717,11 +717,7 @@ class SqliteDb(BaseDb):
717
717
  for session in agent_sessions:
718
718
  serialized_session = serialize_session_json_fields(session.to_dict())
719
719
  # Use preserved updated_at if flag is set and value exists, otherwise use current time
720
- updated_at = (
721
- serialized_session.get("updated_at")
722
- if preserve_updated_at and serialized_session.get("updated_at")
723
- else int(time.time())
724
- )
720
+ updated_at = serialized_session.get("updated_at") if preserve_updated_at else int(time.time())
725
721
  agent_data.append(
726
722
  {
727
723
  "session_id": serialized_session.get("session_id"),
@@ -776,11 +772,7 @@ class SqliteDb(BaseDb):
776
772
  for session in team_sessions:
777
773
  serialized_session = serialize_session_json_fields(session.to_dict())
778
774
  # Use preserved updated_at if flag is set and value exists, otherwise use current time
779
- updated_at = (
780
- serialized_session.get("updated_at")
781
- if preserve_updated_at and serialized_session.get("updated_at")
782
- else int(time.time())
783
- )
775
+ updated_at = serialized_session.get("updated_at") if preserve_updated_at else int(time.time())
784
776
  team_data.append(
785
777
  {
786
778
  "session_id": serialized_session.get("session_id"),
@@ -835,11 +827,7 @@ class SqliteDb(BaseDb):
835
827
  for session in workflow_sessions:
836
828
  serialized_session = serialize_session_json_fields(session.to_dict())
837
829
  # Use preserved updated_at if flag is set and value exists, otherwise use current time
838
- updated_at = (
839
- serialized_session.get("updated_at")
840
- if preserve_updated_at and serialized_session.get("updated_at")
841
- else int(time.time())
842
- )
830
+ updated_at = serialized_session.get("updated_at") if preserve_updated_at else int(time.time())
843
831
  workflow_data.append(
844
832
  {
845
833
  "session_id": serialized_session.get("session_id"),
@@ -1280,7 +1268,7 @@ class SqliteDb(BaseDb):
1280
1268
  memory.memory_id = str(uuid4())
1281
1269
 
1282
1270
  # Use preserved updated_at if flag is set and value exists, otherwise use current time
1283
- updated_at = memory.updated_at if preserve_updated_at and memory.updated_at else current_time
1271
+ updated_at = memory.updated_at if preserve_updated_at else current_time
1284
1272
  bulk_data.append(
1285
1273
  {
1286
1274
  "user_id": memory.user_id,
@@ -0,0 +1,3 @@
1
+ from agno.db.surrealdb.surrealdb import SurrealDb
2
+
3
+ __all__ = ["SurrealDb"]