agno 2.0.4__tar.gz → 2.0.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 (530) hide show
  1. {agno-2.0.4 → agno-2.0.6}/PKG-INFO +9 -5
  2. {agno-2.0.4 → agno-2.0.6}/README.md +5 -4
  3. {agno-2.0.4 → agno-2.0.6}/agno/agent/agent.py +127 -102
  4. {agno-2.0.4 → agno-2.0.6}/agno/db/dynamo/dynamo.py +9 -7
  5. {agno-2.0.4 → agno-2.0.6}/agno/db/firestore/firestore.py +7 -4
  6. {agno-2.0.4 → agno-2.0.6}/agno/db/gcs_json/gcs_json_db.py +6 -4
  7. {agno-2.0.4 → agno-2.0.6}/agno/db/json/json_db.py +10 -6
  8. agno-2.0.6/agno/db/migrations/v1_to_v2.py +330 -0
  9. {agno-2.0.4 → agno-2.0.6}/agno/db/mongo/mongo.py +67 -6
  10. {agno-2.0.4 → agno-2.0.6}/agno/db/mysql/mysql.py +7 -6
  11. {agno-2.0.4 → agno-2.0.6}/agno/db/mysql/schemas.py +27 -27
  12. {agno-2.0.4 → agno-2.0.6}/agno/db/postgres/postgres.py +7 -6
  13. {agno-2.0.4 → agno-2.0.6}/agno/db/redis/redis.py +3 -3
  14. {agno-2.0.4 → agno-2.0.6}/agno/db/singlestore/singlestore.py +4 -4
  15. {agno-2.0.4 → agno-2.0.6}/agno/db/sqlite/sqlite.py +7 -6
  16. {agno-2.0.4 → agno-2.0.6}/agno/db/utils.py +0 -14
  17. {agno-2.0.4 → agno-2.0.6}/agno/integrations/discord/client.py +1 -0
  18. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/openai.py +19 -11
  19. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/knowledge.py +11 -10
  20. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/reader_factory.py +7 -3
  21. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/web_search_reader.py +12 -6
  22. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/website_reader.py +33 -16
  23. {agno-2.0.4 → agno-2.0.6}/agno/media.py +70 -0
  24. {agno-2.0.4 → agno-2.0.6}/agno/models/aimlapi/aimlapi.py +2 -2
  25. {agno-2.0.4 → agno-2.0.6}/agno/models/base.py +31 -4
  26. {agno-2.0.4 → agno-2.0.6}/agno/models/cerebras/cerebras_openai.py +2 -2
  27. {agno-2.0.4 → agno-2.0.6}/agno/models/deepinfra/deepinfra.py +2 -2
  28. {agno-2.0.4 → agno-2.0.6}/agno/models/deepseek/deepseek.py +2 -2
  29. {agno-2.0.4 → agno-2.0.6}/agno/models/fireworks/fireworks.py +2 -2
  30. {agno-2.0.4 → agno-2.0.6}/agno/models/internlm/internlm.py +2 -2
  31. {agno-2.0.4 → agno-2.0.6}/agno/models/langdb/langdb.py +4 -4
  32. {agno-2.0.4 → agno-2.0.6}/agno/models/litellm/litellm_openai.py +2 -2
  33. {agno-2.0.4 → agno-2.0.6}/agno/models/message.py +135 -0
  34. {agno-2.0.4 → agno-2.0.6}/agno/models/meta/llama_openai.py +2 -2
  35. {agno-2.0.4 → agno-2.0.6}/agno/models/nebius/nebius.py +2 -2
  36. agno-2.0.6/agno/models/nexus/__init__.py +3 -0
  37. agno-2.0.6/agno/models/nexus/nexus.py +25 -0
  38. {agno-2.0.4 → agno-2.0.6}/agno/models/nvidia/nvidia.py +2 -2
  39. {agno-2.0.4 → agno-2.0.6}/agno/models/openai/responses.py +6 -0
  40. {agno-2.0.4 → agno-2.0.6}/agno/models/openrouter/openrouter.py +2 -2
  41. {agno-2.0.4 → agno-2.0.6}/agno/models/perplexity/perplexity.py +2 -2
  42. {agno-2.0.4 → agno-2.0.6}/agno/models/portkey/portkey.py +3 -3
  43. {agno-2.0.4 → agno-2.0.6}/agno/models/response.py +2 -1
  44. {agno-2.0.4 → agno-2.0.6}/agno/models/sambanova/sambanova.py +2 -2
  45. {agno-2.0.4 → agno-2.0.6}/agno/models/together/together.py +2 -2
  46. {agno-2.0.4 → agno-2.0.6}/agno/models/vercel/v0.py +2 -2
  47. {agno-2.0.4 → agno-2.0.6}/agno/models/xai/xai.py +2 -2
  48. {agno-2.0.4 → agno-2.0.6}/agno/os/app.py +162 -42
  49. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/agui/utils.py +98 -134
  50. {agno-2.0.4 → agno-2.0.6}/agno/os/router.py +3 -1
  51. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/health.py +0 -1
  52. agno-2.0.6/agno/os/routers/home.py +52 -0
  53. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/knowledge/knowledge.py +2 -2
  54. {agno-2.0.4 → agno-2.0.6}/agno/os/schema.py +21 -0
  55. {agno-2.0.4 → agno-2.0.6}/agno/os/utils.py +1 -9
  56. {agno-2.0.4 → agno-2.0.6}/agno/run/agent.py +19 -3
  57. {agno-2.0.4 → agno-2.0.6}/agno/run/team.py +18 -3
  58. {agno-2.0.4 → agno-2.0.6}/agno/run/workflow.py +10 -0
  59. {agno-2.0.4 → agno-2.0.6}/agno/team/team.py +70 -45
  60. {agno-2.0.4 → agno-2.0.6}/agno/tools/duckduckgo.py +15 -11
  61. {agno-2.0.4 → agno-2.0.6}/agno/tools/e2b.py +14 -7
  62. agno-2.0.6/agno/tools/file_generation.py +350 -0
  63. {agno-2.0.4 → agno-2.0.6}/agno/tools/function.py +2 -0
  64. {agno-2.0.4 → agno-2.0.6}/agno/tools/googlesearch.py +1 -1
  65. {agno-2.0.4 → agno-2.0.6}/agno/utils/gemini.py +24 -4
  66. {agno-2.0.4 → agno-2.0.6}/agno/utils/string.py +32 -0
  67. {agno-2.0.4 → agno-2.0.6}/agno/utils/tools.py +1 -1
  68. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/chroma/chromadb.py +66 -25
  69. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/lancedb/lance_db.py +15 -4
  70. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/milvus/milvus.py +6 -0
  71. {agno-2.0.4 → agno-2.0.6}/agno/workflow/step.py +4 -3
  72. {agno-2.0.4 → agno-2.0.6}/agno/workflow/workflow.py +4 -0
  73. {agno-2.0.4 → agno-2.0.6}/agno.egg-info/PKG-INFO +9 -5
  74. {agno-2.0.4 → agno-2.0.6}/agno.egg-info/SOURCES.txt +4 -1
  75. {agno-2.0.4 → agno-2.0.6}/agno.egg-info/requires.txt +4 -0
  76. {agno-2.0.4 → agno-2.0.6}/pyproject.toml +4 -1
  77. agno-2.0.4/agno/db/migrations/v1_to_v2.py +0 -162
  78. agno-2.0.4/agno/knowledge/reader/url_reader.py +0 -128
  79. {agno-2.0.4 → agno-2.0.6}/LICENSE +0 -0
  80. {agno-2.0.4 → agno-2.0.6}/agno/__init__.py +0 -0
  81. {agno-2.0.4 → agno-2.0.6}/agno/agent/__init__.py +0 -0
  82. {agno-2.0.4 → agno-2.0.6}/agno/api/__init__.py +0 -0
  83. {agno-2.0.4 → agno-2.0.6}/agno/api/agent.py +0 -0
  84. {agno-2.0.4 → agno-2.0.6}/agno/api/api.py +0 -0
  85. {agno-2.0.4 → agno-2.0.6}/agno/api/evals.py +0 -0
  86. {agno-2.0.4 → agno-2.0.6}/agno/api/os.py +0 -0
  87. {agno-2.0.4 → agno-2.0.6}/agno/api/routes.py +0 -0
  88. {agno-2.0.4 → agno-2.0.6}/agno/api/schemas/__init__.py +0 -0
  89. {agno-2.0.4 → agno-2.0.6}/agno/api/schemas/agent.py +0 -0
  90. {agno-2.0.4 → agno-2.0.6}/agno/api/schemas/evals.py +0 -0
  91. {agno-2.0.4 → agno-2.0.6}/agno/api/schemas/os.py +0 -0
  92. {agno-2.0.4 → agno-2.0.6}/agno/api/schemas/response.py +0 -0
  93. {agno-2.0.4 → agno-2.0.6}/agno/api/schemas/team.py +0 -0
  94. {agno-2.0.4 → agno-2.0.6}/agno/api/schemas/utils.py +0 -0
  95. {agno-2.0.4 → agno-2.0.6}/agno/api/schemas/workflows.py +0 -0
  96. {agno-2.0.4 → agno-2.0.6}/agno/api/settings.py +0 -0
  97. {agno-2.0.4 → agno-2.0.6}/agno/api/team.py +0 -0
  98. {agno-2.0.4 → agno-2.0.6}/agno/api/workflow.py +0 -0
  99. {agno-2.0.4 → agno-2.0.6}/agno/cloud/aws/base.py +0 -0
  100. {agno-2.0.4 → agno-2.0.6}/agno/cloud/aws/s3/__init__.py +0 -0
  101. {agno-2.0.4 → agno-2.0.6}/agno/cloud/aws/s3/api_client.py +0 -0
  102. {agno-2.0.4 → agno-2.0.6}/agno/cloud/aws/s3/bucket.py +0 -0
  103. {agno-2.0.4 → agno-2.0.6}/agno/cloud/aws/s3/object.py +0 -0
  104. {agno-2.0.4 → agno-2.0.6}/agno/db/__init__.py +0 -0
  105. {agno-2.0.4 → agno-2.0.6}/agno/db/base.py +0 -0
  106. {agno-2.0.4 → agno-2.0.6}/agno/db/dynamo/__init__.py +0 -0
  107. {agno-2.0.4 → agno-2.0.6}/agno/db/dynamo/schemas.py +0 -0
  108. {agno-2.0.4 → agno-2.0.6}/agno/db/dynamo/utils.py +0 -0
  109. {agno-2.0.4 → agno-2.0.6}/agno/db/firestore/__init__.py +0 -0
  110. {agno-2.0.4 → agno-2.0.6}/agno/db/firestore/schemas.py +0 -0
  111. {agno-2.0.4 → agno-2.0.6}/agno/db/firestore/utils.py +0 -0
  112. {agno-2.0.4 → agno-2.0.6}/agno/db/gcs_json/__init__.py +0 -0
  113. {agno-2.0.4 → agno-2.0.6}/agno/db/gcs_json/utils.py +0 -0
  114. {agno-2.0.4 → agno-2.0.6}/agno/db/in_memory/__init__.py +0 -0
  115. {agno-2.0.4 → agno-2.0.6}/agno/db/in_memory/in_memory_db.py +0 -0
  116. {agno-2.0.4 → agno-2.0.6}/agno/db/in_memory/utils.py +0 -0
  117. {agno-2.0.4 → agno-2.0.6}/agno/db/json/__init__.py +0 -0
  118. {agno-2.0.4 → agno-2.0.6}/agno/db/json/utils.py +0 -0
  119. {agno-2.0.4 → agno-2.0.6}/agno/db/migrations/__init__.py +0 -0
  120. {agno-2.0.4 → agno-2.0.6}/agno/db/mongo/__init__.py +0 -0
  121. {agno-2.0.4 → agno-2.0.6}/agno/db/mongo/schemas.py +0 -0
  122. {agno-2.0.4 → agno-2.0.6}/agno/db/mongo/utils.py +0 -0
  123. {agno-2.0.4 → agno-2.0.6}/agno/db/mysql/__init__.py +0 -0
  124. {agno-2.0.4 → agno-2.0.6}/agno/db/mysql/utils.py +0 -0
  125. {agno-2.0.4 → agno-2.0.6}/agno/db/postgres/__init__.py +0 -0
  126. {agno-2.0.4 → agno-2.0.6}/agno/db/postgres/schemas.py +0 -0
  127. {agno-2.0.4 → agno-2.0.6}/agno/db/postgres/utils.py +0 -0
  128. {agno-2.0.4 → agno-2.0.6}/agno/db/redis/__init__.py +0 -0
  129. {agno-2.0.4 → agno-2.0.6}/agno/db/redis/schemas.py +0 -0
  130. {agno-2.0.4 → agno-2.0.6}/agno/db/redis/utils.py +0 -0
  131. {agno-2.0.4 → agno-2.0.6}/agno/db/schemas/__init__.py +0 -0
  132. {agno-2.0.4 → agno-2.0.6}/agno/db/schemas/evals.py +0 -0
  133. {agno-2.0.4 → agno-2.0.6}/agno/db/schemas/knowledge.py +0 -0
  134. {agno-2.0.4 → agno-2.0.6}/agno/db/schemas/memory.py +0 -0
  135. {agno-2.0.4 → agno-2.0.6}/agno/db/schemas/metrics.py +0 -0
  136. {agno-2.0.4 → agno-2.0.6}/agno/db/singlestore/__init__.py +0 -0
  137. {agno-2.0.4 → agno-2.0.6}/agno/db/singlestore/schemas.py +0 -0
  138. {agno-2.0.4 → agno-2.0.6}/agno/db/singlestore/utils.py +0 -0
  139. {agno-2.0.4 → agno-2.0.6}/agno/db/sqlite/__init__.py +0 -0
  140. {agno-2.0.4 → agno-2.0.6}/agno/db/sqlite/schemas.py +0 -0
  141. {agno-2.0.4 → agno-2.0.6}/agno/db/sqlite/utils.py +0 -0
  142. {agno-2.0.4 → agno-2.0.6}/agno/debug.py +0 -0
  143. {agno-2.0.4 → agno-2.0.6}/agno/eval/__init__.py +0 -0
  144. {agno-2.0.4 → agno-2.0.6}/agno/eval/accuracy.py +0 -0
  145. {agno-2.0.4 → agno-2.0.6}/agno/eval/performance.py +0 -0
  146. {agno-2.0.4 → agno-2.0.6}/agno/eval/reliability.py +0 -0
  147. {agno-2.0.4 → agno-2.0.6}/agno/eval/utils.py +0 -0
  148. {agno-2.0.4 → agno-2.0.6}/agno/exceptions.py +0 -0
  149. {agno-2.0.4 → agno-2.0.6}/agno/integrations/__init__.py +0 -0
  150. {agno-2.0.4 → agno-2.0.6}/agno/integrations/discord/__init__.py +0 -0
  151. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/__init__.py +0 -0
  152. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/chunking/__init__.py +0 -0
  153. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/chunking/agentic.py +0 -0
  154. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/chunking/document.py +0 -0
  155. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/chunking/fixed.py +0 -0
  156. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/chunking/markdown.py +0 -0
  157. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/chunking/recursive.py +0 -0
  158. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/chunking/row.py +0 -0
  159. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/chunking/semantic.py +0 -0
  160. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/chunking/strategy.py +0 -0
  161. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/content.py +0 -0
  162. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/document/__init__.py +0 -0
  163. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/document/base.py +0 -0
  164. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/__init__.py +0 -0
  165. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  166. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/azure_openai.py +0 -0
  167. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/base.py +0 -0
  168. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/cohere.py +0 -0
  169. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/fastembed.py +0 -0
  170. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/fireworks.py +0 -0
  171. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/google.py +0 -0
  172. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/huggingface.py +0 -0
  173. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/jina.py +0 -0
  174. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/langdb.py +0 -0
  175. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/mistral.py +0 -0
  176. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/nebius.py +0 -0
  177. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/ollama.py +0 -0
  178. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  179. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/together.py +0 -0
  180. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/embedder/voyageai.py +0 -0
  181. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/__init__.py +0 -0
  182. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/arxiv_reader.py +0 -0
  183. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/base.py +0 -0
  184. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/csv_reader.py +0 -0
  185. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/docx_reader.py +0 -0
  186. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  187. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/json_reader.py +0 -0
  188. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/markdown_reader.py +0 -0
  189. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/pdf_reader.py +0 -0
  190. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/s3_reader.py +0 -0
  191. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/text_reader.py +0 -0
  192. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  193. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reader/youtube_reader.py +0 -0
  194. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/remote_content/__init__.py +0 -0
  195. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/remote_content/remote_content.py +0 -0
  196. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reranker/__init__.py +0 -0
  197. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reranker/base.py +0 -0
  198. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reranker/cohere.py +0 -0
  199. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reranker/infinity.py +0 -0
  200. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  201. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/types.py +0 -0
  202. {agno-2.0.4 → agno-2.0.6}/agno/knowledge/utils.py +0 -0
  203. {agno-2.0.4 → agno-2.0.6}/agno/memory/__init__.py +0 -0
  204. {agno-2.0.4 → agno-2.0.6}/agno/memory/manager.py +0 -0
  205. {agno-2.0.4 → agno-2.0.6}/agno/models/__init__.py +0 -0
  206. {agno-2.0.4 → agno-2.0.6}/agno/models/aimlapi/__init__.py +0 -0
  207. {agno-2.0.4 → agno-2.0.6}/agno/models/anthropic/__init__.py +0 -0
  208. {agno-2.0.4 → agno-2.0.6}/agno/models/anthropic/claude.py +0 -0
  209. {agno-2.0.4 → agno-2.0.6}/agno/models/aws/__init__.py +0 -0
  210. {agno-2.0.4 → agno-2.0.6}/agno/models/aws/bedrock.py +0 -0
  211. {agno-2.0.4 → agno-2.0.6}/agno/models/aws/claude.py +0 -0
  212. {agno-2.0.4 → agno-2.0.6}/agno/models/azure/__init__.py +0 -0
  213. {agno-2.0.4 → agno-2.0.6}/agno/models/azure/ai_foundry.py +0 -0
  214. {agno-2.0.4 → agno-2.0.6}/agno/models/azure/openai_chat.py +0 -0
  215. {agno-2.0.4 → agno-2.0.6}/agno/models/cerebras/__init__.py +0 -0
  216. {agno-2.0.4 → agno-2.0.6}/agno/models/cerebras/cerebras.py +0 -0
  217. {agno-2.0.4 → agno-2.0.6}/agno/models/cohere/__init__.py +0 -0
  218. {agno-2.0.4 → agno-2.0.6}/agno/models/cohere/chat.py +0 -0
  219. {agno-2.0.4 → agno-2.0.6}/agno/models/dashscope/__init__.py +0 -0
  220. {agno-2.0.4 → agno-2.0.6}/agno/models/dashscope/dashscope.py +0 -0
  221. {agno-2.0.4 → agno-2.0.6}/agno/models/deepinfra/__init__.py +0 -0
  222. {agno-2.0.4 → agno-2.0.6}/agno/models/deepseek/__init__.py +0 -0
  223. {agno-2.0.4 → agno-2.0.6}/agno/models/defaults.py +0 -0
  224. {agno-2.0.4 → agno-2.0.6}/agno/models/fireworks/__init__.py +0 -0
  225. {agno-2.0.4 → agno-2.0.6}/agno/models/google/__init__.py +0 -0
  226. {agno-2.0.4 → agno-2.0.6}/agno/models/google/gemini.py +0 -0
  227. {agno-2.0.4 → agno-2.0.6}/agno/models/groq/__init__.py +0 -0
  228. {agno-2.0.4 → agno-2.0.6}/agno/models/groq/groq.py +0 -0
  229. {agno-2.0.4 → agno-2.0.6}/agno/models/huggingface/__init__.py +0 -0
  230. {agno-2.0.4 → agno-2.0.6}/agno/models/huggingface/huggingface.py +0 -0
  231. {agno-2.0.4 → agno-2.0.6}/agno/models/ibm/__init__.py +0 -0
  232. {agno-2.0.4 → agno-2.0.6}/agno/models/ibm/watsonx.py +0 -0
  233. {agno-2.0.4 → agno-2.0.6}/agno/models/internlm/__init__.py +0 -0
  234. {agno-2.0.4 → agno-2.0.6}/agno/models/langdb/__init__.py +0 -0
  235. {agno-2.0.4 → agno-2.0.6}/agno/models/litellm/__init__.py +0 -0
  236. {agno-2.0.4 → agno-2.0.6}/agno/models/litellm/chat.py +0 -0
  237. {agno-2.0.4 → agno-2.0.6}/agno/models/lmstudio/__init__.py +0 -0
  238. {agno-2.0.4 → agno-2.0.6}/agno/models/lmstudio/lmstudio.py +0 -0
  239. {agno-2.0.4 → agno-2.0.6}/agno/models/meta/__init__.py +0 -0
  240. {agno-2.0.4 → agno-2.0.6}/agno/models/meta/llama.py +0 -0
  241. {agno-2.0.4 → agno-2.0.6}/agno/models/metrics.py +0 -0
  242. {agno-2.0.4 → agno-2.0.6}/agno/models/mistral/__init__.py +0 -0
  243. {agno-2.0.4 → agno-2.0.6}/agno/models/mistral/mistral.py +0 -0
  244. {agno-2.0.4 → agno-2.0.6}/agno/models/nebius/__init__.py +0 -0
  245. {agno-2.0.4 → agno-2.0.6}/agno/models/nvidia/__init__.py +0 -0
  246. {agno-2.0.4 → agno-2.0.6}/agno/models/ollama/__init__.py +0 -0
  247. {agno-2.0.4 → agno-2.0.6}/agno/models/ollama/chat.py +0 -0
  248. {agno-2.0.4 → agno-2.0.6}/agno/models/openai/__init__.py +0 -0
  249. {agno-2.0.4 → agno-2.0.6}/agno/models/openai/chat.py +0 -0
  250. {agno-2.0.4 → agno-2.0.6}/agno/models/openai/like.py +0 -0
  251. {agno-2.0.4 → agno-2.0.6}/agno/models/openrouter/__init__.py +0 -0
  252. {agno-2.0.4 → agno-2.0.6}/agno/models/perplexity/__init__.py +0 -0
  253. {agno-2.0.4 → agno-2.0.6}/agno/models/portkey/__init__.py +0 -0
  254. {agno-2.0.4 → agno-2.0.6}/agno/models/sambanova/__init__.py +0 -0
  255. {agno-2.0.4 → agno-2.0.6}/agno/models/siliconflow/__init__.py +0 -0
  256. {agno-2.0.4 → agno-2.0.6}/agno/models/siliconflow/siliconflow.py +0 -0
  257. {agno-2.0.4 → agno-2.0.6}/agno/models/together/__init__.py +0 -0
  258. {agno-2.0.4 → agno-2.0.6}/agno/models/utils.py +0 -0
  259. {agno-2.0.4 → agno-2.0.6}/agno/models/vercel/__init__.py +0 -0
  260. {agno-2.0.4 → agno-2.0.6}/agno/models/vllm/__init__.py +0 -0
  261. {agno-2.0.4 → agno-2.0.6}/agno/models/vllm/vllm.py +0 -0
  262. {agno-2.0.4 → agno-2.0.6}/agno/models/xai/__init__.py +0 -0
  263. {agno-2.0.4 → agno-2.0.6}/agno/os/__init__.py +0 -0
  264. {agno-2.0.4 → agno-2.0.6}/agno/os/auth.py +0 -0
  265. {agno-2.0.4 → agno-2.0.6}/agno/os/config.py +0 -0
  266. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/__init__.py +0 -0
  267. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/agui/__init__.py +0 -0
  268. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/agui/agui.py +0 -0
  269. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/agui/router.py +0 -0
  270. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/base.py +0 -0
  271. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/slack/__init__.py +0 -0
  272. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/slack/router.py +0 -0
  273. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/slack/security.py +0 -0
  274. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/slack/slack.py +0 -0
  275. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  276. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/whatsapp/router.py +0 -0
  277. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/whatsapp/security.py +0 -0
  278. {agno-2.0.4 → agno-2.0.6}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  279. {agno-2.0.4 → agno-2.0.6}/agno/os/mcp.py +0 -0
  280. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/__init__.py +0 -0
  281. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/evals/__init__.py +0 -0
  282. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/evals/evals.py +0 -0
  283. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/evals/schemas.py +0 -0
  284. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/evals/utils.py +0 -0
  285. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/knowledge/__init__.py +0 -0
  286. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/knowledge/schemas.py +0 -0
  287. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/memory/__init__.py +0 -0
  288. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/memory/memory.py +0 -0
  289. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/memory/schemas.py +0 -0
  290. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/metrics/__init__.py +0 -0
  291. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/metrics/metrics.py +0 -0
  292. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/metrics/schemas.py +0 -0
  293. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/session/__init__.py +0 -0
  294. {agno-2.0.4 → agno-2.0.6}/agno/os/routers/session/session.py +0 -0
  295. {agno-2.0.4 → agno-2.0.6}/agno/os/settings.py +0 -0
  296. {agno-2.0.4 → agno-2.0.6}/agno/py.typed +0 -0
  297. {agno-2.0.4 → agno-2.0.6}/agno/reasoning/__init__.py +0 -0
  298. {agno-2.0.4 → agno-2.0.6}/agno/reasoning/azure_ai_foundry.py +0 -0
  299. {agno-2.0.4 → agno-2.0.6}/agno/reasoning/deepseek.py +0 -0
  300. {agno-2.0.4 → agno-2.0.6}/agno/reasoning/default.py +0 -0
  301. {agno-2.0.4 → agno-2.0.6}/agno/reasoning/groq.py +0 -0
  302. {agno-2.0.4 → agno-2.0.6}/agno/reasoning/helpers.py +0 -0
  303. {agno-2.0.4 → agno-2.0.6}/agno/reasoning/ollama.py +0 -0
  304. {agno-2.0.4 → agno-2.0.6}/agno/reasoning/openai.py +0 -0
  305. {agno-2.0.4 → agno-2.0.6}/agno/reasoning/step.py +0 -0
  306. {agno-2.0.4 → agno-2.0.6}/agno/run/__init__.py +0 -0
  307. {agno-2.0.4 → agno-2.0.6}/agno/run/base.py +0 -0
  308. {agno-2.0.4 → agno-2.0.6}/agno/run/cancel.py +0 -0
  309. {agno-2.0.4 → agno-2.0.6}/agno/run/messages.py +0 -0
  310. {agno-2.0.4 → agno-2.0.6}/agno/session/__init__.py +0 -0
  311. {agno-2.0.4 → agno-2.0.6}/agno/session/agent.py +0 -0
  312. {agno-2.0.4 → agno-2.0.6}/agno/session/summary.py +0 -0
  313. {agno-2.0.4 → agno-2.0.6}/agno/session/team.py +0 -0
  314. {agno-2.0.4 → agno-2.0.6}/agno/session/workflow.py +0 -0
  315. {agno-2.0.4 → agno-2.0.6}/agno/team/__init__.py +0 -0
  316. {agno-2.0.4 → agno-2.0.6}/agno/tools/__init__.py +0 -0
  317. {agno-2.0.4 → agno-2.0.6}/agno/tools/agentql.py +0 -0
  318. {agno-2.0.4 → agno-2.0.6}/agno/tools/airflow.py +0 -0
  319. {agno-2.0.4 → agno-2.0.6}/agno/tools/api.py +0 -0
  320. {agno-2.0.4 → agno-2.0.6}/agno/tools/apify.py +0 -0
  321. {agno-2.0.4 → agno-2.0.6}/agno/tools/arxiv.py +0 -0
  322. {agno-2.0.4 → agno-2.0.6}/agno/tools/aws_lambda.py +0 -0
  323. {agno-2.0.4 → agno-2.0.6}/agno/tools/aws_ses.py +0 -0
  324. {agno-2.0.4 → agno-2.0.6}/agno/tools/baidusearch.py +0 -0
  325. {agno-2.0.4 → agno-2.0.6}/agno/tools/bitbucket.py +0 -0
  326. {agno-2.0.4 → agno-2.0.6}/agno/tools/brandfetch.py +0 -0
  327. {agno-2.0.4 → agno-2.0.6}/agno/tools/bravesearch.py +0 -0
  328. {agno-2.0.4 → agno-2.0.6}/agno/tools/brightdata.py +0 -0
  329. {agno-2.0.4 → agno-2.0.6}/agno/tools/browserbase.py +0 -0
  330. {agno-2.0.4 → agno-2.0.6}/agno/tools/calcom.py +0 -0
  331. {agno-2.0.4 → agno-2.0.6}/agno/tools/calculator.py +0 -0
  332. {agno-2.0.4 → agno-2.0.6}/agno/tools/cartesia.py +0 -0
  333. {agno-2.0.4 → agno-2.0.6}/agno/tools/clickup.py +0 -0
  334. {agno-2.0.4 → agno-2.0.6}/agno/tools/confluence.py +0 -0
  335. {agno-2.0.4 → agno-2.0.6}/agno/tools/crawl4ai.py +0 -0
  336. {agno-2.0.4 → agno-2.0.6}/agno/tools/csv_toolkit.py +0 -0
  337. {agno-2.0.4 → agno-2.0.6}/agno/tools/dalle.py +0 -0
  338. {agno-2.0.4 → agno-2.0.6}/agno/tools/daytona.py +0 -0
  339. {agno-2.0.4 → agno-2.0.6}/agno/tools/decorator.py +0 -0
  340. {agno-2.0.4 → agno-2.0.6}/agno/tools/desi_vocal.py +0 -0
  341. {agno-2.0.4 → agno-2.0.6}/agno/tools/discord.py +0 -0
  342. {agno-2.0.4 → agno-2.0.6}/agno/tools/docker.py +0 -0
  343. {agno-2.0.4 → agno-2.0.6}/agno/tools/duckdb.py +0 -0
  344. {agno-2.0.4 → agno-2.0.6}/agno/tools/eleven_labs.py +0 -0
  345. {agno-2.0.4 → agno-2.0.6}/agno/tools/email.py +0 -0
  346. {agno-2.0.4 → agno-2.0.6}/agno/tools/evm.py +0 -0
  347. {agno-2.0.4 → agno-2.0.6}/agno/tools/exa.py +0 -0
  348. {agno-2.0.4 → agno-2.0.6}/agno/tools/fal.py +0 -0
  349. {agno-2.0.4 → agno-2.0.6}/agno/tools/file.py +0 -0
  350. {agno-2.0.4 → agno-2.0.6}/agno/tools/financial_datasets.py +0 -0
  351. {agno-2.0.4 → agno-2.0.6}/agno/tools/firecrawl.py +0 -0
  352. {agno-2.0.4 → agno-2.0.6}/agno/tools/giphy.py +0 -0
  353. {agno-2.0.4 → agno-2.0.6}/agno/tools/github.py +0 -0
  354. {agno-2.0.4 → agno-2.0.6}/agno/tools/gmail.py +0 -0
  355. {agno-2.0.4 → agno-2.0.6}/agno/tools/google_bigquery.py +0 -0
  356. {agno-2.0.4 → agno-2.0.6}/agno/tools/google_maps.py +0 -0
  357. {agno-2.0.4 → agno-2.0.6}/agno/tools/googlecalendar.py +0 -0
  358. {agno-2.0.4 → agno-2.0.6}/agno/tools/googlesheets.py +0 -0
  359. {agno-2.0.4 → agno-2.0.6}/agno/tools/hackernews.py +0 -0
  360. {agno-2.0.4 → agno-2.0.6}/agno/tools/jina.py +0 -0
  361. {agno-2.0.4 → agno-2.0.6}/agno/tools/jira.py +0 -0
  362. {agno-2.0.4 → agno-2.0.6}/agno/tools/knowledge.py +0 -0
  363. {agno-2.0.4 → agno-2.0.6}/agno/tools/linear.py +0 -0
  364. {agno-2.0.4 → agno-2.0.6}/agno/tools/linkup.py +0 -0
  365. {agno-2.0.4 → agno-2.0.6}/agno/tools/local_file_system.py +0 -0
  366. {agno-2.0.4 → agno-2.0.6}/agno/tools/lumalab.py +0 -0
  367. {agno-2.0.4 → agno-2.0.6}/agno/tools/mcp.py +0 -0
  368. {agno-2.0.4 → agno-2.0.6}/agno/tools/mem0.py +0 -0
  369. {agno-2.0.4 → agno-2.0.6}/agno/tools/memori.py +0 -0
  370. {agno-2.0.4 → agno-2.0.6}/agno/tools/memory.py +0 -0
  371. {agno-2.0.4 → agno-2.0.6}/agno/tools/mlx_transcribe.py +0 -0
  372. {agno-2.0.4 → agno-2.0.6}/agno/tools/models/__init__.py +0 -0
  373. {agno-2.0.4 → agno-2.0.6}/agno/tools/models/azure_openai.py +0 -0
  374. {agno-2.0.4 → agno-2.0.6}/agno/tools/models/gemini.py +0 -0
  375. {agno-2.0.4 → agno-2.0.6}/agno/tools/models/groq.py +0 -0
  376. {agno-2.0.4 → agno-2.0.6}/agno/tools/models/morph.py +0 -0
  377. {agno-2.0.4 → agno-2.0.6}/agno/tools/models/nebius.py +0 -0
  378. {agno-2.0.4 → agno-2.0.6}/agno/tools/models_labs.py +0 -0
  379. {agno-2.0.4 → agno-2.0.6}/agno/tools/moviepy_video.py +0 -0
  380. {agno-2.0.4 → agno-2.0.6}/agno/tools/neo4j.py +0 -0
  381. {agno-2.0.4 → agno-2.0.6}/agno/tools/newspaper.py +0 -0
  382. {agno-2.0.4 → agno-2.0.6}/agno/tools/newspaper4k.py +0 -0
  383. {agno-2.0.4 → agno-2.0.6}/agno/tools/openai.py +0 -0
  384. {agno-2.0.4 → agno-2.0.6}/agno/tools/openbb.py +0 -0
  385. {agno-2.0.4 → agno-2.0.6}/agno/tools/opencv.py +0 -0
  386. {agno-2.0.4 → agno-2.0.6}/agno/tools/openweather.py +0 -0
  387. {agno-2.0.4 → agno-2.0.6}/agno/tools/oxylabs.py +0 -0
  388. {agno-2.0.4 → agno-2.0.6}/agno/tools/pandas.py +0 -0
  389. {agno-2.0.4 → agno-2.0.6}/agno/tools/postgres.py +0 -0
  390. {agno-2.0.4 → agno-2.0.6}/agno/tools/pubmed.py +0 -0
  391. {agno-2.0.4 → agno-2.0.6}/agno/tools/python.py +0 -0
  392. {agno-2.0.4 → agno-2.0.6}/agno/tools/reasoning.py +0 -0
  393. {agno-2.0.4 → agno-2.0.6}/agno/tools/reddit.py +0 -0
  394. {agno-2.0.4 → agno-2.0.6}/agno/tools/replicate.py +0 -0
  395. {agno-2.0.4 → agno-2.0.6}/agno/tools/resend.py +0 -0
  396. {agno-2.0.4 → agno-2.0.6}/agno/tools/scrapegraph.py +0 -0
  397. {agno-2.0.4 → agno-2.0.6}/agno/tools/searxng.py +0 -0
  398. {agno-2.0.4 → agno-2.0.6}/agno/tools/serpapi.py +0 -0
  399. {agno-2.0.4 → agno-2.0.6}/agno/tools/serper.py +0 -0
  400. {agno-2.0.4 → agno-2.0.6}/agno/tools/shell.py +0 -0
  401. {agno-2.0.4 → agno-2.0.6}/agno/tools/slack.py +0 -0
  402. {agno-2.0.4 → agno-2.0.6}/agno/tools/sleep.py +0 -0
  403. {agno-2.0.4 → agno-2.0.6}/agno/tools/spider.py +0 -0
  404. {agno-2.0.4 → agno-2.0.6}/agno/tools/sql.py +0 -0
  405. {agno-2.0.4 → agno-2.0.6}/agno/tools/streamlit/__init__.py +0 -0
  406. {agno-2.0.4 → agno-2.0.6}/agno/tools/streamlit/components.py +0 -0
  407. {agno-2.0.4 → agno-2.0.6}/agno/tools/tavily.py +0 -0
  408. {agno-2.0.4 → agno-2.0.6}/agno/tools/telegram.py +0 -0
  409. {agno-2.0.4 → agno-2.0.6}/agno/tools/todoist.py +0 -0
  410. {agno-2.0.4 → agno-2.0.6}/agno/tools/tool_registry.py +0 -0
  411. {agno-2.0.4 → agno-2.0.6}/agno/tools/toolkit.py +0 -0
  412. {agno-2.0.4 → agno-2.0.6}/agno/tools/trafilatura.py +0 -0
  413. {agno-2.0.4 → agno-2.0.6}/agno/tools/trello.py +0 -0
  414. {agno-2.0.4 → agno-2.0.6}/agno/tools/twilio.py +0 -0
  415. {agno-2.0.4 → agno-2.0.6}/agno/tools/user_control_flow.py +0 -0
  416. {agno-2.0.4 → agno-2.0.6}/agno/tools/valyu.py +0 -0
  417. {agno-2.0.4 → agno-2.0.6}/agno/tools/visualization.py +0 -0
  418. {agno-2.0.4 → agno-2.0.6}/agno/tools/webbrowser.py +0 -0
  419. {agno-2.0.4 → agno-2.0.6}/agno/tools/webex.py +0 -0
  420. {agno-2.0.4 → agno-2.0.6}/agno/tools/website.py +0 -0
  421. {agno-2.0.4 → agno-2.0.6}/agno/tools/webtools.py +0 -0
  422. {agno-2.0.4 → agno-2.0.6}/agno/tools/whatsapp.py +0 -0
  423. {agno-2.0.4 → agno-2.0.6}/agno/tools/wikipedia.py +0 -0
  424. {agno-2.0.4 → agno-2.0.6}/agno/tools/workflow.py +0 -0
  425. {agno-2.0.4 → agno-2.0.6}/agno/tools/x.py +0 -0
  426. {agno-2.0.4 → agno-2.0.6}/agno/tools/yfinance.py +0 -0
  427. {agno-2.0.4 → agno-2.0.6}/agno/tools/youtube.py +0 -0
  428. {agno-2.0.4 → agno-2.0.6}/agno/tools/zendesk.py +0 -0
  429. {agno-2.0.4 → agno-2.0.6}/agno/tools/zep.py +0 -0
  430. {agno-2.0.4 → agno-2.0.6}/agno/tools/zoom.py +0 -0
  431. {agno-2.0.4 → agno-2.0.6}/agno/utils/__init__.py +0 -0
  432. {agno-2.0.4 → agno-2.0.6}/agno/utils/audio.py +0 -0
  433. {agno-2.0.4 → agno-2.0.6}/agno/utils/certs.py +0 -0
  434. {agno-2.0.4 → agno-2.0.6}/agno/utils/code_execution.py +0 -0
  435. {agno-2.0.4 → agno-2.0.6}/agno/utils/common.py +0 -0
  436. {agno-2.0.4 → agno-2.0.6}/agno/utils/dttm.py +0 -0
  437. {agno-2.0.4 → agno-2.0.6}/agno/utils/enum.py +0 -0
  438. {agno-2.0.4 → agno-2.0.6}/agno/utils/env.py +0 -0
  439. {agno-2.0.4 → agno-2.0.6}/agno/utils/events.py +0 -0
  440. {agno-2.0.4 → agno-2.0.6}/agno/utils/format_str.py +0 -0
  441. {agno-2.0.4 → agno-2.0.6}/agno/utils/functions.py +0 -0
  442. {agno-2.0.4 → agno-2.0.6}/agno/utils/http.py +0 -0
  443. {agno-2.0.4 → agno-2.0.6}/agno/utils/json_schema.py +0 -0
  444. {agno-2.0.4 → agno-2.0.6}/agno/utils/knowledge.py +0 -0
  445. {agno-2.0.4 → agno-2.0.6}/agno/utils/location.py +0 -0
  446. {agno-2.0.4 → agno-2.0.6}/agno/utils/log.py +0 -0
  447. {agno-2.0.4 → agno-2.0.6}/agno/utils/mcp.py +0 -0
  448. {agno-2.0.4 → agno-2.0.6}/agno/utils/media.py +0 -0
  449. {agno-2.0.4 → agno-2.0.6}/agno/utils/merge_dict.py +0 -0
  450. {agno-2.0.4 → agno-2.0.6}/agno/utils/message.py +0 -0
  451. {agno-2.0.4 → agno-2.0.6}/agno/utils/models/__init__.py +0 -0
  452. {agno-2.0.4 → agno-2.0.6}/agno/utils/models/ai_foundry.py +0 -0
  453. {agno-2.0.4 → agno-2.0.6}/agno/utils/models/aws_claude.py +0 -0
  454. {agno-2.0.4 → agno-2.0.6}/agno/utils/models/claude.py +0 -0
  455. {agno-2.0.4 → agno-2.0.6}/agno/utils/models/cohere.py +0 -0
  456. {agno-2.0.4 → agno-2.0.6}/agno/utils/models/llama.py +0 -0
  457. {agno-2.0.4 → agno-2.0.6}/agno/utils/models/mistral.py +0 -0
  458. {agno-2.0.4 → agno-2.0.6}/agno/utils/models/openai_responses.py +0 -0
  459. {agno-2.0.4 → agno-2.0.6}/agno/utils/models/schema_utils.py +0 -0
  460. {agno-2.0.4 → agno-2.0.6}/agno/utils/models/watsonx.py +0 -0
  461. {agno-2.0.4 → agno-2.0.6}/agno/utils/openai.py +0 -0
  462. {agno-2.0.4 → agno-2.0.6}/agno/utils/pickle.py +0 -0
  463. {agno-2.0.4 → agno-2.0.6}/agno/utils/pprint.py +0 -0
  464. {agno-2.0.4 → agno-2.0.6}/agno/utils/print_response/__init__.py +0 -0
  465. {agno-2.0.4 → agno-2.0.6}/agno/utils/print_response/agent.py +0 -0
  466. {agno-2.0.4 → agno-2.0.6}/agno/utils/print_response/team.py +0 -0
  467. {agno-2.0.4 → agno-2.0.6}/agno/utils/print_response/workflow.py +0 -0
  468. {agno-2.0.4 → agno-2.0.6}/agno/utils/prompts.py +0 -0
  469. {agno-2.0.4 → agno-2.0.6}/agno/utils/reasoning.py +0 -0
  470. {agno-2.0.4 → agno-2.0.6}/agno/utils/response.py +0 -0
  471. {agno-2.0.4 → agno-2.0.6}/agno/utils/response_iterator.py +0 -0
  472. {agno-2.0.4 → agno-2.0.6}/agno/utils/safe_formatter.py +0 -0
  473. {agno-2.0.4 → agno-2.0.6}/agno/utils/shell.py +0 -0
  474. {agno-2.0.4 → agno-2.0.6}/agno/utils/streamlit.py +0 -0
  475. {agno-2.0.4 → agno-2.0.6}/agno/utils/team.py +0 -0
  476. {agno-2.0.4 → agno-2.0.6}/agno/utils/timer.py +0 -0
  477. {agno-2.0.4 → agno-2.0.6}/agno/utils/web.py +0 -0
  478. {agno-2.0.4 → agno-2.0.6}/agno/utils/whatsapp.py +0 -0
  479. {agno-2.0.4 → agno-2.0.6}/agno/utils/yaml_io.py +0 -0
  480. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/__init__.py +0 -0
  481. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/base.py +0 -0
  482. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/cassandra/__init__.py +0 -0
  483. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/cassandra/cassandra.py +0 -0
  484. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  485. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/cassandra/index.py +0 -0
  486. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/chroma/__init__.py +0 -0
  487. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/clickhouse/__init__.py +0 -0
  488. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  489. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/clickhouse/index.py +0 -0
  490. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/couchbase/__init__.py +0 -0
  491. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/couchbase/couchbase.py +0 -0
  492. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/distance.py +0 -0
  493. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/lancedb/__init__.py +0 -0
  494. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/langchaindb/__init__.py +0 -0
  495. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  496. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/lightrag/__init__.py +0 -0
  497. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/lightrag/lightrag.py +0 -0
  498. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/llamaindex/__init__.py +0 -0
  499. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  500. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/milvus/__init__.py +0 -0
  501. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/mongodb/__init__.py +0 -0
  502. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/mongodb/mongodb.py +0 -0
  503. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/pgvector/__init__.py +0 -0
  504. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/pgvector/index.py +0 -0
  505. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/pgvector/pgvector.py +0 -0
  506. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/pineconedb/__init__.py +0 -0
  507. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  508. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/qdrant/__init__.py +0 -0
  509. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/qdrant/qdrant.py +0 -0
  510. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/search.py +0 -0
  511. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/singlestore/__init__.py +0 -0
  512. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/singlestore/index.py +0 -0
  513. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/singlestore/singlestore.py +0 -0
  514. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/surrealdb/__init__.py +0 -0
  515. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  516. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/upstashdb/__init__.py +0 -0
  517. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  518. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/weaviate/__init__.py +0 -0
  519. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/weaviate/index.py +0 -0
  520. {agno-2.0.4 → agno-2.0.6}/agno/vectordb/weaviate/weaviate.py +0 -0
  521. {agno-2.0.4 → agno-2.0.6}/agno/workflow/__init__.py +0 -0
  522. {agno-2.0.4 → agno-2.0.6}/agno/workflow/condition.py +0 -0
  523. {agno-2.0.4 → agno-2.0.6}/agno/workflow/loop.py +0 -0
  524. {agno-2.0.4 → agno-2.0.6}/agno/workflow/parallel.py +0 -0
  525. {agno-2.0.4 → agno-2.0.6}/agno/workflow/router.py +0 -0
  526. {agno-2.0.4 → agno-2.0.6}/agno/workflow/steps.py +0 -0
  527. {agno-2.0.4 → agno-2.0.6}/agno/workflow/types.py +0 -0
  528. {agno-2.0.4 → agno-2.0.6}/agno.egg-info/dependency_links.txt +0 -0
  529. {agno-2.0.4 → agno-2.0.6}/agno.egg-info/top_level.txt +0 -0
  530. {agno-2.0.4 → agno-2.0.6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.0.4
3
+ Version: 2.0.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
@@ -161,6 +161,8 @@ Requires-Dist: opencv-python; extra == "opencv"
161
161
  Provides-Extra: psycopg
162
162
  Requires-Dist: psycopg-binary; extra == "psycopg"
163
163
  Requires-Dist: psycopg; extra == "psycopg"
164
+ Provides-Extra: reportlab
165
+ Requires-Dist: reportlab; extra == "reportlab"
164
166
  Provides-Extra: todoist
165
167
  Requires-Dist: todoist-api-python; extra == "todoist"
166
168
  Provides-Extra: valyu
@@ -306,6 +308,7 @@ Requires-Dist: agno[mem0]; extra == "tools"
306
308
  Requires-Dist: agno[memori]; extra == "tools"
307
309
  Requires-Dist: agno[google_bigquery]; extra == "tools"
308
310
  Requires-Dist: agno[psycopg]; extra == "tools"
311
+ Requires-Dist: agno[reportlab]; extra == "tools"
309
312
  Requires-Dist: agno[trafilatura]; extra == "tools"
310
313
  Requires-Dist: agno[neo4j]; extra == "tools"
311
314
  Provides-Extra: storage
@@ -366,6 +369,7 @@ Dynamic: license-file
366
369
  <div align="center">
367
370
  <a href="https://docs.agno.com">📚 Documentation</a> &nbsp;|&nbsp;
368
371
  <a href="https://docs.agno.com/examples/introduction">💡 Examples</a> &nbsp;|&nbsp;
372
+ <a href="https://www.agno.com/?utm_source=github&utm_medium=readme&utm_campaign=agno-github&utm_content=header">🏠 Website</a> &nbsp;|&nbsp;
369
373
  <a href="https://github.com/agno-agi/agno/stargazers">🌟 Star Us</a>
370
374
  </div>
371
375
 
@@ -406,14 +410,14 @@ If you're new to Agno, follow our [quickstart](https://docs.agno.com/introductio
406
410
 
407
411
  After that, checkout the [examples gallery](https://docs.agno.com/examples/introduction) and build real-world applications with Agno.
408
412
 
409
- ## Documentation, Community & More examples
413
+ ## Documentation, Community & More Examples
410
414
 
411
415
  - Docs: <a href="https://docs.agno.com" target="_blank" rel="noopener noreferrer">docs.agno.com</a>
412
416
  - Cookbook: <a href="https://github.com/agno-agi/agno/tree/main/cookbook" target="_blank" rel="noopener noreferrer">Cookbook</a>
413
417
  - Community forum: <a href="https://community.agno.com/" target="_blank" rel="noopener noreferrer">community.agno.com</a>
414
418
  - Discord: <a href="https://discord.gg/4MtYHHrgA8" target="_blank" rel="noopener noreferrer">discord</a>
415
419
 
416
- ## Setup your coding agent to use Agno
420
+ ## Setup Your Coding Agent to Use Agno
417
421
 
418
422
  For LLMs and AI assistants to understand and navigate Agno's documentation, we provide an [llms.txt](https://docs.agno.com/llms.txt) or [llms-full.txt](https://docs.agno.com/llms-full.txt) file.
419
423
 
@@ -441,7 +445,7 @@ At Agno, we're obsessed with performance. Why? because even simple AI workflows
441
445
 
442
446
  While an Agent's run-time is bottlenecked by inference, we must do everything possible to minimize execution time, reduce memory usage, and parallelize tool calls. These numbers may seem trivial at first, but our experience shows that they add up even at a reasonably small scale.
443
447
 
444
- ### Instantiation time
448
+ ### Instantiation Time
445
449
 
446
450
  Let's measure the time it takes for an Agent with 1 tool to start up. We'll run the evaluation 1000 times to get a baseline measurement.
447
451
 
@@ -469,7 +473,7 @@ Agno is on the left, notice how it finishes before LangGraph gets 1/2 way throug
469
473
 
470
474
  https://github.com/user-attachments/assets/ba466d45-75dd-45ac-917b-0a56c5742e23
471
475
 
472
- ### Memory usage
476
+ ### Memory Usage
473
477
 
474
478
  To measure memory usage, we use the `tracemalloc` library. We first calculate a baseline memory usage by running an empty function, then run the Agent 1000x times and calculate the difference. This gives a (reasonably) isolated measurement of the memory usage of the Agent.
475
479
 
@@ -10,6 +10,7 @@
10
10
  <div align="center">
11
11
  <a href="https://docs.agno.com">📚 Documentation</a> &nbsp;|&nbsp;
12
12
  <a href="https://docs.agno.com/examples/introduction">💡 Examples</a> &nbsp;|&nbsp;
13
+ <a href="https://www.agno.com/?utm_source=github&utm_medium=readme&utm_campaign=agno-github&utm_content=header">🏠 Website</a> &nbsp;|&nbsp;
13
14
  <a href="https://github.com/agno-agi/agno/stargazers">🌟 Star Us</a>
14
15
  </div>
15
16
 
@@ -50,14 +51,14 @@ If you're new to Agno, follow our [quickstart](https://docs.agno.com/introductio
50
51
 
51
52
  After that, checkout the [examples gallery](https://docs.agno.com/examples/introduction) and build real-world applications with Agno.
52
53
 
53
- ## Documentation, Community & More examples
54
+ ## Documentation, Community & More Examples
54
55
 
55
56
  - Docs: <a href="https://docs.agno.com" target="_blank" rel="noopener noreferrer">docs.agno.com</a>
56
57
  - Cookbook: <a href="https://github.com/agno-agi/agno/tree/main/cookbook" target="_blank" rel="noopener noreferrer">Cookbook</a>
57
58
  - Community forum: <a href="https://community.agno.com/" target="_blank" rel="noopener noreferrer">community.agno.com</a>
58
59
  - Discord: <a href="https://discord.gg/4MtYHHrgA8" target="_blank" rel="noopener noreferrer">discord</a>
59
60
 
60
- ## Setup your coding agent to use Agno
61
+ ## Setup Your Coding Agent to Use Agno
61
62
 
62
63
  For LLMs and AI assistants to understand and navigate Agno's documentation, we provide an [llms.txt](https://docs.agno.com/llms.txt) or [llms-full.txt](https://docs.agno.com/llms-full.txt) file.
63
64
 
@@ -85,7 +86,7 @@ At Agno, we're obsessed with performance. Why? because even simple AI workflows
85
86
 
86
87
  While an Agent's run-time is bottlenecked by inference, we must do everything possible to minimize execution time, reduce memory usage, and parallelize tool calls. These numbers may seem trivial at first, but our experience shows that they add up even at a reasonably small scale.
87
88
 
88
- ### Instantiation time
89
+ ### Instantiation Time
89
90
 
90
91
  Let's measure the time it takes for an Agent with 1 tool to start up. We'll run the evaluation 1000 times to get a baseline measurement.
91
92
 
@@ -113,7 +114,7 @@ Agno is on the left, notice how it finishes before LangGraph gets 1/2 way throug
113
114
 
114
115
  https://github.com/user-attachments/assets/ba466d45-75dd-45ac-917b-0a56c5742e23
115
116
 
116
- ### Memory usage
117
+ ### Memory Usage
117
118
 
118
119
  To measure memory usage, we use the `tracemalloc` library. We first calculate a baseline memory usage by running an empty function, then run the Agent 1000x times and calculate the difference. This gives a (reasonably) isolated measurement of the memory usage of the Agent.
119
120
 
@@ -107,7 +107,7 @@ from agno.utils.response import (
107
107
  get_paused_content,
108
108
  )
109
109
  from agno.utils.safe_formatter import SafeFormatter
110
- from agno.utils.string import parse_response_model_str
110
+ from agno.utils.string import generate_id_from_name, parse_response_model_str
111
111
  from agno.utils.timer import Timer
112
112
 
113
113
 
@@ -371,7 +371,7 @@ class Agent:
371
371
  knowledge_retriever: Optional[Callable[..., Optional[List[Union[Dict, str]]]]] = None,
372
372
  references_format: Literal["json", "yaml"] = "json",
373
373
  metadata: Optional[Dict[str, Any]] = None,
374
- tools: Optional[List[Union[Toolkit, Callable, Function, Dict]]] = None,
374
+ tools: Optional[Sequence[Union[Toolkit, Callable, Function, Dict]]] = None,
375
375
  tool_call_limit: Optional[int] = None,
376
376
  tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
377
377
  tool_hooks: Optional[List[Callable]] = None,
@@ -466,7 +466,7 @@ class Agent:
466
466
 
467
467
  self.metadata = metadata
468
468
 
469
- self.tools = tools
469
+ self.tools = list(tools) if tools else []
470
470
  self.tool_call_limit = tool_call_limit
471
471
  self.tool_choice = tool_choice
472
472
  self.tool_hooks = tool_hooks
@@ -545,10 +545,7 @@ class Agent:
545
545
 
546
546
  def set_id(self) -> None:
547
547
  if self.id is None:
548
- if self.name is not None:
549
- self.id = self.name.lower().replace(" ", "-")
550
- else:
551
- self.id = str(uuid4())
548
+ self.id = generate_id_from_name(self.name)
552
549
 
553
550
  def _set_debug(self, debug_mode: Optional[bool] = None) -> None:
554
551
  # If the default debug mode is set, or passed on run, or via environment variable, set the debug mode to True
@@ -684,8 +681,8 @@ class Agent:
684
681
  self.tools.append(tool)
685
682
  self._rebuild_tools = True
686
683
 
687
- def set_tools(self, tools: List[Union[Toolkit, Callable, Function, Dict]]):
688
- self.tools = tools
684
+ def set_tools(self, tools: Sequence[Union[Toolkit, Callable, Function, Dict]]):
685
+ self.tools = list(tools) if tools else []
689
686
  self._rebuild_tools = True
690
687
 
691
688
  def _initialize_session(
@@ -790,14 +787,7 @@ class Agent:
790
787
  run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
791
788
  )
792
789
 
793
- # 4. Update Agent Memory
794
- response_iterator = self._make_memories_and_summaries(
795
- run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
796
- )
797
- # Consume the response iterator to ensure the memory is updated before the run is completed
798
- deque(response_iterator, maxlen=0)
799
-
800
- # 5. Calculate session metrics
790
+ # 4. Calculate session metrics
801
791
  self._update_session_metrics(session=session, run_response=run_response)
802
792
 
803
793
  run_response.status = RunStatus.completed
@@ -809,14 +799,21 @@ class Agent:
809
799
  if run_response.metrics:
810
800
  run_response.metrics.stop_timer()
811
801
 
812
- # 6. Optional: Save output to file if save_response_to_file is set
802
+ # 5. Optional: Save output to file if save_response_to_file is set
813
803
  self.save_run_response_to_file(
814
804
  run_response=run_response, input=run_messages.user_message, session_id=session.session_id, user_id=user_id
815
805
  )
816
806
 
817
- # 7. Add the RunOutput to Agent Session
807
+ # 6. Add the RunOutput to Agent Session
818
808
  session.upsert_run(run=run_response)
819
809
 
810
+ # 7. Update Agent Memory
811
+ response_iterator = self._make_memories_and_summaries(
812
+ run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
813
+ )
814
+ # Consume the response iterator to ensure the memory is updated before the run is completed
815
+ deque(response_iterator, maxlen=0)
816
+
820
817
  # 8. Save session to memory
821
818
  self.save_session(session=session)
822
819
 
@@ -930,12 +927,7 @@ class Agent:
930
927
  )
931
928
  return
932
929
 
933
- # 3. Update Agent Memory
934
- yield from self._make_memories_and_summaries(
935
- run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
936
- )
937
-
938
- # 4. Calculate session metrics
930
+ # 3. Calculate session metrics
939
931
  self._update_session_metrics(session=session, run_response=run_response)
940
932
 
941
933
  run_response.status = RunStatus.completed
@@ -948,7 +940,7 @@ class Agent:
948
940
  if run_response.metrics:
949
941
  run_response.metrics.stop_timer()
950
942
 
951
- # 5. Optional: Save output to file if save_response_to_file is set
943
+ # 4. Optional: Save output to file if save_response_to_file is set
952
944
  self.save_run_response_to_file(
953
945
  run_response=run_response,
954
946
  input=run_messages.user_message,
@@ -956,9 +948,14 @@ class Agent:
956
948
  user_id=user_id,
957
949
  )
958
950
 
959
- # 6. Add RunOutput to Agent Session
951
+ # 5. Add RunOutput to Agent Session
960
952
  session.upsert_run(run=run_response)
961
953
 
954
+ # 6. Update Agent Memory
955
+ yield from self._make_memories_and_summaries(
956
+ run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
957
+ )
958
+
962
959
  # 7. Save session to storage
963
960
  self.save_session(session=session)
964
961
 
@@ -1083,13 +1080,17 @@ class Agent:
1083
1080
  # Initialize the Agent
1084
1081
  self.initialize_agent(debug_mode=debug_mode)
1085
1082
 
1086
- image_artifacts, video_artifacts, audio_artifacts = self._validate_media_object_id(
1087
- images=images, videos=videos, audios=audio
1083
+ image_artifacts, video_artifacts, audio_artifacts, file_artifacts = self._validate_media_object_id(
1084
+ images=images, videos=videos, audios=audio, files=files
1088
1085
  )
1089
1086
 
1090
1087
  # Create RunInput to capture the original user input
1091
1088
  run_input = RunInput(
1092
- input_content=input, images=image_artifacts, videos=video_artifacts, audios=audio_artifacts, files=files
1089
+ input_content=input,
1090
+ images=image_artifacts,
1091
+ videos=video_artifacts,
1092
+ audios=audio_artifacts,
1093
+ files=file_artifacts,
1093
1094
  )
1094
1095
 
1095
1096
  # Read existing session from database
@@ -1383,13 +1384,7 @@ class Agent:
1383
1384
  run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
1384
1385
  )
1385
1386
 
1386
- # 6. Update Agent Memory
1387
- async for _ in self._amake_memories_and_summaries(
1388
- run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
1389
- ):
1390
- pass
1391
-
1392
- # 7. Calculate session metrics
1387
+ # 6. Calculate session metrics
1393
1388
  self._update_session_metrics(session=session, run_response=run_response)
1394
1389
 
1395
1390
  run_response.status = RunStatus.completed
@@ -1406,9 +1401,15 @@ class Agent:
1406
1401
  run_response=run_response, input=run_messages.user_message, session_id=session.session_id, user_id=user_id
1407
1402
  )
1408
1403
 
1409
- # 8. Add RunOutput to Agent Session
1404
+ # 7. Add RunOutput to Agent Session
1410
1405
  session.upsert_run(run=run_response)
1411
1406
 
1407
+ # 8. Update Agent Memory
1408
+ async for _ in self._amake_memories_and_summaries(
1409
+ run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
1410
+ ):
1411
+ pass
1412
+
1412
1413
  # 9. Save session to storage
1413
1414
  self.save_session(session=session)
1414
1415
 
@@ -1563,13 +1564,7 @@ class Agent:
1563
1564
  yield item
1564
1565
  return
1565
1566
 
1566
- # 5. Update Agent Memory
1567
- async for event in self._amake_memories_and_summaries(
1568
- run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
1569
- ):
1570
- yield event
1571
-
1572
- # 6. Calculate session metrics
1567
+ # 5. Calculate session metrics
1573
1568
  self._update_session_metrics(session=session, run_response=run_response)
1574
1569
 
1575
1570
  run_response.status = RunStatus.completed
@@ -1590,9 +1585,15 @@ class Agent:
1590
1585
  user_id=user_id,
1591
1586
  )
1592
1587
 
1593
- # 7. Add RunOutput to Agent Session
1588
+ # 6. Add RunOutput to Agent Session
1594
1589
  session.upsert_run(run=run_response)
1595
1590
 
1591
+ # 7. Update Agent Memory
1592
+ async for event in self._amake_memories_and_summaries(
1593
+ run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
1594
+ ):
1595
+ yield event
1596
+
1596
1597
  # 8. Save session to storage
1597
1598
  self.save_session(session=session)
1598
1599
 
@@ -1716,13 +1717,17 @@ class Agent:
1716
1717
  # Initialize the Agent
1717
1718
  self.initialize_agent(debug_mode=debug_mode)
1718
1719
 
1719
- image_artifacts, video_artifacts, audio_artifacts = self._validate_media_object_id(
1720
- images=images, videos=videos, audios=audio
1720
+ image_artifacts, video_artifacts, audio_artifacts, file_artifacts = self._validate_media_object_id(
1721
+ images=images, videos=videos, audios=audio, files=files
1721
1722
  )
1722
1723
 
1723
1724
  # Create RunInput to capture the original user input
1724
1725
  run_input = RunInput(
1725
- input_content=input, images=image_artifacts, videos=video_artifacts, audios=audio_artifacts, files=files
1726
+ input_content=input,
1727
+ images=image_artifacts,
1728
+ videos=video_artifacts,
1729
+ audios=audio_artifacts,
1730
+ files=file_artifacts,
1726
1731
  )
1727
1732
 
1728
1733
  # Read existing session from storage
@@ -2177,14 +2182,7 @@ class Agent:
2177
2182
  run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
2178
2183
  )
2179
2184
 
2180
- # 4. Update Agent Memory
2181
- response_iterator = self._make_memories_and_summaries(
2182
- run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
2183
- )
2184
- # Consume the response iterator to ensure the memory is updated before the run is completed
2185
- deque(response_iterator, maxlen=0)
2186
-
2187
- # 5. Calculate session metrics
2185
+ # 3. Calculate session metrics
2188
2186
  self._update_session_metrics(session=session, run_response=run_response)
2189
2187
 
2190
2188
  run_response.status = RunStatus.completed
@@ -2196,14 +2194,21 @@ class Agent:
2196
2194
  if run_response.metrics:
2197
2195
  run_response.metrics.stop_timer()
2198
2196
 
2199
- # 5. Save output to file if save_response_to_file is set
2197
+ # 4. Save output to file if save_response_to_file is set
2200
2198
  self.save_run_response_to_file(
2201
2199
  run_response=run_response, input=run_messages.user_message, session_id=session.session_id, user_id=user_id
2202
2200
  )
2203
2201
 
2204
- # 6. Add the run to memory
2202
+ # 5. Add the run to memory
2205
2203
  session.upsert_run(run=run_response)
2206
2204
 
2205
+ # 6. Update Agent Memory
2206
+ response_iterator = self._make_memories_and_summaries(
2207
+ run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
2208
+ )
2209
+ # Consume the response iterator to ensure the memory is updated before the run is completed
2210
+ deque(response_iterator, maxlen=0)
2211
+
2207
2212
  # 7. Save session to storage
2208
2213
  self.save_session(session=session)
2209
2214
 
@@ -2261,12 +2266,7 @@ class Agent:
2261
2266
  )
2262
2267
  return
2263
2268
 
2264
- # 4. Update Agent Memory
2265
- yield from self._make_memories_and_summaries(
2266
- run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
2267
- )
2268
-
2269
- # 5. Calculate session metrics
2269
+ # 3. Calculate session metrics
2270
2270
  self._update_session_metrics(session=session, run_response=run_response)
2271
2271
 
2272
2272
  run_response.status = RunStatus.completed
@@ -2277,14 +2277,19 @@ class Agent:
2277
2277
  if run_response.metrics:
2278
2278
  run_response.metrics.stop_timer()
2279
2279
 
2280
- # 5. Save output to file if save_response_to_file is set
2280
+ # 4. Save output to file if save_response_to_file is set
2281
2281
  self.save_run_response_to_file(
2282
2282
  run_response=run_response, input=run_messages.user_message, session_id=session.session_id, user_id=user_id
2283
2283
  )
2284
2284
 
2285
- # 6. Add the run to memory
2285
+ # 5. Add the run to memory
2286
2286
  session.upsert_run(run=run_response)
2287
2287
 
2288
+ # 6. Update Agent Memory
2289
+ yield from self._make_memories_and_summaries(
2290
+ run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
2291
+ )
2292
+
2288
2293
  # 7. Save session to storage
2289
2294
  self.save_session(session=session)
2290
2295
 
@@ -2563,13 +2568,7 @@ class Agent:
2563
2568
  run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
2564
2569
  )
2565
2570
 
2566
- # 4. Update Agent Memory
2567
- async for _ in self._amake_memories_and_summaries(
2568
- run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
2569
- ):
2570
- pass
2571
-
2572
- # 5. Calculate session metrics
2571
+ # 3. Calculate session metrics
2573
2572
  self._update_session_metrics(session=session, run_response=run_response)
2574
2573
 
2575
2574
  run_response.status = RunStatus.completed
@@ -2581,14 +2580,21 @@ class Agent:
2581
2580
  if run_response.metrics:
2582
2581
  run_response.metrics.stop_timer()
2583
2582
 
2584
- # 7. Save output to file if save_response_to_file is set
2583
+ # 4. Save output to file if save_response_to_file is set
2585
2584
  self.save_run_response_to_file(
2586
2585
  run_response=run_response, input=run_messages.user_message, session_id=session.session_id, user_id=user_id
2587
2586
  )
2588
2587
 
2588
+ # 5. Add the run to memory
2589
2589
  session.upsert_run(run=run_response)
2590
2590
 
2591
- # 6. Save session to storage
2591
+ # 6. Update Agent Memory
2592
+ async for _ in self._amake_memories_and_summaries(
2593
+ run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
2594
+ ):
2595
+ pass
2596
+
2597
+ # 7. Save session to storage
2592
2598
  self.save_session(session=session)
2593
2599
 
2594
2600
  # Log Agent Telemetry
@@ -2644,9 +2650,6 @@ class Agent:
2644
2650
  ):
2645
2651
  yield event
2646
2652
 
2647
- # 3. Add the run to memory
2648
- session.upsert_run(run=run_response)
2649
-
2650
2653
  # We should break out of the run function
2651
2654
  if any(tool_call.is_paused for tool_call in run_response.tools or []):
2652
2655
  for item in self._handle_agent_run_paused_stream(
@@ -2655,13 +2658,7 @@ class Agent:
2655
2658
  yield item
2656
2659
  return
2657
2660
 
2658
- # 4. Update Agent Memory
2659
- async for event in self._amake_memories_and_summaries(
2660
- run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
2661
- ):
2662
- yield event
2663
-
2664
- # 5. Calculate session metrics
2661
+ # 3. Calculate session metrics
2665
2662
  self._update_session_metrics(session=session, run_response=run_response)
2666
2663
 
2667
2664
  run_response.status = RunStatus.completed
@@ -2672,14 +2669,21 @@ class Agent:
2672
2669
  if run_response.metrics:
2673
2670
  run_response.metrics.stop_timer()
2674
2671
 
2675
- # 6. Save output to file if save_response_to_file is set
2672
+ # 4. Save output to file if save_response_to_file is set
2676
2673
  self.save_run_response_to_file(
2677
2674
  run_response=run_response, input=run_messages.user_message, session_id=session.session_id, user_id=user_id
2678
2675
  )
2679
2676
 
2677
+ # 5. Add the run to memory
2680
2678
  session.upsert_run(run=run_response)
2681
2679
 
2682
- # 6. Save session to storage
2680
+ # 6. Update Agent Memory
2681
+ async for event in self._amake_memories_and_summaries(
2682
+ run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
2683
+ ):
2684
+ yield event
2685
+
2686
+ # 7. Save session to storage
2683
2687
  self.save_session(session=session)
2684
2688
 
2685
2689
  if stream_intermediate_steps:
@@ -3067,6 +3071,10 @@ class Agent:
3067
3071
  for audio in model_response.audios:
3068
3072
  self._add_audio(audio, run_response) # Generated audio go to run_response.audio
3069
3073
 
3074
+ if model_response.files is not None:
3075
+ for file in model_response.files:
3076
+ self._add_file(file, run_response) # Generated files go to run_response.files
3077
+
3070
3078
  def _update_run_response(self, model_response: ModelResponse, run_response: RunOutput, run_messages: RunMessages):
3071
3079
  # Handle structured outputs
3072
3080
  if self.output_schema is not None and model_response.parsed is not None:
@@ -3129,7 +3137,8 @@ class Agent:
3129
3137
  """Calculate session metrics"""
3130
3138
  session_metrics = self._get_session_metrics(session=session)
3131
3139
  # Add the metrics for the current run to the session metrics
3132
- session_metrics += run_response.metrics
3140
+ if run_response.metrics is not None:
3141
+ session_metrics += run_response.metrics
3133
3142
  session_metrics.time_to_first_token = None
3134
3143
  if session.session_data is not None:
3135
3144
  session.session_data["session_metrics"] = session_metrics
@@ -3336,13 +3345,6 @@ class Agent:
3336
3345
  ) + model_response_event.reasoning_content
3337
3346
  run_response.reasoning_content = model_response.reasoning_content
3338
3347
 
3339
- if model_response_event.reasoning_content is not None:
3340
- if not model_response.reasoning_content:
3341
- model_response.reasoning_content = model_response_event.reasoning_content
3342
- else:
3343
- model_response.reasoning_content += model_response_event.reasoning_content
3344
- run_response.reasoning_content = model_response.reasoning_content
3345
-
3346
3348
  if model_response_event.redacted_reasoning_content is not None:
3347
3349
  if not model_response.reasoning_content:
3348
3350
  model_response.reasoning_content = model_response_event.redacted_reasoning_content
@@ -3811,7 +3813,7 @@ class Agent:
3811
3813
  self._rebuild_tools = True
3812
3814
  if self.search_session_history:
3813
3815
  agent_tools.append(
3814
- self._get_previous_sessions_messages_function(num_history_sessions=self.num_history_sessions)
3816
+ self._get_previous_sessions_messages_function(num_history_sessions=self.num_history_sessions, user_id=user_id)
3815
3817
  )
3816
3818
  self._rebuild_tools = True
3817
3819
 
@@ -4959,7 +4961,7 @@ class Agent:
4959
4961
  # 1. If build_user_context is False or message is a list, return the message as is.
4960
4962
  if not self.build_user_context:
4961
4963
  return Message(
4962
- role=self.user_message_role,
4964
+ role=self.user_message_role or "user",
4963
4965
  content=input,
4964
4966
  images=None if not self.send_media_to_model else images,
4965
4967
  audio=None if not self.send_media_to_model else audio,
@@ -4972,7 +4974,7 @@ class Agent:
4972
4974
  # If we have any media, return a message with empty content
4973
4975
  if images is not None or audio is not None or videos is not None or files is not None:
4974
4976
  return Message(
4975
- role=self.user_message_role,
4977
+ role=self.user_message_role or "user",
4976
4978
  content="",
4977
4979
  images=None if not self.send_media_to_model else images,
4978
4980
  audio=None if not self.send_media_to_model else audio,
@@ -5727,6 +5729,13 @@ class Agent:
5727
5729
  run_response.audio = []
5728
5730
  run_response.audio.append(audio)
5729
5731
 
5732
+ def _add_file(self, file: File, run_response: RunOutput) -> None:
5733
+ """Add file to both the agent's stateful storage and the current run response"""
5734
+ # Add to run response
5735
+ if run_response.files is None:
5736
+ run_response.files = []
5737
+ run_response.files.append(file)
5738
+
5730
5739
  ###########################################################################
5731
5740
  # Reasoning
5732
5741
  ###########################################################################
@@ -6790,11 +6799,14 @@ class Agent:
6790
6799
  )
6791
6800
  return "Successfully added to knowledge base"
6792
6801
 
6793
- def _get_previous_sessions_messages_function(self, num_history_sessions: Optional[int] = 2) -> Callable:
6802
+ def _get_previous_sessions_messages_function(
6803
+ self, num_history_sessions: Optional[int] = 2, user_id: Optional[str] = None
6804
+ ) -> Callable:
6794
6805
  """Factory function to create a get_previous_session_messages function.
6795
6806
 
6796
6807
  Args:
6797
6808
  num_history_sessions: The last n sessions to be taken from db
6809
+ user_id: The user ID to filter sessions by
6798
6810
 
6799
6811
  Returns:
6800
6812
  Callable: A function that retrieves messages from previous sessions
@@ -6813,7 +6825,9 @@ class Agent:
6813
6825
  if self.db is None:
6814
6826
  return "Previous session messages not available"
6815
6827
 
6816
- selected_sessions = self.db.get_sessions(session_type=SessionType.AGENT, limit=num_history_sessions)
6828
+ selected_sessions = self.db.get_sessions(
6829
+ session_type=SessionType.AGENT, limit=num_history_sessions, user_id=user_id
6830
+ )
6817
6831
 
6818
6832
  all_messages = []
6819
6833
  seen_message_pairs = set()
@@ -7210,6 +7224,7 @@ class Agent:
7210
7224
  images: Optional[Sequence[Image]] = None,
7211
7225
  videos: Optional[Sequence[Video]] = None,
7212
7226
  audios: Optional[Sequence[Audio]] = None,
7227
+ files: Optional[Sequence[File]] = None,
7213
7228
  ) -> tuple:
7214
7229
  """Convert raw Image/Video/Audio objects - now unified, so just return as-is."""
7215
7230
  # With unified classes, no conversion needed - just ensure IDs are set
@@ -7244,7 +7259,17 @@ class Agent:
7244
7259
  aud.id = str(uuid4())
7245
7260
  audio_list.append(aud)
7246
7261
 
7247
- return image_list, video_list, audio_list
7262
+ file_list = None
7263
+ if files:
7264
+ file_list = []
7265
+ for file in files:
7266
+ if not file.id:
7267
+ from uuid import uuid4
7268
+
7269
+ file.id = str(uuid4())
7270
+ file_list.append(file)
7271
+
7272
+ return image_list, video_list, audio_list, file_list
7248
7273
 
7249
7274
  def cli_app(
7250
7275
  self,