agno 2.0.9__tar.gz → 2.0.11__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 (534) hide show
  1. {agno-2.0.9 → agno-2.0.11}/PKG-INFO +1 -1
  2. {agno-2.0.9 → agno-2.0.11}/agno/agent/agent.py +13 -6
  3. {agno-2.0.9 → agno-2.0.11}/agno/models/aws/claude.py +1 -1
  4. {agno-2.0.9 → agno-2.0.11}/agno/models/litellm/chat.py +17 -0
  5. {agno-2.0.9 → agno-2.0.11}/agno/os/app.py +69 -22
  6. {agno-2.0.9 → agno-2.0.11}/agno/os/utils.py +98 -0
  7. {agno-2.0.9 → agno-2.0.11}/agno/team/team.py +10 -5
  8. {agno-2.0.9 → agno-2.0.11}/agno/utils/models/claude.py +2 -2
  9. agno-2.0.11/agno/vectordb/llamaindex/__init__.py +3 -0
  10. {agno-2.0.9 → agno-2.0.11}/agno/workflow/workflow.py +11 -6
  11. {agno-2.0.9 → agno-2.0.11}/agno.egg-info/PKG-INFO +1 -1
  12. {agno-2.0.9 → agno-2.0.11}/agno.egg-info/SOURCES.txt +0 -1
  13. {agno-2.0.9 → agno-2.0.11}/pyproject.toml +1 -1
  14. agno-2.0.9/agno/utils/models/aws_claude.py +0 -170
  15. agno-2.0.9/agno/vectordb/llamaindex/__init__.py +0 -0
  16. {agno-2.0.9 → agno-2.0.11}/LICENSE +0 -0
  17. {agno-2.0.9 → agno-2.0.11}/README.md +0 -0
  18. {agno-2.0.9 → agno-2.0.11}/agno/__init__.py +0 -0
  19. {agno-2.0.9 → agno-2.0.11}/agno/agent/__init__.py +0 -0
  20. {agno-2.0.9 → agno-2.0.11}/agno/api/__init__.py +0 -0
  21. {agno-2.0.9 → agno-2.0.11}/agno/api/agent.py +0 -0
  22. {agno-2.0.9 → agno-2.0.11}/agno/api/api.py +0 -0
  23. {agno-2.0.9 → agno-2.0.11}/agno/api/evals.py +0 -0
  24. {agno-2.0.9 → agno-2.0.11}/agno/api/os.py +0 -0
  25. {agno-2.0.9 → agno-2.0.11}/agno/api/routes.py +0 -0
  26. {agno-2.0.9 → agno-2.0.11}/agno/api/schemas/__init__.py +0 -0
  27. {agno-2.0.9 → agno-2.0.11}/agno/api/schemas/agent.py +0 -0
  28. {agno-2.0.9 → agno-2.0.11}/agno/api/schemas/evals.py +0 -0
  29. {agno-2.0.9 → agno-2.0.11}/agno/api/schemas/os.py +0 -0
  30. {agno-2.0.9 → agno-2.0.11}/agno/api/schemas/response.py +0 -0
  31. {agno-2.0.9 → agno-2.0.11}/agno/api/schemas/team.py +0 -0
  32. {agno-2.0.9 → agno-2.0.11}/agno/api/schemas/utils.py +0 -0
  33. {agno-2.0.9 → agno-2.0.11}/agno/api/schemas/workflows.py +0 -0
  34. {agno-2.0.9 → agno-2.0.11}/agno/api/settings.py +0 -0
  35. {agno-2.0.9 → agno-2.0.11}/agno/api/team.py +0 -0
  36. {agno-2.0.9 → agno-2.0.11}/agno/api/workflow.py +0 -0
  37. {agno-2.0.9 → agno-2.0.11}/agno/cloud/aws/base.py +0 -0
  38. {agno-2.0.9 → agno-2.0.11}/agno/cloud/aws/s3/__init__.py +0 -0
  39. {agno-2.0.9 → agno-2.0.11}/agno/cloud/aws/s3/api_client.py +0 -0
  40. {agno-2.0.9 → agno-2.0.11}/agno/cloud/aws/s3/bucket.py +0 -0
  41. {agno-2.0.9 → agno-2.0.11}/agno/cloud/aws/s3/object.py +0 -0
  42. {agno-2.0.9 → agno-2.0.11}/agno/db/__init__.py +0 -0
  43. {agno-2.0.9 → agno-2.0.11}/agno/db/base.py +0 -0
  44. {agno-2.0.9 → agno-2.0.11}/agno/db/dynamo/__init__.py +0 -0
  45. {agno-2.0.9 → agno-2.0.11}/agno/db/dynamo/dynamo.py +0 -0
  46. {agno-2.0.9 → agno-2.0.11}/agno/db/dynamo/schemas.py +0 -0
  47. {agno-2.0.9 → agno-2.0.11}/agno/db/dynamo/utils.py +0 -0
  48. {agno-2.0.9 → agno-2.0.11}/agno/db/firestore/__init__.py +0 -0
  49. {agno-2.0.9 → agno-2.0.11}/agno/db/firestore/firestore.py +0 -0
  50. {agno-2.0.9 → agno-2.0.11}/agno/db/firestore/schemas.py +0 -0
  51. {agno-2.0.9 → agno-2.0.11}/agno/db/firestore/utils.py +0 -0
  52. {agno-2.0.9 → agno-2.0.11}/agno/db/gcs_json/__init__.py +0 -0
  53. {agno-2.0.9 → agno-2.0.11}/agno/db/gcs_json/gcs_json_db.py +0 -0
  54. {agno-2.0.9 → agno-2.0.11}/agno/db/gcs_json/utils.py +0 -0
  55. {agno-2.0.9 → agno-2.0.11}/agno/db/in_memory/__init__.py +0 -0
  56. {agno-2.0.9 → agno-2.0.11}/agno/db/in_memory/in_memory_db.py +0 -0
  57. {agno-2.0.9 → agno-2.0.11}/agno/db/in_memory/utils.py +0 -0
  58. {agno-2.0.9 → agno-2.0.11}/agno/db/json/__init__.py +0 -0
  59. {agno-2.0.9 → agno-2.0.11}/agno/db/json/json_db.py +0 -0
  60. {agno-2.0.9 → agno-2.0.11}/agno/db/json/utils.py +0 -0
  61. {agno-2.0.9 → agno-2.0.11}/agno/db/migrations/__init__.py +0 -0
  62. {agno-2.0.9 → agno-2.0.11}/agno/db/migrations/v1_to_v2.py +0 -0
  63. {agno-2.0.9 → agno-2.0.11}/agno/db/mongo/__init__.py +0 -0
  64. {agno-2.0.9 → agno-2.0.11}/agno/db/mongo/mongo.py +0 -0
  65. {agno-2.0.9 → agno-2.0.11}/agno/db/mongo/schemas.py +0 -0
  66. {agno-2.0.9 → agno-2.0.11}/agno/db/mongo/utils.py +0 -0
  67. {agno-2.0.9 → agno-2.0.11}/agno/db/mysql/__init__.py +0 -0
  68. {agno-2.0.9 → agno-2.0.11}/agno/db/mysql/mysql.py +0 -0
  69. {agno-2.0.9 → agno-2.0.11}/agno/db/mysql/schemas.py +0 -0
  70. {agno-2.0.9 → agno-2.0.11}/agno/db/mysql/utils.py +0 -0
  71. {agno-2.0.9 → agno-2.0.11}/agno/db/postgres/__init__.py +0 -0
  72. {agno-2.0.9 → agno-2.0.11}/agno/db/postgres/postgres.py +0 -0
  73. {agno-2.0.9 → agno-2.0.11}/agno/db/postgres/schemas.py +0 -0
  74. {agno-2.0.9 → agno-2.0.11}/agno/db/postgres/utils.py +0 -0
  75. {agno-2.0.9 → agno-2.0.11}/agno/db/redis/__init__.py +0 -0
  76. {agno-2.0.9 → agno-2.0.11}/agno/db/redis/redis.py +0 -0
  77. {agno-2.0.9 → agno-2.0.11}/agno/db/redis/schemas.py +0 -0
  78. {agno-2.0.9 → agno-2.0.11}/agno/db/redis/utils.py +0 -0
  79. {agno-2.0.9 → agno-2.0.11}/agno/db/schemas/__init__.py +0 -0
  80. {agno-2.0.9 → agno-2.0.11}/agno/db/schemas/evals.py +0 -0
  81. {agno-2.0.9 → agno-2.0.11}/agno/db/schemas/knowledge.py +0 -0
  82. {agno-2.0.9 → agno-2.0.11}/agno/db/schemas/memory.py +0 -0
  83. {agno-2.0.9 → agno-2.0.11}/agno/db/schemas/metrics.py +0 -0
  84. {agno-2.0.9 → agno-2.0.11}/agno/db/singlestore/__init__.py +0 -0
  85. {agno-2.0.9 → agno-2.0.11}/agno/db/singlestore/schemas.py +0 -0
  86. {agno-2.0.9 → agno-2.0.11}/agno/db/singlestore/singlestore.py +0 -0
  87. {agno-2.0.9 → agno-2.0.11}/agno/db/singlestore/utils.py +0 -0
  88. {agno-2.0.9 → agno-2.0.11}/agno/db/sqlite/__init__.py +0 -0
  89. {agno-2.0.9 → agno-2.0.11}/agno/db/sqlite/schemas.py +0 -0
  90. {agno-2.0.9 → agno-2.0.11}/agno/db/sqlite/sqlite.py +0 -0
  91. {agno-2.0.9 → agno-2.0.11}/agno/db/sqlite/utils.py +0 -0
  92. {agno-2.0.9 → agno-2.0.11}/agno/db/utils.py +0 -0
  93. {agno-2.0.9 → agno-2.0.11}/agno/debug.py +0 -0
  94. {agno-2.0.9 → agno-2.0.11}/agno/eval/__init__.py +0 -0
  95. {agno-2.0.9 → agno-2.0.11}/agno/eval/accuracy.py +0 -0
  96. {agno-2.0.9 → agno-2.0.11}/agno/eval/performance.py +0 -0
  97. {agno-2.0.9 → agno-2.0.11}/agno/eval/reliability.py +0 -0
  98. {agno-2.0.9 → agno-2.0.11}/agno/eval/utils.py +0 -0
  99. {agno-2.0.9 → agno-2.0.11}/agno/exceptions.py +0 -0
  100. {agno-2.0.9 → agno-2.0.11}/agno/integrations/__init__.py +0 -0
  101. {agno-2.0.9 → agno-2.0.11}/agno/integrations/discord/__init__.py +0 -0
  102. {agno-2.0.9 → agno-2.0.11}/agno/integrations/discord/client.py +0 -0
  103. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/__init__.py +0 -0
  104. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/chunking/__init__.py +0 -0
  105. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/chunking/agentic.py +0 -0
  106. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/chunking/document.py +0 -0
  107. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/chunking/fixed.py +0 -0
  108. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/chunking/markdown.py +0 -0
  109. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/chunking/recursive.py +0 -0
  110. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/chunking/row.py +0 -0
  111. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/chunking/semantic.py +0 -0
  112. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/chunking/strategy.py +0 -0
  113. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/content.py +0 -0
  114. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/document/__init__.py +0 -0
  115. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/document/base.py +0 -0
  116. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/__init__.py +0 -0
  117. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  118. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/azure_openai.py +0 -0
  119. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/base.py +0 -0
  120. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/cohere.py +0 -0
  121. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/fastembed.py +0 -0
  122. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/fireworks.py +0 -0
  123. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/google.py +0 -0
  124. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/huggingface.py +0 -0
  125. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/jina.py +0 -0
  126. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/langdb.py +0 -0
  127. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/mistral.py +0 -0
  128. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/nebius.py +0 -0
  129. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/ollama.py +0 -0
  130. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/openai.py +0 -0
  131. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  132. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/together.py +0 -0
  133. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/embedder/voyageai.py +0 -0
  134. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/knowledge.py +0 -0
  135. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/__init__.py +0 -0
  136. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/arxiv_reader.py +0 -0
  137. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/base.py +0 -0
  138. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/csv_reader.py +0 -0
  139. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/docx_reader.py +0 -0
  140. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  141. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/json_reader.py +0 -0
  142. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/markdown_reader.py +0 -0
  143. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/pdf_reader.py +0 -0
  144. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/reader_factory.py +0 -0
  145. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/s3_reader.py +0 -0
  146. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/text_reader.py +0 -0
  147. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/web_search_reader.py +0 -0
  148. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/website_reader.py +0 -0
  149. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  150. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reader/youtube_reader.py +0 -0
  151. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/remote_content/__init__.py +0 -0
  152. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/remote_content/remote_content.py +0 -0
  153. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reranker/__init__.py +0 -0
  154. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reranker/base.py +0 -0
  155. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reranker/cohere.py +0 -0
  156. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reranker/infinity.py +0 -0
  157. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  158. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/types.py +0 -0
  159. {agno-2.0.9 → agno-2.0.11}/agno/knowledge/utils.py +0 -0
  160. {agno-2.0.9 → agno-2.0.11}/agno/media.py +0 -0
  161. {agno-2.0.9 → agno-2.0.11}/agno/memory/__init__.py +0 -0
  162. {agno-2.0.9 → agno-2.0.11}/agno/memory/manager.py +0 -0
  163. {agno-2.0.9 → agno-2.0.11}/agno/models/__init__.py +0 -0
  164. {agno-2.0.9 → agno-2.0.11}/agno/models/aimlapi/__init__.py +0 -0
  165. {agno-2.0.9 → agno-2.0.11}/agno/models/aimlapi/aimlapi.py +0 -0
  166. {agno-2.0.9 → agno-2.0.11}/agno/models/anthropic/__init__.py +0 -0
  167. {agno-2.0.9 → agno-2.0.11}/agno/models/anthropic/claude.py +0 -0
  168. {agno-2.0.9 → agno-2.0.11}/agno/models/aws/__init__.py +0 -0
  169. {agno-2.0.9 → agno-2.0.11}/agno/models/aws/bedrock.py +0 -0
  170. {agno-2.0.9 → agno-2.0.11}/agno/models/azure/__init__.py +0 -0
  171. {agno-2.0.9 → agno-2.0.11}/agno/models/azure/ai_foundry.py +0 -0
  172. {agno-2.0.9 → agno-2.0.11}/agno/models/azure/openai_chat.py +0 -0
  173. {agno-2.0.9 → agno-2.0.11}/agno/models/base.py +0 -0
  174. {agno-2.0.9 → agno-2.0.11}/agno/models/cerebras/__init__.py +0 -0
  175. {agno-2.0.9 → agno-2.0.11}/agno/models/cerebras/cerebras.py +0 -0
  176. {agno-2.0.9 → agno-2.0.11}/agno/models/cerebras/cerebras_openai.py +0 -0
  177. {agno-2.0.9 → agno-2.0.11}/agno/models/cohere/__init__.py +0 -0
  178. {agno-2.0.9 → agno-2.0.11}/agno/models/cohere/chat.py +0 -0
  179. {agno-2.0.9 → agno-2.0.11}/agno/models/cometapi/__init__.py +0 -0
  180. {agno-2.0.9 → agno-2.0.11}/agno/models/cometapi/cometapi.py +0 -0
  181. {agno-2.0.9 → agno-2.0.11}/agno/models/dashscope/__init__.py +0 -0
  182. {agno-2.0.9 → agno-2.0.11}/agno/models/dashscope/dashscope.py +0 -0
  183. {agno-2.0.9 → agno-2.0.11}/agno/models/deepinfra/__init__.py +0 -0
  184. {agno-2.0.9 → agno-2.0.11}/agno/models/deepinfra/deepinfra.py +0 -0
  185. {agno-2.0.9 → agno-2.0.11}/agno/models/deepseek/__init__.py +0 -0
  186. {agno-2.0.9 → agno-2.0.11}/agno/models/deepseek/deepseek.py +0 -0
  187. {agno-2.0.9 → agno-2.0.11}/agno/models/defaults.py +0 -0
  188. {agno-2.0.9 → agno-2.0.11}/agno/models/fireworks/__init__.py +0 -0
  189. {agno-2.0.9 → agno-2.0.11}/agno/models/fireworks/fireworks.py +0 -0
  190. {agno-2.0.9 → agno-2.0.11}/agno/models/google/__init__.py +0 -0
  191. {agno-2.0.9 → agno-2.0.11}/agno/models/google/gemini.py +0 -0
  192. {agno-2.0.9 → agno-2.0.11}/agno/models/groq/__init__.py +0 -0
  193. {agno-2.0.9 → agno-2.0.11}/agno/models/groq/groq.py +0 -0
  194. {agno-2.0.9 → agno-2.0.11}/agno/models/huggingface/__init__.py +0 -0
  195. {agno-2.0.9 → agno-2.0.11}/agno/models/huggingface/huggingface.py +0 -0
  196. {agno-2.0.9 → agno-2.0.11}/agno/models/ibm/__init__.py +0 -0
  197. {agno-2.0.9 → agno-2.0.11}/agno/models/ibm/watsonx.py +0 -0
  198. {agno-2.0.9 → agno-2.0.11}/agno/models/internlm/__init__.py +0 -0
  199. {agno-2.0.9 → agno-2.0.11}/agno/models/internlm/internlm.py +0 -0
  200. {agno-2.0.9 → agno-2.0.11}/agno/models/langdb/__init__.py +0 -0
  201. {agno-2.0.9 → agno-2.0.11}/agno/models/langdb/langdb.py +0 -0
  202. {agno-2.0.9 → agno-2.0.11}/agno/models/litellm/__init__.py +0 -0
  203. {agno-2.0.9 → agno-2.0.11}/agno/models/litellm/litellm_openai.py +0 -0
  204. {agno-2.0.9 → agno-2.0.11}/agno/models/llama_cpp/__init__.py +0 -0
  205. {agno-2.0.9 → agno-2.0.11}/agno/models/llama_cpp/llama_cpp.py +0 -0
  206. {agno-2.0.9 → agno-2.0.11}/agno/models/lmstudio/__init__.py +0 -0
  207. {agno-2.0.9 → agno-2.0.11}/agno/models/lmstudio/lmstudio.py +0 -0
  208. {agno-2.0.9 → agno-2.0.11}/agno/models/message.py +0 -0
  209. {agno-2.0.9 → agno-2.0.11}/agno/models/meta/__init__.py +0 -0
  210. {agno-2.0.9 → agno-2.0.11}/agno/models/meta/llama.py +0 -0
  211. {agno-2.0.9 → agno-2.0.11}/agno/models/meta/llama_openai.py +0 -0
  212. {agno-2.0.9 → agno-2.0.11}/agno/models/metrics.py +0 -0
  213. {agno-2.0.9 → agno-2.0.11}/agno/models/mistral/__init__.py +0 -0
  214. {agno-2.0.9 → agno-2.0.11}/agno/models/mistral/mistral.py +0 -0
  215. {agno-2.0.9 → agno-2.0.11}/agno/models/nebius/__init__.py +0 -0
  216. {agno-2.0.9 → agno-2.0.11}/agno/models/nebius/nebius.py +0 -0
  217. {agno-2.0.9 → agno-2.0.11}/agno/models/nexus/__init__.py +0 -0
  218. {agno-2.0.9 → agno-2.0.11}/agno/models/nexus/nexus.py +0 -0
  219. {agno-2.0.9 → agno-2.0.11}/agno/models/nvidia/__init__.py +0 -0
  220. {agno-2.0.9 → agno-2.0.11}/agno/models/nvidia/nvidia.py +0 -0
  221. {agno-2.0.9 → agno-2.0.11}/agno/models/ollama/__init__.py +0 -0
  222. {agno-2.0.9 → agno-2.0.11}/agno/models/ollama/chat.py +0 -0
  223. {agno-2.0.9 → agno-2.0.11}/agno/models/openai/__init__.py +0 -0
  224. {agno-2.0.9 → agno-2.0.11}/agno/models/openai/chat.py +0 -0
  225. {agno-2.0.9 → agno-2.0.11}/agno/models/openai/like.py +0 -0
  226. {agno-2.0.9 → agno-2.0.11}/agno/models/openai/responses.py +0 -0
  227. {agno-2.0.9 → agno-2.0.11}/agno/models/openrouter/__init__.py +0 -0
  228. {agno-2.0.9 → agno-2.0.11}/agno/models/openrouter/openrouter.py +0 -0
  229. {agno-2.0.9 → agno-2.0.11}/agno/models/perplexity/__init__.py +0 -0
  230. {agno-2.0.9 → agno-2.0.11}/agno/models/perplexity/perplexity.py +0 -0
  231. {agno-2.0.9 → agno-2.0.11}/agno/models/portkey/__init__.py +0 -0
  232. {agno-2.0.9 → agno-2.0.11}/agno/models/portkey/portkey.py +0 -0
  233. {agno-2.0.9 → agno-2.0.11}/agno/models/response.py +0 -0
  234. {agno-2.0.9 → agno-2.0.11}/agno/models/sambanova/__init__.py +0 -0
  235. {agno-2.0.9 → agno-2.0.11}/agno/models/sambanova/sambanova.py +0 -0
  236. {agno-2.0.9 → agno-2.0.11}/agno/models/siliconflow/__init__.py +0 -0
  237. {agno-2.0.9 → agno-2.0.11}/agno/models/siliconflow/siliconflow.py +0 -0
  238. {agno-2.0.9 → agno-2.0.11}/agno/models/together/__init__.py +0 -0
  239. {agno-2.0.9 → agno-2.0.11}/agno/models/together/together.py +0 -0
  240. {agno-2.0.9 → agno-2.0.11}/agno/models/utils.py +0 -0
  241. {agno-2.0.9 → agno-2.0.11}/agno/models/vercel/__init__.py +0 -0
  242. {agno-2.0.9 → agno-2.0.11}/agno/models/vercel/v0.py +0 -0
  243. {agno-2.0.9 → agno-2.0.11}/agno/models/vllm/__init__.py +0 -0
  244. {agno-2.0.9 → agno-2.0.11}/agno/models/vllm/vllm.py +0 -0
  245. {agno-2.0.9 → agno-2.0.11}/agno/models/xai/__init__.py +0 -0
  246. {agno-2.0.9 → agno-2.0.11}/agno/models/xai/xai.py +0 -0
  247. {agno-2.0.9 → agno-2.0.11}/agno/os/__init__.py +0 -0
  248. {agno-2.0.9 → agno-2.0.11}/agno/os/auth.py +0 -0
  249. {agno-2.0.9 → agno-2.0.11}/agno/os/config.py +0 -0
  250. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/__init__.py +0 -0
  251. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/agui/__init__.py +0 -0
  252. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/agui/agui.py +0 -0
  253. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/agui/router.py +0 -0
  254. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/agui/utils.py +0 -0
  255. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/base.py +0 -0
  256. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/slack/__init__.py +0 -0
  257. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/slack/router.py +0 -0
  258. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/slack/security.py +0 -0
  259. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/slack/slack.py +0 -0
  260. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  261. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/whatsapp/router.py +0 -0
  262. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/whatsapp/security.py +0 -0
  263. {agno-2.0.9 → agno-2.0.11}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  264. {agno-2.0.9 → agno-2.0.11}/agno/os/mcp.py +0 -0
  265. {agno-2.0.9 → agno-2.0.11}/agno/os/router.py +0 -0
  266. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/__init__.py +0 -0
  267. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/evals/__init__.py +0 -0
  268. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/evals/evals.py +0 -0
  269. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/evals/schemas.py +0 -0
  270. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/evals/utils.py +0 -0
  271. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/health.py +0 -0
  272. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/home.py +0 -0
  273. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/knowledge/__init__.py +0 -0
  274. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/knowledge/knowledge.py +0 -0
  275. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/knowledge/schemas.py +0 -0
  276. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/memory/__init__.py +0 -0
  277. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/memory/memory.py +0 -0
  278. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/memory/schemas.py +0 -0
  279. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/metrics/__init__.py +0 -0
  280. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/metrics/metrics.py +0 -0
  281. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/metrics/schemas.py +0 -0
  282. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/session/__init__.py +0 -0
  283. {agno-2.0.9 → agno-2.0.11}/agno/os/routers/session/session.py +0 -0
  284. {agno-2.0.9 → agno-2.0.11}/agno/os/schema.py +0 -0
  285. {agno-2.0.9 → agno-2.0.11}/agno/os/settings.py +0 -0
  286. {agno-2.0.9 → agno-2.0.11}/agno/py.typed +0 -0
  287. {agno-2.0.9 → agno-2.0.11}/agno/reasoning/__init__.py +0 -0
  288. {agno-2.0.9 → agno-2.0.11}/agno/reasoning/azure_ai_foundry.py +0 -0
  289. {agno-2.0.9 → agno-2.0.11}/agno/reasoning/deepseek.py +0 -0
  290. {agno-2.0.9 → agno-2.0.11}/agno/reasoning/default.py +0 -0
  291. {agno-2.0.9 → agno-2.0.11}/agno/reasoning/groq.py +0 -0
  292. {agno-2.0.9 → agno-2.0.11}/agno/reasoning/helpers.py +0 -0
  293. {agno-2.0.9 → agno-2.0.11}/agno/reasoning/ollama.py +0 -0
  294. {agno-2.0.9 → agno-2.0.11}/agno/reasoning/openai.py +0 -0
  295. {agno-2.0.9 → agno-2.0.11}/agno/reasoning/step.py +0 -0
  296. {agno-2.0.9 → agno-2.0.11}/agno/run/__init__.py +0 -0
  297. {agno-2.0.9 → agno-2.0.11}/agno/run/agent.py +0 -0
  298. {agno-2.0.9 → agno-2.0.11}/agno/run/base.py +0 -0
  299. {agno-2.0.9 → agno-2.0.11}/agno/run/cancel.py +0 -0
  300. {agno-2.0.9 → agno-2.0.11}/agno/run/messages.py +0 -0
  301. {agno-2.0.9 → agno-2.0.11}/agno/run/team.py +0 -0
  302. {agno-2.0.9 → agno-2.0.11}/agno/run/workflow.py +0 -0
  303. {agno-2.0.9 → agno-2.0.11}/agno/session/__init__.py +0 -0
  304. {agno-2.0.9 → agno-2.0.11}/agno/session/agent.py +0 -0
  305. {agno-2.0.9 → agno-2.0.11}/agno/session/summary.py +0 -0
  306. {agno-2.0.9 → agno-2.0.11}/agno/session/team.py +0 -0
  307. {agno-2.0.9 → agno-2.0.11}/agno/session/workflow.py +0 -0
  308. {agno-2.0.9 → agno-2.0.11}/agno/team/__init__.py +0 -0
  309. {agno-2.0.9 → agno-2.0.11}/agno/tools/__init__.py +0 -0
  310. {agno-2.0.9 → agno-2.0.11}/agno/tools/agentql.py +0 -0
  311. {agno-2.0.9 → agno-2.0.11}/agno/tools/airflow.py +0 -0
  312. {agno-2.0.9 → agno-2.0.11}/agno/tools/api.py +0 -0
  313. {agno-2.0.9 → agno-2.0.11}/agno/tools/apify.py +0 -0
  314. {agno-2.0.9 → agno-2.0.11}/agno/tools/arxiv.py +0 -0
  315. {agno-2.0.9 → agno-2.0.11}/agno/tools/aws_lambda.py +0 -0
  316. {agno-2.0.9 → agno-2.0.11}/agno/tools/aws_ses.py +0 -0
  317. {agno-2.0.9 → agno-2.0.11}/agno/tools/baidusearch.py +0 -0
  318. {agno-2.0.9 → agno-2.0.11}/agno/tools/bitbucket.py +0 -0
  319. {agno-2.0.9 → agno-2.0.11}/agno/tools/brandfetch.py +0 -0
  320. {agno-2.0.9 → agno-2.0.11}/agno/tools/bravesearch.py +0 -0
  321. {agno-2.0.9 → agno-2.0.11}/agno/tools/brightdata.py +0 -0
  322. {agno-2.0.9 → agno-2.0.11}/agno/tools/browserbase.py +0 -0
  323. {agno-2.0.9 → agno-2.0.11}/agno/tools/calcom.py +0 -0
  324. {agno-2.0.9 → agno-2.0.11}/agno/tools/calculator.py +0 -0
  325. {agno-2.0.9 → agno-2.0.11}/agno/tools/cartesia.py +0 -0
  326. {agno-2.0.9 → agno-2.0.11}/agno/tools/clickup.py +0 -0
  327. {agno-2.0.9 → agno-2.0.11}/agno/tools/confluence.py +0 -0
  328. {agno-2.0.9 → agno-2.0.11}/agno/tools/crawl4ai.py +0 -0
  329. {agno-2.0.9 → agno-2.0.11}/agno/tools/csv_toolkit.py +0 -0
  330. {agno-2.0.9 → agno-2.0.11}/agno/tools/dalle.py +0 -0
  331. {agno-2.0.9 → agno-2.0.11}/agno/tools/daytona.py +0 -0
  332. {agno-2.0.9 → agno-2.0.11}/agno/tools/decorator.py +0 -0
  333. {agno-2.0.9 → agno-2.0.11}/agno/tools/desi_vocal.py +0 -0
  334. {agno-2.0.9 → agno-2.0.11}/agno/tools/discord.py +0 -0
  335. {agno-2.0.9 → agno-2.0.11}/agno/tools/docker.py +0 -0
  336. {agno-2.0.9 → agno-2.0.11}/agno/tools/duckdb.py +0 -0
  337. {agno-2.0.9 → agno-2.0.11}/agno/tools/duckduckgo.py +0 -0
  338. {agno-2.0.9 → agno-2.0.11}/agno/tools/e2b.py +0 -0
  339. {agno-2.0.9 → agno-2.0.11}/agno/tools/eleven_labs.py +0 -0
  340. {agno-2.0.9 → agno-2.0.11}/agno/tools/email.py +0 -0
  341. {agno-2.0.9 → agno-2.0.11}/agno/tools/evm.py +0 -0
  342. {agno-2.0.9 → agno-2.0.11}/agno/tools/exa.py +0 -0
  343. {agno-2.0.9 → agno-2.0.11}/agno/tools/fal.py +0 -0
  344. {agno-2.0.9 → agno-2.0.11}/agno/tools/file.py +0 -0
  345. {agno-2.0.9 → agno-2.0.11}/agno/tools/file_generation.py +0 -0
  346. {agno-2.0.9 → agno-2.0.11}/agno/tools/financial_datasets.py +0 -0
  347. {agno-2.0.9 → agno-2.0.11}/agno/tools/firecrawl.py +0 -0
  348. {agno-2.0.9 → agno-2.0.11}/agno/tools/function.py +0 -0
  349. {agno-2.0.9 → agno-2.0.11}/agno/tools/giphy.py +0 -0
  350. {agno-2.0.9 → agno-2.0.11}/agno/tools/github.py +0 -0
  351. {agno-2.0.9 → agno-2.0.11}/agno/tools/gmail.py +0 -0
  352. {agno-2.0.9 → agno-2.0.11}/agno/tools/google_bigquery.py +0 -0
  353. {agno-2.0.9 → agno-2.0.11}/agno/tools/google_maps.py +0 -0
  354. {agno-2.0.9 → agno-2.0.11}/agno/tools/googlecalendar.py +0 -0
  355. {agno-2.0.9 → agno-2.0.11}/agno/tools/googlesearch.py +0 -0
  356. {agno-2.0.9 → agno-2.0.11}/agno/tools/googlesheets.py +0 -0
  357. {agno-2.0.9 → agno-2.0.11}/agno/tools/hackernews.py +0 -0
  358. {agno-2.0.9 → agno-2.0.11}/agno/tools/jina.py +0 -0
  359. {agno-2.0.9 → agno-2.0.11}/agno/tools/jira.py +0 -0
  360. {agno-2.0.9 → agno-2.0.11}/agno/tools/knowledge.py +0 -0
  361. {agno-2.0.9 → agno-2.0.11}/agno/tools/linear.py +0 -0
  362. {agno-2.0.9 → agno-2.0.11}/agno/tools/linkup.py +0 -0
  363. {agno-2.0.9 → agno-2.0.11}/agno/tools/local_file_system.py +0 -0
  364. {agno-2.0.9 → agno-2.0.11}/agno/tools/lumalab.py +0 -0
  365. {agno-2.0.9 → agno-2.0.11}/agno/tools/mcp.py +0 -0
  366. {agno-2.0.9 → agno-2.0.11}/agno/tools/mcp_toolbox.py +0 -0
  367. {agno-2.0.9 → agno-2.0.11}/agno/tools/mem0.py +0 -0
  368. {agno-2.0.9 → agno-2.0.11}/agno/tools/memori.py +0 -0
  369. {agno-2.0.9 → agno-2.0.11}/agno/tools/memory.py +0 -0
  370. {agno-2.0.9 → agno-2.0.11}/agno/tools/mlx_transcribe.py +0 -0
  371. {agno-2.0.9 → agno-2.0.11}/agno/tools/models/__init__.py +0 -0
  372. {agno-2.0.9 → agno-2.0.11}/agno/tools/models/azure_openai.py +0 -0
  373. {agno-2.0.9 → agno-2.0.11}/agno/tools/models/gemini.py +0 -0
  374. {agno-2.0.9 → agno-2.0.11}/agno/tools/models/groq.py +0 -0
  375. {agno-2.0.9 → agno-2.0.11}/agno/tools/models/morph.py +0 -0
  376. {agno-2.0.9 → agno-2.0.11}/agno/tools/models/nebius.py +0 -0
  377. {agno-2.0.9 → agno-2.0.11}/agno/tools/models_labs.py +0 -0
  378. {agno-2.0.9 → agno-2.0.11}/agno/tools/moviepy_video.py +0 -0
  379. {agno-2.0.9 → agno-2.0.11}/agno/tools/neo4j.py +0 -0
  380. {agno-2.0.9 → agno-2.0.11}/agno/tools/newspaper.py +0 -0
  381. {agno-2.0.9 → agno-2.0.11}/agno/tools/newspaper4k.py +0 -0
  382. {agno-2.0.9 → agno-2.0.11}/agno/tools/openai.py +0 -0
  383. {agno-2.0.9 → agno-2.0.11}/agno/tools/openbb.py +0 -0
  384. {agno-2.0.9 → agno-2.0.11}/agno/tools/opencv.py +0 -0
  385. {agno-2.0.9 → agno-2.0.11}/agno/tools/openweather.py +0 -0
  386. {agno-2.0.9 → agno-2.0.11}/agno/tools/oxylabs.py +0 -0
  387. {agno-2.0.9 → agno-2.0.11}/agno/tools/pandas.py +0 -0
  388. {agno-2.0.9 → agno-2.0.11}/agno/tools/postgres.py +0 -0
  389. {agno-2.0.9 → agno-2.0.11}/agno/tools/pubmed.py +0 -0
  390. {agno-2.0.9 → agno-2.0.11}/agno/tools/python.py +0 -0
  391. {agno-2.0.9 → agno-2.0.11}/agno/tools/reasoning.py +0 -0
  392. {agno-2.0.9 → agno-2.0.11}/agno/tools/reddit.py +0 -0
  393. {agno-2.0.9 → agno-2.0.11}/agno/tools/replicate.py +0 -0
  394. {agno-2.0.9 → agno-2.0.11}/agno/tools/resend.py +0 -0
  395. {agno-2.0.9 → agno-2.0.11}/agno/tools/scrapegraph.py +0 -0
  396. {agno-2.0.9 → agno-2.0.11}/agno/tools/searxng.py +0 -0
  397. {agno-2.0.9 → agno-2.0.11}/agno/tools/serpapi.py +0 -0
  398. {agno-2.0.9 → agno-2.0.11}/agno/tools/serper.py +0 -0
  399. {agno-2.0.9 → agno-2.0.11}/agno/tools/shell.py +0 -0
  400. {agno-2.0.9 → agno-2.0.11}/agno/tools/slack.py +0 -0
  401. {agno-2.0.9 → agno-2.0.11}/agno/tools/sleep.py +0 -0
  402. {agno-2.0.9 → agno-2.0.11}/agno/tools/spider.py +0 -0
  403. {agno-2.0.9 → agno-2.0.11}/agno/tools/sql.py +0 -0
  404. {agno-2.0.9 → agno-2.0.11}/agno/tools/streamlit/__init__.py +0 -0
  405. {agno-2.0.9 → agno-2.0.11}/agno/tools/streamlit/components.py +0 -0
  406. {agno-2.0.9 → agno-2.0.11}/agno/tools/tavily.py +0 -0
  407. {agno-2.0.9 → agno-2.0.11}/agno/tools/telegram.py +0 -0
  408. {agno-2.0.9 → agno-2.0.11}/agno/tools/todoist.py +0 -0
  409. {agno-2.0.9 → agno-2.0.11}/agno/tools/tool_registry.py +0 -0
  410. {agno-2.0.9 → agno-2.0.11}/agno/tools/toolkit.py +0 -0
  411. {agno-2.0.9 → agno-2.0.11}/agno/tools/trafilatura.py +0 -0
  412. {agno-2.0.9 → agno-2.0.11}/agno/tools/trello.py +0 -0
  413. {agno-2.0.9 → agno-2.0.11}/agno/tools/twilio.py +0 -0
  414. {agno-2.0.9 → agno-2.0.11}/agno/tools/user_control_flow.py +0 -0
  415. {agno-2.0.9 → agno-2.0.11}/agno/tools/valyu.py +0 -0
  416. {agno-2.0.9 → agno-2.0.11}/agno/tools/visualization.py +0 -0
  417. {agno-2.0.9 → agno-2.0.11}/agno/tools/webbrowser.py +0 -0
  418. {agno-2.0.9 → agno-2.0.11}/agno/tools/webex.py +0 -0
  419. {agno-2.0.9 → agno-2.0.11}/agno/tools/website.py +0 -0
  420. {agno-2.0.9 → agno-2.0.11}/agno/tools/webtools.py +0 -0
  421. {agno-2.0.9 → agno-2.0.11}/agno/tools/whatsapp.py +0 -0
  422. {agno-2.0.9 → agno-2.0.11}/agno/tools/wikipedia.py +0 -0
  423. {agno-2.0.9 → agno-2.0.11}/agno/tools/workflow.py +0 -0
  424. {agno-2.0.9 → agno-2.0.11}/agno/tools/x.py +0 -0
  425. {agno-2.0.9 → agno-2.0.11}/agno/tools/yfinance.py +0 -0
  426. {agno-2.0.9 → agno-2.0.11}/agno/tools/youtube.py +0 -0
  427. {agno-2.0.9 → agno-2.0.11}/agno/tools/zendesk.py +0 -0
  428. {agno-2.0.9 → agno-2.0.11}/agno/tools/zep.py +0 -0
  429. {agno-2.0.9 → agno-2.0.11}/agno/tools/zoom.py +0 -0
  430. {agno-2.0.9 → agno-2.0.11}/agno/utils/__init__.py +0 -0
  431. {agno-2.0.9 → agno-2.0.11}/agno/utils/audio.py +0 -0
  432. {agno-2.0.9 → agno-2.0.11}/agno/utils/certs.py +0 -0
  433. {agno-2.0.9 → agno-2.0.11}/agno/utils/code_execution.py +0 -0
  434. {agno-2.0.9 → agno-2.0.11}/agno/utils/common.py +0 -0
  435. {agno-2.0.9 → agno-2.0.11}/agno/utils/dttm.py +0 -0
  436. {agno-2.0.9 → agno-2.0.11}/agno/utils/enum.py +0 -0
  437. {agno-2.0.9 → agno-2.0.11}/agno/utils/env.py +0 -0
  438. {agno-2.0.9 → agno-2.0.11}/agno/utils/events.py +0 -0
  439. {agno-2.0.9 → agno-2.0.11}/agno/utils/format_str.py +0 -0
  440. {agno-2.0.9 → agno-2.0.11}/agno/utils/functions.py +0 -0
  441. {agno-2.0.9 → agno-2.0.11}/agno/utils/gemini.py +0 -0
  442. {agno-2.0.9 → agno-2.0.11}/agno/utils/http.py +0 -0
  443. {agno-2.0.9 → agno-2.0.11}/agno/utils/json_schema.py +0 -0
  444. {agno-2.0.9 → agno-2.0.11}/agno/utils/knowledge.py +0 -0
  445. {agno-2.0.9 → agno-2.0.11}/agno/utils/location.py +0 -0
  446. {agno-2.0.9 → agno-2.0.11}/agno/utils/log.py +0 -0
  447. {agno-2.0.9 → agno-2.0.11}/agno/utils/mcp.py +0 -0
  448. {agno-2.0.9 → agno-2.0.11}/agno/utils/media.py +0 -0
  449. {agno-2.0.9 → agno-2.0.11}/agno/utils/merge_dict.py +0 -0
  450. {agno-2.0.9 → agno-2.0.11}/agno/utils/message.py +0 -0
  451. {agno-2.0.9 → agno-2.0.11}/agno/utils/models/__init__.py +0 -0
  452. {agno-2.0.9 → agno-2.0.11}/agno/utils/models/ai_foundry.py +0 -0
  453. {agno-2.0.9 → agno-2.0.11}/agno/utils/models/cohere.py +0 -0
  454. {agno-2.0.9 → agno-2.0.11}/agno/utils/models/llama.py +0 -0
  455. {agno-2.0.9 → agno-2.0.11}/agno/utils/models/mistral.py +0 -0
  456. {agno-2.0.9 → agno-2.0.11}/agno/utils/models/openai_responses.py +0 -0
  457. {agno-2.0.9 → agno-2.0.11}/agno/utils/models/schema_utils.py +0 -0
  458. {agno-2.0.9 → agno-2.0.11}/agno/utils/models/watsonx.py +0 -0
  459. {agno-2.0.9 → agno-2.0.11}/agno/utils/openai.py +0 -0
  460. {agno-2.0.9 → agno-2.0.11}/agno/utils/pickle.py +0 -0
  461. {agno-2.0.9 → agno-2.0.11}/agno/utils/pprint.py +0 -0
  462. {agno-2.0.9 → agno-2.0.11}/agno/utils/print_response/__init__.py +0 -0
  463. {agno-2.0.9 → agno-2.0.11}/agno/utils/print_response/agent.py +0 -0
  464. {agno-2.0.9 → agno-2.0.11}/agno/utils/print_response/team.py +0 -0
  465. {agno-2.0.9 → agno-2.0.11}/agno/utils/print_response/workflow.py +0 -0
  466. {agno-2.0.9 → agno-2.0.11}/agno/utils/prompts.py +0 -0
  467. {agno-2.0.9 → agno-2.0.11}/agno/utils/reasoning.py +0 -0
  468. {agno-2.0.9 → agno-2.0.11}/agno/utils/response.py +0 -0
  469. {agno-2.0.9 → agno-2.0.11}/agno/utils/response_iterator.py +0 -0
  470. {agno-2.0.9 → agno-2.0.11}/agno/utils/safe_formatter.py +0 -0
  471. {agno-2.0.9 → agno-2.0.11}/agno/utils/shell.py +0 -0
  472. {agno-2.0.9 → agno-2.0.11}/agno/utils/streamlit.py +0 -0
  473. {agno-2.0.9 → agno-2.0.11}/agno/utils/string.py +0 -0
  474. {agno-2.0.9 → agno-2.0.11}/agno/utils/team.py +0 -0
  475. {agno-2.0.9 → agno-2.0.11}/agno/utils/timer.py +0 -0
  476. {agno-2.0.9 → agno-2.0.11}/agno/utils/tools.py +0 -0
  477. {agno-2.0.9 → agno-2.0.11}/agno/utils/web.py +0 -0
  478. {agno-2.0.9 → agno-2.0.11}/agno/utils/whatsapp.py +0 -0
  479. {agno-2.0.9 → agno-2.0.11}/agno/utils/yaml_io.py +0 -0
  480. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/__init__.py +0 -0
  481. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/base.py +0 -0
  482. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/cassandra/__init__.py +0 -0
  483. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/cassandra/cassandra.py +0 -0
  484. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  485. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/cassandra/index.py +0 -0
  486. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/chroma/__init__.py +0 -0
  487. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/chroma/chromadb.py +0 -0
  488. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/clickhouse/__init__.py +0 -0
  489. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  490. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/clickhouse/index.py +0 -0
  491. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/couchbase/__init__.py +0 -0
  492. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/couchbase/couchbase.py +0 -0
  493. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/distance.py +0 -0
  494. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/lancedb/__init__.py +0 -0
  495. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/lancedb/lance_db.py +0 -0
  496. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/langchaindb/__init__.py +0 -0
  497. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  498. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/lightrag/__init__.py +0 -0
  499. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/lightrag/lightrag.py +0 -0
  500. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  501. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/milvus/__init__.py +0 -0
  502. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/milvus/milvus.py +0 -0
  503. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/mongodb/__init__.py +0 -0
  504. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/mongodb/mongodb.py +0 -0
  505. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/pgvector/__init__.py +0 -0
  506. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/pgvector/index.py +0 -0
  507. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/pgvector/pgvector.py +0 -0
  508. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/pineconedb/__init__.py +0 -0
  509. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  510. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/qdrant/__init__.py +0 -0
  511. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/qdrant/qdrant.py +0 -0
  512. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/search.py +0 -0
  513. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/singlestore/__init__.py +0 -0
  514. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/singlestore/index.py +0 -0
  515. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/singlestore/singlestore.py +0 -0
  516. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/surrealdb/__init__.py +0 -0
  517. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  518. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/upstashdb/__init__.py +0 -0
  519. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  520. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/weaviate/__init__.py +0 -0
  521. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/weaviate/index.py +0 -0
  522. {agno-2.0.9 → agno-2.0.11}/agno/vectordb/weaviate/weaviate.py +0 -0
  523. {agno-2.0.9 → agno-2.0.11}/agno/workflow/__init__.py +0 -0
  524. {agno-2.0.9 → agno-2.0.11}/agno/workflow/condition.py +0 -0
  525. {agno-2.0.9 → agno-2.0.11}/agno/workflow/loop.py +0 -0
  526. {agno-2.0.9 → agno-2.0.11}/agno/workflow/parallel.py +0 -0
  527. {agno-2.0.9 → agno-2.0.11}/agno/workflow/router.py +0 -0
  528. {agno-2.0.9 → agno-2.0.11}/agno/workflow/step.py +0 -0
  529. {agno-2.0.9 → agno-2.0.11}/agno/workflow/steps.py +0 -0
  530. {agno-2.0.9 → agno-2.0.11}/agno/workflow/types.py +0 -0
  531. {agno-2.0.9 → agno-2.0.11}/agno.egg-info/dependency_links.txt +0 -0
  532. {agno-2.0.9 → agno-2.0.11}/agno.egg-info/requires.txt +0 -0
  533. {agno-2.0.9 → agno-2.0.11}/agno.egg-info/top_level.txt +0 -0
  534. {agno-2.0.9 → agno-2.0.11}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.0.9
3
+ Version: 2.0.11
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
@@ -135,6 +135,8 @@ class Agent:
135
135
  add_session_state_to_context: bool = False
136
136
  # Set to True to give the agent tools to update the session_state dynamically
137
137
  enable_agentic_state: bool = False
138
+ # Set to True to overwrite the stored session_state with the session_state provided in the run. Default behaviour merges the current session state with the session state in the db
139
+ overwrite_db_session_state: bool = False
138
140
  # If True, cache the current Agent session in memory for faster access
139
141
  cache_session: bool = False
140
142
 
@@ -348,6 +350,7 @@ class Agent:
348
350
  session_id: Optional[str] = None,
349
351
  session_state: Optional[Dict[str, Any]] = None,
350
352
  add_session_state_to_context: bool = False,
353
+ overwrite_db_session_state: bool = False,
351
354
  enable_agentic_state: bool = False,
352
355
  cache_session: bool = False,
353
356
  search_session_history: Optional[bool] = False,
@@ -432,6 +435,7 @@ class Agent:
432
435
 
433
436
  self.session_id = session_id
434
437
  self.session_state = session_state
438
+ self.overwrite_db_session_state = overwrite_db_session_state
435
439
  self.enable_agentic_state = enable_agentic_state
436
440
  self.cache_session = cache_session
437
441
 
@@ -1113,7 +1117,7 @@ class Agent:
1113
1117
  self._update_metadata(session=agent_session)
1114
1118
 
1115
1119
  # Update session state from DB
1116
- session_state = self._update_session_state(session=agent_session, session_state=session_state)
1120
+ session_state = self._load_session_state(session=agent_session, session_state=session_state)
1117
1121
 
1118
1122
  # Determine runtime dependencies
1119
1123
  run_dependencies = dependencies if dependencies is not None else self.dependencies
@@ -1174,6 +1178,7 @@ class Agent:
1174
1178
  run_id=run_id,
1175
1179
  session_id=session_id,
1176
1180
  agent_id=self.id,
1181
+ user_id=user_id,
1177
1182
  agent_name=self.name,
1178
1183
  metadata=metadata,
1179
1184
  input=run_input,
@@ -1752,7 +1757,7 @@ class Agent:
1752
1757
  self._update_metadata(session=agent_session)
1753
1758
 
1754
1759
  # Update session state from DB
1755
- session_state = self._update_session_state(session=agent_session, session_state=session_state)
1760
+ session_state = self._load_session_state(session=agent_session, session_state=session_state)
1756
1761
 
1757
1762
  # Determine run dependencies
1758
1763
  run_dependencies = dependencies if dependencies is not None else self.dependencies
@@ -1807,6 +1812,7 @@ class Agent:
1807
1812
  run_id=run_id,
1808
1813
  session_id=session_id,
1809
1814
  agent_id=self.id,
1815
+ user_id=user_id,
1810
1816
  agent_name=self.name,
1811
1817
  metadata=metadata,
1812
1818
  input=run_input,
@@ -2019,7 +2025,7 @@ class Agent:
2019
2025
  self._update_metadata(session=agent_session)
2020
2026
 
2021
2027
  # Update session state from DB
2022
- session_state = self._update_session_state(session=agent_session, session_state=session_state)
2028
+ session_state = self._load_session_state(session=agent_session, session_state=session_state)
2023
2029
 
2024
2030
  run_dependencies = dependencies if dependencies is not None else self.dependencies
2025
2031
 
@@ -2403,7 +2409,7 @@ class Agent:
2403
2409
  self._update_metadata(session=agent_session)
2404
2410
 
2405
2411
  # Update session state from DB
2406
- session_state = self._update_session_state(session=agent_session, session_state=session_state)
2412
+ session_state = self._load_session_state(session=agent_session, session_state=session_state)
2407
2413
 
2408
2414
  run_dependencies = dependencies if dependencies is not None else self.dependencies
2409
2415
 
@@ -4252,8 +4258,8 @@ class Agent:
4252
4258
  log_warning(f"Error upserting session into db: {e}")
4253
4259
  return None
4254
4260
 
4255
- def _update_session_state(self, session: AgentSession, session_state: Dict[str, Any]):
4256
- """Load the existing Agent from an AgentSession (from the database)"""
4261
+ def _load_session_state(self, session: AgentSession, session_state: Dict[str, Any]):
4262
+ """Load and return the stored session_state from the database, optionally merging it with the given one"""
4257
4263
 
4258
4264
  # Get the session_state from the database and merge with proper precedence
4259
4265
  # At this point session_state contains: agent_defaults + run_params
@@ -4264,6 +4270,7 @@ class Agent:
4264
4270
  session_state_from_db is not None
4265
4271
  and isinstance(session_state_from_db, dict)
4266
4272
  and len(session_state_from_db) > 0
4273
+ and not self.overwrite_db_session_state
4267
4274
  ):
4268
4275
  # This preserves precedence: run_params > db_state > agent_defaults
4269
4276
  merged_state = session_state_from_db.copy()
@@ -10,7 +10,7 @@ from agno.models.message import Message
10
10
  from agno.models.response import ModelResponse
11
11
  from agno.run.agent import RunOutput
12
12
  from agno.utils.log import log_debug, log_error, log_warning
13
- from agno.utils.models.aws_claude import format_messages
13
+ from agno.utils.models.claude import format_messages
14
14
 
15
15
  try:
16
16
  from anthropic import AnthropicBedrock, APIConnectionError, APIStatusError, AsyncAnthropicBedrock, RateLimitError
@@ -38,6 +38,10 @@ class LiteLLM(Model):
38
38
  max_tokens: Optional[int] = None
39
39
  temperature: float = 0.7
40
40
  top_p: float = 1.0
41
+ metadata: Optional[Dict[str, Any]] = None
42
+ extra_headers: Optional[Dict[str, Any]] = None
43
+ extra_query: Optional[Dict[str, Any]] = None
44
+ extra_body: Optional[Dict[str, Any]] = None
41
45
  request_params: Optional[Dict[str, Any]] = None
42
46
 
43
47
  client: Optional[Any] = None
@@ -148,10 +152,23 @@ class LiteLLM(Model):
148
152
  base_params["api_key"] = self.api_key
149
153
  if self.api_base:
150
154
  base_params["api_base"] = self.api_base
155
+ if self.extra_headers:
156
+ base_params["extra_headers"] = self.extra_headers
157
+ if self.extra_query:
158
+ base_params["extra_query"] = self.extra_query
151
159
  if tools:
152
160
  base_params["tools"] = tools
153
161
  base_params["tool_choice"] = "auto"
154
162
 
163
+ # Handle metadata via extra_body as per LiteLLM docs
164
+ if self.metadata:
165
+ if self.extra_body:
166
+ base_params["extra_body"] = {**self.extra_body, "metadata": self.metadata}
167
+ else:
168
+ base_params["extra_body"] = {"metadata": self.metadata}
169
+ elif self.extra_body:
170
+ base_params["extra_body"] = self.extra_body
171
+
155
172
  # Add additional request params if provided
156
173
  request_params: Dict[str, Any] = {k: v for k, v in base_params.items() if v is not None}
157
174
  if self.request_params:
@@ -12,6 +12,7 @@ from rich.panel import Panel
12
12
  from starlette.requests import Request
13
13
 
14
14
  from agno.agent.agent import Agent
15
+ from agno.db.base import BaseDb
15
16
  from agno.os.config import (
16
17
  AgentOSConfig,
17
18
  DatabaseConfig,
@@ -36,7 +37,11 @@ from agno.os.routers.memory import get_memory_router
36
37
  from agno.os.routers.metrics import get_metrics_router
37
38
  from agno.os.routers.session import get_session_router
38
39
  from agno.os.settings import AgnoAPISettings
39
- from agno.os.utils import update_cors_middleware
40
+ from agno.os.utils import (
41
+ collect_mcp_tools_from_team,
42
+ collect_mcp_tools_from_workflow,
43
+ update_cors_middleware,
44
+ )
40
45
  from agno.team.team import Team
41
46
  from agno.utils.log import logger
42
47
  from agno.utils.string import generate_id, generate_id_from_name
@@ -130,7 +135,7 @@ class AgentOS:
130
135
  self.lifespan = lifespan
131
136
 
132
137
  # List of all MCP tools used inside the AgentOS
133
- self.mcp_tools = []
138
+ self.mcp_tools: List[Any] = []
134
139
 
135
140
  if self.agents:
136
141
  for agent in self.agents:
@@ -140,7 +145,8 @@ class AgentOS:
140
145
  # Checking if the tool is a MCPTools or MultiMCPTools instance
141
146
  type_name = type(tool).__name__
142
147
  if type_name in ("MCPTools", "MultiMCPTools"):
143
- self.mcp_tools.append(tool)
148
+ if tool not in self.mcp_tools:
149
+ self.mcp_tools.append(tool)
144
150
 
145
151
  agent.initialize_agent()
146
152
 
@@ -149,13 +155,8 @@ class AgentOS:
149
155
 
150
156
  if self.teams:
151
157
  for team in self.teams:
152
- # Track all MCP tools to later handle their connection
153
- if team.tools:
154
- for tool in team.tools:
155
- # Checking if the tool is a MCPTools or MultiMCPTools instance
156
- type_name = type(tool).__name__
157
- if type_name in ("MCPTools", "MultiMCPTools"):
158
- self.mcp_tools.append(tool)
158
+ # Track all MCP tools recursively
159
+ collect_mcp_tools_from_team(team, self.mcp_tools)
159
160
 
160
161
  team.initialize_team()
161
162
 
@@ -171,7 +172,8 @@ class AgentOS:
171
172
 
172
173
  if self.workflows:
173
174
  for workflow in self.workflows:
174
- # TODO: track MCP tools in workflow members
175
+ # Track MCP tools recursively in workflow members
176
+ collect_mcp_tools_from_workflow(workflow, self.mcp_tools)
175
177
  if not workflow.id:
176
178
  workflow.id = generate_id_from_name(workflow.name)
177
179
 
@@ -415,40 +417,85 @@ class AgentOS:
415
417
 
416
418
  def _auto_discover_databases(self) -> None:
417
419
  """Auto-discover the databases used by all contextual agents, teams and workflows."""
418
- dbs = {}
419
- knowledge_dbs = {} # Track databases specifically used for knowledge
420
+ from agno.db.base import BaseDb
421
+
422
+ dbs: Dict[str, BaseDb] = {}
423
+ knowledge_dbs: Dict[str, BaseDb] = {} # Track databases specifically used for knowledge
420
424
 
421
425
  for agent in self.agents or []:
422
426
  if agent.db:
423
- dbs[agent.db.id] = agent.db
427
+ self._register_db_with_validation(dbs, agent.db)
424
428
  if agent.knowledge and agent.knowledge.contents_db:
425
- knowledge_dbs[agent.knowledge.contents_db.id] = agent.knowledge.contents_db
429
+ self._register_db_with_validation(knowledge_dbs, agent.knowledge.contents_db)
426
430
  # Also add to general dbs if it's used for both purposes
427
431
  if agent.knowledge.contents_db.id not in dbs:
428
- dbs[agent.knowledge.contents_db.id] = agent.knowledge.contents_db
432
+ self._register_db_with_validation(dbs, agent.knowledge.contents_db)
429
433
 
430
434
  for team in self.teams or []:
431
435
  if team.db:
432
- dbs[team.db.id] = team.db
436
+ self._register_db_with_validation(dbs, team.db)
433
437
  if team.knowledge and team.knowledge.contents_db:
434
- knowledge_dbs[team.knowledge.contents_db.id] = team.knowledge.contents_db
438
+ self._register_db_with_validation(knowledge_dbs, team.knowledge.contents_db)
435
439
  # Also add to general dbs if it's used for both purposes
436
440
  if team.knowledge.contents_db.id not in dbs:
437
- dbs[team.knowledge.contents_db.id] = team.knowledge.contents_db
441
+ self._register_db_with_validation(dbs, team.knowledge.contents_db)
438
442
 
439
443
  for workflow in self.workflows or []:
440
444
  if workflow.db:
441
- dbs[workflow.db.id] = workflow.db
445
+ self._register_db_with_validation(dbs, workflow.db)
442
446
 
443
447
  for interface in self.interfaces or []:
444
448
  if interface.agent and interface.agent.db:
445
- dbs[interface.agent.db.id] = interface.agent.db
449
+ self._register_db_with_validation(dbs, interface.agent.db)
446
450
  elif interface.team and interface.team.db:
447
- dbs[interface.team.db.id] = interface.team.db
451
+ self._register_db_with_validation(dbs, interface.team.db)
448
452
 
449
453
  self.dbs = dbs
450
454
  self.knowledge_dbs = knowledge_dbs
451
455
 
456
+ def _register_db_with_validation(self, registered_dbs: Dict[str, Any], db: BaseDb) -> None:
457
+ """Register a database in the contextual OS after validating it is not conflicting with registered databases"""
458
+ if db.id in registered_dbs:
459
+ existing_db = registered_dbs[db.id]
460
+ if not self._are_db_instances_compatible(existing_db, db):
461
+ raise ValueError(
462
+ f"Database ID conflict detected: Two different database instances have the same ID '{db.id}'. "
463
+ f"Database instances with the same ID must point to the same database with identical configuration."
464
+ )
465
+ registered_dbs[db.id] = db
466
+
467
+ def _are_db_instances_compatible(self, db1: BaseDb, db2: BaseDb) -> bool:
468
+ """
469
+ Return True if the two given database objects are compatible
470
+ Two database objects are compatible if they point to the same database with identical configuration.
471
+ """
472
+ # If they're the same object reference, they're compatible
473
+ if db1 is db2:
474
+ return True
475
+
476
+ if type(db1) is not type(db2):
477
+ return False
478
+
479
+ if hasattr(db1, "db_url") and hasattr(db2, "db_url"):
480
+ if db1.db_url != db2.db_url: # type: ignore
481
+ return False
482
+
483
+ if hasattr(db1, "db_file") and hasattr(db2, "db_file"):
484
+ if db1.db_file != db2.db_file: # type: ignore
485
+ return False
486
+
487
+ # If table names are different, they're not compatible
488
+ if (
489
+ db1.session_table_name != db2.session_table_name
490
+ or db1.memory_table_name != db2.memory_table_name
491
+ or db1.metrics_table_name != db2.metrics_table_name
492
+ or db1.eval_table_name != db2.eval_table_name
493
+ or db1.knowledge_table_name != db2.knowledge_table_name
494
+ ):
495
+ return False
496
+
497
+ return True
498
+
452
499
  def _auto_discover_knowledge_instances(self) -> None:
453
500
  """Auto-discover the knowledge instances used by all contextual agents, teams and workflows."""
454
501
  knowledge_instances = []
@@ -303,3 +303,101 @@ def update_cors_middleware(app: FastAPI, new_origins: list):
303
303
  allow_headers=["*"],
304
304
  expose_headers=["*"],
305
305
  )
306
+
307
+
308
+ def collect_mcp_tools_from_team(team: Team, mcp_tools: List[Any]) -> None:
309
+ """Recursively collect MCP tools from a team and its members."""
310
+ # Check the team tools
311
+ if team.tools:
312
+ for tool in team.tools:
313
+ type_name = type(tool).__name__
314
+ if type_name in ("MCPTools", "MultiMCPTools"):
315
+ if tool not in mcp_tools:
316
+ mcp_tools.append(tool)
317
+
318
+ # Recursively check team members
319
+ if team.members:
320
+ for member in team.members:
321
+ if isinstance(member, Agent):
322
+ if member.tools:
323
+ for tool in member.tools:
324
+ type_name = type(tool).__name__
325
+ if type_name in ("MCPTools", "MultiMCPTools"):
326
+ if tool not in mcp_tools:
327
+ mcp_tools.append(tool)
328
+
329
+ elif isinstance(member, Team):
330
+ # Recursively check nested team
331
+ collect_mcp_tools_from_team(member, mcp_tools)
332
+
333
+
334
+ def collect_mcp_tools_from_workflow(workflow: Workflow, mcp_tools: List[Any]) -> None:
335
+ """Recursively collect MCP tools from a workflow and its steps."""
336
+ from agno.workflow.steps import Steps
337
+
338
+ # Recursively check workflow steps
339
+ if workflow.steps:
340
+ if isinstance(workflow.steps, list):
341
+ # Handle list of steps
342
+ for step in workflow.steps:
343
+ collect_mcp_tools_from_workflow_step(step, mcp_tools)
344
+
345
+ elif isinstance(workflow.steps, Steps):
346
+ # Handle Steps container
347
+ if steps := workflow.steps.steps:
348
+ for step in steps:
349
+ collect_mcp_tools_from_workflow_step(step, mcp_tools)
350
+
351
+ elif callable(workflow.steps):
352
+ pass
353
+
354
+
355
+ def collect_mcp_tools_from_workflow_step(step: Any, mcp_tools: List[Any]) -> None:
356
+ """Collect MCP tools from a single workflow step."""
357
+ from agno.workflow.condition import Condition
358
+ from agno.workflow.loop import Loop
359
+ from agno.workflow.parallel import Parallel
360
+ from agno.workflow.router import Router
361
+ from agno.workflow.step import Step
362
+ from agno.workflow.steps import Steps
363
+
364
+ if isinstance(step, Step):
365
+ # Check step's agent
366
+ if step.agent:
367
+ if step.agent.tools:
368
+ for tool in step.agent.tools:
369
+ type_name = type(tool).__name__
370
+ if type_name in ("MCPTools", "MultiMCPTools"):
371
+ if tool not in mcp_tools:
372
+ mcp_tools.append(tool)
373
+ # Check step's team
374
+ if step.team:
375
+ collect_mcp_tools_from_team(step.team, mcp_tools)
376
+
377
+ elif isinstance(step, Steps):
378
+ if steps := step.steps:
379
+ for step in steps:
380
+ collect_mcp_tools_from_workflow_step(step, mcp_tools)
381
+
382
+ elif isinstance(step, (Parallel, Loop, Condition, Router)):
383
+ # These contain other steps - recursively check them
384
+ if hasattr(step, "steps") and step.steps:
385
+ for sub_step in step.steps:
386
+ collect_mcp_tools_from_workflow_step(sub_step, mcp_tools)
387
+
388
+ elif isinstance(step, Agent):
389
+ # Direct agent in workflow steps
390
+ if step.tools:
391
+ for tool in step.tools:
392
+ type_name = type(tool).__name__
393
+ if type_name in ("MCPTools", "MultiMCPTools"):
394
+ if tool not in mcp_tools:
395
+ mcp_tools.append(tool)
396
+
397
+ elif isinstance(step, Team):
398
+ # Direct team in workflow steps
399
+ collect_mcp_tools_from_team(step, mcp_tools)
400
+
401
+ elif isinstance(step, Workflow):
402
+ # Nested workflow
403
+ collect_mcp_tools_from_workflow(step, mcp_tools)
@@ -156,6 +156,8 @@ class Team:
156
156
  add_session_state_to_context: bool = False
157
157
  # Set to True to give the team tools to update the session_state dynamically
158
158
  enable_agentic_state: bool = False
159
+ # Set to True to overwrite the stored session_state with the session_state provided in the run
160
+ overwrite_db_session_state: bool = False
159
161
  # If True, cache the current Team session in memory for faster access
160
162
  cache_session: bool = False
161
163
 
@@ -364,6 +366,7 @@ class Team:
364
366
  session_state: Optional[Dict[str, Any]] = None,
365
367
  add_session_state_to_context: bool = False,
366
368
  enable_agentic_state: bool = False,
369
+ overwrite_db_session_state: bool = False,
367
370
  resolve_in_context: bool = True,
368
371
  cache_session: bool = False,
369
372
  description: Optional[str] = None,
@@ -453,6 +456,7 @@ class Team:
453
456
  self.session_state = session_state
454
457
  self.add_session_state_to_context = add_session_state_to_context
455
458
  self.enable_agentic_state = enable_agentic_state
459
+ self.overwrite_db_session_state = overwrite_db_session_state
456
460
  self.resolve_in_context = resolve_in_context
457
461
  self.cache_session = cache_session
458
462
 
@@ -1156,7 +1160,7 @@ class Team:
1156
1160
  self._update_metadata(session=team_session)
1157
1161
 
1158
1162
  # Update session state from DB
1159
- session_state = self._update_session_state(session=team_session, session_state=session_state)
1163
+ session_state = self._load_session_state(session=team_session, session_state=session_state)
1160
1164
 
1161
1165
  # Determine runtime dependencies
1162
1166
  run_dependencies = dependencies if dependencies is not None else self.dependencies
@@ -1780,7 +1784,7 @@ class Team:
1780
1784
  self._update_metadata(session=team_session)
1781
1785
 
1782
1786
  # Update session state from DB
1783
- session_state = self._update_session_state(session=team_session, session_state=session_state)
1787
+ session_state = self._load_session_state(session=team_session, session_state=session_state)
1784
1788
 
1785
1789
  # Determine run dependencies (runtime override takes priority)
1786
1790
  run_dependencies = dependencies if dependencies is not None else self.dependencies
@@ -4270,7 +4274,7 @@ class Team:
4270
4274
  system_message_content += f"{indent * ' '} - Name: {member.name}\n"
4271
4275
  if member.role is not None:
4272
4276
  system_message_content += f"{indent * ' '} - Role: {member.role}\n"
4273
- if member.tools is not None and self.add_member_tools_to_context:
4277
+ if member.tools and self.add_member_tools_to_context:
4274
4278
  system_message_content += f"{indent * ' '} - Member tools:\n"
4275
4279
  for _tool in member.tools:
4276
4280
  if isinstance(_tool, Toolkit):
@@ -6104,8 +6108,8 @@ class Team:
6104
6108
  self._upsert_session(session=session)
6105
6109
  log_debug(f"Created or updated TeamSession record: {session.session_id}")
6106
6110
 
6107
- def _update_session_state(self, session: TeamSession, session_state: Dict[str, Any]) -> Dict[str, Any]:
6108
- """Load the existing Agent from an AgentSession (from the database)"""
6111
+ def _load_session_state(self, session: TeamSession, session_state: Dict[str, Any]) -> Dict[str, Any]:
6112
+ """Load and return the stored session_state from the database, optionally merging it with the given one"""
6109
6113
 
6110
6114
  from agno.utils.merge_dict import merge_dictionaries
6111
6115
 
@@ -6118,6 +6122,7 @@ class Team:
6118
6122
  session_state_from_db is not None
6119
6123
  and isinstance(session_state_from_db, dict)
6120
6124
  and len(session_state_from_db) > 0
6125
+ and not self.overwrite_db_session_state
6121
6126
  ):
6122
6127
  # This preserves precedence: run_params > db_state > agent_defaults
6123
6128
  merged_state = session_state_from_db.copy()
@@ -69,11 +69,11 @@ def _format_image_for_message(image: Image) -> Optional[Dict[str, Any]]:
69
69
  try:
70
70
  # Case 0: Image is an Anthropic uploaded file
71
71
  if image.content is not None and hasattr(image.content, "id"):
72
- return {"type": "image", "source": {"type": "file", "file_id": image.content.id}}
72
+ content_bytes = image.content
73
73
 
74
74
  # Case 1: Image is a URL
75
75
  if image.url is not None:
76
- return {"type": "image", "source": {"type": "url", "url": image.url}}
76
+ content_bytes = image.get_content_bytes() # type: ignore
77
77
 
78
78
  # Case 2: Image is a local file path
79
79
  elif image.filepath is not None:
@@ -0,0 +1,3 @@
1
+ from agno.vectordb.llamaindex.llamaindexdb import LlamaIndexVectorDb
2
+
3
+ __all__ = ["LlamaIndexVectorDb"]
@@ -136,6 +136,8 @@ class Workflow:
136
136
  user_id: Optional[str] = None
137
137
  # Default session state (stored in the database to persist across runs)
138
138
  session_state: Optional[Dict[str, Any]] = None
139
+ # Set to True to overwrite the stored session_state with the session_state provided in the run
140
+ overwrite_db_session_state: bool = False
139
141
 
140
142
  # If True, the workflow runs in debug mode
141
143
  debug_mode: Optional[bool] = False
@@ -176,6 +178,7 @@ class Workflow:
176
178
  steps: Optional[WorkflowSteps] = None,
177
179
  session_id: Optional[str] = None,
178
180
  session_state: Optional[Dict[str, Any]] = None,
181
+ overwrite_db_session_state: bool = False,
179
182
  user_id: Optional[str] = None,
180
183
  debug_mode: Optional[bool] = False,
181
184
  stream: Optional[bool] = None,
@@ -194,6 +197,7 @@ class Workflow:
194
197
  self.steps = steps
195
198
  self.session_id = session_id
196
199
  self.session_state = session_state
200
+ self.overwrite_db_session_state = overwrite_db_session_state
197
201
  self.user_id = user_id
198
202
  self.debug_mode = debug_mode
199
203
  self.store_events = store_events
@@ -599,8 +603,8 @@ class Workflow:
599
603
  # Update the current metadata with the metadata from the database which is updated in place
600
604
  self.metadata = session.metadata
601
605
 
602
- def _update_session_state(self, session: WorkflowSession, session_state: Dict[str, Any]):
603
- """Load the existing Workflow from a WorkflowSession (from the database)"""
606
+ def _load_session_state(self, session: WorkflowSession, session_state: Dict[str, Any]):
607
+ """Load and return the stored session_state from the database, optionally merging it with the given one"""
604
608
 
605
609
  from agno.utils.merge_dict import merge_dictionaries
606
610
 
@@ -613,6 +617,7 @@ class Workflow:
613
617
  session_state_from_db is not None
614
618
  and isinstance(session_state_from_db, dict)
615
619
  and len(session_state_from_db) > 0
620
+ and not self.overwrite_db_session_state
616
621
  ):
617
622
  # This preserves precedence: run_params > db_state > agent_defaults
618
623
  merged_state = session_state_from_db.copy()
@@ -1716,7 +1721,7 @@ class Workflow:
1716
1721
  self._update_metadata(session=workflow_session)
1717
1722
 
1718
1723
  # Update session state from DB
1719
- session_state = self._update_session_state(session=workflow_session, session_state=session_state)
1724
+ session_state = self._load_session_state(session=workflow_session, session_state=session_state)
1720
1725
 
1721
1726
  self._prepare_steps()
1722
1727
 
@@ -1807,7 +1812,7 @@ class Workflow:
1807
1812
  self._update_metadata(session=workflow_session)
1808
1813
 
1809
1814
  # Update session state from DB
1810
- session_state = self._update_session_state(session=workflow_session, session_state=session_state)
1815
+ session_state = self._load_session_state(session=workflow_session, session_state=session_state)
1811
1816
 
1812
1817
  self._prepare_steps()
1813
1818
 
@@ -1967,7 +1972,7 @@ class Workflow:
1967
1972
  self._update_metadata(session=workflow_session)
1968
1973
 
1969
1974
  # Update session state from DB
1970
- session_state = self._update_session_state(session=workflow_session, session_state=session_state)
1975
+ session_state = self._load_session_state(session=workflow_session, session_state=session_state)
1971
1976
 
1972
1977
  log_debug(f"Workflow Run Start: {self.name}", center=True)
1973
1978
 
@@ -2137,7 +2142,7 @@ class Workflow:
2137
2142
  self._update_metadata(session=workflow_session)
2138
2143
 
2139
2144
  # Update session state from DB
2140
- session_state = self._update_session_state(session=workflow_session, session_state=session_state)
2145
+ session_state = self._load_session_state(session=workflow_session, session_state=session_state)
2141
2146
 
2142
2147
  log_debug(f"Async Workflow Run Start: {self.name}", center=True)
2143
2148
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.0.9
3
+ Version: 2.0.11
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
@@ -464,7 +464,6 @@ agno/utils/whatsapp.py
464
464
  agno/utils/yaml_io.py
465
465
  agno/utils/models/__init__.py
466
466
  agno/utils/models/ai_foundry.py
467
- agno/utils/models/aws_claude.py
468
467
  agno/utils/models/claude.py
469
468
  agno/utils/models/cohere.py
470
469
  agno/utils/models/llama.py
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agno"
3
- version = "2.0.9"
3
+ version = "2.0.11"
4
4
  description = "Agno: a lightweight library for building Multi-Agent Systems"
5
5
  requires-python = ">=3.7,<4"
6
6
  readme = "README.md"