agno 2.0.8__tar.gz → 2.0.10__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 (533) hide show
  1. {agno-2.0.8 → agno-2.0.10}/PKG-INFO +4 -1
  2. {agno-2.0.8 → agno-2.0.10}/agno/agent/agent.py +13 -8
  3. {agno-2.0.8 → agno-2.0.10}/agno/db/base.py +14 -0
  4. {agno-2.0.8 → agno-2.0.10}/agno/db/dynamo/dynamo.py +107 -27
  5. {agno-2.0.8 → agno-2.0.10}/agno/db/firestore/firestore.py +109 -33
  6. {agno-2.0.8 → agno-2.0.10}/agno/db/gcs_json/gcs_json_db.py +100 -20
  7. {agno-2.0.8 → agno-2.0.10}/agno/db/in_memory/in_memory_db.py +95 -20
  8. {agno-2.0.8 → agno-2.0.10}/agno/db/json/json_db.py +101 -21
  9. {agno-2.0.8 → agno-2.0.10}/agno/db/migrations/v1_to_v2.py +181 -35
  10. {agno-2.0.8 → agno-2.0.10}/agno/db/mongo/mongo.py +251 -26
  11. {agno-2.0.8 → agno-2.0.10}/agno/db/mysql/mysql.py +307 -6
  12. {agno-2.0.8 → agno-2.0.10}/agno/db/postgres/postgres.py +279 -33
  13. {agno-2.0.8 → agno-2.0.10}/agno/db/redis/redis.py +99 -22
  14. {agno-2.0.8 → agno-2.0.10}/agno/db/singlestore/singlestore.py +319 -38
  15. {agno-2.0.8 → agno-2.0.10}/agno/db/sqlite/sqlite.py +339 -23
  16. {agno-2.0.8 → agno-2.0.10}/agno/models/anthropic/claude.py +0 -20
  17. {agno-2.0.8 → agno-2.0.10}/agno/models/aws/claude.py +1 -1
  18. {agno-2.0.8 → agno-2.0.10}/agno/models/huggingface/huggingface.py +2 -1
  19. {agno-2.0.8 → agno-2.0.10}/agno/models/ollama/chat.py +28 -2
  20. {agno-2.0.8 → agno-2.0.10}/agno/models/openai/chat.py +7 -0
  21. {agno-2.0.8 → agno-2.0.10}/agno/models/openai/responses.py +8 -8
  22. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/base.py +2 -0
  23. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/slack/router.py +50 -10
  24. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/slack/slack.py +6 -4
  25. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/whatsapp/router.py +7 -4
  26. {agno-2.0.8 → agno-2.0.10}/agno/os/router.py +18 -0
  27. {agno-2.0.8 → agno-2.0.10}/agno/os/utils.py +2 -2
  28. {agno-2.0.8 → agno-2.0.10}/agno/reasoning/azure_ai_foundry.py +2 -2
  29. {agno-2.0.8 → agno-2.0.10}/agno/reasoning/deepseek.py +2 -2
  30. {agno-2.0.8 → agno-2.0.10}/agno/reasoning/groq.py +2 -2
  31. {agno-2.0.8 → agno-2.0.10}/agno/reasoning/ollama.py +2 -2
  32. {agno-2.0.8 → agno-2.0.10}/agno/reasoning/openai.py +2 -2
  33. {agno-2.0.8 → agno-2.0.10}/agno/run/base.py +15 -2
  34. {agno-2.0.8 → agno-2.0.10}/agno/team/team.py +10 -12
  35. agno-2.0.10/agno/tools/mcp_toolbox.py +284 -0
  36. {agno-2.0.8 → agno-2.0.10}/agno/tools/scrapegraph.py +58 -31
  37. {agno-2.0.8 → agno-2.0.10}/agno/tools/whatsapp.py +1 -1
  38. {agno-2.0.8 → agno-2.0.10}/agno/utils/models/claude.py +2 -2
  39. {agno-2.0.8 → agno-2.0.10}/agno/utils/print_response/agent.py +2 -2
  40. {agno-2.0.8 → agno-2.0.10}/agno/utils/print_response/team.py +6 -6
  41. {agno-2.0.8 → agno-2.0.10}/agno/utils/reasoning.py +22 -1
  42. {agno-2.0.8 → agno-2.0.10}/agno/utils/string.py +9 -0
  43. {agno-2.0.8 → agno-2.0.10}/agno/workflow/workflow.py +11 -7
  44. {agno-2.0.8 → agno-2.0.10}/agno.egg-info/PKG-INFO +4 -1
  45. {agno-2.0.8 → agno-2.0.10}/agno.egg-info/SOURCES.txt +1 -1
  46. {agno-2.0.8 → agno-2.0.10}/agno.egg-info/requires.txt +4 -0
  47. {agno-2.0.8 → agno-2.0.10}/pyproject.toml +3 -1
  48. agno-2.0.8/agno/utils/models/aws_claude.py +0 -170
  49. {agno-2.0.8 → agno-2.0.10}/LICENSE +0 -0
  50. {agno-2.0.8 → agno-2.0.10}/README.md +0 -0
  51. {agno-2.0.8 → agno-2.0.10}/agno/__init__.py +0 -0
  52. {agno-2.0.8 → agno-2.0.10}/agno/agent/__init__.py +0 -0
  53. {agno-2.0.8 → agno-2.0.10}/agno/api/__init__.py +0 -0
  54. {agno-2.0.8 → agno-2.0.10}/agno/api/agent.py +0 -0
  55. {agno-2.0.8 → agno-2.0.10}/agno/api/api.py +0 -0
  56. {agno-2.0.8 → agno-2.0.10}/agno/api/evals.py +0 -0
  57. {agno-2.0.8 → agno-2.0.10}/agno/api/os.py +0 -0
  58. {agno-2.0.8 → agno-2.0.10}/agno/api/routes.py +0 -0
  59. {agno-2.0.8 → agno-2.0.10}/agno/api/schemas/__init__.py +0 -0
  60. {agno-2.0.8 → agno-2.0.10}/agno/api/schemas/agent.py +0 -0
  61. {agno-2.0.8 → agno-2.0.10}/agno/api/schemas/evals.py +0 -0
  62. {agno-2.0.8 → agno-2.0.10}/agno/api/schemas/os.py +0 -0
  63. {agno-2.0.8 → agno-2.0.10}/agno/api/schemas/response.py +0 -0
  64. {agno-2.0.8 → agno-2.0.10}/agno/api/schemas/team.py +0 -0
  65. {agno-2.0.8 → agno-2.0.10}/agno/api/schemas/utils.py +0 -0
  66. {agno-2.0.8 → agno-2.0.10}/agno/api/schemas/workflows.py +0 -0
  67. {agno-2.0.8 → agno-2.0.10}/agno/api/settings.py +0 -0
  68. {agno-2.0.8 → agno-2.0.10}/agno/api/team.py +0 -0
  69. {agno-2.0.8 → agno-2.0.10}/agno/api/workflow.py +0 -0
  70. {agno-2.0.8 → agno-2.0.10}/agno/cloud/aws/base.py +0 -0
  71. {agno-2.0.8 → agno-2.0.10}/agno/cloud/aws/s3/__init__.py +0 -0
  72. {agno-2.0.8 → agno-2.0.10}/agno/cloud/aws/s3/api_client.py +0 -0
  73. {agno-2.0.8 → agno-2.0.10}/agno/cloud/aws/s3/bucket.py +0 -0
  74. {agno-2.0.8 → agno-2.0.10}/agno/cloud/aws/s3/object.py +0 -0
  75. {agno-2.0.8 → agno-2.0.10}/agno/db/__init__.py +0 -0
  76. {agno-2.0.8 → agno-2.0.10}/agno/db/dynamo/__init__.py +0 -0
  77. {agno-2.0.8 → agno-2.0.10}/agno/db/dynamo/schemas.py +0 -0
  78. {agno-2.0.8 → agno-2.0.10}/agno/db/dynamo/utils.py +0 -0
  79. {agno-2.0.8 → agno-2.0.10}/agno/db/firestore/__init__.py +0 -0
  80. {agno-2.0.8 → agno-2.0.10}/agno/db/firestore/schemas.py +0 -0
  81. {agno-2.0.8 → agno-2.0.10}/agno/db/firestore/utils.py +0 -0
  82. {agno-2.0.8 → agno-2.0.10}/agno/db/gcs_json/__init__.py +0 -0
  83. {agno-2.0.8 → agno-2.0.10}/agno/db/gcs_json/utils.py +0 -0
  84. {agno-2.0.8 → agno-2.0.10}/agno/db/in_memory/__init__.py +0 -0
  85. {agno-2.0.8 → agno-2.0.10}/agno/db/in_memory/utils.py +0 -0
  86. {agno-2.0.8 → agno-2.0.10}/agno/db/json/__init__.py +0 -0
  87. {agno-2.0.8 → agno-2.0.10}/agno/db/json/utils.py +0 -0
  88. {agno-2.0.8 → agno-2.0.10}/agno/db/migrations/__init__.py +0 -0
  89. {agno-2.0.8 → agno-2.0.10}/agno/db/mongo/__init__.py +0 -0
  90. {agno-2.0.8 → agno-2.0.10}/agno/db/mongo/schemas.py +0 -0
  91. {agno-2.0.8 → agno-2.0.10}/agno/db/mongo/utils.py +0 -0
  92. {agno-2.0.8 → agno-2.0.10}/agno/db/mysql/__init__.py +0 -0
  93. {agno-2.0.8 → agno-2.0.10}/agno/db/mysql/schemas.py +0 -0
  94. {agno-2.0.8 → agno-2.0.10}/agno/db/mysql/utils.py +0 -0
  95. {agno-2.0.8 → agno-2.0.10}/agno/db/postgres/__init__.py +0 -0
  96. {agno-2.0.8 → agno-2.0.10}/agno/db/postgres/schemas.py +0 -0
  97. {agno-2.0.8 → agno-2.0.10}/agno/db/postgres/utils.py +0 -0
  98. {agno-2.0.8 → agno-2.0.10}/agno/db/redis/__init__.py +0 -0
  99. {agno-2.0.8 → agno-2.0.10}/agno/db/redis/schemas.py +0 -0
  100. {agno-2.0.8 → agno-2.0.10}/agno/db/redis/utils.py +0 -0
  101. {agno-2.0.8 → agno-2.0.10}/agno/db/schemas/__init__.py +0 -0
  102. {agno-2.0.8 → agno-2.0.10}/agno/db/schemas/evals.py +0 -0
  103. {agno-2.0.8 → agno-2.0.10}/agno/db/schemas/knowledge.py +0 -0
  104. {agno-2.0.8 → agno-2.0.10}/agno/db/schemas/memory.py +0 -0
  105. {agno-2.0.8 → agno-2.0.10}/agno/db/schemas/metrics.py +0 -0
  106. {agno-2.0.8 → agno-2.0.10}/agno/db/singlestore/__init__.py +0 -0
  107. {agno-2.0.8 → agno-2.0.10}/agno/db/singlestore/schemas.py +0 -0
  108. {agno-2.0.8 → agno-2.0.10}/agno/db/singlestore/utils.py +0 -0
  109. {agno-2.0.8 → agno-2.0.10}/agno/db/sqlite/__init__.py +0 -0
  110. {agno-2.0.8 → agno-2.0.10}/agno/db/sqlite/schemas.py +0 -0
  111. {agno-2.0.8 → agno-2.0.10}/agno/db/sqlite/utils.py +0 -0
  112. {agno-2.0.8 → agno-2.0.10}/agno/db/utils.py +0 -0
  113. {agno-2.0.8 → agno-2.0.10}/agno/debug.py +0 -0
  114. {agno-2.0.8 → agno-2.0.10}/agno/eval/__init__.py +0 -0
  115. {agno-2.0.8 → agno-2.0.10}/agno/eval/accuracy.py +0 -0
  116. {agno-2.0.8 → agno-2.0.10}/agno/eval/performance.py +0 -0
  117. {agno-2.0.8 → agno-2.0.10}/agno/eval/reliability.py +0 -0
  118. {agno-2.0.8 → agno-2.0.10}/agno/eval/utils.py +0 -0
  119. {agno-2.0.8 → agno-2.0.10}/agno/exceptions.py +0 -0
  120. {agno-2.0.8 → agno-2.0.10}/agno/integrations/__init__.py +0 -0
  121. {agno-2.0.8 → agno-2.0.10}/agno/integrations/discord/__init__.py +0 -0
  122. {agno-2.0.8 → agno-2.0.10}/agno/integrations/discord/client.py +0 -0
  123. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/__init__.py +0 -0
  124. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/chunking/__init__.py +0 -0
  125. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/chunking/agentic.py +0 -0
  126. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/chunking/document.py +0 -0
  127. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/chunking/fixed.py +0 -0
  128. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/chunking/markdown.py +0 -0
  129. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/chunking/recursive.py +0 -0
  130. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/chunking/row.py +0 -0
  131. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/chunking/semantic.py +0 -0
  132. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/chunking/strategy.py +0 -0
  133. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/content.py +0 -0
  134. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/document/__init__.py +0 -0
  135. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/document/base.py +0 -0
  136. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/__init__.py +0 -0
  137. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  138. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/azure_openai.py +0 -0
  139. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/base.py +0 -0
  140. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/cohere.py +0 -0
  141. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/fastembed.py +0 -0
  142. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/fireworks.py +0 -0
  143. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/google.py +0 -0
  144. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/huggingface.py +0 -0
  145. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/jina.py +0 -0
  146. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/langdb.py +0 -0
  147. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/mistral.py +0 -0
  148. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/nebius.py +0 -0
  149. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/ollama.py +0 -0
  150. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/openai.py +0 -0
  151. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  152. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/together.py +0 -0
  153. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/embedder/voyageai.py +0 -0
  154. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/knowledge.py +0 -0
  155. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/__init__.py +0 -0
  156. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/arxiv_reader.py +0 -0
  157. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/base.py +0 -0
  158. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/csv_reader.py +0 -0
  159. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/docx_reader.py +0 -0
  160. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  161. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/json_reader.py +0 -0
  162. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/markdown_reader.py +0 -0
  163. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/pdf_reader.py +0 -0
  164. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/reader_factory.py +0 -0
  165. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/s3_reader.py +0 -0
  166. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/text_reader.py +0 -0
  167. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/web_search_reader.py +0 -0
  168. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/website_reader.py +0 -0
  169. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  170. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reader/youtube_reader.py +0 -0
  171. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/remote_content/__init__.py +0 -0
  172. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/remote_content/remote_content.py +0 -0
  173. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reranker/__init__.py +0 -0
  174. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reranker/base.py +0 -0
  175. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reranker/cohere.py +0 -0
  176. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reranker/infinity.py +0 -0
  177. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  178. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/types.py +0 -0
  179. {agno-2.0.8 → agno-2.0.10}/agno/knowledge/utils.py +0 -0
  180. {agno-2.0.8 → agno-2.0.10}/agno/media.py +0 -0
  181. {agno-2.0.8 → agno-2.0.10}/agno/memory/__init__.py +0 -0
  182. {agno-2.0.8 → agno-2.0.10}/agno/memory/manager.py +0 -0
  183. {agno-2.0.8 → agno-2.0.10}/agno/models/__init__.py +0 -0
  184. {agno-2.0.8 → agno-2.0.10}/agno/models/aimlapi/__init__.py +0 -0
  185. {agno-2.0.8 → agno-2.0.10}/agno/models/aimlapi/aimlapi.py +0 -0
  186. {agno-2.0.8 → agno-2.0.10}/agno/models/anthropic/__init__.py +0 -0
  187. {agno-2.0.8 → agno-2.0.10}/agno/models/aws/__init__.py +0 -0
  188. {agno-2.0.8 → agno-2.0.10}/agno/models/aws/bedrock.py +0 -0
  189. {agno-2.0.8 → agno-2.0.10}/agno/models/azure/__init__.py +0 -0
  190. {agno-2.0.8 → agno-2.0.10}/agno/models/azure/ai_foundry.py +0 -0
  191. {agno-2.0.8 → agno-2.0.10}/agno/models/azure/openai_chat.py +0 -0
  192. {agno-2.0.8 → agno-2.0.10}/agno/models/base.py +0 -0
  193. {agno-2.0.8 → agno-2.0.10}/agno/models/cerebras/__init__.py +0 -0
  194. {agno-2.0.8 → agno-2.0.10}/agno/models/cerebras/cerebras.py +0 -0
  195. {agno-2.0.8 → agno-2.0.10}/agno/models/cerebras/cerebras_openai.py +0 -0
  196. {agno-2.0.8 → agno-2.0.10}/agno/models/cohere/__init__.py +0 -0
  197. {agno-2.0.8 → agno-2.0.10}/agno/models/cohere/chat.py +0 -0
  198. {agno-2.0.8 → agno-2.0.10}/agno/models/cometapi/__init__.py +0 -0
  199. {agno-2.0.8 → agno-2.0.10}/agno/models/cometapi/cometapi.py +0 -0
  200. {agno-2.0.8 → agno-2.0.10}/agno/models/dashscope/__init__.py +0 -0
  201. {agno-2.0.8 → agno-2.0.10}/agno/models/dashscope/dashscope.py +0 -0
  202. {agno-2.0.8 → agno-2.0.10}/agno/models/deepinfra/__init__.py +0 -0
  203. {agno-2.0.8 → agno-2.0.10}/agno/models/deepinfra/deepinfra.py +0 -0
  204. {agno-2.0.8 → agno-2.0.10}/agno/models/deepseek/__init__.py +0 -0
  205. {agno-2.0.8 → agno-2.0.10}/agno/models/deepseek/deepseek.py +0 -0
  206. {agno-2.0.8 → agno-2.0.10}/agno/models/defaults.py +0 -0
  207. {agno-2.0.8 → agno-2.0.10}/agno/models/fireworks/__init__.py +0 -0
  208. {agno-2.0.8 → agno-2.0.10}/agno/models/fireworks/fireworks.py +0 -0
  209. {agno-2.0.8 → agno-2.0.10}/agno/models/google/__init__.py +0 -0
  210. {agno-2.0.8 → agno-2.0.10}/agno/models/google/gemini.py +0 -0
  211. {agno-2.0.8 → agno-2.0.10}/agno/models/groq/__init__.py +0 -0
  212. {agno-2.0.8 → agno-2.0.10}/agno/models/groq/groq.py +0 -0
  213. {agno-2.0.8 → agno-2.0.10}/agno/models/huggingface/__init__.py +0 -0
  214. {agno-2.0.8 → agno-2.0.10}/agno/models/ibm/__init__.py +0 -0
  215. {agno-2.0.8 → agno-2.0.10}/agno/models/ibm/watsonx.py +0 -0
  216. {agno-2.0.8 → agno-2.0.10}/agno/models/internlm/__init__.py +0 -0
  217. {agno-2.0.8 → agno-2.0.10}/agno/models/internlm/internlm.py +0 -0
  218. {agno-2.0.8 → agno-2.0.10}/agno/models/langdb/__init__.py +0 -0
  219. {agno-2.0.8 → agno-2.0.10}/agno/models/langdb/langdb.py +0 -0
  220. {agno-2.0.8 → agno-2.0.10}/agno/models/litellm/__init__.py +0 -0
  221. {agno-2.0.8 → agno-2.0.10}/agno/models/litellm/chat.py +0 -0
  222. {agno-2.0.8 → agno-2.0.10}/agno/models/litellm/litellm_openai.py +0 -0
  223. {agno-2.0.8 → agno-2.0.10}/agno/models/llama_cpp/__init__.py +0 -0
  224. {agno-2.0.8 → agno-2.0.10}/agno/models/llama_cpp/llama_cpp.py +0 -0
  225. {agno-2.0.8 → agno-2.0.10}/agno/models/lmstudio/__init__.py +0 -0
  226. {agno-2.0.8 → agno-2.0.10}/agno/models/lmstudio/lmstudio.py +0 -0
  227. {agno-2.0.8 → agno-2.0.10}/agno/models/message.py +0 -0
  228. {agno-2.0.8 → agno-2.0.10}/agno/models/meta/__init__.py +0 -0
  229. {agno-2.0.8 → agno-2.0.10}/agno/models/meta/llama.py +0 -0
  230. {agno-2.0.8 → agno-2.0.10}/agno/models/meta/llama_openai.py +0 -0
  231. {agno-2.0.8 → agno-2.0.10}/agno/models/metrics.py +0 -0
  232. {agno-2.0.8 → agno-2.0.10}/agno/models/mistral/__init__.py +0 -0
  233. {agno-2.0.8 → agno-2.0.10}/agno/models/mistral/mistral.py +0 -0
  234. {agno-2.0.8 → agno-2.0.10}/agno/models/nebius/__init__.py +0 -0
  235. {agno-2.0.8 → agno-2.0.10}/agno/models/nebius/nebius.py +0 -0
  236. {agno-2.0.8 → agno-2.0.10}/agno/models/nexus/__init__.py +0 -0
  237. {agno-2.0.8 → agno-2.0.10}/agno/models/nexus/nexus.py +0 -0
  238. {agno-2.0.8 → agno-2.0.10}/agno/models/nvidia/__init__.py +0 -0
  239. {agno-2.0.8 → agno-2.0.10}/agno/models/nvidia/nvidia.py +0 -0
  240. {agno-2.0.8 → agno-2.0.10}/agno/models/ollama/__init__.py +0 -0
  241. {agno-2.0.8 → agno-2.0.10}/agno/models/openai/__init__.py +0 -0
  242. {agno-2.0.8 → agno-2.0.10}/agno/models/openai/like.py +0 -0
  243. {agno-2.0.8 → agno-2.0.10}/agno/models/openrouter/__init__.py +0 -0
  244. {agno-2.0.8 → agno-2.0.10}/agno/models/openrouter/openrouter.py +0 -0
  245. {agno-2.0.8 → agno-2.0.10}/agno/models/perplexity/__init__.py +0 -0
  246. {agno-2.0.8 → agno-2.0.10}/agno/models/perplexity/perplexity.py +0 -0
  247. {agno-2.0.8 → agno-2.0.10}/agno/models/portkey/__init__.py +0 -0
  248. {agno-2.0.8 → agno-2.0.10}/agno/models/portkey/portkey.py +0 -0
  249. {agno-2.0.8 → agno-2.0.10}/agno/models/response.py +0 -0
  250. {agno-2.0.8 → agno-2.0.10}/agno/models/sambanova/__init__.py +0 -0
  251. {agno-2.0.8 → agno-2.0.10}/agno/models/sambanova/sambanova.py +0 -0
  252. {agno-2.0.8 → agno-2.0.10}/agno/models/siliconflow/__init__.py +0 -0
  253. {agno-2.0.8 → agno-2.0.10}/agno/models/siliconflow/siliconflow.py +0 -0
  254. {agno-2.0.8 → agno-2.0.10}/agno/models/together/__init__.py +0 -0
  255. {agno-2.0.8 → agno-2.0.10}/agno/models/together/together.py +0 -0
  256. {agno-2.0.8 → agno-2.0.10}/agno/models/utils.py +0 -0
  257. {agno-2.0.8 → agno-2.0.10}/agno/models/vercel/__init__.py +0 -0
  258. {agno-2.0.8 → agno-2.0.10}/agno/models/vercel/v0.py +0 -0
  259. {agno-2.0.8 → agno-2.0.10}/agno/models/vllm/__init__.py +0 -0
  260. {agno-2.0.8 → agno-2.0.10}/agno/models/vllm/vllm.py +0 -0
  261. {agno-2.0.8 → agno-2.0.10}/agno/models/xai/__init__.py +0 -0
  262. {agno-2.0.8 → agno-2.0.10}/agno/models/xai/xai.py +0 -0
  263. {agno-2.0.8 → agno-2.0.10}/agno/os/__init__.py +0 -0
  264. {agno-2.0.8 → agno-2.0.10}/agno/os/app.py +0 -0
  265. {agno-2.0.8 → agno-2.0.10}/agno/os/auth.py +0 -0
  266. {agno-2.0.8 → agno-2.0.10}/agno/os/config.py +0 -0
  267. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/__init__.py +0 -0
  268. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/agui/__init__.py +0 -0
  269. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/agui/agui.py +0 -0
  270. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/agui/router.py +0 -0
  271. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/agui/utils.py +0 -0
  272. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/slack/__init__.py +0 -0
  273. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/slack/security.py +0 -0
  274. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  275. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/whatsapp/security.py +0 -0
  276. {agno-2.0.8 → agno-2.0.10}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  277. {agno-2.0.8 → agno-2.0.10}/agno/os/mcp.py +0 -0
  278. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/__init__.py +0 -0
  279. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/evals/__init__.py +0 -0
  280. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/evals/evals.py +0 -0
  281. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/evals/schemas.py +0 -0
  282. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/evals/utils.py +0 -0
  283. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/health.py +0 -0
  284. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/home.py +0 -0
  285. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/knowledge/__init__.py +0 -0
  286. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/knowledge/knowledge.py +0 -0
  287. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/knowledge/schemas.py +0 -0
  288. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/memory/__init__.py +0 -0
  289. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/memory/memory.py +0 -0
  290. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/memory/schemas.py +0 -0
  291. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/metrics/__init__.py +0 -0
  292. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/metrics/metrics.py +0 -0
  293. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/metrics/schemas.py +0 -0
  294. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/session/__init__.py +0 -0
  295. {agno-2.0.8 → agno-2.0.10}/agno/os/routers/session/session.py +0 -0
  296. {agno-2.0.8 → agno-2.0.10}/agno/os/schema.py +0 -0
  297. {agno-2.0.8 → agno-2.0.10}/agno/os/settings.py +0 -0
  298. {agno-2.0.8 → agno-2.0.10}/agno/py.typed +0 -0
  299. {agno-2.0.8 → agno-2.0.10}/agno/reasoning/__init__.py +0 -0
  300. {agno-2.0.8 → agno-2.0.10}/agno/reasoning/default.py +0 -0
  301. {agno-2.0.8 → agno-2.0.10}/agno/reasoning/helpers.py +0 -0
  302. {agno-2.0.8 → agno-2.0.10}/agno/reasoning/step.py +0 -0
  303. {agno-2.0.8 → agno-2.0.10}/agno/run/__init__.py +0 -0
  304. {agno-2.0.8 → agno-2.0.10}/agno/run/agent.py +0 -0
  305. {agno-2.0.8 → agno-2.0.10}/agno/run/cancel.py +0 -0
  306. {agno-2.0.8 → agno-2.0.10}/agno/run/messages.py +0 -0
  307. {agno-2.0.8 → agno-2.0.10}/agno/run/team.py +0 -0
  308. {agno-2.0.8 → agno-2.0.10}/agno/run/workflow.py +0 -0
  309. {agno-2.0.8 → agno-2.0.10}/agno/session/__init__.py +0 -0
  310. {agno-2.0.8 → agno-2.0.10}/agno/session/agent.py +0 -0
  311. {agno-2.0.8 → agno-2.0.10}/agno/session/summary.py +0 -0
  312. {agno-2.0.8 → agno-2.0.10}/agno/session/team.py +0 -0
  313. {agno-2.0.8 → agno-2.0.10}/agno/session/workflow.py +0 -0
  314. {agno-2.0.8 → agno-2.0.10}/agno/team/__init__.py +0 -0
  315. {agno-2.0.8 → agno-2.0.10}/agno/tools/__init__.py +0 -0
  316. {agno-2.0.8 → agno-2.0.10}/agno/tools/agentql.py +0 -0
  317. {agno-2.0.8 → agno-2.0.10}/agno/tools/airflow.py +0 -0
  318. {agno-2.0.8 → agno-2.0.10}/agno/tools/api.py +0 -0
  319. {agno-2.0.8 → agno-2.0.10}/agno/tools/apify.py +0 -0
  320. {agno-2.0.8 → agno-2.0.10}/agno/tools/arxiv.py +0 -0
  321. {agno-2.0.8 → agno-2.0.10}/agno/tools/aws_lambda.py +0 -0
  322. {agno-2.0.8 → agno-2.0.10}/agno/tools/aws_ses.py +0 -0
  323. {agno-2.0.8 → agno-2.0.10}/agno/tools/baidusearch.py +0 -0
  324. {agno-2.0.8 → agno-2.0.10}/agno/tools/bitbucket.py +0 -0
  325. {agno-2.0.8 → agno-2.0.10}/agno/tools/brandfetch.py +0 -0
  326. {agno-2.0.8 → agno-2.0.10}/agno/tools/bravesearch.py +0 -0
  327. {agno-2.0.8 → agno-2.0.10}/agno/tools/brightdata.py +0 -0
  328. {agno-2.0.8 → agno-2.0.10}/agno/tools/browserbase.py +0 -0
  329. {agno-2.0.8 → agno-2.0.10}/agno/tools/calcom.py +0 -0
  330. {agno-2.0.8 → agno-2.0.10}/agno/tools/calculator.py +0 -0
  331. {agno-2.0.8 → agno-2.0.10}/agno/tools/cartesia.py +0 -0
  332. {agno-2.0.8 → agno-2.0.10}/agno/tools/clickup.py +0 -0
  333. {agno-2.0.8 → agno-2.0.10}/agno/tools/confluence.py +0 -0
  334. {agno-2.0.8 → agno-2.0.10}/agno/tools/crawl4ai.py +0 -0
  335. {agno-2.0.8 → agno-2.0.10}/agno/tools/csv_toolkit.py +0 -0
  336. {agno-2.0.8 → agno-2.0.10}/agno/tools/dalle.py +0 -0
  337. {agno-2.0.8 → agno-2.0.10}/agno/tools/daytona.py +0 -0
  338. {agno-2.0.8 → agno-2.0.10}/agno/tools/decorator.py +0 -0
  339. {agno-2.0.8 → agno-2.0.10}/agno/tools/desi_vocal.py +0 -0
  340. {agno-2.0.8 → agno-2.0.10}/agno/tools/discord.py +0 -0
  341. {agno-2.0.8 → agno-2.0.10}/agno/tools/docker.py +0 -0
  342. {agno-2.0.8 → agno-2.0.10}/agno/tools/duckdb.py +0 -0
  343. {agno-2.0.8 → agno-2.0.10}/agno/tools/duckduckgo.py +0 -0
  344. {agno-2.0.8 → agno-2.0.10}/agno/tools/e2b.py +0 -0
  345. {agno-2.0.8 → agno-2.0.10}/agno/tools/eleven_labs.py +0 -0
  346. {agno-2.0.8 → agno-2.0.10}/agno/tools/email.py +0 -0
  347. {agno-2.0.8 → agno-2.0.10}/agno/tools/evm.py +0 -0
  348. {agno-2.0.8 → agno-2.0.10}/agno/tools/exa.py +0 -0
  349. {agno-2.0.8 → agno-2.0.10}/agno/tools/fal.py +0 -0
  350. {agno-2.0.8 → agno-2.0.10}/agno/tools/file.py +0 -0
  351. {agno-2.0.8 → agno-2.0.10}/agno/tools/file_generation.py +0 -0
  352. {agno-2.0.8 → agno-2.0.10}/agno/tools/financial_datasets.py +0 -0
  353. {agno-2.0.8 → agno-2.0.10}/agno/tools/firecrawl.py +0 -0
  354. {agno-2.0.8 → agno-2.0.10}/agno/tools/function.py +0 -0
  355. {agno-2.0.8 → agno-2.0.10}/agno/tools/giphy.py +0 -0
  356. {agno-2.0.8 → agno-2.0.10}/agno/tools/github.py +0 -0
  357. {agno-2.0.8 → agno-2.0.10}/agno/tools/gmail.py +0 -0
  358. {agno-2.0.8 → agno-2.0.10}/agno/tools/google_bigquery.py +0 -0
  359. {agno-2.0.8 → agno-2.0.10}/agno/tools/google_maps.py +0 -0
  360. {agno-2.0.8 → agno-2.0.10}/agno/tools/googlecalendar.py +0 -0
  361. {agno-2.0.8 → agno-2.0.10}/agno/tools/googlesearch.py +0 -0
  362. {agno-2.0.8 → agno-2.0.10}/agno/tools/googlesheets.py +0 -0
  363. {agno-2.0.8 → agno-2.0.10}/agno/tools/hackernews.py +0 -0
  364. {agno-2.0.8 → agno-2.0.10}/agno/tools/jina.py +0 -0
  365. {agno-2.0.8 → agno-2.0.10}/agno/tools/jira.py +0 -0
  366. {agno-2.0.8 → agno-2.0.10}/agno/tools/knowledge.py +0 -0
  367. {agno-2.0.8 → agno-2.0.10}/agno/tools/linear.py +0 -0
  368. {agno-2.0.8 → agno-2.0.10}/agno/tools/linkup.py +0 -0
  369. {agno-2.0.8 → agno-2.0.10}/agno/tools/local_file_system.py +0 -0
  370. {agno-2.0.8 → agno-2.0.10}/agno/tools/lumalab.py +0 -0
  371. {agno-2.0.8 → agno-2.0.10}/agno/tools/mcp.py +0 -0
  372. {agno-2.0.8 → agno-2.0.10}/agno/tools/mem0.py +0 -0
  373. {agno-2.0.8 → agno-2.0.10}/agno/tools/memori.py +0 -0
  374. {agno-2.0.8 → agno-2.0.10}/agno/tools/memory.py +0 -0
  375. {agno-2.0.8 → agno-2.0.10}/agno/tools/mlx_transcribe.py +0 -0
  376. {agno-2.0.8 → agno-2.0.10}/agno/tools/models/__init__.py +0 -0
  377. {agno-2.0.8 → agno-2.0.10}/agno/tools/models/azure_openai.py +0 -0
  378. {agno-2.0.8 → agno-2.0.10}/agno/tools/models/gemini.py +0 -0
  379. {agno-2.0.8 → agno-2.0.10}/agno/tools/models/groq.py +0 -0
  380. {agno-2.0.8 → agno-2.0.10}/agno/tools/models/morph.py +0 -0
  381. {agno-2.0.8 → agno-2.0.10}/agno/tools/models/nebius.py +0 -0
  382. {agno-2.0.8 → agno-2.0.10}/agno/tools/models_labs.py +0 -0
  383. {agno-2.0.8 → agno-2.0.10}/agno/tools/moviepy_video.py +0 -0
  384. {agno-2.0.8 → agno-2.0.10}/agno/tools/neo4j.py +0 -0
  385. {agno-2.0.8 → agno-2.0.10}/agno/tools/newspaper.py +0 -0
  386. {agno-2.0.8 → agno-2.0.10}/agno/tools/newspaper4k.py +0 -0
  387. {agno-2.0.8 → agno-2.0.10}/agno/tools/openai.py +0 -0
  388. {agno-2.0.8 → agno-2.0.10}/agno/tools/openbb.py +0 -0
  389. {agno-2.0.8 → agno-2.0.10}/agno/tools/opencv.py +0 -0
  390. {agno-2.0.8 → agno-2.0.10}/agno/tools/openweather.py +0 -0
  391. {agno-2.0.8 → agno-2.0.10}/agno/tools/oxylabs.py +0 -0
  392. {agno-2.0.8 → agno-2.0.10}/agno/tools/pandas.py +0 -0
  393. {agno-2.0.8 → agno-2.0.10}/agno/tools/postgres.py +0 -0
  394. {agno-2.0.8 → agno-2.0.10}/agno/tools/pubmed.py +0 -0
  395. {agno-2.0.8 → agno-2.0.10}/agno/tools/python.py +0 -0
  396. {agno-2.0.8 → agno-2.0.10}/agno/tools/reasoning.py +0 -0
  397. {agno-2.0.8 → agno-2.0.10}/agno/tools/reddit.py +0 -0
  398. {agno-2.0.8 → agno-2.0.10}/agno/tools/replicate.py +0 -0
  399. {agno-2.0.8 → agno-2.0.10}/agno/tools/resend.py +0 -0
  400. {agno-2.0.8 → agno-2.0.10}/agno/tools/searxng.py +0 -0
  401. {agno-2.0.8 → agno-2.0.10}/agno/tools/serpapi.py +0 -0
  402. {agno-2.0.8 → agno-2.0.10}/agno/tools/serper.py +0 -0
  403. {agno-2.0.8 → agno-2.0.10}/agno/tools/shell.py +0 -0
  404. {agno-2.0.8 → agno-2.0.10}/agno/tools/slack.py +0 -0
  405. {agno-2.0.8 → agno-2.0.10}/agno/tools/sleep.py +0 -0
  406. {agno-2.0.8 → agno-2.0.10}/agno/tools/spider.py +0 -0
  407. {agno-2.0.8 → agno-2.0.10}/agno/tools/sql.py +0 -0
  408. {agno-2.0.8 → agno-2.0.10}/agno/tools/streamlit/__init__.py +0 -0
  409. {agno-2.0.8 → agno-2.0.10}/agno/tools/streamlit/components.py +0 -0
  410. {agno-2.0.8 → agno-2.0.10}/agno/tools/tavily.py +0 -0
  411. {agno-2.0.8 → agno-2.0.10}/agno/tools/telegram.py +0 -0
  412. {agno-2.0.8 → agno-2.0.10}/agno/tools/todoist.py +0 -0
  413. {agno-2.0.8 → agno-2.0.10}/agno/tools/tool_registry.py +0 -0
  414. {agno-2.0.8 → agno-2.0.10}/agno/tools/toolkit.py +0 -0
  415. {agno-2.0.8 → agno-2.0.10}/agno/tools/trafilatura.py +0 -0
  416. {agno-2.0.8 → agno-2.0.10}/agno/tools/trello.py +0 -0
  417. {agno-2.0.8 → agno-2.0.10}/agno/tools/twilio.py +0 -0
  418. {agno-2.0.8 → agno-2.0.10}/agno/tools/user_control_flow.py +0 -0
  419. {agno-2.0.8 → agno-2.0.10}/agno/tools/valyu.py +0 -0
  420. {agno-2.0.8 → agno-2.0.10}/agno/tools/visualization.py +0 -0
  421. {agno-2.0.8 → agno-2.0.10}/agno/tools/webbrowser.py +0 -0
  422. {agno-2.0.8 → agno-2.0.10}/agno/tools/webex.py +0 -0
  423. {agno-2.0.8 → agno-2.0.10}/agno/tools/website.py +0 -0
  424. {agno-2.0.8 → agno-2.0.10}/agno/tools/webtools.py +0 -0
  425. {agno-2.0.8 → agno-2.0.10}/agno/tools/wikipedia.py +0 -0
  426. {agno-2.0.8 → agno-2.0.10}/agno/tools/workflow.py +0 -0
  427. {agno-2.0.8 → agno-2.0.10}/agno/tools/x.py +0 -0
  428. {agno-2.0.8 → agno-2.0.10}/agno/tools/yfinance.py +0 -0
  429. {agno-2.0.8 → agno-2.0.10}/agno/tools/youtube.py +0 -0
  430. {agno-2.0.8 → agno-2.0.10}/agno/tools/zendesk.py +0 -0
  431. {agno-2.0.8 → agno-2.0.10}/agno/tools/zep.py +0 -0
  432. {agno-2.0.8 → agno-2.0.10}/agno/tools/zoom.py +0 -0
  433. {agno-2.0.8 → agno-2.0.10}/agno/utils/__init__.py +0 -0
  434. {agno-2.0.8 → agno-2.0.10}/agno/utils/audio.py +0 -0
  435. {agno-2.0.8 → agno-2.0.10}/agno/utils/certs.py +0 -0
  436. {agno-2.0.8 → agno-2.0.10}/agno/utils/code_execution.py +0 -0
  437. {agno-2.0.8 → agno-2.0.10}/agno/utils/common.py +0 -0
  438. {agno-2.0.8 → agno-2.0.10}/agno/utils/dttm.py +0 -0
  439. {agno-2.0.8 → agno-2.0.10}/agno/utils/enum.py +0 -0
  440. {agno-2.0.8 → agno-2.0.10}/agno/utils/env.py +0 -0
  441. {agno-2.0.8 → agno-2.0.10}/agno/utils/events.py +0 -0
  442. {agno-2.0.8 → agno-2.0.10}/agno/utils/format_str.py +0 -0
  443. {agno-2.0.8 → agno-2.0.10}/agno/utils/functions.py +0 -0
  444. {agno-2.0.8 → agno-2.0.10}/agno/utils/gemini.py +0 -0
  445. {agno-2.0.8 → agno-2.0.10}/agno/utils/http.py +0 -0
  446. {agno-2.0.8 → agno-2.0.10}/agno/utils/json_schema.py +0 -0
  447. {agno-2.0.8 → agno-2.0.10}/agno/utils/knowledge.py +0 -0
  448. {agno-2.0.8 → agno-2.0.10}/agno/utils/location.py +0 -0
  449. {agno-2.0.8 → agno-2.0.10}/agno/utils/log.py +0 -0
  450. {agno-2.0.8 → agno-2.0.10}/agno/utils/mcp.py +0 -0
  451. {agno-2.0.8 → agno-2.0.10}/agno/utils/media.py +0 -0
  452. {agno-2.0.8 → agno-2.0.10}/agno/utils/merge_dict.py +0 -0
  453. {agno-2.0.8 → agno-2.0.10}/agno/utils/message.py +0 -0
  454. {agno-2.0.8 → agno-2.0.10}/agno/utils/models/__init__.py +0 -0
  455. {agno-2.0.8 → agno-2.0.10}/agno/utils/models/ai_foundry.py +0 -0
  456. {agno-2.0.8 → agno-2.0.10}/agno/utils/models/cohere.py +0 -0
  457. {agno-2.0.8 → agno-2.0.10}/agno/utils/models/llama.py +0 -0
  458. {agno-2.0.8 → agno-2.0.10}/agno/utils/models/mistral.py +0 -0
  459. {agno-2.0.8 → agno-2.0.10}/agno/utils/models/openai_responses.py +0 -0
  460. {agno-2.0.8 → agno-2.0.10}/agno/utils/models/schema_utils.py +0 -0
  461. {agno-2.0.8 → agno-2.0.10}/agno/utils/models/watsonx.py +0 -0
  462. {agno-2.0.8 → agno-2.0.10}/agno/utils/openai.py +0 -0
  463. {agno-2.0.8 → agno-2.0.10}/agno/utils/pickle.py +0 -0
  464. {agno-2.0.8 → agno-2.0.10}/agno/utils/pprint.py +0 -0
  465. {agno-2.0.8 → agno-2.0.10}/agno/utils/print_response/__init__.py +0 -0
  466. {agno-2.0.8 → agno-2.0.10}/agno/utils/print_response/workflow.py +0 -0
  467. {agno-2.0.8 → agno-2.0.10}/agno/utils/prompts.py +0 -0
  468. {agno-2.0.8 → agno-2.0.10}/agno/utils/response.py +0 -0
  469. {agno-2.0.8 → agno-2.0.10}/agno/utils/response_iterator.py +0 -0
  470. {agno-2.0.8 → agno-2.0.10}/agno/utils/safe_formatter.py +0 -0
  471. {agno-2.0.8 → agno-2.0.10}/agno/utils/shell.py +0 -0
  472. {agno-2.0.8 → agno-2.0.10}/agno/utils/streamlit.py +0 -0
  473. {agno-2.0.8 → agno-2.0.10}/agno/utils/team.py +0 -0
  474. {agno-2.0.8 → agno-2.0.10}/agno/utils/timer.py +0 -0
  475. {agno-2.0.8 → agno-2.0.10}/agno/utils/tools.py +0 -0
  476. {agno-2.0.8 → agno-2.0.10}/agno/utils/web.py +0 -0
  477. {agno-2.0.8 → agno-2.0.10}/agno/utils/whatsapp.py +0 -0
  478. {agno-2.0.8 → agno-2.0.10}/agno/utils/yaml_io.py +0 -0
  479. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/__init__.py +0 -0
  480. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/base.py +0 -0
  481. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/cassandra/__init__.py +0 -0
  482. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/cassandra/cassandra.py +0 -0
  483. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  484. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/cassandra/index.py +0 -0
  485. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/chroma/__init__.py +0 -0
  486. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/chroma/chromadb.py +0 -0
  487. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/clickhouse/__init__.py +0 -0
  488. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  489. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/clickhouse/index.py +0 -0
  490. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/couchbase/__init__.py +0 -0
  491. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/couchbase/couchbase.py +0 -0
  492. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/distance.py +0 -0
  493. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/lancedb/__init__.py +0 -0
  494. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/lancedb/lance_db.py +0 -0
  495. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/langchaindb/__init__.py +0 -0
  496. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  497. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/lightrag/__init__.py +0 -0
  498. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/lightrag/lightrag.py +0 -0
  499. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/llamaindex/__init__.py +0 -0
  500. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  501. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/milvus/__init__.py +0 -0
  502. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/milvus/milvus.py +0 -0
  503. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/mongodb/__init__.py +0 -0
  504. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/mongodb/mongodb.py +0 -0
  505. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/pgvector/__init__.py +0 -0
  506. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/pgvector/index.py +0 -0
  507. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/pgvector/pgvector.py +0 -0
  508. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/pineconedb/__init__.py +0 -0
  509. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  510. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/qdrant/__init__.py +0 -0
  511. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/qdrant/qdrant.py +0 -0
  512. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/search.py +0 -0
  513. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/singlestore/__init__.py +0 -0
  514. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/singlestore/index.py +0 -0
  515. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/singlestore/singlestore.py +0 -0
  516. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/surrealdb/__init__.py +0 -0
  517. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  518. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/upstashdb/__init__.py +0 -0
  519. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  520. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/weaviate/__init__.py +0 -0
  521. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/weaviate/index.py +0 -0
  522. {agno-2.0.8 → agno-2.0.10}/agno/vectordb/weaviate/weaviate.py +0 -0
  523. {agno-2.0.8 → agno-2.0.10}/agno/workflow/__init__.py +0 -0
  524. {agno-2.0.8 → agno-2.0.10}/agno/workflow/condition.py +0 -0
  525. {agno-2.0.8 → agno-2.0.10}/agno/workflow/loop.py +0 -0
  526. {agno-2.0.8 → agno-2.0.10}/agno/workflow/parallel.py +0 -0
  527. {agno-2.0.8 → agno-2.0.10}/agno/workflow/router.py +0 -0
  528. {agno-2.0.8 → agno-2.0.10}/agno/workflow/step.py +0 -0
  529. {agno-2.0.8 → agno-2.0.10}/agno/workflow/steps.py +0 -0
  530. {agno-2.0.8 → agno-2.0.10}/agno/workflow/types.py +0 -0
  531. {agno-2.0.8 → agno-2.0.10}/agno.egg-info/dependency_links.txt +0 -0
  532. {agno-2.0.8 → agno-2.0.10}/agno.egg-info/top_level.txt +0 -0
  533. {agno-2.0.8 → agno-2.0.10}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.0.8
3
+ Version: 2.0.10
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
@@ -163,6 +163,8 @@ Requires-Dist: psycopg-binary; extra == "psycopg"
163
163
  Requires-Dist: psycopg; extra == "psycopg"
164
164
  Provides-Extra: reportlab
165
165
  Requires-Dist: reportlab; extra == "reportlab"
166
+ Provides-Extra: scrapegraph
167
+ Requires-Dist: scrapegraph-py; extra == "scrapegraph"
166
168
  Provides-Extra: todoist
167
169
  Requires-Dist: todoist-api-python; extra == "todoist"
168
170
  Provides-Extra: valyu
@@ -300,6 +302,7 @@ Requires-Dist: agno[mcp]; extra == "tools"
300
302
  Requires-Dist: agno[browserbase]; extra == "tools"
301
303
  Requires-Dist: agno[agentql]; extra == "tools"
302
304
  Requires-Dist: agno[opencv]; extra == "tools"
305
+ Requires-Dist: agno[scrapegraph]; extra == "tools"
303
306
  Requires-Dist: agno[valyu]; extra == "tools"
304
307
  Requires-Dist: agno[confluence]; extra == "tools"
305
308
  Requires-Dist: agno[oxylabs]; extra == "tools"
@@ -135,6 +135,8 @@ class Agent:
135
135
  add_session_state_to_context: bool = False
136
136
  # Set to True to give the agent tools to update the session_state dynamically
137
137
  enable_agentic_state: bool = False
138
+ # Set to True to overwrite the stored session_state with the session_state provided in the run. Default behaviour merges the current session state with the session state in the db
139
+ overwrite_db_session_state: bool = False
138
140
  # If True, cache the current Agent session in memory for faster access
139
141
  cache_session: bool = False
140
142
 
@@ -348,6 +350,7 @@ class Agent:
348
350
  session_id: Optional[str] = None,
349
351
  session_state: Optional[Dict[str, Any]] = None,
350
352
  add_session_state_to_context: bool = False,
353
+ overwrite_db_session_state: bool = False,
351
354
  enable_agentic_state: bool = False,
352
355
  cache_session: bool = False,
353
356
  search_session_history: Optional[bool] = False,
@@ -432,6 +435,7 @@ class Agent:
432
435
 
433
436
  self.session_id = session_id
434
437
  self.session_state = session_state
438
+ self.overwrite_db_session_state = overwrite_db_session_state
435
439
  self.enable_agentic_state = enable_agentic_state
436
440
  self.cache_session = cache_session
437
441
 
@@ -1113,7 +1117,7 @@ class Agent:
1113
1117
  self._update_metadata(session=agent_session)
1114
1118
 
1115
1119
  # Update session state from DB
1116
- session_state = self._update_session_state(session=agent_session, session_state=session_state)
1120
+ session_state = self._load_session_state(session=agent_session, session_state=session_state)
1117
1121
 
1118
1122
  # Determine runtime dependencies
1119
1123
  run_dependencies = dependencies if dependencies is not None else self.dependencies
@@ -1752,7 +1756,7 @@ class Agent:
1752
1756
  self._update_metadata(session=agent_session)
1753
1757
 
1754
1758
  # Update session state from DB
1755
- session_state = self._update_session_state(session=agent_session, session_state=session_state)
1759
+ session_state = self._load_session_state(session=agent_session, session_state=session_state)
1756
1760
 
1757
1761
  # Determine run dependencies
1758
1762
  run_dependencies = dependencies if dependencies is not None else self.dependencies
@@ -2019,7 +2023,7 @@ class Agent:
2019
2023
  self._update_metadata(session=agent_session)
2020
2024
 
2021
2025
  # Update session state from DB
2022
- session_state = self._update_session_state(session=agent_session, session_state=session_state)
2026
+ session_state = self._load_session_state(session=agent_session, session_state=session_state)
2023
2027
 
2024
2028
  run_dependencies = dependencies if dependencies is not None else self.dependencies
2025
2029
 
@@ -2403,7 +2407,7 @@ class Agent:
2403
2407
  self._update_metadata(session=agent_session)
2404
2408
 
2405
2409
  # Update session state from DB
2406
- session_state = self._update_session_state(session=agent_session, session_state=session_state)
2410
+ session_state = self._load_session_state(session=agent_session, session_state=session_state)
2407
2411
 
2408
2412
  run_dependencies = dependencies if dependencies is not None else self.dependencies
2409
2413
 
@@ -4252,8 +4256,8 @@ class Agent:
4252
4256
  log_warning(f"Error upserting session into db: {e}")
4253
4257
  return None
4254
4258
 
4255
- def _update_session_state(self, session: AgentSession, session_state: Dict[str, Any]):
4256
- """Load the existing Agent from an AgentSession (from the database)"""
4259
+ def _load_session_state(self, session: AgentSession, session_state: Dict[str, Any]):
4260
+ """Load and return the stored session_state from the database, optionally merging it with the given one"""
4257
4261
 
4258
4262
  # Get the session_state from the database and merge with proper precedence
4259
4263
  # At this point session_state contains: agent_defaults + run_params
@@ -4264,6 +4268,7 @@ class Agent:
4264
4268
  session_state_from_db is not None
4265
4269
  and isinstance(session_state_from_db, dict)
4266
4270
  and len(session_state_from_db) > 0
4271
+ and not self.overwrite_db_session_state
4267
4272
  ):
4268
4273
  # This preserves precedence: run_params > db_state > agent_defaults
4269
4274
  merged_state = session_state_from_db.copy()
@@ -7406,8 +7411,8 @@ class Agent:
7406
7411
  "parser_model": self.parser_model.to_dict() if self.parser_model else None,
7407
7412
  "output_model": self.output_model.to_dict() if self.output_model else None,
7408
7413
  "has_tools": self.tools is not None,
7409
- "has_memory": self.enable_user_memories is not None,
7410
- "has_reasoning": self.reasoning is not None,
7414
+ "has_memory": self.enable_user_memories is True,
7415
+ "has_reasoning": self.reasoning is True,
7411
7416
  "has_knowledge": self.knowledge is not None,
7412
7417
  "has_input_schema": self.input_schema is not None,
7413
7418
  "has_output_schema": self.output_schema is not None,
@@ -81,6 +81,13 @@ class BaseDb(ABC):
81
81
  ) -> Optional[Union[Session, Dict[str, Any]]]:
82
82
  raise NotImplementedError
83
83
 
84
+ @abstractmethod
85
+ def upsert_sessions(
86
+ self, sessions: List[Session], deserialize: Optional[bool] = True
87
+ ) -> List[Union[Session, Dict[str, Any]]]:
88
+ """Bulk upsert multiple sessions for improved performance on large datasets."""
89
+ raise NotImplementedError
90
+
84
91
  # --- Memory ---
85
92
 
86
93
  @abstractmethod
@@ -135,6 +142,13 @@ class BaseDb(ABC):
135
142
  ) -> Optional[Union[UserMemory, Dict[str, Any]]]:
136
143
  raise NotImplementedError
137
144
 
145
+ @abstractmethod
146
+ def upsert_memories(
147
+ self, memories: List[UserMemory], deserialize: Optional[bool] = True
148
+ ) -> List[Union[UserMemory, Dict[str, Any]]]:
149
+ """Bulk upsert multiple memories for improved performance on large datasets."""
150
+ raise NotImplementedError
151
+
138
152
  # --- Metrics ---
139
153
  @abstractmethod
140
154
  def get_metrics(
@@ -31,7 +31,7 @@ from agno.db.schemas.evals import EvalFilterType, EvalRunRecord, EvalType
31
31
  from agno.db.schemas.knowledge import KnowledgeRow
32
32
  from agno.db.schemas.memory import UserMemory
33
33
  from agno.session import AgentSession, Session, TeamSession, WorkflowSession
34
- from agno.utils.log import log_debug, log_error
34
+ from agno.utils.log import log_debug, log_error, log_info
35
35
  from agno.utils.string import generate_id
36
36
 
37
37
  try:
@@ -232,6 +232,7 @@ class DynamoDb(BaseDb):
232
232
 
233
233
  except Exception as e:
234
234
  log_error(f"Failed to delete sessions: {e}")
235
+ raise e
235
236
 
236
237
  def get_session(
237
238
  self,
@@ -290,7 +291,7 @@ class DynamoDb(BaseDb):
290
291
 
291
292
  except Exception as e:
292
293
  log_error(f"Failed to get session {session_id}: {e}")
293
- return None
294
+ raise e
294
295
 
295
296
  def get_sessions(
296
297
  self,
@@ -410,7 +411,7 @@ class DynamoDb(BaseDb):
410
411
 
411
412
  except Exception as e:
412
413
  log_error(f"Failed to get sessions: {e}")
413
- return []
414
+ raise e
414
415
 
415
416
  def rename_session(
416
417
  self,
@@ -478,7 +479,7 @@ class DynamoDb(BaseDb):
478
479
 
479
480
  except Exception as e:
480
481
  log_error(f"Failed to rename session {session_id}: {e}")
481
- return None
482
+ raise e
482
483
 
483
484
  def upsert_session(
484
485
  self, session: Session, deserialize: Optional[bool] = True
@@ -520,7 +521,44 @@ class DynamoDb(BaseDb):
520
521
 
521
522
  except Exception as e:
522
523
  log_error(f"Failed to upsert session {session.session_id}: {e}")
523
- return None
524
+ raise e
525
+
526
+ def upsert_sessions(
527
+ self, sessions: List[Session], deserialize: Optional[bool] = True
528
+ ) -> List[Union[Session, Dict[str, Any]]]:
529
+ """
530
+ Bulk upsert multiple sessions for improved performance on large datasets.
531
+
532
+ Args:
533
+ sessions (List[Session]): List of sessions to upsert.
534
+ deserialize (Optional[bool]): Whether to deserialize the sessions. Defaults to True.
535
+
536
+ Returns:
537
+ List[Union[Session, Dict[str, Any]]]: List of upserted sessions.
538
+
539
+ Raises:
540
+ Exception: If an error occurs during bulk upsert.
541
+ """
542
+ if not sessions:
543
+ return []
544
+
545
+ try:
546
+ log_info(
547
+ f"DynamoDb doesn't support efficient bulk operations, falling back to individual upserts for {len(sessions)} sessions"
548
+ )
549
+
550
+ # Fall back to individual upserts
551
+ results = []
552
+ for session in sessions:
553
+ if session is not None:
554
+ result = self.upsert_session(session, deserialize=deserialize)
555
+ if result is not None:
556
+ results.append(result)
557
+ return results
558
+
559
+ except Exception as e:
560
+ log_error(f"Exception during bulk session upsert: {e}")
561
+ return []
524
562
 
525
563
  # --- User Memory ---
526
564
 
@@ -543,6 +581,7 @@ class DynamoDb(BaseDb):
543
581
 
544
582
  except Exception as e:
545
583
  log_error(f"Failed to delete user memory {memory_id}: {e}")
584
+ raise e
546
585
 
547
586
  def delete_user_memories(self, memory_ids: List[str]) -> None:
548
587
  """
@@ -567,6 +606,7 @@ class DynamoDb(BaseDb):
567
606
 
568
607
  except Exception as e:
569
608
  log_error(f"Failed to delete user memories: {e}")
609
+ raise e
570
610
 
571
611
  def get_all_memory_topics(self) -> List[str]:
572
612
  """Get all memory topics from the database.
@@ -599,7 +639,7 @@ class DynamoDb(BaseDb):
599
639
 
600
640
  except Exception as e:
601
641
  log_error(f"Exception reading from memory table: {e}")
602
- return []
642
+ raise e
603
643
 
604
644
  def get_user_memory(
605
645
  self, memory_id: str, deserialize: Optional[bool] = True
@@ -632,7 +672,7 @@ class DynamoDb(BaseDb):
632
672
 
633
673
  except Exception as e:
634
674
  log_error(f"Failed to get user memory {memory_id}: {e}")
635
- return None
675
+ raise e
636
676
 
637
677
  def get_user_memories(
638
678
  self,
@@ -752,7 +792,7 @@ class DynamoDb(BaseDb):
752
792
 
753
793
  except Exception as e:
754
794
  log_error(f"Failed to get user memories: {e}")
755
- return [] if deserialize else ([], 0)
795
+ raise e
756
796
 
757
797
  def get_user_memory_stats(
758
798
  self,
@@ -838,7 +878,7 @@ class DynamoDb(BaseDb):
838
878
 
839
879
  except Exception as e:
840
880
  log_error(f"Failed to get user memory stats: {e}")
841
- return [], 0
881
+ raise e
842
882
 
843
883
  def upsert_user_memory(
844
884
  self, memory: UserMemory, deserialize: Optional[bool] = True
@@ -867,7 +907,44 @@ class DynamoDb(BaseDb):
867
907
 
868
908
  except Exception as e:
869
909
  log_error(f"Failed to upsert user memory: {e}")
870
- return None
910
+ raise e
911
+
912
+ def upsert_memories(
913
+ self, memories: List[UserMemory], deserialize: Optional[bool] = True
914
+ ) -> List[Union[UserMemory, Dict[str, Any]]]:
915
+ """
916
+ Bulk upsert multiple user memories for improved performance on large datasets.
917
+
918
+ Args:
919
+ memories (List[UserMemory]): List of memories to upsert.
920
+ deserialize (Optional[bool]): Whether to deserialize the memories. Defaults to True.
921
+
922
+ Returns:
923
+ List[Union[UserMemory, Dict[str, Any]]]: List of upserted memories.
924
+
925
+ Raises:
926
+ Exception: If an error occurs during bulk upsert.
927
+ """
928
+ if not memories:
929
+ return []
930
+
931
+ try:
932
+ log_info(
933
+ f"DynamoDb doesn't support efficient bulk operations, falling back to individual upserts for {len(memories)} memories"
934
+ )
935
+
936
+ # Fall back to individual upserts
937
+ results = []
938
+ for memory in memories:
939
+ if memory is not None:
940
+ result = self.upsert_user_memory(memory, deserialize=deserialize)
941
+ if result is not None:
942
+ results.append(result)
943
+ return results
944
+
945
+ except Exception as e:
946
+ log_error(f"Exception during bulk memory upsert: {e}")
947
+ return []
871
948
 
872
949
  def clear_memories(self) -> None:
873
950
  """Delete all memories from the database.
@@ -908,6 +985,7 @@ class DynamoDb(BaseDb):
908
985
  from agno.utils.log import log_warning
909
986
 
910
987
  log_warning(f"Exception deleting all memories: {e}")
988
+ raise e
911
989
 
912
990
  # --- Metrics ---
913
991
 
@@ -985,7 +1063,7 @@ class DynamoDb(BaseDb):
985
1063
 
986
1064
  except Exception as e:
987
1065
  log_error(f"Failed to calculate metrics: {e}")
988
- return None
1066
+ raise e
989
1067
 
990
1068
  def _get_metrics_calculation_starting_date(self) -> Optional[date]:
991
1069
  """Get the first date for which metrics calculation is needed:
@@ -1071,7 +1149,7 @@ class DynamoDb(BaseDb):
1071
1149
 
1072
1150
  except Exception as e:
1073
1151
  log_error(f"Failed to get metrics calculation starting date: {e}")
1074
- return None
1152
+ raise e
1075
1153
 
1076
1154
  def _get_all_sessions_for_metrics_calculation(
1077
1155
  self, start_timestamp: int, end_timestamp: int
@@ -1129,7 +1207,7 @@ class DynamoDb(BaseDb):
1129
1207
 
1130
1208
  except Exception as e:
1131
1209
  log_error(f"Failed to get sessions for metrics calculation: {e}")
1132
- return []
1210
+ raise e
1133
1211
 
1134
1212
  def _bulk_upsert_metrics(self, metrics_records: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
1135
1213
  """Bulk upsert metrics records into DynamoDB with proper deduplication.
@@ -1157,7 +1235,7 @@ class DynamoDb(BaseDb):
1157
1235
 
1158
1236
  except Exception as e:
1159
1237
  log_error(f"Failed to bulk upsert metrics: {e}")
1160
- return []
1238
+ raise e
1161
1239
 
1162
1240
  def _upsert_single_metrics_record(self, table_name: str, record: Dict[str, Any]) -> Optional[Dict[str, Any]]:
1163
1241
  """Upsert a single metrics record, checking for existing records with the same date.
@@ -1189,7 +1267,7 @@ class DynamoDb(BaseDb):
1189
1267
 
1190
1268
  except Exception as e:
1191
1269
  log_error(f"Failed to upsert single metrics record: {e}")
1192
- return None
1270
+ raise e
1193
1271
 
1194
1272
  def _get_existing_metrics_record(self, table_name: str, date_str: str) -> Optional[Dict[str, Any]]:
1195
1273
  """Get existing metrics record for a given date.
@@ -1222,7 +1300,7 @@ class DynamoDb(BaseDb):
1222
1300
 
1223
1301
  except Exception as e:
1224
1302
  log_error(f"Failed to get existing metrics record for date {date_str}: {e}")
1225
- return None
1303
+ raise e
1226
1304
 
1227
1305
  def _update_existing_metrics_record(
1228
1306
  self,
@@ -1256,7 +1334,7 @@ class DynamoDb(BaseDb):
1256
1334
 
1257
1335
  except Exception as e:
1258
1336
  log_error(f"Failed to update existing metrics record: {e}")
1259
- return None
1337
+ raise e
1260
1338
 
1261
1339
  def _create_new_metrics_record(self, table_name: str, record: Dict[str, Any]) -> Optional[Dict[str, Any]]:
1262
1340
  """Create a new metrics record.
@@ -1280,7 +1358,7 @@ class DynamoDb(BaseDb):
1280
1358
 
1281
1359
  except Exception as e:
1282
1360
  log_error(f"Failed to create new metrics record: {e}")
1283
- return None
1361
+ raise e
1284
1362
 
1285
1363
  def _prepare_metrics_record_for_dynamo(self, record: Dict[str, Any]) -> Dict[str, Any]:
1286
1364
  """Prepare a metrics record for DynamoDB serialization by converting all data types properly.
@@ -1403,7 +1481,7 @@ class DynamoDb(BaseDb):
1403
1481
 
1404
1482
  except Exception as e:
1405
1483
  log_error(f"Failed to get metrics: {e}")
1406
- return [], 0
1484
+ raise e
1407
1485
 
1408
1486
  # --- Knowledge methods ---
1409
1487
 
@@ -1425,6 +1503,7 @@ class DynamoDb(BaseDb):
1425
1503
 
1426
1504
  except Exception as e:
1427
1505
  log_error(f"Failed to delete knowledge content {id}: {e}")
1506
+ raise e
1428
1507
 
1429
1508
  def get_knowledge_content(self, id: str) -> Optional[KnowledgeRow]:
1430
1509
  """Get a knowledge row from the database.
@@ -1447,7 +1526,7 @@ class DynamoDb(BaseDb):
1447
1526
 
1448
1527
  except Exception as e:
1449
1528
  log_error(f"Failed to get knowledge content {id}: {e}")
1450
- return None
1529
+ raise e
1451
1530
 
1452
1531
  def get_knowledge_contents(
1453
1532
  self,
@@ -1519,7 +1598,7 @@ class DynamoDb(BaseDb):
1519
1598
 
1520
1599
  except Exception as e:
1521
1600
  log_error(f"Failed to get knowledge contents: {e}")
1522
- return [], 0
1601
+ raise e
1523
1602
 
1524
1603
  def upsert_knowledge_content(self, knowledge_row: KnowledgeRow):
1525
1604
  """Upsert knowledge content in the database.
@@ -1540,7 +1619,7 @@ class DynamoDb(BaseDb):
1540
1619
 
1541
1620
  except Exception as e:
1542
1621
  log_error(f"Failed to upsert knowledge content {knowledge_row.id}: {e}")
1543
- return None
1622
+ raise e
1544
1623
 
1545
1624
  # --- Eval ---
1546
1625
 
@@ -1570,7 +1649,7 @@ class DynamoDb(BaseDb):
1570
1649
 
1571
1650
  except Exception as e:
1572
1651
  log_error(f"Failed to create eval run: {e}")
1573
- return None
1652
+ raise e
1574
1653
 
1575
1654
  def delete_eval_runs(self, eval_run_ids: List[str]) -> None:
1576
1655
  if not eval_run_ids or not self.eval_table_name:
@@ -1588,6 +1667,7 @@ class DynamoDb(BaseDb):
1588
1667
 
1589
1668
  except Exception as e:
1590
1669
  log_error(f"Failed to delete eval runs: {e}")
1670
+ raise e
1591
1671
 
1592
1672
  def get_eval_run_raw(self, eval_run_id: str, table: Optional[Any] = None) -> Optional[Dict[str, Any]]:
1593
1673
  if not self.eval_table_name:
@@ -1603,7 +1683,7 @@ class DynamoDb(BaseDb):
1603
1683
 
1604
1684
  except Exception as e:
1605
1685
  log_error(f"Failed to get eval run {eval_run_id}: {e}")
1606
- return None
1686
+ raise e
1607
1687
 
1608
1688
  def get_eval_run(self, eval_run_id: str, table: Optional[Any] = None) -> Optional[EvalRunRecord]:
1609
1689
  if not self.eval_table_name:
@@ -1619,7 +1699,7 @@ class DynamoDb(BaseDb):
1619
1699
 
1620
1700
  except Exception as e:
1621
1701
  log_error(f"Failed to get eval run {eval_run_id}: {e}")
1622
- return None
1702
+ raise e
1623
1703
 
1624
1704
  def get_eval_runs(
1625
1705
  self,
@@ -1718,7 +1798,7 @@ class DynamoDb(BaseDb):
1718
1798
 
1719
1799
  except Exception as e:
1720
1800
  log_error(f"Failed to get eval runs: {e}")
1721
- return [] if deserialize else ([], 0)
1801
+ raise e
1722
1802
 
1723
1803
  def rename_eval_run(
1724
1804
  self, eval_run_id: str, name: str, deserialize: Optional[bool] = True
@@ -1750,4 +1830,4 @@ class DynamoDb(BaseDb):
1750
1830
 
1751
1831
  except Exception as e:
1752
1832
  log_error(f"Failed to rename eval run {eval_run_id}: {e}")
1753
- return None
1833
+ raise e