agno 2.2.3__tar.gz → 2.2.4__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 (573) hide show
  1. {agno-2.2.3 → agno-2.2.4}/PKG-INFO +1 -1
  2. {agno-2.2.3 → agno-2.2.4}/agno/agent/agent.py +26 -5
  3. {agno-2.2.3 → agno-2.2.4}/agno/db/dynamo/utils.py +1 -1
  4. {agno-2.2.3 → agno-2.2.4}/agno/db/firestore/utils.py +1 -1
  5. {agno-2.2.3 → agno-2.2.4}/agno/db/gcs_json/utils.py +1 -1
  6. {agno-2.2.3 → agno-2.2.4}/agno/db/in_memory/utils.py +1 -1
  7. {agno-2.2.3 → agno-2.2.4}/agno/db/json/utils.py +1 -1
  8. {agno-2.2.3 → agno-2.2.4}/agno/db/mongo/async_mongo.py +1 -1
  9. {agno-2.2.3 → agno-2.2.4}/agno/db/mongo/utils.py +1 -1
  10. {agno-2.2.3 → agno-2.2.4}/agno/db/mysql/utils.py +1 -1
  11. {agno-2.2.3 → agno-2.2.4}/agno/db/postgres/async_postgres.py +8 -3
  12. {agno-2.2.3 → agno-2.2.4}/agno/db/postgres/utils.py +1 -1
  13. {agno-2.2.3 → agno-2.2.4}/agno/db/redis/utils.py +1 -1
  14. {agno-2.2.3 → agno-2.2.4}/agno/db/singlestore/utils.py +1 -1
  15. {agno-2.2.3 → agno-2.2.4}/agno/db/sqlite/utils.py +1 -1
  16. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/ollama.py +8 -0
  17. {agno-2.2.3 → agno-2.2.4}/agno/memory/manager.py +5 -5
  18. {agno-2.2.3 → agno-2.2.4}/agno/os/app.py +105 -42
  19. {agno-2.2.3 → agno-2.2.4}/agno/run/agent.py +27 -0
  20. {agno-2.2.3 → agno-2.2.4}/agno/run/team.py +27 -0
  21. {agno-2.2.3 → agno-2.2.4}/agno/session/agent.py +57 -17
  22. {agno-2.2.3 → agno-2.2.4}/agno/session/team.py +57 -18
  23. {agno-2.2.3 → agno-2.2.4}/agno/team/team.py +29 -9
  24. {agno-2.2.3 → agno-2.2.4}/agno.egg-info/PKG-INFO +1 -1
  25. {agno-2.2.3 → agno-2.2.4}/pyproject.toml +1 -1
  26. {agno-2.2.3 → agno-2.2.4}/LICENSE +0 -0
  27. {agno-2.2.3 → agno-2.2.4}/README.md +0 -0
  28. {agno-2.2.3 → agno-2.2.4}/agno/__init__.py +0 -0
  29. {agno-2.2.3 → agno-2.2.4}/agno/agent/__init__.py +0 -0
  30. {agno-2.2.3 → agno-2.2.4}/agno/api/__init__.py +0 -0
  31. {agno-2.2.3 → agno-2.2.4}/agno/api/agent.py +0 -0
  32. {agno-2.2.3 → agno-2.2.4}/agno/api/api.py +0 -0
  33. {agno-2.2.3 → agno-2.2.4}/agno/api/evals.py +0 -0
  34. {agno-2.2.3 → agno-2.2.4}/agno/api/os.py +0 -0
  35. {agno-2.2.3 → agno-2.2.4}/agno/api/routes.py +0 -0
  36. {agno-2.2.3 → agno-2.2.4}/agno/api/schemas/__init__.py +0 -0
  37. {agno-2.2.3 → agno-2.2.4}/agno/api/schemas/agent.py +0 -0
  38. {agno-2.2.3 → agno-2.2.4}/agno/api/schemas/evals.py +0 -0
  39. {agno-2.2.3 → agno-2.2.4}/agno/api/schemas/os.py +0 -0
  40. {agno-2.2.3 → agno-2.2.4}/agno/api/schemas/response.py +0 -0
  41. {agno-2.2.3 → agno-2.2.4}/agno/api/schemas/team.py +0 -0
  42. {agno-2.2.3 → agno-2.2.4}/agno/api/schemas/utils.py +0 -0
  43. {agno-2.2.3 → agno-2.2.4}/agno/api/schemas/workflows.py +0 -0
  44. {agno-2.2.3 → agno-2.2.4}/agno/api/settings.py +0 -0
  45. {agno-2.2.3 → agno-2.2.4}/agno/api/team.py +0 -0
  46. {agno-2.2.3 → agno-2.2.4}/agno/api/workflow.py +0 -0
  47. {agno-2.2.3 → agno-2.2.4}/agno/cloud/aws/base.py +0 -0
  48. {agno-2.2.3 → agno-2.2.4}/agno/cloud/aws/s3/__init__.py +0 -0
  49. {agno-2.2.3 → agno-2.2.4}/agno/cloud/aws/s3/api_client.py +0 -0
  50. {agno-2.2.3 → agno-2.2.4}/agno/cloud/aws/s3/bucket.py +0 -0
  51. {agno-2.2.3 → agno-2.2.4}/agno/cloud/aws/s3/object.py +0 -0
  52. {agno-2.2.3 → agno-2.2.4}/agno/culture/__init__.py +0 -0
  53. {agno-2.2.3 → agno-2.2.4}/agno/culture/manager.py +0 -0
  54. {agno-2.2.3 → agno-2.2.4}/agno/db/__init__.py +0 -0
  55. {agno-2.2.3 → agno-2.2.4}/agno/db/async_postgres/__init__.py +0 -0
  56. {agno-2.2.3 → agno-2.2.4}/agno/db/base.py +0 -0
  57. {agno-2.2.3 → agno-2.2.4}/agno/db/dynamo/__init__.py +0 -0
  58. {agno-2.2.3 → agno-2.2.4}/agno/db/dynamo/dynamo.py +0 -0
  59. {agno-2.2.3 → agno-2.2.4}/agno/db/dynamo/schemas.py +0 -0
  60. {agno-2.2.3 → agno-2.2.4}/agno/db/firestore/__init__.py +0 -0
  61. {agno-2.2.3 → agno-2.2.4}/agno/db/firestore/firestore.py +0 -0
  62. {agno-2.2.3 → agno-2.2.4}/agno/db/firestore/schemas.py +0 -0
  63. {agno-2.2.3 → agno-2.2.4}/agno/db/gcs_json/__init__.py +0 -0
  64. {agno-2.2.3 → agno-2.2.4}/agno/db/gcs_json/gcs_json_db.py +0 -0
  65. {agno-2.2.3 → agno-2.2.4}/agno/db/in_memory/__init__.py +0 -0
  66. {agno-2.2.3 → agno-2.2.4}/agno/db/in_memory/in_memory_db.py +0 -0
  67. {agno-2.2.3 → agno-2.2.4}/agno/db/json/__init__.py +0 -0
  68. {agno-2.2.3 → agno-2.2.4}/agno/db/json/json_db.py +0 -0
  69. {agno-2.2.3 → agno-2.2.4}/agno/db/migrations/__init__.py +0 -0
  70. {agno-2.2.3 → agno-2.2.4}/agno/db/migrations/v1_to_v2.py +0 -0
  71. {agno-2.2.3 → agno-2.2.4}/agno/db/mongo/__init__.py +0 -0
  72. {agno-2.2.3 → agno-2.2.4}/agno/db/mongo/mongo.py +0 -0
  73. {agno-2.2.3 → agno-2.2.4}/agno/db/mongo/schemas.py +0 -0
  74. {agno-2.2.3 → agno-2.2.4}/agno/db/mysql/__init__.py +0 -0
  75. {agno-2.2.3 → agno-2.2.4}/agno/db/mysql/mysql.py +0 -0
  76. {agno-2.2.3 → agno-2.2.4}/agno/db/mysql/schemas.py +0 -0
  77. {agno-2.2.3 → agno-2.2.4}/agno/db/postgres/__init__.py +0 -0
  78. {agno-2.2.3 → agno-2.2.4}/agno/db/postgres/postgres.py +0 -0
  79. {agno-2.2.3 → agno-2.2.4}/agno/db/postgres/schemas.py +0 -0
  80. {agno-2.2.3 → agno-2.2.4}/agno/db/redis/__init__.py +0 -0
  81. {agno-2.2.3 → agno-2.2.4}/agno/db/redis/redis.py +0 -0
  82. {agno-2.2.3 → agno-2.2.4}/agno/db/redis/schemas.py +0 -0
  83. {agno-2.2.3 → agno-2.2.4}/agno/db/schemas/__init__.py +0 -0
  84. {agno-2.2.3 → agno-2.2.4}/agno/db/schemas/culture.py +0 -0
  85. {agno-2.2.3 → agno-2.2.4}/agno/db/schemas/evals.py +0 -0
  86. {agno-2.2.3 → agno-2.2.4}/agno/db/schemas/knowledge.py +0 -0
  87. {agno-2.2.3 → agno-2.2.4}/agno/db/schemas/memory.py +0 -0
  88. {agno-2.2.3 → agno-2.2.4}/agno/db/schemas/metrics.py +0 -0
  89. {agno-2.2.3 → agno-2.2.4}/agno/db/singlestore/__init__.py +0 -0
  90. {agno-2.2.3 → agno-2.2.4}/agno/db/singlestore/schemas.py +0 -0
  91. {agno-2.2.3 → agno-2.2.4}/agno/db/singlestore/singlestore.py +0 -0
  92. {agno-2.2.3 → agno-2.2.4}/agno/db/sqlite/__init__.py +0 -0
  93. {agno-2.2.3 → agno-2.2.4}/agno/db/sqlite/async_sqlite.py +0 -0
  94. {agno-2.2.3 → agno-2.2.4}/agno/db/sqlite/schemas.py +0 -0
  95. {agno-2.2.3 → agno-2.2.4}/agno/db/sqlite/sqlite.py +0 -0
  96. {agno-2.2.3 → agno-2.2.4}/agno/db/surrealdb/__init__.py +0 -0
  97. {agno-2.2.3 → agno-2.2.4}/agno/db/surrealdb/metrics.py +0 -0
  98. {agno-2.2.3 → agno-2.2.4}/agno/db/surrealdb/models.py +0 -0
  99. {agno-2.2.3 → agno-2.2.4}/agno/db/surrealdb/queries.py +0 -0
  100. {agno-2.2.3 → agno-2.2.4}/agno/db/surrealdb/surrealdb.py +0 -0
  101. {agno-2.2.3 → agno-2.2.4}/agno/db/surrealdb/utils.py +0 -0
  102. {agno-2.2.3 → agno-2.2.4}/agno/db/utils.py +0 -0
  103. {agno-2.2.3 → agno-2.2.4}/agno/debug.py +0 -0
  104. {agno-2.2.3 → agno-2.2.4}/agno/eval/__init__.py +0 -0
  105. {agno-2.2.3 → agno-2.2.4}/agno/eval/accuracy.py +0 -0
  106. {agno-2.2.3 → agno-2.2.4}/agno/eval/performance.py +0 -0
  107. {agno-2.2.3 → agno-2.2.4}/agno/eval/reliability.py +0 -0
  108. {agno-2.2.3 → agno-2.2.4}/agno/eval/utils.py +0 -0
  109. {agno-2.2.3 → agno-2.2.4}/agno/exceptions.py +0 -0
  110. {agno-2.2.3 → agno-2.2.4}/agno/guardrails/__init__.py +0 -0
  111. {agno-2.2.3 → agno-2.2.4}/agno/guardrails/base.py +0 -0
  112. {agno-2.2.3 → agno-2.2.4}/agno/guardrails/openai.py +0 -0
  113. {agno-2.2.3 → agno-2.2.4}/agno/guardrails/pii.py +0 -0
  114. {agno-2.2.3 → agno-2.2.4}/agno/guardrails/prompt_injection.py +0 -0
  115. {agno-2.2.3 → agno-2.2.4}/agno/integrations/__init__.py +0 -0
  116. {agno-2.2.3 → agno-2.2.4}/agno/integrations/discord/__init__.py +0 -0
  117. {agno-2.2.3 → agno-2.2.4}/agno/integrations/discord/client.py +0 -0
  118. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/__init__.py +0 -0
  119. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/chunking/__init__.py +0 -0
  120. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/chunking/agentic.py +0 -0
  121. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/chunking/document.py +0 -0
  122. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/chunking/fixed.py +0 -0
  123. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/chunking/markdown.py +0 -0
  124. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/chunking/recursive.py +0 -0
  125. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/chunking/row.py +0 -0
  126. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/chunking/semantic.py +0 -0
  127. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/chunking/strategy.py +0 -0
  128. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/content.py +0 -0
  129. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/document/__init__.py +0 -0
  130. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/document/base.py +0 -0
  131. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/__init__.py +0 -0
  132. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  133. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/azure_openai.py +0 -0
  134. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/base.py +0 -0
  135. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/cohere.py +0 -0
  136. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/fastembed.py +0 -0
  137. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/fireworks.py +0 -0
  138. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/google.py +0 -0
  139. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/huggingface.py +0 -0
  140. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/jina.py +0 -0
  141. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/langdb.py +0 -0
  142. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/mistral.py +0 -0
  143. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/nebius.py +0 -0
  144. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/openai.py +0 -0
  145. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  146. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/together.py +0 -0
  147. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/embedder/voyageai.py +0 -0
  148. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/knowledge.py +0 -0
  149. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/__init__.py +0 -0
  150. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/arxiv_reader.py +0 -0
  151. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/base.py +0 -0
  152. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/csv_reader.py +0 -0
  153. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/docx_reader.py +0 -0
  154. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
  155. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  156. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/json_reader.py +0 -0
  157. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/markdown_reader.py +0 -0
  158. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/pdf_reader.py +0 -0
  159. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/pptx_reader.py +0 -0
  160. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/reader_factory.py +0 -0
  161. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/s3_reader.py +0 -0
  162. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/tavily_reader.py +0 -0
  163. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/text_reader.py +0 -0
  164. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/web_search_reader.py +0 -0
  165. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/website_reader.py +0 -0
  166. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  167. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reader/youtube_reader.py +0 -0
  168. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/remote_content/__init__.py +0 -0
  169. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/remote_content/remote_content.py +0 -0
  170. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reranker/__init__.py +0 -0
  171. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reranker/base.py +0 -0
  172. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reranker/cohere.py +0 -0
  173. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reranker/infinity.py +0 -0
  174. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  175. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/types.py +0 -0
  176. {agno-2.2.3 → agno-2.2.4}/agno/knowledge/utils.py +0 -0
  177. {agno-2.2.3 → agno-2.2.4}/agno/media.py +0 -0
  178. {agno-2.2.3 → agno-2.2.4}/agno/memory/__init__.py +0 -0
  179. {agno-2.2.3 → agno-2.2.4}/agno/models/__init__.py +0 -0
  180. {agno-2.2.3 → agno-2.2.4}/agno/models/aimlapi/__init__.py +0 -0
  181. {agno-2.2.3 → agno-2.2.4}/agno/models/aimlapi/aimlapi.py +0 -0
  182. {agno-2.2.3 → agno-2.2.4}/agno/models/anthropic/__init__.py +0 -0
  183. {agno-2.2.3 → agno-2.2.4}/agno/models/anthropic/claude.py +0 -0
  184. {agno-2.2.3 → agno-2.2.4}/agno/models/aws/__init__.py +0 -0
  185. {agno-2.2.3 → agno-2.2.4}/agno/models/aws/bedrock.py +0 -0
  186. {agno-2.2.3 → agno-2.2.4}/agno/models/aws/claude.py +0 -0
  187. {agno-2.2.3 → agno-2.2.4}/agno/models/azure/__init__.py +0 -0
  188. {agno-2.2.3 → agno-2.2.4}/agno/models/azure/ai_foundry.py +0 -0
  189. {agno-2.2.3 → agno-2.2.4}/agno/models/azure/openai_chat.py +0 -0
  190. {agno-2.2.3 → agno-2.2.4}/agno/models/base.py +0 -0
  191. {agno-2.2.3 → agno-2.2.4}/agno/models/cerebras/__init__.py +0 -0
  192. {agno-2.2.3 → agno-2.2.4}/agno/models/cerebras/cerebras.py +0 -0
  193. {agno-2.2.3 → agno-2.2.4}/agno/models/cerebras/cerebras_openai.py +0 -0
  194. {agno-2.2.3 → agno-2.2.4}/agno/models/cohere/__init__.py +0 -0
  195. {agno-2.2.3 → agno-2.2.4}/agno/models/cohere/chat.py +0 -0
  196. {agno-2.2.3 → agno-2.2.4}/agno/models/cometapi/__init__.py +0 -0
  197. {agno-2.2.3 → agno-2.2.4}/agno/models/cometapi/cometapi.py +0 -0
  198. {agno-2.2.3 → agno-2.2.4}/agno/models/dashscope/__init__.py +0 -0
  199. {agno-2.2.3 → agno-2.2.4}/agno/models/dashscope/dashscope.py +0 -0
  200. {agno-2.2.3 → agno-2.2.4}/agno/models/deepinfra/__init__.py +0 -0
  201. {agno-2.2.3 → agno-2.2.4}/agno/models/deepinfra/deepinfra.py +0 -0
  202. {agno-2.2.3 → agno-2.2.4}/agno/models/deepseek/__init__.py +0 -0
  203. {agno-2.2.3 → agno-2.2.4}/agno/models/deepseek/deepseek.py +0 -0
  204. {agno-2.2.3 → agno-2.2.4}/agno/models/defaults.py +0 -0
  205. {agno-2.2.3 → agno-2.2.4}/agno/models/fireworks/__init__.py +0 -0
  206. {agno-2.2.3 → agno-2.2.4}/agno/models/fireworks/fireworks.py +0 -0
  207. {agno-2.2.3 → agno-2.2.4}/agno/models/google/__init__.py +0 -0
  208. {agno-2.2.3 → agno-2.2.4}/agno/models/google/gemini.py +0 -0
  209. {agno-2.2.3 → agno-2.2.4}/agno/models/groq/__init__.py +0 -0
  210. {agno-2.2.3 → agno-2.2.4}/agno/models/groq/groq.py +0 -0
  211. {agno-2.2.3 → agno-2.2.4}/agno/models/huggingface/__init__.py +0 -0
  212. {agno-2.2.3 → agno-2.2.4}/agno/models/huggingface/huggingface.py +0 -0
  213. {agno-2.2.3 → agno-2.2.4}/agno/models/ibm/__init__.py +0 -0
  214. {agno-2.2.3 → agno-2.2.4}/agno/models/ibm/watsonx.py +0 -0
  215. {agno-2.2.3 → agno-2.2.4}/agno/models/internlm/__init__.py +0 -0
  216. {agno-2.2.3 → agno-2.2.4}/agno/models/internlm/internlm.py +0 -0
  217. {agno-2.2.3 → agno-2.2.4}/agno/models/langdb/__init__.py +0 -0
  218. {agno-2.2.3 → agno-2.2.4}/agno/models/langdb/langdb.py +0 -0
  219. {agno-2.2.3 → agno-2.2.4}/agno/models/litellm/__init__.py +0 -0
  220. {agno-2.2.3 → agno-2.2.4}/agno/models/litellm/chat.py +0 -0
  221. {agno-2.2.3 → agno-2.2.4}/agno/models/litellm/litellm_openai.py +0 -0
  222. {agno-2.2.3 → agno-2.2.4}/agno/models/llama_cpp/__init__.py +0 -0
  223. {agno-2.2.3 → agno-2.2.4}/agno/models/llama_cpp/llama_cpp.py +0 -0
  224. {agno-2.2.3 → agno-2.2.4}/agno/models/lmstudio/__init__.py +0 -0
  225. {agno-2.2.3 → agno-2.2.4}/agno/models/lmstudio/lmstudio.py +0 -0
  226. {agno-2.2.3 → agno-2.2.4}/agno/models/message.py +0 -0
  227. {agno-2.2.3 → agno-2.2.4}/agno/models/meta/__init__.py +0 -0
  228. {agno-2.2.3 → agno-2.2.4}/agno/models/meta/llama.py +0 -0
  229. {agno-2.2.3 → agno-2.2.4}/agno/models/meta/llama_openai.py +0 -0
  230. {agno-2.2.3 → agno-2.2.4}/agno/models/metrics.py +0 -0
  231. {agno-2.2.3 → agno-2.2.4}/agno/models/mistral/__init__.py +0 -0
  232. {agno-2.2.3 → agno-2.2.4}/agno/models/mistral/mistral.py +0 -0
  233. {agno-2.2.3 → agno-2.2.4}/agno/models/nebius/__init__.py +0 -0
  234. {agno-2.2.3 → agno-2.2.4}/agno/models/nebius/nebius.py +0 -0
  235. {agno-2.2.3 → agno-2.2.4}/agno/models/nexus/__init__.py +0 -0
  236. {agno-2.2.3 → agno-2.2.4}/agno/models/nexus/nexus.py +0 -0
  237. {agno-2.2.3 → agno-2.2.4}/agno/models/nvidia/__init__.py +0 -0
  238. {agno-2.2.3 → agno-2.2.4}/agno/models/nvidia/nvidia.py +0 -0
  239. {agno-2.2.3 → agno-2.2.4}/agno/models/ollama/__init__.py +0 -0
  240. {agno-2.2.3 → agno-2.2.4}/agno/models/ollama/chat.py +0 -0
  241. {agno-2.2.3 → agno-2.2.4}/agno/models/openai/__init__.py +0 -0
  242. {agno-2.2.3 → agno-2.2.4}/agno/models/openai/chat.py +0 -0
  243. {agno-2.2.3 → agno-2.2.4}/agno/models/openai/like.py +0 -0
  244. {agno-2.2.3 → agno-2.2.4}/agno/models/openai/responses.py +0 -0
  245. {agno-2.2.3 → agno-2.2.4}/agno/models/openrouter/__init__.py +0 -0
  246. {agno-2.2.3 → agno-2.2.4}/agno/models/openrouter/openrouter.py +0 -0
  247. {agno-2.2.3 → agno-2.2.4}/agno/models/perplexity/__init__.py +0 -0
  248. {agno-2.2.3 → agno-2.2.4}/agno/models/perplexity/perplexity.py +0 -0
  249. {agno-2.2.3 → agno-2.2.4}/agno/models/portkey/__init__.py +0 -0
  250. {agno-2.2.3 → agno-2.2.4}/agno/models/portkey/portkey.py +0 -0
  251. {agno-2.2.3 → agno-2.2.4}/agno/models/requesty/__init__.py +0 -0
  252. {agno-2.2.3 → agno-2.2.4}/agno/models/requesty/requesty.py +0 -0
  253. {agno-2.2.3 → agno-2.2.4}/agno/models/response.py +0 -0
  254. {agno-2.2.3 → agno-2.2.4}/agno/models/sambanova/__init__.py +0 -0
  255. {agno-2.2.3 → agno-2.2.4}/agno/models/sambanova/sambanova.py +0 -0
  256. {agno-2.2.3 → agno-2.2.4}/agno/models/siliconflow/__init__.py +0 -0
  257. {agno-2.2.3 → agno-2.2.4}/agno/models/siliconflow/siliconflow.py +0 -0
  258. {agno-2.2.3 → agno-2.2.4}/agno/models/together/__init__.py +0 -0
  259. {agno-2.2.3 → agno-2.2.4}/agno/models/together/together.py +0 -0
  260. {agno-2.2.3 → agno-2.2.4}/agno/models/utils.py +0 -0
  261. {agno-2.2.3 → agno-2.2.4}/agno/models/vercel/__init__.py +0 -0
  262. {agno-2.2.3 → agno-2.2.4}/agno/models/vercel/v0.py +0 -0
  263. {agno-2.2.3 → agno-2.2.4}/agno/models/vertexai/__init__.py +0 -0
  264. {agno-2.2.3 → agno-2.2.4}/agno/models/vertexai/claude.py +0 -0
  265. {agno-2.2.3 → agno-2.2.4}/agno/models/vllm/__init__.py +0 -0
  266. {agno-2.2.3 → agno-2.2.4}/agno/models/vllm/vllm.py +0 -0
  267. {agno-2.2.3 → agno-2.2.4}/agno/models/xai/__init__.py +0 -0
  268. {agno-2.2.3 → agno-2.2.4}/agno/models/xai/xai.py +0 -0
  269. {agno-2.2.3 → agno-2.2.4}/agno/os/__init__.py +0 -0
  270. {agno-2.2.3 → agno-2.2.4}/agno/os/auth.py +0 -0
  271. {agno-2.2.3 → agno-2.2.4}/agno/os/config.py +0 -0
  272. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/__init__.py +0 -0
  273. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/a2a/__init__.py +0 -0
  274. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/a2a/a2a.py +0 -0
  275. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/a2a/router.py +0 -0
  276. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/a2a/utils.py +0 -0
  277. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/agui/__init__.py +0 -0
  278. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/agui/agui.py +0 -0
  279. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/agui/router.py +0 -0
  280. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/agui/utils.py +0 -0
  281. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/base.py +0 -0
  282. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/slack/__init__.py +0 -0
  283. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/slack/router.py +0 -0
  284. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/slack/security.py +0 -0
  285. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/slack/slack.py +0 -0
  286. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  287. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/whatsapp/router.py +0 -0
  288. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/whatsapp/security.py +0 -0
  289. {agno-2.2.3 → agno-2.2.4}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  290. {agno-2.2.3 → agno-2.2.4}/agno/os/mcp.py +0 -0
  291. {agno-2.2.3 → agno-2.2.4}/agno/os/middleware/__init__.py +0 -0
  292. {agno-2.2.3 → agno-2.2.4}/agno/os/middleware/jwt.py +0 -0
  293. {agno-2.2.3 → agno-2.2.4}/agno/os/router.py +0 -0
  294. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/__init__.py +0 -0
  295. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/evals/__init__.py +0 -0
  296. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/evals/evals.py +0 -0
  297. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/evals/schemas.py +0 -0
  298. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/evals/utils.py +0 -0
  299. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/health.py +0 -0
  300. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/home.py +0 -0
  301. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/knowledge/__init__.py +0 -0
  302. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/knowledge/knowledge.py +0 -0
  303. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/knowledge/schemas.py +0 -0
  304. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/memory/__init__.py +0 -0
  305. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/memory/memory.py +0 -0
  306. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/memory/schemas.py +0 -0
  307. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/metrics/__init__.py +0 -0
  308. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/metrics/metrics.py +0 -0
  309. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/metrics/schemas.py +0 -0
  310. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/session/__init__.py +0 -0
  311. {agno-2.2.3 → agno-2.2.4}/agno/os/routers/session/session.py +0 -0
  312. {agno-2.2.3 → agno-2.2.4}/agno/os/schema.py +0 -0
  313. {agno-2.2.3 → agno-2.2.4}/agno/os/settings.py +0 -0
  314. {agno-2.2.3 → agno-2.2.4}/agno/os/utils.py +0 -0
  315. {agno-2.2.3 → agno-2.2.4}/agno/py.typed +0 -0
  316. {agno-2.2.3 → agno-2.2.4}/agno/reasoning/__init__.py +0 -0
  317. {agno-2.2.3 → agno-2.2.4}/agno/reasoning/anthropic.py +0 -0
  318. {agno-2.2.3 → agno-2.2.4}/agno/reasoning/azure_ai_foundry.py +0 -0
  319. {agno-2.2.3 → agno-2.2.4}/agno/reasoning/deepseek.py +0 -0
  320. {agno-2.2.3 → agno-2.2.4}/agno/reasoning/default.py +0 -0
  321. {agno-2.2.3 → agno-2.2.4}/agno/reasoning/gemini.py +0 -0
  322. {agno-2.2.3 → agno-2.2.4}/agno/reasoning/groq.py +0 -0
  323. {agno-2.2.3 → agno-2.2.4}/agno/reasoning/helpers.py +0 -0
  324. {agno-2.2.3 → agno-2.2.4}/agno/reasoning/ollama.py +0 -0
  325. {agno-2.2.3 → agno-2.2.4}/agno/reasoning/openai.py +0 -0
  326. {agno-2.2.3 → agno-2.2.4}/agno/reasoning/step.py +0 -0
  327. {agno-2.2.3 → agno-2.2.4}/agno/reasoning/vertexai.py +0 -0
  328. {agno-2.2.3 → agno-2.2.4}/agno/run/__init__.py +0 -0
  329. {agno-2.2.3 → agno-2.2.4}/agno/run/base.py +0 -0
  330. {agno-2.2.3 → agno-2.2.4}/agno/run/cancel.py +0 -0
  331. {agno-2.2.3 → agno-2.2.4}/agno/run/messages.py +0 -0
  332. {agno-2.2.3 → agno-2.2.4}/agno/run/workflow.py +0 -0
  333. {agno-2.2.3 → agno-2.2.4}/agno/session/__init__.py +0 -0
  334. {agno-2.2.3 → agno-2.2.4}/agno/session/summary.py +0 -0
  335. {agno-2.2.3 → agno-2.2.4}/agno/session/workflow.py +0 -0
  336. {agno-2.2.3 → agno-2.2.4}/agno/team/__init__.py +0 -0
  337. {agno-2.2.3 → agno-2.2.4}/agno/tools/__init__.py +0 -0
  338. {agno-2.2.3 → agno-2.2.4}/agno/tools/agentql.py +0 -0
  339. {agno-2.2.3 → agno-2.2.4}/agno/tools/airflow.py +0 -0
  340. {agno-2.2.3 → agno-2.2.4}/agno/tools/api.py +0 -0
  341. {agno-2.2.3 → agno-2.2.4}/agno/tools/apify.py +0 -0
  342. {agno-2.2.3 → agno-2.2.4}/agno/tools/arxiv.py +0 -0
  343. {agno-2.2.3 → agno-2.2.4}/agno/tools/aws_lambda.py +0 -0
  344. {agno-2.2.3 → agno-2.2.4}/agno/tools/aws_ses.py +0 -0
  345. {agno-2.2.3 → agno-2.2.4}/agno/tools/baidusearch.py +0 -0
  346. {agno-2.2.3 → agno-2.2.4}/agno/tools/bitbucket.py +0 -0
  347. {agno-2.2.3 → agno-2.2.4}/agno/tools/brandfetch.py +0 -0
  348. {agno-2.2.3 → agno-2.2.4}/agno/tools/bravesearch.py +0 -0
  349. {agno-2.2.3 → agno-2.2.4}/agno/tools/brightdata.py +0 -0
  350. {agno-2.2.3 → agno-2.2.4}/agno/tools/browserbase.py +0 -0
  351. {agno-2.2.3 → agno-2.2.4}/agno/tools/calcom.py +0 -0
  352. {agno-2.2.3 → agno-2.2.4}/agno/tools/calculator.py +0 -0
  353. {agno-2.2.3 → agno-2.2.4}/agno/tools/cartesia.py +0 -0
  354. {agno-2.2.3 → agno-2.2.4}/agno/tools/clickup.py +0 -0
  355. {agno-2.2.3 → agno-2.2.4}/agno/tools/confluence.py +0 -0
  356. {agno-2.2.3 → agno-2.2.4}/agno/tools/crawl4ai.py +0 -0
  357. {agno-2.2.3 → agno-2.2.4}/agno/tools/csv_toolkit.py +0 -0
  358. {agno-2.2.3 → agno-2.2.4}/agno/tools/dalle.py +0 -0
  359. {agno-2.2.3 → agno-2.2.4}/agno/tools/daytona.py +0 -0
  360. {agno-2.2.3 → agno-2.2.4}/agno/tools/decorator.py +0 -0
  361. {agno-2.2.3 → agno-2.2.4}/agno/tools/desi_vocal.py +0 -0
  362. {agno-2.2.3 → agno-2.2.4}/agno/tools/discord.py +0 -0
  363. {agno-2.2.3 → agno-2.2.4}/agno/tools/docker.py +0 -0
  364. {agno-2.2.3 → agno-2.2.4}/agno/tools/duckdb.py +0 -0
  365. {agno-2.2.3 → agno-2.2.4}/agno/tools/duckduckgo.py +0 -0
  366. {agno-2.2.3 → agno-2.2.4}/agno/tools/e2b.py +0 -0
  367. {agno-2.2.3 → agno-2.2.4}/agno/tools/eleven_labs.py +0 -0
  368. {agno-2.2.3 → agno-2.2.4}/agno/tools/email.py +0 -0
  369. {agno-2.2.3 → agno-2.2.4}/agno/tools/evm.py +0 -0
  370. {agno-2.2.3 → agno-2.2.4}/agno/tools/exa.py +0 -0
  371. {agno-2.2.3 → agno-2.2.4}/agno/tools/fal.py +0 -0
  372. {agno-2.2.3 → agno-2.2.4}/agno/tools/file.py +0 -0
  373. {agno-2.2.3 → agno-2.2.4}/agno/tools/file_generation.py +0 -0
  374. {agno-2.2.3 → agno-2.2.4}/agno/tools/financial_datasets.py +0 -0
  375. {agno-2.2.3 → agno-2.2.4}/agno/tools/firecrawl.py +0 -0
  376. {agno-2.2.3 → agno-2.2.4}/agno/tools/function.py +0 -0
  377. {agno-2.2.3 → agno-2.2.4}/agno/tools/giphy.py +0 -0
  378. {agno-2.2.3 → agno-2.2.4}/agno/tools/github.py +0 -0
  379. {agno-2.2.3 → agno-2.2.4}/agno/tools/gmail.py +0 -0
  380. {agno-2.2.3 → agno-2.2.4}/agno/tools/google_bigquery.py +0 -0
  381. {agno-2.2.3 → agno-2.2.4}/agno/tools/google_drive.py +0 -0
  382. {agno-2.2.3 → agno-2.2.4}/agno/tools/google_maps.py +0 -0
  383. {agno-2.2.3 → agno-2.2.4}/agno/tools/googlecalendar.py +0 -0
  384. {agno-2.2.3 → agno-2.2.4}/agno/tools/googlesearch.py +0 -0
  385. {agno-2.2.3 → agno-2.2.4}/agno/tools/googlesheets.py +0 -0
  386. {agno-2.2.3 → agno-2.2.4}/agno/tools/hackernews.py +0 -0
  387. {agno-2.2.3 → agno-2.2.4}/agno/tools/jina.py +0 -0
  388. {agno-2.2.3 → agno-2.2.4}/agno/tools/jira.py +0 -0
  389. {agno-2.2.3 → agno-2.2.4}/agno/tools/knowledge.py +0 -0
  390. {agno-2.2.3 → agno-2.2.4}/agno/tools/linear.py +0 -0
  391. {agno-2.2.3 → agno-2.2.4}/agno/tools/linkup.py +0 -0
  392. {agno-2.2.3 → agno-2.2.4}/agno/tools/local_file_system.py +0 -0
  393. {agno-2.2.3 → agno-2.2.4}/agno/tools/lumalab.py +0 -0
  394. {agno-2.2.3 → agno-2.2.4}/agno/tools/mcp/__init__.py +0 -0
  395. {agno-2.2.3 → agno-2.2.4}/agno/tools/mcp/mcp.py +0 -0
  396. {agno-2.2.3 → agno-2.2.4}/agno/tools/mcp/multi_mcp.py +0 -0
  397. {agno-2.2.3 → agno-2.2.4}/agno/tools/mcp/params.py +0 -0
  398. {agno-2.2.3 → agno-2.2.4}/agno/tools/mcp_toolbox.py +0 -0
  399. {agno-2.2.3 → agno-2.2.4}/agno/tools/mem0.py +0 -0
  400. {agno-2.2.3 → agno-2.2.4}/agno/tools/memori.py +0 -0
  401. {agno-2.2.3 → agno-2.2.4}/agno/tools/memory.py +0 -0
  402. {agno-2.2.3 → agno-2.2.4}/agno/tools/mlx_transcribe.py +0 -0
  403. {agno-2.2.3 → agno-2.2.4}/agno/tools/models/__init__.py +0 -0
  404. {agno-2.2.3 → agno-2.2.4}/agno/tools/models/azure_openai.py +0 -0
  405. {agno-2.2.3 → agno-2.2.4}/agno/tools/models/gemini.py +0 -0
  406. {agno-2.2.3 → agno-2.2.4}/agno/tools/models/groq.py +0 -0
  407. {agno-2.2.3 → agno-2.2.4}/agno/tools/models/morph.py +0 -0
  408. {agno-2.2.3 → agno-2.2.4}/agno/tools/models/nebius.py +0 -0
  409. {agno-2.2.3 → agno-2.2.4}/agno/tools/models_labs.py +0 -0
  410. {agno-2.2.3 → agno-2.2.4}/agno/tools/moviepy_video.py +0 -0
  411. {agno-2.2.3 → agno-2.2.4}/agno/tools/neo4j.py +0 -0
  412. {agno-2.2.3 → agno-2.2.4}/agno/tools/newspaper.py +0 -0
  413. {agno-2.2.3 → agno-2.2.4}/agno/tools/newspaper4k.py +0 -0
  414. {agno-2.2.3 → agno-2.2.4}/agno/tools/openai.py +0 -0
  415. {agno-2.2.3 → agno-2.2.4}/agno/tools/openbb.py +0 -0
  416. {agno-2.2.3 → agno-2.2.4}/agno/tools/opencv.py +0 -0
  417. {agno-2.2.3 → agno-2.2.4}/agno/tools/openweather.py +0 -0
  418. {agno-2.2.3 → agno-2.2.4}/agno/tools/oxylabs.py +0 -0
  419. {agno-2.2.3 → agno-2.2.4}/agno/tools/pandas.py +0 -0
  420. {agno-2.2.3 → agno-2.2.4}/agno/tools/postgres.py +0 -0
  421. {agno-2.2.3 → agno-2.2.4}/agno/tools/pubmed.py +0 -0
  422. {agno-2.2.3 → agno-2.2.4}/agno/tools/python.py +0 -0
  423. {agno-2.2.3 → agno-2.2.4}/agno/tools/reasoning.py +0 -0
  424. {agno-2.2.3 → agno-2.2.4}/agno/tools/reddit.py +0 -0
  425. {agno-2.2.3 → agno-2.2.4}/agno/tools/replicate.py +0 -0
  426. {agno-2.2.3 → agno-2.2.4}/agno/tools/resend.py +0 -0
  427. {agno-2.2.3 → agno-2.2.4}/agno/tools/scrapegraph.py +0 -0
  428. {agno-2.2.3 → agno-2.2.4}/agno/tools/searxng.py +0 -0
  429. {agno-2.2.3 → agno-2.2.4}/agno/tools/serpapi.py +0 -0
  430. {agno-2.2.3 → agno-2.2.4}/agno/tools/serper.py +0 -0
  431. {agno-2.2.3 → agno-2.2.4}/agno/tools/shell.py +0 -0
  432. {agno-2.2.3 → agno-2.2.4}/agno/tools/slack.py +0 -0
  433. {agno-2.2.3 → agno-2.2.4}/agno/tools/sleep.py +0 -0
  434. {agno-2.2.3 → agno-2.2.4}/agno/tools/spider.py +0 -0
  435. {agno-2.2.3 → agno-2.2.4}/agno/tools/sql.py +0 -0
  436. {agno-2.2.3 → agno-2.2.4}/agno/tools/streamlit/__init__.py +0 -0
  437. {agno-2.2.3 → agno-2.2.4}/agno/tools/streamlit/components.py +0 -0
  438. {agno-2.2.3 → agno-2.2.4}/agno/tools/tavily.py +0 -0
  439. {agno-2.2.3 → agno-2.2.4}/agno/tools/telegram.py +0 -0
  440. {agno-2.2.3 → agno-2.2.4}/agno/tools/todoist.py +0 -0
  441. {agno-2.2.3 → agno-2.2.4}/agno/tools/tool_registry.py +0 -0
  442. {agno-2.2.3 → agno-2.2.4}/agno/tools/toolkit.py +0 -0
  443. {agno-2.2.3 → agno-2.2.4}/agno/tools/trafilatura.py +0 -0
  444. {agno-2.2.3 → agno-2.2.4}/agno/tools/trello.py +0 -0
  445. {agno-2.2.3 → agno-2.2.4}/agno/tools/twilio.py +0 -0
  446. {agno-2.2.3 → agno-2.2.4}/agno/tools/user_control_flow.py +0 -0
  447. {agno-2.2.3 → agno-2.2.4}/agno/tools/valyu.py +0 -0
  448. {agno-2.2.3 → agno-2.2.4}/agno/tools/visualization.py +0 -0
  449. {agno-2.2.3 → agno-2.2.4}/agno/tools/webbrowser.py +0 -0
  450. {agno-2.2.3 → agno-2.2.4}/agno/tools/webex.py +0 -0
  451. {agno-2.2.3 → agno-2.2.4}/agno/tools/website.py +0 -0
  452. {agno-2.2.3 → agno-2.2.4}/agno/tools/webtools.py +0 -0
  453. {agno-2.2.3 → agno-2.2.4}/agno/tools/whatsapp.py +0 -0
  454. {agno-2.2.3 → agno-2.2.4}/agno/tools/wikipedia.py +0 -0
  455. {agno-2.2.3 → agno-2.2.4}/agno/tools/workflow.py +0 -0
  456. {agno-2.2.3 → agno-2.2.4}/agno/tools/x.py +0 -0
  457. {agno-2.2.3 → agno-2.2.4}/agno/tools/yfinance.py +0 -0
  458. {agno-2.2.3 → agno-2.2.4}/agno/tools/youtube.py +0 -0
  459. {agno-2.2.3 → agno-2.2.4}/agno/tools/zendesk.py +0 -0
  460. {agno-2.2.3 → agno-2.2.4}/agno/tools/zep.py +0 -0
  461. {agno-2.2.3 → agno-2.2.4}/agno/tools/zoom.py +0 -0
  462. {agno-2.2.3 → agno-2.2.4}/agno/utils/__init__.py +0 -0
  463. {agno-2.2.3 → agno-2.2.4}/agno/utils/agent.py +0 -0
  464. {agno-2.2.3 → agno-2.2.4}/agno/utils/audio.py +0 -0
  465. {agno-2.2.3 → agno-2.2.4}/agno/utils/certs.py +0 -0
  466. {agno-2.2.3 → agno-2.2.4}/agno/utils/code_execution.py +0 -0
  467. {agno-2.2.3 → agno-2.2.4}/agno/utils/common.py +0 -0
  468. {agno-2.2.3 → agno-2.2.4}/agno/utils/dttm.py +0 -0
  469. {agno-2.2.3 → agno-2.2.4}/agno/utils/enum.py +0 -0
  470. {agno-2.2.3 → agno-2.2.4}/agno/utils/env.py +0 -0
  471. {agno-2.2.3 → agno-2.2.4}/agno/utils/events.py +0 -0
  472. {agno-2.2.3 → agno-2.2.4}/agno/utils/format_str.py +0 -0
  473. {agno-2.2.3 → agno-2.2.4}/agno/utils/functions.py +0 -0
  474. {agno-2.2.3 → agno-2.2.4}/agno/utils/gemini.py +0 -0
  475. {agno-2.2.3 → agno-2.2.4}/agno/utils/hooks.py +0 -0
  476. {agno-2.2.3 → agno-2.2.4}/agno/utils/http.py +0 -0
  477. {agno-2.2.3 → agno-2.2.4}/agno/utils/json_schema.py +0 -0
  478. {agno-2.2.3 → agno-2.2.4}/agno/utils/knowledge.py +0 -0
  479. {agno-2.2.3 → agno-2.2.4}/agno/utils/location.py +0 -0
  480. {agno-2.2.3 → agno-2.2.4}/agno/utils/log.py +0 -0
  481. {agno-2.2.3 → agno-2.2.4}/agno/utils/mcp.py +0 -0
  482. {agno-2.2.3 → agno-2.2.4}/agno/utils/media.py +0 -0
  483. {agno-2.2.3 → agno-2.2.4}/agno/utils/merge_dict.py +0 -0
  484. {agno-2.2.3 → agno-2.2.4}/agno/utils/message.py +0 -0
  485. {agno-2.2.3 → agno-2.2.4}/agno/utils/models/__init__.py +0 -0
  486. {agno-2.2.3 → agno-2.2.4}/agno/utils/models/ai_foundry.py +0 -0
  487. {agno-2.2.3 → agno-2.2.4}/agno/utils/models/claude.py +0 -0
  488. {agno-2.2.3 → agno-2.2.4}/agno/utils/models/cohere.py +0 -0
  489. {agno-2.2.3 → agno-2.2.4}/agno/utils/models/llama.py +0 -0
  490. {agno-2.2.3 → agno-2.2.4}/agno/utils/models/mistral.py +0 -0
  491. {agno-2.2.3 → agno-2.2.4}/agno/utils/models/openai_responses.py +0 -0
  492. {agno-2.2.3 → agno-2.2.4}/agno/utils/models/schema_utils.py +0 -0
  493. {agno-2.2.3 → agno-2.2.4}/agno/utils/models/watsonx.py +0 -0
  494. {agno-2.2.3 → agno-2.2.4}/agno/utils/openai.py +0 -0
  495. {agno-2.2.3 → agno-2.2.4}/agno/utils/pickle.py +0 -0
  496. {agno-2.2.3 → agno-2.2.4}/agno/utils/pprint.py +0 -0
  497. {agno-2.2.3 → agno-2.2.4}/agno/utils/print_response/__init__.py +0 -0
  498. {agno-2.2.3 → agno-2.2.4}/agno/utils/print_response/agent.py +0 -0
  499. {agno-2.2.3 → agno-2.2.4}/agno/utils/print_response/team.py +0 -0
  500. {agno-2.2.3 → agno-2.2.4}/agno/utils/print_response/workflow.py +0 -0
  501. {agno-2.2.3 → agno-2.2.4}/agno/utils/prompts.py +0 -0
  502. {agno-2.2.3 → agno-2.2.4}/agno/utils/reasoning.py +0 -0
  503. {agno-2.2.3 → agno-2.2.4}/agno/utils/response.py +0 -0
  504. {agno-2.2.3 → agno-2.2.4}/agno/utils/response_iterator.py +0 -0
  505. {agno-2.2.3 → agno-2.2.4}/agno/utils/safe_formatter.py +0 -0
  506. {agno-2.2.3 → agno-2.2.4}/agno/utils/serialize.py +0 -0
  507. {agno-2.2.3 → agno-2.2.4}/agno/utils/shell.py +0 -0
  508. {agno-2.2.3 → agno-2.2.4}/agno/utils/streamlit.py +0 -0
  509. {agno-2.2.3 → agno-2.2.4}/agno/utils/string.py +0 -0
  510. {agno-2.2.3 → agno-2.2.4}/agno/utils/team.py +0 -0
  511. {agno-2.2.3 → agno-2.2.4}/agno/utils/timer.py +0 -0
  512. {agno-2.2.3 → agno-2.2.4}/agno/utils/tools.py +0 -0
  513. {agno-2.2.3 → agno-2.2.4}/agno/utils/web.py +0 -0
  514. {agno-2.2.3 → agno-2.2.4}/agno/utils/whatsapp.py +0 -0
  515. {agno-2.2.3 → agno-2.2.4}/agno/utils/yaml_io.py +0 -0
  516. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/__init__.py +0 -0
  517. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/base.py +0 -0
  518. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/cassandra/__init__.py +0 -0
  519. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/cassandra/cassandra.py +0 -0
  520. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  521. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/cassandra/index.py +0 -0
  522. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/chroma/__init__.py +0 -0
  523. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/chroma/chromadb.py +0 -0
  524. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/clickhouse/__init__.py +0 -0
  525. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  526. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/clickhouse/index.py +0 -0
  527. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/couchbase/__init__.py +0 -0
  528. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/couchbase/couchbase.py +0 -0
  529. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/distance.py +0 -0
  530. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/lancedb/__init__.py +0 -0
  531. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/lancedb/lance_db.py +0 -0
  532. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/langchaindb/__init__.py +0 -0
  533. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  534. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/lightrag/__init__.py +0 -0
  535. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/lightrag/lightrag.py +0 -0
  536. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/llamaindex/__init__.py +0 -0
  537. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  538. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/milvus/__init__.py +0 -0
  539. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/milvus/milvus.py +0 -0
  540. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/mongodb/__init__.py +0 -0
  541. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/mongodb/mongodb.py +0 -0
  542. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/pgvector/__init__.py +0 -0
  543. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/pgvector/index.py +0 -0
  544. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/pgvector/pgvector.py +0 -0
  545. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/pineconedb/__init__.py +0 -0
  546. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  547. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/qdrant/__init__.py +0 -0
  548. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/qdrant/qdrant.py +0 -0
  549. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/search.py +0 -0
  550. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/singlestore/__init__.py +0 -0
  551. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/singlestore/index.py +0 -0
  552. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/singlestore/singlestore.py +0 -0
  553. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/surrealdb/__init__.py +0 -0
  554. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  555. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/upstashdb/__init__.py +0 -0
  556. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  557. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/weaviate/__init__.py +0 -0
  558. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/weaviate/index.py +0 -0
  559. {agno-2.2.3 → agno-2.2.4}/agno/vectordb/weaviate/weaviate.py +0 -0
  560. {agno-2.2.3 → agno-2.2.4}/agno/workflow/__init__.py +0 -0
  561. {agno-2.2.3 → agno-2.2.4}/agno/workflow/condition.py +0 -0
  562. {agno-2.2.3 → agno-2.2.4}/agno/workflow/loop.py +0 -0
  563. {agno-2.2.3 → agno-2.2.4}/agno/workflow/parallel.py +0 -0
  564. {agno-2.2.3 → agno-2.2.4}/agno/workflow/router.py +0 -0
  565. {agno-2.2.3 → agno-2.2.4}/agno/workflow/step.py +0 -0
  566. {agno-2.2.3 → agno-2.2.4}/agno/workflow/steps.py +0 -0
  567. {agno-2.2.3 → agno-2.2.4}/agno/workflow/types.py +0 -0
  568. {agno-2.2.3 → agno-2.2.4}/agno/workflow/workflow.py +0 -0
  569. {agno-2.2.3 → agno-2.2.4}/agno.egg-info/SOURCES.txt +0 -0
  570. {agno-2.2.3 → agno-2.2.4}/agno.egg-info/dependency_links.txt +0 -0
  571. {agno-2.2.3 → agno-2.2.4}/agno.egg-info/requires.txt +0 -0
  572. {agno-2.2.3 → agno-2.2.4}/agno.egg-info/top_level.txt +0 -0
  573. {agno-2.2.3 → agno-2.2.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.2.3
3
+ Version: 2.2.4
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
@@ -220,7 +220,9 @@ class Agent:
220
220
  # add_history_to_context=true adds messages from the chat history to the messages list sent to the Model.
221
221
  add_history_to_context: bool = False
222
222
  # Number of historical runs to include in the messages
223
- num_history_runs: int = 3
223
+ num_history_runs: Optional[int] = None
224
+ # Number of historical messages to include in the messages list sent to the Model.
225
+ num_history_messages: Optional[int] = None
224
226
  # Maximum number of tool calls to include from history (None = no limit)
225
227
  max_tool_calls_from_history: Optional[int] = None
226
228
 
@@ -438,7 +440,8 @@ class Agent:
438
440
  add_session_summary_to_context: Optional[bool] = None,
439
441
  session_summary_manager: Optional[SessionSummaryManager] = None,
440
442
  add_history_to_context: bool = False,
441
- num_history_runs: int = 3,
443
+ num_history_runs: Optional[int] = None,
444
+ num_history_messages: Optional[int] = None,
442
445
  max_tool_calls_from_history: Optional[int] = None,
443
446
  store_media: bool = True,
444
447
  store_tool_messages: bool = True,
@@ -541,6 +544,15 @@ class Agent:
541
544
 
542
545
  self.add_history_to_context = add_history_to_context
543
546
  self.num_history_runs = num_history_runs
547
+ self.num_history_messages = num_history_messages
548
+ if self.num_history_messages is not None and self.num_history_runs is not None:
549
+ log_warning(
550
+ "num_history_messages and num_history_runs cannot be set at the same time. Using num_history_runs."
551
+ )
552
+ self.num_history_messages = None
553
+ if self.num_history_messages is None and self.num_history_runs is None:
554
+ self.num_history_runs = 3
555
+
544
556
  self.max_tool_calls_from_history = max_tool_calls_from_history
545
557
 
546
558
  self.store_media = store_media
@@ -5133,7 +5145,7 @@ class Agent:
5133
5145
  run_messages.user_message.get_content_string() if run_messages.user_message is not None else None
5134
5146
  )
5135
5147
  if user_message_str is not None and user_message_str.strip() != "" and self.memory_manager is not None:
5136
- log_debug("Creating user memories.")
5148
+ log_debug("Managing user memories")
5137
5149
  self.memory_manager.create_user_memories( # type: ignore
5138
5150
  message=user_message_str,
5139
5151
  user_id=user_id,
@@ -5174,7 +5186,7 @@ class Agent:
5174
5186
  run_messages.user_message.get_content_string() if run_messages.user_message is not None else None
5175
5187
  )
5176
5188
  if user_message_str is not None and user_message_str.strip() != "" and self.memory_manager is not None:
5177
- log_debug("Creating user memories.")
5189
+ log_debug("Managing user memories")
5178
5190
  await self.memory_manager.acreate_user_memories( # type: ignore
5179
5191
  message=user_message_str,
5180
5192
  user_id=user_id,
@@ -7461,6 +7473,7 @@ class Agent:
7461
7473
 
7462
7474
  history: List[Message] = session.get_messages_from_last_n_runs(
7463
7475
  last_n=self.num_history_runs,
7476
+ last_n_messages=self.num_history_messages,
7464
7477
  skip_role=skip_role,
7465
7478
  agent_id=self.id if self.team_id is not None else None,
7466
7479
  )
@@ -7658,9 +7671,17 @@ class Agent:
7658
7671
  if add_history_to_context:
7659
7672
  from copy import deepcopy
7660
7673
 
7674
+ # Only skip messages from history when system_message_role is NOT a standard conversation role.
7675
+ # Standard conversation roles ("user", "assistant", "tool") should never be filtered
7676
+ # to preserve conversation continuity.
7677
+ skip_role = (
7678
+ self.system_message_role if self.system_message_role not in ["user", "assistant", "tool"] else None
7679
+ )
7680
+
7661
7681
  history: List[Message] = session.get_messages_from_last_n_runs(
7662
7682
  last_n=self.num_history_runs,
7663
- skip_role=self.system_message_role,
7683
+ last_n_messages=self.num_history_messages,
7684
+ skip_role=skip_role,
7664
7685
  agent_id=self.id if self.team_id is not None else None,
7665
7686
  )
7666
7687
 
@@ -361,7 +361,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
361
361
  token_metrics[field] += session_metrics.get(field, 0)
362
362
  model_metrics = []
363
363
  for model, count in model_counts.items():
364
- model_id, model_provider = model.split(":")
364
+ model_id, model_provider = model.rsplit(":", 1)
365
365
  model_metrics.append({"model_id": model_id, "model_provider": model_provider, "count": count})
366
366
  metrics["users_count"] = len(all_user_ids)
367
367
  current_time = int(time.time())
@@ -224,7 +224,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
224
224
 
225
225
  model_metrics = []
226
226
  for model, count in model_counts.items():
227
- model_id, model_provider = model.split(":")
227
+ model_id, model_provider = model.rsplit(":", 1)
228
228
  model_metrics.append({"model_id": model_id, "model_provider": model_provider, "count": count})
229
229
 
230
230
  metrics["users_count"] = len(all_user_ids)
@@ -99,7 +99,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
99
99
 
100
100
  model_metrics = []
101
101
  for model, count in model_counts.items():
102
- model_id, model_provider = model.split(":")
102
+ model_id, model_provider = model.rsplit(":", 1)
103
103
  model_metrics.append({"model_id": model_id, "model_provider": model_provider, "count": count})
104
104
 
105
105
  metrics["users_count"] = len(all_user_ids)
@@ -99,7 +99,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
99
99
 
100
100
  model_metrics = []
101
101
  for model, count in model_counts.items():
102
- model_id, model_provider = model.split(":")
102
+ model_id, model_provider = model.rsplit(":", 1)
103
103
  model_metrics.append({"model_id": model_id, "model_provider": model_provider, "count": count})
104
104
 
105
105
  metrics["users_count"] = len(all_user_ids)
@@ -99,7 +99,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
99
99
 
100
100
  model_metrics = []
101
101
  for model, count in model_counts.items():
102
- model_id, model_provider = model.split(":")
102
+ model_id, model_provider = model.rsplit(":", 1)
103
103
  model_metrics.append({"model_id": model_id, "model_provider": model_provider, "count": count})
104
104
 
105
105
  metrics["users_count"] = len(all_user_ids)
@@ -1089,7 +1089,7 @@ class AsyncMongoDb(AsyncBaseDb):
1089
1089
  if limit is not None:
1090
1090
  if page is not None:
1091
1091
  pipeline.append({"$skip": (page - 1) * limit}) # type: ignore
1092
- pipeline.append({"$limit": limit}) # type: ignore
1092
+ pipeline.append({"$limit": limit}) # type: ignore
1093
1093
 
1094
1094
  results = await collection.aggregate(pipeline).to_list(length=None)
1095
1095
 
@@ -117,7 +117,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
117
117
 
118
118
  model_metrics = []
119
119
  for model, count in model_counts.items():
120
- model_id, model_provider = model.split(":")
120
+ model_id, model_provider = model.rsplit(":", 1)
121
121
  model_metrics.append({"model_id": model_id, "model_provider": model_provider, "count": count})
122
122
 
123
123
  metrics["users_count"] = len(all_user_ids)
@@ -226,7 +226,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
226
226
 
227
227
  model_metrics = []
228
228
  for model, count in model_counts.items():
229
- model_id, model_provider = model.split(":")
229
+ model_id, model_provider = model.rsplit(":", 1)
230
230
  model_metrics.append({"model_id": model_id, "model_provider": model_provider, "count": count})
231
231
 
232
232
  metrics["users_count"] = len(all_user_ids)
@@ -37,7 +37,7 @@ except ImportError:
37
37
  class AsyncPostgresDb(AsyncBaseDb):
38
38
  def __init__(
39
39
  self,
40
- db_id: Optional[str] = None,
40
+ id: Optional[str] = None,
41
41
  db_url: Optional[str] = None,
42
42
  db_engine: Optional[AsyncEngine] = None,
43
43
  db_schema: Optional[str] = None,
@@ -47,6 +47,7 @@ class AsyncPostgresDb(AsyncBaseDb):
47
47
  eval_table: Optional[str] = None,
48
48
  knowledge_table: Optional[str] = None,
49
49
  culture_table: Optional[str] = None,
50
+ db_id: Optional[str] = None, # Deprecated, use id instead.
50
51
  ):
51
52
  """
52
53
  Async interface for interacting with a PostgreSQL database.
@@ -57,7 +58,7 @@ class AsyncPostgresDb(AsyncBaseDb):
57
58
  3. Raise an error if neither is provided
58
59
 
59
60
  Args:
60
- db_id (Optional[str]): The ID of the database.
61
+ id (Optional[str]): The ID of the database.
61
62
  db_url (Optional[str]): The database URL to connect to.
62
63
  db_engine (Optional[AsyncEngine]): The SQLAlchemy async database engine to use.
63
64
  db_schema (Optional[str]): The database schema to use.
@@ -67,13 +68,17 @@ class AsyncPostgresDb(AsyncBaseDb):
67
68
  eval_table (Optional[str]): Name of the table to store evaluation runs data.
68
69
  knowledge_table (Optional[str]): Name of the table to store knowledge content.
69
70
  culture_table (Optional[str]): Name of the table to store cultural knowledge.
71
+ db_id: Deprecated, use id instead.
70
72
 
71
73
  Raises:
72
74
  ValueError: If neither db_url nor db_engine is provided.
73
75
  ValueError: If none of the tables are provided.
74
76
  """
77
+ if db_id is not None:
78
+ log_warning("db_id is deprecated and will be removed in a future version, use id instead.")
79
+
75
80
  super().__init__(
76
- id=db_id,
81
+ id=id or db_id,
77
82
  session_table=session_table,
78
83
  memory_table=memory_table,
79
84
  metrics_table=metrics_table,
@@ -313,7 +313,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
313
313
 
314
314
  model_metrics = []
315
315
  for model, count in model_counts.items():
316
- model_id, model_provider = model.split(":")
316
+ model_id, model_provider = model.rsplit(":", 1)
317
317
  model_metrics.append({"model_id": model_id, "model_provider": model_provider, "count": count})
318
318
 
319
319
  metrics["users_count"] = len(all_user_ids)
@@ -221,7 +221,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
221
221
 
222
222
  model_metrics = []
223
223
  for model, count in model_counts.items():
224
- model_id, model_provider = model.split(":")
224
+ model_id, model_provider = model.rsplit(":", 1)
225
225
  model_metrics.append({"model_id": model_id, "model_provider": model_provider, "count": count})
226
226
 
227
227
  metrics["users_count"] = len(all_user_ids)
@@ -255,7 +255,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
255
255
 
256
256
  model_metrics = []
257
257
  for model, count in model_counts.items():
258
- model_id, model_provider = model.split(":")
258
+ model_id, model_provider = model.rsplit(":", 1)
259
259
  model_metrics.append({"model_id": model_id, "model_provider": model_provider, "count": count})
260
260
 
261
261
  metrics["users_count"] = len(all_user_ids)
@@ -298,7 +298,7 @@ def calculate_date_metrics(date_to_process: date, sessions_data: dict) -> dict:
298
298
 
299
299
  model_metrics = []
300
300
  for model, count in model_counts.items():
301
- model_id, model_provider = model.split(":")
301
+ model_id, model_provider = model.rsplit(":", 1)
302
302
  model_metrics.append({"model_id": model_id, "model_provider": model_provider, "count": count})
303
303
 
304
304
  metrics["users_count"] = len(all_user_ids)
@@ -85,6 +85,10 @@ class OllamaEmbedder(Embedder):
85
85
  if self.options is not None:
86
86
  kwargs["options"] = self.options
87
87
 
88
+ # Add dimensions parameter for models that support it
89
+ if self.dimensions is not None:
90
+ kwargs["dimensions"] = self.dimensions
91
+
88
92
  response = self.client.embed(input=text, model=self.id, **kwargs)
89
93
  if response and "embeddings" in response:
90
94
  embeddings = response["embeddings"]
@@ -117,6 +121,10 @@ class OllamaEmbedder(Embedder):
117
121
  if self.options is not None:
118
122
  kwargs["options"] = self.options
119
123
 
124
+ # Add dimensions parameter for models that support it
125
+ if self.dimensions is not None:
126
+ kwargs["dimensions"] = self.dimensions
127
+
120
128
  response = await self.aclient.embed(input=text, model=self.id, **kwargs)
121
129
  if response and "embeddings" in response:
122
130
  embeddings = response["embeddings"]
@@ -843,7 +843,7 @@ class MemoryManager:
843
843
  team_id=team_id,
844
844
  enable_add_memory=add_memories,
845
845
  enable_update_memory=update_memories,
846
- enable_delete_memory=False,
846
+ enable_delete_memory=True,
847
847
  enable_clear_memory=False,
848
848
  ),
849
849
  )
@@ -854,7 +854,7 @@ class MemoryManager:
854
854
  existing_memories=existing_memories,
855
855
  enable_update_memory=update_memories,
856
856
  enable_add_memory=add_memories,
857
- enable_delete_memory=False,
857
+ enable_delete_memory=True,
858
858
  enable_clear_memory=False,
859
859
  ),
860
860
  *messages,
@@ -906,7 +906,7 @@ class MemoryManager:
906
906
  team_id=team_id,
907
907
  enable_add_memory=add_memories,
908
908
  enable_update_memory=update_memories,
909
- enable_delete_memory=False,
909
+ enable_delete_memory=True,
910
910
  enable_clear_memory=False,
911
911
  ),
912
912
  )
@@ -920,7 +920,7 @@ class MemoryManager:
920
920
  team_id=team_id,
921
921
  enable_add_memory=add_memories,
922
922
  enable_update_memory=update_memories,
923
- enable_delete_memory=False,
923
+ enable_delete_memory=True,
924
924
  enable_clear_memory=False,
925
925
  ),
926
926
  )
@@ -931,7 +931,7 @@ class MemoryManager:
931
931
  existing_memories=existing_memories,
932
932
  enable_update_memory=update_memories,
933
933
  enable_add_memory=add_memories,
934
- enable_delete_memory=False,
934
+ enable_delete_memory=True,
935
935
  enable_clear_memory=False,
936
936
  ),
937
937
  *messages,
@@ -187,54 +187,50 @@ class AgentOS:
187
187
  self.mcp_tools: List[Any] = []
188
188
  self._mcp_app: Optional[Any] = None
189
189
 
190
- if self.agents:
191
- for agent in self.agents:
192
- # Track all MCP tools to later handle their connection
193
- if agent.tools:
194
- for tool in agent.tools:
195
- # Checking if the tool is a MCPTools or MultiMCPTools instance
196
- type_name = type(tool).__name__
197
- if type_name in ("MCPTools", "MultiMCPTools"):
198
- if tool not in self.mcp_tools:
199
- self.mcp_tools.append(tool)
200
-
201
- agent.initialize_agent()
190
+ self._initialize_agents()
191
+ self._initialize_teams()
192
+ self._initialize_workflows()
202
193
 
203
- # Required for the built-in routes to work
204
- agent.store_events = True
205
-
206
- if self.teams:
207
- for team in self.teams:
208
- # Track all MCP tools recursively
209
- collect_mcp_tools_from_team(team, self.mcp_tools)
194
+ if self.telemetry:
195
+ from agno.api.os import OSLaunch, log_os_telemetry
210
196
 
211
- team.initialize_team()
197
+ log_os_telemetry(launch=OSLaunch(os_id=self.id, data=self._get_telemetry_data()))
212
198
 
213
- for member in team.members:
214
- if isinstance(member, Agent):
215
- member.team_id = None
216
- member.initialize_agent()
217
- elif isinstance(member, Team):
218
- member.initialize_team()
199
+ def _add_agent_os_to_lifespan_function(self, lifespan):
200
+ """
201
+ Inspect a lifespan function and wrap it to pass agent_os if it accepts it.
219
202
 
220
- # Required for the built-in routes to work
221
- team.store_events = True
203
+ Returns:
204
+ A wrapped lifespan that passes agent_os if the lifespan function expects it.
205
+ """
206
+ # Getting the actual function inside the lifespan
207
+ lifespan_function = lifespan
208
+ if hasattr(lifespan, "__wrapped__"):
209
+ lifespan_function = lifespan.__wrapped__
222
210
 
223
- if self.workflows:
224
- for workflow in self.workflows:
225
- # Track MCP tools recursively in workflow members
226
- collect_mcp_tools_from_workflow(workflow, self.mcp_tools)
211
+ try:
212
+ from inspect import signature
227
213
 
228
- if not workflow.id:
229
- workflow.id = generate_id_from_name(workflow.name)
214
+ # Inspecting the lifespan function signature to find its parameters
215
+ sig = signature(lifespan_function)
216
+ params = list(sig.parameters.keys())
230
217
 
231
- # Required for the built-in routes to work
232
- workflow.store_events = True
218
+ # If the lifespan function expects the 'agent_os' parameter, add it
219
+ if "agent_os" in params:
220
+ return partial(lifespan, agent_os=self)
221
+ else:
222
+ return lifespan
233
223
 
234
- if self.telemetry:
235
- from agno.api.os import OSLaunch, log_os_telemetry
224
+ except (ValueError, TypeError):
225
+ return lifespan
236
226
 
237
- log_os_telemetry(launch=OSLaunch(os_id=self.id, data=self._get_telemetry_data()))
227
+ def resync(self) -> None:
228
+ """Resync the AgentOS to discover, initialize and configure: agents, teams, workflows, databases and knowledge bases."""
229
+ self._initialize_agents()
230
+ self._initialize_teams()
231
+ self._initialize_workflows()
232
+ self._auto_discover_databases()
233
+ self._auto_discover_knowledge_instances()
238
234
 
239
235
  def _make_app(self, lifespan: Optional[Any] = None) -> FastAPI:
240
236
  # Adjust the FastAPI app lifespan to handle MCP connections if relevant
@@ -265,6 +261,63 @@ class AgentOS:
265
261
  lifespan=app_lifespan,
266
262
  )
267
263
 
264
+ def _initialize_agents(self) -> None:
265
+ """Initialize and configure all agents for AgentOS usage."""
266
+ if not self.agents:
267
+ return
268
+
269
+ for agent in self.agents:
270
+ # Track all MCP tools to later handle their connection
271
+ if agent.tools:
272
+ for tool in agent.tools:
273
+ # Checking if the tool is a MCPTools or MultiMCPTools instance
274
+ type_name = type(tool).__name__
275
+ if type_name in ("MCPTools", "MultiMCPTools"):
276
+ if tool not in self.mcp_tools:
277
+ self.mcp_tools.append(tool)
278
+
279
+ agent.initialize_agent()
280
+
281
+ # Required for the built-in routes to work
282
+ agent.store_events = True
283
+
284
+ def _initialize_teams(self) -> None:
285
+ """Initialize and configure all teams for AgentOS usage."""
286
+ if not self.teams:
287
+ return
288
+
289
+ for team in self.teams:
290
+ # Track all MCP tools recursively
291
+ collect_mcp_tools_from_team(team, self.mcp_tools)
292
+
293
+ team.initialize_team()
294
+
295
+ for member in team.members:
296
+ if isinstance(member, Agent):
297
+ member.team_id = None
298
+ member.initialize_agent()
299
+ elif isinstance(member, Team):
300
+ member.initialize_team()
301
+
302
+ # Required for the built-in routes to work
303
+ team.store_events = True
304
+
305
+ def _initialize_workflows(self) -> None:
306
+ """Initialize and configure all workflows for AgentOS usage."""
307
+ if not self.workflows:
308
+ return
309
+
310
+ if self.workflows:
311
+ for workflow in self.workflows:
312
+ # Track MCP tools recursively in workflow members
313
+ collect_mcp_tools_from_workflow(workflow, self.mcp_tools)
314
+
315
+ if not workflow.id:
316
+ workflow.id = generate_id_from_name(workflow.name)
317
+
318
+ # Required for the built-in routes to work
319
+ workflow.store_events = True
320
+
268
321
  def get_app(self) -> FastAPI:
269
322
  if self.base_app:
270
323
  fastapi_app = self.base_app
@@ -288,7 +341,9 @@ class AgentOS:
288
341
  lifespans.append(self._mcp_app.lifespan)
289
342
 
290
343
  if self.lifespan:
291
- lifespans.append(self.lifespan)
344
+ # Wrap the user lifespan with agent_os parameter
345
+ wrapped_lifespan = self._add_agent_os_to_lifespan_function(self.lifespan)
346
+ lifespans.append(wrapped_lifespan)
292
347
 
293
348
  # Combine lifespans and set them in the app
294
349
  if lifespans:
@@ -304,11 +359,14 @@ class AgentOS:
304
359
 
305
360
  final_lifespan = self._mcp_app.lifespan # type: ignore
306
361
  if self.lifespan is not None:
362
+ # Wrap the user lifespan with agent_os parameter
363
+ wrapped_lifespan = self._add_agent_os_to_lifespan_function(self.lifespan)
364
+
307
365
  # Combine both lifespans
308
366
  @asynccontextmanager
309
367
  async def combined_lifespan(app: FastAPI):
310
368
  # Run both lifespans
311
- async with self.lifespan(app): # type: ignore
369
+ async with wrapped_lifespan(app): # type: ignore
312
370
  async with self._mcp_app.lifespan(app): # type: ignore
313
371
  yield
314
372
 
@@ -316,7 +374,12 @@ class AgentOS:
316
374
 
317
375
  fastapi_app = self._make_app(lifespan=final_lifespan)
318
376
  else:
319
- fastapi_app = self._make_app(lifespan=self.lifespan)
377
+ # Wrap the user lifespan with agent_os parameter
378
+ wrapped_user_lifespan = None
379
+ if self.lifespan is not None:
380
+ wrapped_user_lifespan = self._add_agent_os_to_lifespan_function(self.lifespan)
381
+
382
+ fastapi_app = self._make_app(lifespan=wrapped_user_lifespan)
320
383
 
321
384
  # Add routes
322
385
  self._add_router(fastapi_app, get_base_router(self, settings=self.settings))
@@ -70,12 +70,39 @@ class RunInput:
70
70
  result["input_content"] = self.input_content.model_dump(exclude_none=True)
71
71
  elif isinstance(self.input_content, Message):
72
72
  result["input_content"] = self.input_content.to_dict()
73
+
74
+ # Handle input_content provided as a list of Message objects
73
75
  elif (
74
76
  isinstance(self.input_content, list)
75
77
  and self.input_content
76
78
  and isinstance(self.input_content[0], Message)
77
79
  ):
78
80
  result["input_content"] = [m.to_dict() for m in self.input_content]
81
+
82
+ # Handle input_content provided as a list of dicts
83
+ elif (
84
+ isinstance(self.input_content, list) and self.input_content and isinstance(self.input_content[0], dict)
85
+ ):
86
+ for content in self.input_content:
87
+ # Handle media input
88
+ if isinstance(content, dict):
89
+ if content.get("images"):
90
+ content["images"] = [
91
+ img.to_dict() if isinstance(img, Image) else img for img in content["images"]
92
+ ]
93
+ if content.get("videos"):
94
+ content["videos"] = [
95
+ vid.to_dict() if isinstance(vid, Video) else vid for vid in content["videos"]
96
+ ]
97
+ if content.get("audios"):
98
+ content["audios"] = [
99
+ aud.to_dict() if isinstance(aud, Audio) else aud for aud in content["audios"]
100
+ ]
101
+ if content.get("files"):
102
+ content["files"] = [
103
+ file.to_dict() if isinstance(file, File) else file for file in content["files"]
104
+ ]
105
+ result["input_content"] = self.input_content
79
106
  else:
80
107
  result["input_content"] = self.input_content
81
108
 
@@ -66,12 +66,39 @@ class TeamRunInput:
66
66
  result["input_content"] = self.input_content.model_dump(exclude_none=True)
67
67
  elif isinstance(self.input_content, Message):
68
68
  result["input_content"] = self.input_content.to_dict()
69
+
70
+ # Handle input_content provided as a list of Message objects
69
71
  elif (
70
72
  isinstance(self.input_content, list)
71
73
  and self.input_content
72
74
  and isinstance(self.input_content[0], Message)
73
75
  ):
74
76
  result["input_content"] = [m.to_dict() for m in self.input_content]
77
+
78
+ # Handle input_content provided as a list of dicts
79
+ elif (
80
+ isinstance(self.input_content, list) and self.input_content and isinstance(self.input_content[0], dict)
81
+ ):
82
+ for content in self.input_content:
83
+ # Handle media input
84
+ if isinstance(content, dict):
85
+ if content.get("images"):
86
+ content["images"] = [
87
+ img.to_dict() if isinstance(img, Image) else img for img in content["images"]
88
+ ]
89
+ if content.get("videos"):
90
+ content["videos"] = [
91
+ vid.to_dict() if isinstance(vid, Video) else vid for vid in content["videos"]
92
+ ]
93
+ if content.get("audios"):
94
+ content["audios"] = [
95
+ aud.to_dict() if isinstance(aud, Audio) else aud for aud in content["audios"]
96
+ ]
97
+ if content.get("files"):
98
+ content["files"] = [
99
+ file.to_dict() if isinstance(file, File) else file for file in content["files"]
100
+ ]
101
+ result["input_content"] = self.input_content
75
102
  else:
76
103
  result["input_content"] = self.input_content
77
104