agno 2.0.3__tar.gz → 2.0.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 (526) hide show
  1. {agno-2.0.3 → agno-2.0.4}/PKG-INFO +1 -1
  2. {agno-2.0.3 → agno-2.0.4}/agno/agent/agent.py +162 -86
  3. {agno-2.0.3 → agno-2.0.4}/agno/db/dynamo/dynamo.py +8 -0
  4. {agno-2.0.3 → agno-2.0.4}/agno/db/firestore/firestore.py +8 -1
  5. {agno-2.0.3 → agno-2.0.4}/agno/db/gcs_json/gcs_json_db.py +9 -0
  6. {agno-2.0.3 → agno-2.0.4}/agno/db/json/json_db.py +8 -0
  7. {agno-2.0.3 → agno-2.0.4}/agno/db/mongo/mongo.py +10 -1
  8. {agno-2.0.3 → agno-2.0.4}/agno/db/mysql/mysql.py +10 -0
  9. {agno-2.0.3 → agno-2.0.4}/agno/db/postgres/postgres.py +16 -8
  10. {agno-2.0.3 → agno-2.0.4}/agno/db/redis/redis.py +6 -0
  11. {agno-2.0.3 → agno-2.0.4}/agno/db/singlestore/schemas.py +1 -1
  12. {agno-2.0.3 → agno-2.0.4}/agno/db/singlestore/singlestore.py +8 -1
  13. {agno-2.0.3 → agno-2.0.4}/agno/db/sqlite/sqlite.py +9 -1
  14. {agno-2.0.3 → agno-2.0.4}/agno/db/utils.py +14 -0
  15. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/knowledge.py +91 -65
  16. {agno-2.0.3 → agno-2.0.4}/agno/models/base.py +2 -2
  17. {agno-2.0.3 → agno-2.0.4}/agno/models/openai/chat.py +3 -0
  18. {agno-2.0.3 → agno-2.0.4}/agno/models/openai/responses.py +6 -0
  19. {agno-2.0.3 → agno-2.0.4}/agno/models/response.py +5 -0
  20. agno-2.0.4/agno/models/siliconflow/__init__.py +5 -0
  21. agno-2.0.4/agno/models/siliconflow/siliconflow.py +25 -0
  22. {agno-2.0.3 → agno-2.0.4}/agno/os/app.py +4 -1
  23. {agno-2.0.3 → agno-2.0.4}/agno/os/auth.py +24 -14
  24. {agno-2.0.3 → agno-2.0.4}/agno/os/router.py +128 -55
  25. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/evals/utils.py +9 -9
  26. agno-2.0.4/agno/os/routers/health.py +26 -0
  27. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/knowledge/knowledge.py +11 -11
  28. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/session/session.py +24 -8
  29. {agno-2.0.3 → agno-2.0.4}/agno/os/schema.py +8 -2
  30. {agno-2.0.3 → agno-2.0.4}/agno/run/workflow.py +64 -10
  31. {agno-2.0.3 → agno-2.0.4}/agno/session/team.py +1 -0
  32. {agno-2.0.3 → agno-2.0.4}/agno/team/team.py +192 -92
  33. {agno-2.0.3 → agno-2.0.4}/agno/tools/mem0.py +11 -17
  34. {agno-2.0.3 → agno-2.0.4}/agno/tools/memory.py +34 -6
  35. agno-2.0.4/agno/utils/common.py +132 -0
  36. {agno-2.0.3 → agno-2.0.4}/agno/utils/streamlit.py +14 -8
  37. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/chroma/chromadb.py +8 -2
  38. {agno-2.0.3 → agno-2.0.4}/agno/workflow/step.py +111 -13
  39. {agno-2.0.3 → agno-2.0.4}/agno/workflow/workflow.py +16 -13
  40. {agno-2.0.3 → agno-2.0.4}/agno.egg-info/PKG-INFO +1 -1
  41. {agno-2.0.3 → agno-2.0.4}/agno.egg-info/SOURCES.txt +3 -0
  42. {agno-2.0.3 → agno-2.0.4}/pyproject.toml +1 -1
  43. agno-2.0.3/agno/utils/common.py +0 -43
  44. {agno-2.0.3 → agno-2.0.4}/LICENSE +0 -0
  45. {agno-2.0.3 → agno-2.0.4}/README.md +0 -0
  46. {agno-2.0.3 → agno-2.0.4}/agno/__init__.py +0 -0
  47. {agno-2.0.3 → agno-2.0.4}/agno/agent/__init__.py +0 -0
  48. {agno-2.0.3 → agno-2.0.4}/agno/api/__init__.py +0 -0
  49. {agno-2.0.3 → agno-2.0.4}/agno/api/agent.py +0 -0
  50. {agno-2.0.3 → agno-2.0.4}/agno/api/api.py +0 -0
  51. {agno-2.0.3 → agno-2.0.4}/agno/api/evals.py +0 -0
  52. {agno-2.0.3 → agno-2.0.4}/agno/api/os.py +0 -0
  53. {agno-2.0.3 → agno-2.0.4}/agno/api/routes.py +0 -0
  54. {agno-2.0.3 → agno-2.0.4}/agno/api/schemas/__init__.py +0 -0
  55. {agno-2.0.3 → agno-2.0.4}/agno/api/schemas/agent.py +0 -0
  56. {agno-2.0.3 → agno-2.0.4}/agno/api/schemas/evals.py +0 -0
  57. {agno-2.0.3 → agno-2.0.4}/agno/api/schemas/os.py +0 -0
  58. {agno-2.0.3 → agno-2.0.4}/agno/api/schemas/response.py +0 -0
  59. {agno-2.0.3 → agno-2.0.4}/agno/api/schemas/team.py +0 -0
  60. {agno-2.0.3 → agno-2.0.4}/agno/api/schemas/utils.py +0 -0
  61. {agno-2.0.3 → agno-2.0.4}/agno/api/schemas/workflows.py +0 -0
  62. {agno-2.0.3 → agno-2.0.4}/agno/api/settings.py +0 -0
  63. {agno-2.0.3 → agno-2.0.4}/agno/api/team.py +0 -0
  64. {agno-2.0.3 → agno-2.0.4}/agno/api/workflow.py +0 -0
  65. {agno-2.0.3 → agno-2.0.4}/agno/cloud/aws/base.py +0 -0
  66. {agno-2.0.3 → agno-2.0.4}/agno/cloud/aws/s3/__init__.py +0 -0
  67. {agno-2.0.3 → agno-2.0.4}/agno/cloud/aws/s3/api_client.py +0 -0
  68. {agno-2.0.3 → agno-2.0.4}/agno/cloud/aws/s3/bucket.py +0 -0
  69. {agno-2.0.3 → agno-2.0.4}/agno/cloud/aws/s3/object.py +0 -0
  70. {agno-2.0.3 → agno-2.0.4}/agno/db/__init__.py +0 -0
  71. {agno-2.0.3 → agno-2.0.4}/agno/db/base.py +0 -0
  72. {agno-2.0.3 → agno-2.0.4}/agno/db/dynamo/__init__.py +0 -0
  73. {agno-2.0.3 → agno-2.0.4}/agno/db/dynamo/schemas.py +0 -0
  74. {agno-2.0.3 → agno-2.0.4}/agno/db/dynamo/utils.py +0 -0
  75. {agno-2.0.3 → agno-2.0.4}/agno/db/firestore/__init__.py +0 -0
  76. {agno-2.0.3 → agno-2.0.4}/agno/db/firestore/schemas.py +0 -0
  77. {agno-2.0.3 → agno-2.0.4}/agno/db/firestore/utils.py +0 -0
  78. {agno-2.0.3 → agno-2.0.4}/agno/db/gcs_json/__init__.py +0 -0
  79. {agno-2.0.3 → agno-2.0.4}/agno/db/gcs_json/utils.py +0 -0
  80. {agno-2.0.3 → agno-2.0.4}/agno/db/in_memory/__init__.py +0 -0
  81. {agno-2.0.3 → agno-2.0.4}/agno/db/in_memory/in_memory_db.py +0 -0
  82. {agno-2.0.3 → agno-2.0.4}/agno/db/in_memory/utils.py +0 -0
  83. {agno-2.0.3 → agno-2.0.4}/agno/db/json/__init__.py +0 -0
  84. {agno-2.0.3 → agno-2.0.4}/agno/db/json/utils.py +0 -0
  85. {agno-2.0.3 → agno-2.0.4}/agno/db/migrations/__init__.py +0 -0
  86. {agno-2.0.3 → agno-2.0.4}/agno/db/migrations/v1_to_v2.py +0 -0
  87. {agno-2.0.3 → agno-2.0.4}/agno/db/mongo/__init__.py +0 -0
  88. {agno-2.0.3 → agno-2.0.4}/agno/db/mongo/schemas.py +0 -0
  89. {agno-2.0.3 → agno-2.0.4}/agno/db/mongo/utils.py +0 -0
  90. {agno-2.0.3 → agno-2.0.4}/agno/db/mysql/__init__.py +0 -0
  91. {agno-2.0.3 → agno-2.0.4}/agno/db/mysql/schemas.py +0 -0
  92. {agno-2.0.3 → agno-2.0.4}/agno/db/mysql/utils.py +0 -0
  93. {agno-2.0.3 → agno-2.0.4}/agno/db/postgres/__init__.py +0 -0
  94. {agno-2.0.3 → agno-2.0.4}/agno/db/postgres/schemas.py +0 -0
  95. {agno-2.0.3 → agno-2.0.4}/agno/db/postgres/utils.py +0 -0
  96. {agno-2.0.3 → agno-2.0.4}/agno/db/redis/__init__.py +0 -0
  97. {agno-2.0.3 → agno-2.0.4}/agno/db/redis/schemas.py +0 -0
  98. {agno-2.0.3 → agno-2.0.4}/agno/db/redis/utils.py +0 -0
  99. {agno-2.0.3 → agno-2.0.4}/agno/db/schemas/__init__.py +0 -0
  100. {agno-2.0.3 → agno-2.0.4}/agno/db/schemas/evals.py +0 -0
  101. {agno-2.0.3 → agno-2.0.4}/agno/db/schemas/knowledge.py +0 -0
  102. {agno-2.0.3 → agno-2.0.4}/agno/db/schemas/memory.py +0 -0
  103. {agno-2.0.3 → agno-2.0.4}/agno/db/schemas/metrics.py +0 -0
  104. {agno-2.0.3 → agno-2.0.4}/agno/db/singlestore/__init__.py +0 -0
  105. {agno-2.0.3 → agno-2.0.4}/agno/db/singlestore/utils.py +0 -0
  106. {agno-2.0.3 → agno-2.0.4}/agno/db/sqlite/__init__.py +0 -0
  107. {agno-2.0.3 → agno-2.0.4}/agno/db/sqlite/schemas.py +0 -0
  108. {agno-2.0.3 → agno-2.0.4}/agno/db/sqlite/utils.py +0 -0
  109. {agno-2.0.3 → agno-2.0.4}/agno/debug.py +0 -0
  110. {agno-2.0.3 → agno-2.0.4}/agno/eval/__init__.py +0 -0
  111. {agno-2.0.3 → agno-2.0.4}/agno/eval/accuracy.py +0 -0
  112. {agno-2.0.3 → agno-2.0.4}/agno/eval/performance.py +0 -0
  113. {agno-2.0.3 → agno-2.0.4}/agno/eval/reliability.py +0 -0
  114. {agno-2.0.3 → agno-2.0.4}/agno/eval/utils.py +0 -0
  115. {agno-2.0.3 → agno-2.0.4}/agno/exceptions.py +0 -0
  116. {agno-2.0.3 → agno-2.0.4}/agno/integrations/__init__.py +0 -0
  117. {agno-2.0.3 → agno-2.0.4}/agno/integrations/discord/__init__.py +0 -0
  118. {agno-2.0.3 → agno-2.0.4}/agno/integrations/discord/client.py +0 -0
  119. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/__init__.py +0 -0
  120. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/chunking/__init__.py +0 -0
  121. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/chunking/agentic.py +0 -0
  122. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/chunking/document.py +0 -0
  123. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/chunking/fixed.py +0 -0
  124. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/chunking/markdown.py +0 -0
  125. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/chunking/recursive.py +0 -0
  126. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/chunking/row.py +0 -0
  127. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/chunking/semantic.py +0 -0
  128. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/chunking/strategy.py +0 -0
  129. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/content.py +0 -0
  130. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/document/__init__.py +0 -0
  131. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/document/base.py +0 -0
  132. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/__init__.py +0 -0
  133. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  134. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/azure_openai.py +0 -0
  135. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/base.py +0 -0
  136. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/cohere.py +0 -0
  137. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/fastembed.py +0 -0
  138. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/fireworks.py +0 -0
  139. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/google.py +0 -0
  140. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/huggingface.py +0 -0
  141. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/jina.py +0 -0
  142. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/langdb.py +0 -0
  143. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/mistral.py +0 -0
  144. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/nebius.py +0 -0
  145. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/ollama.py +0 -0
  146. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/openai.py +0 -0
  147. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  148. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/together.py +0 -0
  149. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/embedder/voyageai.py +0 -0
  150. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/__init__.py +0 -0
  151. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/arxiv_reader.py +0 -0
  152. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/base.py +0 -0
  153. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/csv_reader.py +0 -0
  154. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/docx_reader.py +0 -0
  155. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  156. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/json_reader.py +0 -0
  157. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/markdown_reader.py +0 -0
  158. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/pdf_reader.py +0 -0
  159. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/reader_factory.py +0 -0
  160. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/s3_reader.py +0 -0
  161. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/text_reader.py +0 -0
  162. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/url_reader.py +0 -0
  163. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/web_search_reader.py +0 -0
  164. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/website_reader.py +0 -0
  165. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  166. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reader/youtube_reader.py +0 -0
  167. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/remote_content/__init__.py +0 -0
  168. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/remote_content/remote_content.py +0 -0
  169. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reranker/__init__.py +0 -0
  170. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reranker/base.py +0 -0
  171. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reranker/cohere.py +0 -0
  172. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reranker/infinity.py +0 -0
  173. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  174. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/types.py +0 -0
  175. {agno-2.0.3 → agno-2.0.4}/agno/knowledge/utils.py +0 -0
  176. {agno-2.0.3 → agno-2.0.4}/agno/media.py +0 -0
  177. {agno-2.0.3 → agno-2.0.4}/agno/memory/__init__.py +0 -0
  178. {agno-2.0.3 → agno-2.0.4}/agno/memory/manager.py +0 -0
  179. {agno-2.0.3 → agno-2.0.4}/agno/models/__init__.py +0 -0
  180. {agno-2.0.3 → agno-2.0.4}/agno/models/aimlapi/__init__.py +0 -0
  181. {agno-2.0.3 → agno-2.0.4}/agno/models/aimlapi/aimlapi.py +0 -0
  182. {agno-2.0.3 → agno-2.0.4}/agno/models/anthropic/__init__.py +0 -0
  183. {agno-2.0.3 → agno-2.0.4}/agno/models/anthropic/claude.py +0 -0
  184. {agno-2.0.3 → agno-2.0.4}/agno/models/aws/__init__.py +0 -0
  185. {agno-2.0.3 → agno-2.0.4}/agno/models/aws/bedrock.py +0 -0
  186. {agno-2.0.3 → agno-2.0.4}/agno/models/aws/claude.py +0 -0
  187. {agno-2.0.3 → agno-2.0.4}/agno/models/azure/__init__.py +0 -0
  188. {agno-2.0.3 → agno-2.0.4}/agno/models/azure/ai_foundry.py +0 -0
  189. {agno-2.0.3 → agno-2.0.4}/agno/models/azure/openai_chat.py +0 -0
  190. {agno-2.0.3 → agno-2.0.4}/agno/models/cerebras/__init__.py +0 -0
  191. {agno-2.0.3 → agno-2.0.4}/agno/models/cerebras/cerebras.py +0 -0
  192. {agno-2.0.3 → agno-2.0.4}/agno/models/cerebras/cerebras_openai.py +0 -0
  193. {agno-2.0.3 → agno-2.0.4}/agno/models/cohere/__init__.py +0 -0
  194. {agno-2.0.3 → agno-2.0.4}/agno/models/cohere/chat.py +0 -0
  195. {agno-2.0.3 → agno-2.0.4}/agno/models/dashscope/__init__.py +0 -0
  196. {agno-2.0.3 → agno-2.0.4}/agno/models/dashscope/dashscope.py +0 -0
  197. {agno-2.0.3 → agno-2.0.4}/agno/models/deepinfra/__init__.py +0 -0
  198. {agno-2.0.3 → agno-2.0.4}/agno/models/deepinfra/deepinfra.py +0 -0
  199. {agno-2.0.3 → agno-2.0.4}/agno/models/deepseek/__init__.py +0 -0
  200. {agno-2.0.3 → agno-2.0.4}/agno/models/deepseek/deepseek.py +0 -0
  201. {agno-2.0.3 → agno-2.0.4}/agno/models/defaults.py +0 -0
  202. {agno-2.0.3 → agno-2.0.4}/agno/models/fireworks/__init__.py +0 -0
  203. {agno-2.0.3 → agno-2.0.4}/agno/models/fireworks/fireworks.py +0 -0
  204. {agno-2.0.3 → agno-2.0.4}/agno/models/google/__init__.py +0 -0
  205. {agno-2.0.3 → agno-2.0.4}/agno/models/google/gemini.py +0 -0
  206. {agno-2.0.3 → agno-2.0.4}/agno/models/groq/__init__.py +0 -0
  207. {agno-2.0.3 → agno-2.0.4}/agno/models/groq/groq.py +0 -0
  208. {agno-2.0.3 → agno-2.0.4}/agno/models/huggingface/__init__.py +0 -0
  209. {agno-2.0.3 → agno-2.0.4}/agno/models/huggingface/huggingface.py +0 -0
  210. {agno-2.0.3 → agno-2.0.4}/agno/models/ibm/__init__.py +0 -0
  211. {agno-2.0.3 → agno-2.0.4}/agno/models/ibm/watsonx.py +0 -0
  212. {agno-2.0.3 → agno-2.0.4}/agno/models/internlm/__init__.py +0 -0
  213. {agno-2.0.3 → agno-2.0.4}/agno/models/internlm/internlm.py +0 -0
  214. {agno-2.0.3 → agno-2.0.4}/agno/models/langdb/__init__.py +0 -0
  215. {agno-2.0.3 → agno-2.0.4}/agno/models/langdb/langdb.py +0 -0
  216. {agno-2.0.3 → agno-2.0.4}/agno/models/litellm/__init__.py +0 -0
  217. {agno-2.0.3 → agno-2.0.4}/agno/models/litellm/chat.py +0 -0
  218. {agno-2.0.3 → agno-2.0.4}/agno/models/litellm/litellm_openai.py +0 -0
  219. {agno-2.0.3 → agno-2.0.4}/agno/models/lmstudio/__init__.py +0 -0
  220. {agno-2.0.3 → agno-2.0.4}/agno/models/lmstudio/lmstudio.py +0 -0
  221. {agno-2.0.3 → agno-2.0.4}/agno/models/message.py +0 -0
  222. {agno-2.0.3 → agno-2.0.4}/agno/models/meta/__init__.py +0 -0
  223. {agno-2.0.3 → agno-2.0.4}/agno/models/meta/llama.py +0 -0
  224. {agno-2.0.3 → agno-2.0.4}/agno/models/meta/llama_openai.py +0 -0
  225. {agno-2.0.3 → agno-2.0.4}/agno/models/metrics.py +0 -0
  226. {agno-2.0.3 → agno-2.0.4}/agno/models/mistral/__init__.py +0 -0
  227. {agno-2.0.3 → agno-2.0.4}/agno/models/mistral/mistral.py +0 -0
  228. {agno-2.0.3 → agno-2.0.4}/agno/models/nebius/__init__.py +0 -0
  229. {agno-2.0.3 → agno-2.0.4}/agno/models/nebius/nebius.py +0 -0
  230. {agno-2.0.3 → agno-2.0.4}/agno/models/nvidia/__init__.py +0 -0
  231. {agno-2.0.3 → agno-2.0.4}/agno/models/nvidia/nvidia.py +0 -0
  232. {agno-2.0.3 → agno-2.0.4}/agno/models/ollama/__init__.py +0 -0
  233. {agno-2.0.3 → agno-2.0.4}/agno/models/ollama/chat.py +0 -0
  234. {agno-2.0.3 → agno-2.0.4}/agno/models/openai/__init__.py +0 -0
  235. {agno-2.0.3 → agno-2.0.4}/agno/models/openai/like.py +0 -0
  236. {agno-2.0.3 → agno-2.0.4}/agno/models/openrouter/__init__.py +0 -0
  237. {agno-2.0.3 → agno-2.0.4}/agno/models/openrouter/openrouter.py +0 -0
  238. {agno-2.0.3 → agno-2.0.4}/agno/models/perplexity/__init__.py +0 -0
  239. {agno-2.0.3 → agno-2.0.4}/agno/models/perplexity/perplexity.py +0 -0
  240. {agno-2.0.3 → agno-2.0.4}/agno/models/portkey/__init__.py +0 -0
  241. {agno-2.0.3 → agno-2.0.4}/agno/models/portkey/portkey.py +0 -0
  242. {agno-2.0.3 → agno-2.0.4}/agno/models/sambanova/__init__.py +0 -0
  243. {agno-2.0.3 → agno-2.0.4}/agno/models/sambanova/sambanova.py +0 -0
  244. {agno-2.0.3 → agno-2.0.4}/agno/models/together/__init__.py +0 -0
  245. {agno-2.0.3 → agno-2.0.4}/agno/models/together/together.py +0 -0
  246. {agno-2.0.3 → agno-2.0.4}/agno/models/utils.py +0 -0
  247. {agno-2.0.3 → agno-2.0.4}/agno/models/vercel/__init__.py +0 -0
  248. {agno-2.0.3 → agno-2.0.4}/agno/models/vercel/v0.py +0 -0
  249. {agno-2.0.3 → agno-2.0.4}/agno/models/vllm/__init__.py +0 -0
  250. {agno-2.0.3 → agno-2.0.4}/agno/models/vllm/vllm.py +0 -0
  251. {agno-2.0.3 → agno-2.0.4}/agno/models/xai/__init__.py +0 -0
  252. {agno-2.0.3 → agno-2.0.4}/agno/models/xai/xai.py +0 -0
  253. {agno-2.0.3 → agno-2.0.4}/agno/os/__init__.py +0 -0
  254. {agno-2.0.3 → agno-2.0.4}/agno/os/config.py +0 -0
  255. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/__init__.py +0 -0
  256. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/agui/__init__.py +0 -0
  257. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/agui/agui.py +0 -0
  258. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/agui/router.py +0 -0
  259. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/agui/utils.py +0 -0
  260. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/base.py +0 -0
  261. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/slack/__init__.py +0 -0
  262. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/slack/router.py +0 -0
  263. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/slack/security.py +0 -0
  264. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/slack/slack.py +0 -0
  265. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  266. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/whatsapp/router.py +0 -0
  267. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/whatsapp/security.py +0 -0
  268. {agno-2.0.3 → agno-2.0.4}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  269. {agno-2.0.3 → agno-2.0.4}/agno/os/mcp.py +0 -0
  270. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/__init__.py +0 -0
  271. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/evals/__init__.py +0 -0
  272. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/evals/evals.py +0 -0
  273. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/evals/schemas.py +0 -0
  274. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/knowledge/__init__.py +0 -0
  275. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/knowledge/schemas.py +0 -0
  276. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/memory/__init__.py +0 -0
  277. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/memory/memory.py +0 -0
  278. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/memory/schemas.py +0 -0
  279. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/metrics/__init__.py +0 -0
  280. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/metrics/metrics.py +0 -0
  281. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/metrics/schemas.py +0 -0
  282. {agno-2.0.3 → agno-2.0.4}/agno/os/routers/session/__init__.py +0 -0
  283. {agno-2.0.3 → agno-2.0.4}/agno/os/settings.py +0 -0
  284. {agno-2.0.3 → agno-2.0.4}/agno/os/utils.py +0 -0
  285. {agno-2.0.3 → agno-2.0.4}/agno/py.typed +0 -0
  286. {agno-2.0.3 → agno-2.0.4}/agno/reasoning/__init__.py +0 -0
  287. {agno-2.0.3 → agno-2.0.4}/agno/reasoning/azure_ai_foundry.py +0 -0
  288. {agno-2.0.3 → agno-2.0.4}/agno/reasoning/deepseek.py +0 -0
  289. {agno-2.0.3 → agno-2.0.4}/agno/reasoning/default.py +0 -0
  290. {agno-2.0.3 → agno-2.0.4}/agno/reasoning/groq.py +0 -0
  291. {agno-2.0.3 → agno-2.0.4}/agno/reasoning/helpers.py +0 -0
  292. {agno-2.0.3 → agno-2.0.4}/agno/reasoning/ollama.py +0 -0
  293. {agno-2.0.3 → agno-2.0.4}/agno/reasoning/openai.py +0 -0
  294. {agno-2.0.3 → agno-2.0.4}/agno/reasoning/step.py +0 -0
  295. {agno-2.0.3 → agno-2.0.4}/agno/run/__init__.py +0 -0
  296. {agno-2.0.3 → agno-2.0.4}/agno/run/agent.py +0 -0
  297. {agno-2.0.3 → agno-2.0.4}/agno/run/base.py +0 -0
  298. {agno-2.0.3 → agno-2.0.4}/agno/run/cancel.py +0 -0
  299. {agno-2.0.3 → agno-2.0.4}/agno/run/messages.py +0 -0
  300. {agno-2.0.3 → agno-2.0.4}/agno/run/team.py +0 -0
  301. {agno-2.0.3 → agno-2.0.4}/agno/session/__init__.py +0 -0
  302. {agno-2.0.3 → agno-2.0.4}/agno/session/agent.py +0 -0
  303. {agno-2.0.3 → agno-2.0.4}/agno/session/summary.py +0 -0
  304. {agno-2.0.3 → agno-2.0.4}/agno/session/workflow.py +0 -0
  305. {agno-2.0.3 → agno-2.0.4}/agno/team/__init__.py +0 -0
  306. {agno-2.0.3 → agno-2.0.4}/agno/tools/__init__.py +0 -0
  307. {agno-2.0.3 → agno-2.0.4}/agno/tools/agentql.py +0 -0
  308. {agno-2.0.3 → agno-2.0.4}/agno/tools/airflow.py +0 -0
  309. {agno-2.0.3 → agno-2.0.4}/agno/tools/api.py +0 -0
  310. {agno-2.0.3 → agno-2.0.4}/agno/tools/apify.py +0 -0
  311. {agno-2.0.3 → agno-2.0.4}/agno/tools/arxiv.py +0 -0
  312. {agno-2.0.3 → agno-2.0.4}/agno/tools/aws_lambda.py +0 -0
  313. {agno-2.0.3 → agno-2.0.4}/agno/tools/aws_ses.py +0 -0
  314. {agno-2.0.3 → agno-2.0.4}/agno/tools/baidusearch.py +0 -0
  315. {agno-2.0.3 → agno-2.0.4}/agno/tools/bitbucket.py +0 -0
  316. {agno-2.0.3 → agno-2.0.4}/agno/tools/brandfetch.py +0 -0
  317. {agno-2.0.3 → agno-2.0.4}/agno/tools/bravesearch.py +0 -0
  318. {agno-2.0.3 → agno-2.0.4}/agno/tools/brightdata.py +0 -0
  319. {agno-2.0.3 → agno-2.0.4}/agno/tools/browserbase.py +0 -0
  320. {agno-2.0.3 → agno-2.0.4}/agno/tools/calcom.py +0 -0
  321. {agno-2.0.3 → agno-2.0.4}/agno/tools/calculator.py +0 -0
  322. {agno-2.0.3 → agno-2.0.4}/agno/tools/cartesia.py +0 -0
  323. {agno-2.0.3 → agno-2.0.4}/agno/tools/clickup.py +0 -0
  324. {agno-2.0.3 → agno-2.0.4}/agno/tools/confluence.py +0 -0
  325. {agno-2.0.3 → agno-2.0.4}/agno/tools/crawl4ai.py +0 -0
  326. {agno-2.0.3 → agno-2.0.4}/agno/tools/csv_toolkit.py +0 -0
  327. {agno-2.0.3 → agno-2.0.4}/agno/tools/dalle.py +0 -0
  328. {agno-2.0.3 → agno-2.0.4}/agno/tools/daytona.py +0 -0
  329. {agno-2.0.3 → agno-2.0.4}/agno/tools/decorator.py +0 -0
  330. {agno-2.0.3 → agno-2.0.4}/agno/tools/desi_vocal.py +0 -0
  331. {agno-2.0.3 → agno-2.0.4}/agno/tools/discord.py +0 -0
  332. {agno-2.0.3 → agno-2.0.4}/agno/tools/docker.py +0 -0
  333. {agno-2.0.3 → agno-2.0.4}/agno/tools/duckdb.py +0 -0
  334. {agno-2.0.3 → agno-2.0.4}/agno/tools/duckduckgo.py +0 -0
  335. {agno-2.0.3 → agno-2.0.4}/agno/tools/e2b.py +0 -0
  336. {agno-2.0.3 → agno-2.0.4}/agno/tools/eleven_labs.py +0 -0
  337. {agno-2.0.3 → agno-2.0.4}/agno/tools/email.py +0 -0
  338. {agno-2.0.3 → agno-2.0.4}/agno/tools/evm.py +0 -0
  339. {agno-2.0.3 → agno-2.0.4}/agno/tools/exa.py +0 -0
  340. {agno-2.0.3 → agno-2.0.4}/agno/tools/fal.py +0 -0
  341. {agno-2.0.3 → agno-2.0.4}/agno/tools/file.py +0 -0
  342. {agno-2.0.3 → agno-2.0.4}/agno/tools/financial_datasets.py +0 -0
  343. {agno-2.0.3 → agno-2.0.4}/agno/tools/firecrawl.py +0 -0
  344. {agno-2.0.3 → agno-2.0.4}/agno/tools/function.py +0 -0
  345. {agno-2.0.3 → agno-2.0.4}/agno/tools/giphy.py +0 -0
  346. {agno-2.0.3 → agno-2.0.4}/agno/tools/github.py +0 -0
  347. {agno-2.0.3 → agno-2.0.4}/agno/tools/gmail.py +0 -0
  348. {agno-2.0.3 → agno-2.0.4}/agno/tools/google_bigquery.py +0 -0
  349. {agno-2.0.3 → agno-2.0.4}/agno/tools/google_maps.py +0 -0
  350. {agno-2.0.3 → agno-2.0.4}/agno/tools/googlecalendar.py +0 -0
  351. {agno-2.0.3 → agno-2.0.4}/agno/tools/googlesearch.py +0 -0
  352. {agno-2.0.3 → agno-2.0.4}/agno/tools/googlesheets.py +0 -0
  353. {agno-2.0.3 → agno-2.0.4}/agno/tools/hackernews.py +0 -0
  354. {agno-2.0.3 → agno-2.0.4}/agno/tools/jina.py +0 -0
  355. {agno-2.0.3 → agno-2.0.4}/agno/tools/jira.py +0 -0
  356. {agno-2.0.3 → agno-2.0.4}/agno/tools/knowledge.py +0 -0
  357. {agno-2.0.3 → agno-2.0.4}/agno/tools/linear.py +0 -0
  358. {agno-2.0.3 → agno-2.0.4}/agno/tools/linkup.py +0 -0
  359. {agno-2.0.3 → agno-2.0.4}/agno/tools/local_file_system.py +0 -0
  360. {agno-2.0.3 → agno-2.0.4}/agno/tools/lumalab.py +0 -0
  361. {agno-2.0.3 → agno-2.0.4}/agno/tools/mcp.py +0 -0
  362. {agno-2.0.3 → agno-2.0.4}/agno/tools/memori.py +0 -0
  363. {agno-2.0.3 → agno-2.0.4}/agno/tools/mlx_transcribe.py +0 -0
  364. {agno-2.0.3 → agno-2.0.4}/agno/tools/models/__init__.py +0 -0
  365. {agno-2.0.3 → agno-2.0.4}/agno/tools/models/azure_openai.py +0 -0
  366. {agno-2.0.3 → agno-2.0.4}/agno/tools/models/gemini.py +0 -0
  367. {agno-2.0.3 → agno-2.0.4}/agno/tools/models/groq.py +0 -0
  368. {agno-2.0.3 → agno-2.0.4}/agno/tools/models/morph.py +0 -0
  369. {agno-2.0.3 → agno-2.0.4}/agno/tools/models/nebius.py +0 -0
  370. {agno-2.0.3 → agno-2.0.4}/agno/tools/models_labs.py +0 -0
  371. {agno-2.0.3 → agno-2.0.4}/agno/tools/moviepy_video.py +0 -0
  372. {agno-2.0.3 → agno-2.0.4}/agno/tools/neo4j.py +0 -0
  373. {agno-2.0.3 → agno-2.0.4}/agno/tools/newspaper.py +0 -0
  374. {agno-2.0.3 → agno-2.0.4}/agno/tools/newspaper4k.py +0 -0
  375. {agno-2.0.3 → agno-2.0.4}/agno/tools/openai.py +0 -0
  376. {agno-2.0.3 → agno-2.0.4}/agno/tools/openbb.py +0 -0
  377. {agno-2.0.3 → agno-2.0.4}/agno/tools/opencv.py +0 -0
  378. {agno-2.0.3 → agno-2.0.4}/agno/tools/openweather.py +0 -0
  379. {agno-2.0.3 → agno-2.0.4}/agno/tools/oxylabs.py +0 -0
  380. {agno-2.0.3 → agno-2.0.4}/agno/tools/pandas.py +0 -0
  381. {agno-2.0.3 → agno-2.0.4}/agno/tools/postgres.py +0 -0
  382. {agno-2.0.3 → agno-2.0.4}/agno/tools/pubmed.py +0 -0
  383. {agno-2.0.3 → agno-2.0.4}/agno/tools/python.py +0 -0
  384. {agno-2.0.3 → agno-2.0.4}/agno/tools/reasoning.py +0 -0
  385. {agno-2.0.3 → agno-2.0.4}/agno/tools/reddit.py +0 -0
  386. {agno-2.0.3 → agno-2.0.4}/agno/tools/replicate.py +0 -0
  387. {agno-2.0.3 → agno-2.0.4}/agno/tools/resend.py +0 -0
  388. {agno-2.0.3 → agno-2.0.4}/agno/tools/scrapegraph.py +0 -0
  389. {agno-2.0.3 → agno-2.0.4}/agno/tools/searxng.py +0 -0
  390. {agno-2.0.3 → agno-2.0.4}/agno/tools/serpapi.py +0 -0
  391. {agno-2.0.3 → agno-2.0.4}/agno/tools/serper.py +0 -0
  392. {agno-2.0.3 → agno-2.0.4}/agno/tools/shell.py +0 -0
  393. {agno-2.0.3 → agno-2.0.4}/agno/tools/slack.py +0 -0
  394. {agno-2.0.3 → agno-2.0.4}/agno/tools/sleep.py +0 -0
  395. {agno-2.0.3 → agno-2.0.4}/agno/tools/spider.py +0 -0
  396. {agno-2.0.3 → agno-2.0.4}/agno/tools/sql.py +0 -0
  397. {agno-2.0.3 → agno-2.0.4}/agno/tools/streamlit/__init__.py +0 -0
  398. {agno-2.0.3 → agno-2.0.4}/agno/tools/streamlit/components.py +0 -0
  399. {agno-2.0.3 → agno-2.0.4}/agno/tools/tavily.py +0 -0
  400. {agno-2.0.3 → agno-2.0.4}/agno/tools/telegram.py +0 -0
  401. {agno-2.0.3 → agno-2.0.4}/agno/tools/todoist.py +0 -0
  402. {agno-2.0.3 → agno-2.0.4}/agno/tools/tool_registry.py +0 -0
  403. {agno-2.0.3 → agno-2.0.4}/agno/tools/toolkit.py +0 -0
  404. {agno-2.0.3 → agno-2.0.4}/agno/tools/trafilatura.py +0 -0
  405. {agno-2.0.3 → agno-2.0.4}/agno/tools/trello.py +0 -0
  406. {agno-2.0.3 → agno-2.0.4}/agno/tools/twilio.py +0 -0
  407. {agno-2.0.3 → agno-2.0.4}/agno/tools/user_control_flow.py +0 -0
  408. {agno-2.0.3 → agno-2.0.4}/agno/tools/valyu.py +0 -0
  409. {agno-2.0.3 → agno-2.0.4}/agno/tools/visualization.py +0 -0
  410. {agno-2.0.3 → agno-2.0.4}/agno/tools/webbrowser.py +0 -0
  411. {agno-2.0.3 → agno-2.0.4}/agno/tools/webex.py +0 -0
  412. {agno-2.0.3 → agno-2.0.4}/agno/tools/website.py +0 -0
  413. {agno-2.0.3 → agno-2.0.4}/agno/tools/webtools.py +0 -0
  414. {agno-2.0.3 → agno-2.0.4}/agno/tools/whatsapp.py +0 -0
  415. {agno-2.0.3 → agno-2.0.4}/agno/tools/wikipedia.py +0 -0
  416. {agno-2.0.3 → agno-2.0.4}/agno/tools/workflow.py +0 -0
  417. {agno-2.0.3 → agno-2.0.4}/agno/tools/x.py +0 -0
  418. {agno-2.0.3 → agno-2.0.4}/agno/tools/yfinance.py +0 -0
  419. {agno-2.0.3 → agno-2.0.4}/agno/tools/youtube.py +0 -0
  420. {agno-2.0.3 → agno-2.0.4}/agno/tools/zendesk.py +0 -0
  421. {agno-2.0.3 → agno-2.0.4}/agno/tools/zep.py +0 -0
  422. {agno-2.0.3 → agno-2.0.4}/agno/tools/zoom.py +0 -0
  423. {agno-2.0.3 → agno-2.0.4}/agno/utils/__init__.py +0 -0
  424. {agno-2.0.3 → agno-2.0.4}/agno/utils/audio.py +0 -0
  425. {agno-2.0.3 → agno-2.0.4}/agno/utils/certs.py +0 -0
  426. {agno-2.0.3 → agno-2.0.4}/agno/utils/code_execution.py +0 -0
  427. {agno-2.0.3 → agno-2.0.4}/agno/utils/dttm.py +0 -0
  428. {agno-2.0.3 → agno-2.0.4}/agno/utils/enum.py +0 -0
  429. {agno-2.0.3 → agno-2.0.4}/agno/utils/env.py +0 -0
  430. {agno-2.0.3 → agno-2.0.4}/agno/utils/events.py +0 -0
  431. {agno-2.0.3 → agno-2.0.4}/agno/utils/format_str.py +0 -0
  432. {agno-2.0.3 → agno-2.0.4}/agno/utils/functions.py +0 -0
  433. {agno-2.0.3 → agno-2.0.4}/agno/utils/gemini.py +0 -0
  434. {agno-2.0.3 → agno-2.0.4}/agno/utils/http.py +0 -0
  435. {agno-2.0.3 → agno-2.0.4}/agno/utils/json_schema.py +0 -0
  436. {agno-2.0.3 → agno-2.0.4}/agno/utils/knowledge.py +0 -0
  437. {agno-2.0.3 → agno-2.0.4}/agno/utils/location.py +0 -0
  438. {agno-2.0.3 → agno-2.0.4}/agno/utils/log.py +0 -0
  439. {agno-2.0.3 → agno-2.0.4}/agno/utils/mcp.py +0 -0
  440. {agno-2.0.3 → agno-2.0.4}/agno/utils/media.py +0 -0
  441. {agno-2.0.3 → agno-2.0.4}/agno/utils/merge_dict.py +0 -0
  442. {agno-2.0.3 → agno-2.0.4}/agno/utils/message.py +0 -0
  443. {agno-2.0.3 → agno-2.0.4}/agno/utils/models/__init__.py +0 -0
  444. {agno-2.0.3 → agno-2.0.4}/agno/utils/models/ai_foundry.py +0 -0
  445. {agno-2.0.3 → agno-2.0.4}/agno/utils/models/aws_claude.py +0 -0
  446. {agno-2.0.3 → agno-2.0.4}/agno/utils/models/claude.py +0 -0
  447. {agno-2.0.3 → agno-2.0.4}/agno/utils/models/cohere.py +0 -0
  448. {agno-2.0.3 → agno-2.0.4}/agno/utils/models/llama.py +0 -0
  449. {agno-2.0.3 → agno-2.0.4}/agno/utils/models/mistral.py +0 -0
  450. {agno-2.0.3 → agno-2.0.4}/agno/utils/models/openai_responses.py +0 -0
  451. {agno-2.0.3 → agno-2.0.4}/agno/utils/models/schema_utils.py +0 -0
  452. {agno-2.0.3 → agno-2.0.4}/agno/utils/models/watsonx.py +0 -0
  453. {agno-2.0.3 → agno-2.0.4}/agno/utils/openai.py +0 -0
  454. {agno-2.0.3 → agno-2.0.4}/agno/utils/pickle.py +0 -0
  455. {agno-2.0.3 → agno-2.0.4}/agno/utils/pprint.py +0 -0
  456. {agno-2.0.3 → agno-2.0.4}/agno/utils/print_response/__init__.py +0 -0
  457. {agno-2.0.3 → agno-2.0.4}/agno/utils/print_response/agent.py +0 -0
  458. {agno-2.0.3 → agno-2.0.4}/agno/utils/print_response/team.py +0 -0
  459. {agno-2.0.3 → agno-2.0.4}/agno/utils/print_response/workflow.py +0 -0
  460. {agno-2.0.3 → agno-2.0.4}/agno/utils/prompts.py +0 -0
  461. {agno-2.0.3 → agno-2.0.4}/agno/utils/reasoning.py +0 -0
  462. {agno-2.0.3 → agno-2.0.4}/agno/utils/response.py +0 -0
  463. {agno-2.0.3 → agno-2.0.4}/agno/utils/response_iterator.py +0 -0
  464. {agno-2.0.3 → agno-2.0.4}/agno/utils/safe_formatter.py +0 -0
  465. {agno-2.0.3 → agno-2.0.4}/agno/utils/shell.py +0 -0
  466. {agno-2.0.3 → agno-2.0.4}/agno/utils/string.py +0 -0
  467. {agno-2.0.3 → agno-2.0.4}/agno/utils/team.py +0 -0
  468. {agno-2.0.3 → agno-2.0.4}/agno/utils/timer.py +0 -0
  469. {agno-2.0.3 → agno-2.0.4}/agno/utils/tools.py +0 -0
  470. {agno-2.0.3 → agno-2.0.4}/agno/utils/web.py +0 -0
  471. {agno-2.0.3 → agno-2.0.4}/agno/utils/whatsapp.py +0 -0
  472. {agno-2.0.3 → agno-2.0.4}/agno/utils/yaml_io.py +0 -0
  473. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/__init__.py +0 -0
  474. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/base.py +0 -0
  475. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/cassandra/__init__.py +0 -0
  476. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/cassandra/cassandra.py +0 -0
  477. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  478. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/cassandra/index.py +0 -0
  479. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/chroma/__init__.py +0 -0
  480. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/clickhouse/__init__.py +0 -0
  481. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  482. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/clickhouse/index.py +0 -0
  483. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/couchbase/__init__.py +0 -0
  484. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/couchbase/couchbase.py +0 -0
  485. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/distance.py +0 -0
  486. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/lancedb/__init__.py +0 -0
  487. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/lancedb/lance_db.py +0 -0
  488. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/langchaindb/__init__.py +0 -0
  489. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  490. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/lightrag/__init__.py +0 -0
  491. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/lightrag/lightrag.py +0 -0
  492. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/llamaindex/__init__.py +0 -0
  493. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  494. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/milvus/__init__.py +0 -0
  495. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/milvus/milvus.py +0 -0
  496. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/mongodb/__init__.py +0 -0
  497. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/mongodb/mongodb.py +0 -0
  498. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/pgvector/__init__.py +0 -0
  499. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/pgvector/index.py +0 -0
  500. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/pgvector/pgvector.py +0 -0
  501. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/pineconedb/__init__.py +0 -0
  502. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  503. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/qdrant/__init__.py +0 -0
  504. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/qdrant/qdrant.py +0 -0
  505. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/search.py +0 -0
  506. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/singlestore/__init__.py +0 -0
  507. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/singlestore/index.py +0 -0
  508. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/singlestore/singlestore.py +0 -0
  509. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/surrealdb/__init__.py +0 -0
  510. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  511. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/upstashdb/__init__.py +0 -0
  512. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  513. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/weaviate/__init__.py +0 -0
  514. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/weaviate/index.py +0 -0
  515. {agno-2.0.3 → agno-2.0.4}/agno/vectordb/weaviate/weaviate.py +0 -0
  516. {agno-2.0.3 → agno-2.0.4}/agno/workflow/__init__.py +0 -0
  517. {agno-2.0.3 → agno-2.0.4}/agno/workflow/condition.py +0 -0
  518. {agno-2.0.3 → agno-2.0.4}/agno/workflow/loop.py +0 -0
  519. {agno-2.0.3 → agno-2.0.4}/agno/workflow/parallel.py +0 -0
  520. {agno-2.0.3 → agno-2.0.4}/agno/workflow/router.py +0 -0
  521. {agno-2.0.3 → agno-2.0.4}/agno/workflow/steps.py +0 -0
  522. {agno-2.0.3 → agno-2.0.4}/agno/workflow/types.py +0 -0
  523. {agno-2.0.3 → agno-2.0.4}/agno.egg-info/dependency_links.txt +0 -0
  524. {agno-2.0.3 → agno-2.0.4}/agno.egg-info/requires.txt +0 -0
  525. {agno-2.0.3 → agno-2.0.4}/agno.egg-info/top_level.txt +0 -0
  526. {agno-2.0.3 → agno-2.0.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.0.3
3
+ Version: 2.0.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
@@ -57,6 +57,7 @@ from agno.run.team import TeamRunOutputEvent
57
57
  from agno.session import AgentSession, SessionSummaryManager
58
58
  from agno.tools import Toolkit
59
59
  from agno.tools.function import Function
60
+ from agno.utils.common import is_typed_dict, validate_typed_dict
60
61
  from agno.utils.events import (
61
62
  create_memory_update_completed_event,
62
63
  create_memory_update_started_event,
@@ -281,7 +282,7 @@ class Agent:
281
282
 
282
283
  # --- Agent Response Model Settings ---
283
284
  # Provide an input schema to validate the input
284
- input_schema: Optional[Type[BaseModel]] = None
285
+ input_schema: Optional[Union[Type[BaseModel], type]] = None
285
286
  # Provide a response model to get the response as a Pydantic model
286
287
  output_schema: Optional[Type[BaseModel]] = None
287
288
  # Provide a secondary model to parse the response from the primary model
@@ -398,13 +399,14 @@ class Agent:
398
399
  timezone_identifier: Optional[str] = None,
399
400
  resolve_in_context: bool = True,
400
401
  additional_input: Optional[List[Union[str, Dict, BaseModel, Message]]] = None,
402
+ user_message_role: str = "user",
401
403
  build_user_context: bool = True,
402
404
  retries: int = 0,
403
405
  delay_between_retries: int = 1,
404
406
  exponential_backoff: bool = False,
405
407
  parser_model: Optional[Model] = None,
406
408
  parser_model_prompt: Optional[str] = None,
407
- input_schema: Optional[Type[BaseModel]] = None,
409
+ input_schema: Optional[Union[Type[BaseModel], type]] = None,
408
410
  output_schema: Optional[Type[BaseModel]] = None,
409
411
  parse_response: bool = True,
410
412
  output_model: Optional[Model] = None,
@@ -495,7 +497,7 @@ class Agent:
495
497
  self.timezone_identifier = timezone_identifier
496
498
  self.resolve_in_context = resolve_in_context
497
499
  self.additional_input = additional_input
498
-
500
+ self.user_message_role = user_message_role
499
501
  self.build_user_context = build_user_context
500
502
 
501
503
  self.retries = retries
@@ -602,8 +604,6 @@ class Agent:
602
604
  if isinstance(input, BaseModel):
603
605
  if isinstance(input, self.input_schema):
604
606
  try:
605
- # Re-validate to catch any field validation errors
606
- input.model_validate(input.model_dump())
607
607
  return input
608
608
  except Exception as e:
609
609
  raise ValueError(f"BaseModel validation failed: {str(e)}")
@@ -614,8 +614,13 @@ class Agent:
614
614
  # Case 2: Message is a dict
615
615
  elif isinstance(input, dict):
616
616
  try:
617
- validated_model = self.input_schema(**input)
618
- return validated_model
617
+ # Check if the schema is a TypedDict
618
+ if is_typed_dict(self.input_schema):
619
+ validated_dict = validate_typed_dict(input, self.input_schema)
620
+ return validated_dict
621
+ else:
622
+ validated_model = self.input_schema(**input)
623
+ return validated_model
619
624
  except Exception as e:
620
625
  raise ValueError(f"Failed to parse dict into {self.input_schema.__name__}: {str(e)}")
621
626
 
@@ -1100,7 +1105,6 @@ class Agent:
1100
1105
  # Resolve dependencies
1101
1106
  if run_dependencies is not None:
1102
1107
  self._resolve_run_dependencies(dependencies=run_dependencies)
1103
-
1104
1108
  add_dependencies = (
1105
1109
  add_dependencies_to_context if add_dependencies_to_context is not None else self.add_dependencies_to_context
1106
1110
  )
@@ -1197,7 +1201,7 @@ class Agent:
1197
1201
  files=files,
1198
1202
  knowledge_filters=effective_filters,
1199
1203
  add_history_to_context=add_history,
1200
- dependencies=dependencies,
1204
+ dependencies=run_dependencies,
1201
1205
  add_dependencies_to_context=add_dependencies,
1202
1206
  add_session_state_to_context=add_session_state,
1203
1207
  **kwargs,
@@ -1278,41 +1282,75 @@ class Agent:
1278
1282
  async def _arun(
1279
1283
  self,
1280
1284
  run_response: RunOutput,
1281
- run_messages: RunMessages,
1285
+ input: Union[str, List, Dict, Message, BaseModel, List[Message]],
1282
1286
  session: AgentSession,
1287
+ session_state: Optional[Dict[str, Any]] = None,
1283
1288
  user_id: Optional[str] = None,
1289
+ images: Optional[Sequence[Image]] = None,
1290
+ videos: Optional[Sequence[Video]] = None,
1291
+ audio: Optional[Sequence[Audio]] = None,
1292
+ files: Optional[Sequence[File]] = None,
1293
+ knowledge_filters: Optional[Dict[str, Any]] = None,
1294
+ add_history_to_context: Optional[bool] = None,
1295
+ add_dependencies_to_context: Optional[bool] = None,
1296
+ add_session_state_to_context: Optional[bool] = None,
1297
+ metadata: Optional[Dict[str, Any]] = None,
1284
1298
  response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
1285
1299
  dependencies: Optional[Dict[str, Any]] = None,
1300
+ **kwargs: Any,
1286
1301
  ) -> RunOutput:
1287
1302
  """Run the Agent and yield the RunOutput.
1288
1303
 
1289
1304
  Steps:
1290
- 1. Reason about the task if reasoning is enabled
1291
- 2. Generate a response from the Model (includes running function calls)
1292
- 3. Update the RunOutput with the model response
1293
- 4. Update Agent Memory
1294
- 5. Calculate session metrics
1295
- 6. Add RunOutput to Agent Session
1296
- 7. Save session to storage
1297
- 8. Optional: Save output to file if save_response_to_file is set
1305
+ 1. Resolve dependencies
1306
+ 2. Prepare run messages
1307
+ 3. Reason about the task if reasoning is enabled
1308
+ 4. Generate a response from the Model (includes running function calls)
1309
+ 5. Update the RunOutput with the model response
1310
+ 6. Update Agent Memory
1311
+ 7. Calculate session metrics
1312
+ 8. Add RunOutput to Agent Session
1313
+ 9. Save session to storage
1298
1314
  """
1299
- # Resolving here for async requirement
1315
+ # 1. Resolving here for async requirement
1300
1316
  if dependencies is not None:
1301
1317
  await self._aresolve_run_dependencies(dependencies)
1302
1318
 
1319
+ # 2. Prepare run messages
1320
+ run_messages: RunMessages = self._get_run_messages(
1321
+ run_response=run_response,
1322
+ input=input,
1323
+ session=session,
1324
+ session_state=session_state,
1325
+ user_id=user_id,
1326
+ audio=audio,
1327
+ images=images,
1328
+ videos=videos,
1329
+ files=files,
1330
+ knowledge_filters=knowledge_filters,
1331
+ add_history_to_context=add_history_to_context,
1332
+ dependencies=dependencies,
1333
+ add_dependencies_to_context=add_dependencies_to_context,
1334
+ add_session_state_to_context=add_session_state_to_context,
1335
+ metadata=metadata,
1336
+ **kwargs,
1337
+ )
1338
+ if len(run_messages.messages) == 0:
1339
+ log_error("No messages to be sent to the model.")
1340
+
1303
1341
  log_debug(f"Agent Run Start: {run_response.run_id}", center=True)
1304
1342
 
1305
1343
  # Register run for cancellation tracking
1306
1344
  register_run(run_response.run_id) # type: ignore
1307
1345
 
1308
1346
  self.model = cast(Model, self.model)
1309
- # 1. Reason about the task if reasoning is enabled
1347
+ # 3. Reason about the task if reasoning is enabled
1310
1348
  await self._ahandle_reasoning(run_response=run_response, run_messages=run_messages)
1311
1349
 
1312
1350
  # Check for cancellation before model call
1313
1351
  raise_if_cancelled(run_response.run_id) # type: ignore
1314
1352
 
1315
- # 2. Generate a response from the Model (includes running function calls)
1353
+ # 4. Generate a response from the Model (includes running function calls)
1316
1354
  model_response: ModelResponse = await self.model.aresponse(
1317
1355
  messages=run_messages.messages,
1318
1356
  tools=self._tools_for_model,
@@ -1331,7 +1369,7 @@ class Agent:
1331
1369
  # If a parser model is provided, structure the response separately
1332
1370
  await self._aparse_response_with_parser_model(model_response=model_response, run_messages=run_messages)
1333
1371
 
1334
- # 3. Update the RunOutput with the model response
1372
+ # 5. Update the RunOutput with the model response
1335
1373
  self._update_run_response(model_response=model_response, run_response=run_response, run_messages=run_messages)
1336
1374
 
1337
1375
  if self.store_media:
@@ -1345,13 +1383,13 @@ class Agent:
1345
1383
  run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
1346
1384
  )
1347
1385
 
1348
- # 5. Update Agent Memory
1386
+ # 6. Update Agent Memory
1349
1387
  async for _ in self._amake_memories_and_summaries(
1350
1388
  run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
1351
1389
  ):
1352
1390
  pass
1353
1391
 
1354
- # 6. Calculate session metrics
1392
+ # 7. Calculate session metrics
1355
1393
  self._update_session_metrics(session=session, run_response=run_response)
1356
1394
 
1357
1395
  run_response.status = RunStatus.completed
@@ -1363,15 +1401,15 @@ class Agent:
1363
1401
  if run_response.metrics:
1364
1402
  run_response.metrics.stop_timer()
1365
1403
 
1366
- # 6. Optional: Save output to file if save_response_to_file is set
1404
+ # Optional: Save output to file if save_response_to_file is set
1367
1405
  self.save_run_response_to_file(
1368
1406
  run_response=run_response, input=run_messages.user_message, session_id=session.session_id, user_id=user_id
1369
1407
  )
1370
1408
 
1371
- # 7. Add RunOutput to Agent Session
1409
+ # 8. Add RunOutput to Agent Session
1372
1410
  session.upsert_run(run=run_response)
1373
1411
 
1374
- # 8. Save session to storage
1412
+ # 9. Save session to storage
1375
1413
  self.save_session(session=session)
1376
1414
 
1377
1415
  # Log Agent Telemetry
@@ -1387,30 +1425,61 @@ class Agent:
1387
1425
  async def _arun_stream(
1388
1426
  self,
1389
1427
  run_response: RunOutput,
1390
- run_messages: RunMessages,
1391
1428
  session: AgentSession,
1429
+ input: Union[str, List, Dict, Message, BaseModel, List[Message]],
1430
+ session_state: Optional[Dict[str, Any]] = None,
1431
+ audio: Optional[Sequence[Audio]] = None,
1432
+ images: Optional[Sequence[Image]] = None,
1433
+ videos: Optional[Sequence[Video]] = None,
1434
+ files: Optional[Sequence[File]] = None,
1435
+ knowledge_filters: Optional[Dict[str, Any]] = None,
1436
+ add_history_to_context: Optional[bool] = None,
1437
+ add_dependencies_to_context: Optional[bool] = None,
1438
+ add_session_state_to_context: Optional[bool] = None,
1439
+ metadata: Optional[Dict[str, Any]] = None,
1440
+ dependencies: Optional[Dict[str, Any]] = None,
1392
1441
  user_id: Optional[str] = None,
1393
1442
  response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
1394
1443
  stream_intermediate_steps: bool = False,
1395
1444
  workflow_context: Optional[Dict] = None,
1396
1445
  yield_run_response: Optional[bool] = None,
1397
- dependencies: Optional[Dict[str, Any]] = None,
1446
+ **kwargs: Any,
1398
1447
  ) -> AsyncIterator[Union[RunOutputEvent, RunOutput]]:
1399
1448
  """Run the Agent and yield the RunOutput.
1400
1449
 
1401
1450
  Steps:
1402
- 1. Reason about the task if reasoning is enabled
1403
- 2. Generate a response from the Model (includes running function calls)
1404
- 3. Add the RunOutput to the Agent Session
1405
- 4. Update Agent Memory
1406
- 5. Calculate session metrics
1407
- 6. Add RunOutput to Agent Session
1408
- 7. Save session to storage
1451
+ 1. Resolve dependencies
1452
+ 2. Prepare run messages
1453
+ 3. Reason about the task if reasoning is enabled
1454
+ 4. Generate a response from the Model (includes running function calls)
1455
+ 5. Update Agent Memory
1456
+ 6. Calculate session metrics
1457
+ 7. Add RunOutput to Agent Session
1458
+ 8. Save session to storage
1409
1459
  """
1410
- run_dependencies = dependencies if dependencies is not None else self.dependencies
1411
- # Resolving here for async requirement
1412
- if run_dependencies is not None:
1413
- await self._aresolve_run_dependencies(dependencies=run_dependencies)
1460
+ # 1. Resolving here for async requirement
1461
+ if dependencies is not None:
1462
+ await self._aresolve_run_dependencies(dependencies=dependencies)
1463
+
1464
+ # 2. Prepare run messages
1465
+ run_messages: RunMessages = self._get_run_messages(
1466
+ run_response=run_response,
1467
+ input=input,
1468
+ session=session,
1469
+ session_state=session_state,
1470
+ user_id=user_id,
1471
+ audio=audio,
1472
+ images=images,
1473
+ videos=videos,
1474
+ files=files,
1475
+ knowledge_filters=knowledge_filters,
1476
+ add_history_to_context=add_history_to_context,
1477
+ dependencies=dependencies,
1478
+ add_dependencies_to_context=add_dependencies_to_context,
1479
+ add_session_state_to_context=add_session_state_to_context,
1480
+ metadata=metadata,
1481
+ **kwargs,
1482
+ )
1414
1483
 
1415
1484
  log_debug(f"Agent Run Start: {run_response.run_id}", center=True)
1416
1485
 
@@ -1422,7 +1491,7 @@ class Agent:
1422
1491
  if stream_intermediate_steps:
1423
1492
  yield self._handle_event(create_run_started_event(run_response), run_response, workflow_context)
1424
1493
 
1425
- # 1. Reason about the task if reasoning is enabled
1494
+ # 3. Reason about the task if reasoning is enabled
1426
1495
  async for item in self._ahandle_reasoning_stream(run_response=run_response, run_messages=run_messages):
1427
1496
  raise_if_cancelled(run_response.run_id) # type: ignore
1428
1497
  yield item
@@ -1430,7 +1499,7 @@ class Agent:
1430
1499
  # Check for cancellation before model processing
1431
1500
  raise_if_cancelled(run_response.run_id) # type: ignore
1432
1501
 
1433
- # 2. Generate a response from the Model
1502
+ # 4. Generate a response from the Model
1434
1503
  if self.output_model is None:
1435
1504
  async for event in self._ahandle_model_response_stream(
1436
1505
  session=session,
@@ -1513,7 +1582,7 @@ class Agent:
1513
1582
  if run_response.metrics:
1514
1583
  run_response.metrics.stop_timer()
1515
1584
 
1516
- # 8. Optional: Save output to file if save_response_to_file is set
1585
+ # Optional: Save output to file if save_response_to_file is set
1517
1586
  self.save_run_response_to_file(
1518
1587
  run_response=run_response,
1519
1588
  input=run_messages.user_message,
@@ -1521,10 +1590,10 @@ class Agent:
1521
1590
  user_id=user_id,
1522
1591
  )
1523
1592
 
1524
- # 6. Add RunOutput to Agent Session
1593
+ # 7. Add RunOutput to Agent Session
1525
1594
  session.upsert_run(run=run_response)
1526
1595
 
1527
- # 7. Save session to storage
1596
+ # 8. Save session to storage
1528
1597
  self.save_session(session=session)
1529
1598
 
1530
1599
  if stream_intermediate_steps:
@@ -1666,10 +1735,6 @@ class Agent:
1666
1735
  # Determine run dependencies
1667
1736
  run_dependencies = dependencies if dependencies is not None else self.dependencies
1668
1737
 
1669
- # Resolve callable dependencies if present
1670
- if run_dependencies is not None:
1671
- self._resolve_run_dependencies(dependencies=run_dependencies)
1672
-
1673
1738
  add_dependencies = (
1674
1739
  add_dependencies_to_context if add_dependencies_to_context is not None else self.add_dependencies_to_context
1675
1740
  )
@@ -1750,51 +1815,52 @@ class Agent:
1750
1815
 
1751
1816
  for attempt in range(num_attempts):
1752
1817
  try:
1753
- # Prepare run messages
1754
- run_messages: RunMessages = self._get_run_messages(
1755
- run_response=run_response,
1756
- input=validated_input,
1757
- session=agent_session,
1758
- session_state=session_state,
1759
- user_id=user_id,
1760
- audio=audio,
1761
- images=images,
1762
- videos=videos,
1763
- files=files,
1764
- knowledge_filters=effective_filters,
1765
- add_history_to_context=add_history,
1766
- dependencies=dependencies,
1767
- add_dependencies_to_context=add_dependencies,
1768
- add_session_state_to_context=add_session_state,
1769
- metadata=metadata,
1770
- **kwargs,
1771
- )
1772
- if len(run_messages.messages) == 0:
1773
- log_error("No messages to be sent to the model.")
1774
-
1775
- run_messages = run_messages
1776
-
1777
1818
  # Pass the new run_response to _arun
1778
1819
  if stream:
1779
1820
  return self._arun_stream( # type: ignore
1780
1821
  run_response=run_response,
1781
- run_messages=run_messages,
1822
+ input=validated_input,
1782
1823
  user_id=user_id,
1783
1824
  session=agent_session,
1825
+ session_state=session_state,
1826
+ audio=audio,
1827
+ images=images,
1828
+ videos=videos,
1829
+ files=files,
1830
+ knowledge_filters=knowledge_filters,
1831
+ add_history_to_context=add_history,
1832
+ add_dependencies_to_context=add_dependencies,
1833
+ add_session_state_to_context=add_session_state,
1834
+ metadata=metadata,
1784
1835
  response_format=response_format,
1785
1836
  stream_intermediate_steps=stream_intermediate_steps,
1786
1837
  workflow_context=workflow_context,
1787
1838
  yield_run_response=yield_run_response,
1788
1839
  dependencies=run_dependencies,
1840
+ **kwargs,
1789
1841
  ) # type: ignore[assignment]
1790
1842
  else:
1791
1843
  return self._arun( # type: ignore
1792
1844
  run_response=run_response,
1793
- run_messages=run_messages,
1845
+ input=validated_input,
1794
1846
  user_id=user_id,
1795
1847
  session=agent_session,
1848
+ session_state=session_state,
1849
+ audio=audio,
1850
+ images=images,
1851
+ videos=videos,
1852
+ files=files,
1853
+ knowledge_filters=knowledge_filters,
1854
+ add_history_to_context=add_history,
1855
+ add_dependencies_to_context=add_dependencies,
1856
+ add_session_state_to_context=add_session_state,
1857
+ metadata=metadata,
1796
1858
  response_format=response_format,
1859
+ stream_intermediate_steps=stream_intermediate_steps,
1860
+ workflow_context=workflow_context,
1861
+ yield_run_response=yield_run_response,
1797
1862
  dependencies=run_dependencies,
1863
+ **kwargs,
1798
1864
  )
1799
1865
  except ModelProviderError as e:
1800
1866
  log_warning(f"Attempt {attempt + 1}/{num_attempts} failed: {str(e)}")
@@ -4082,7 +4148,7 @@ class Agent:
4082
4148
  return json_response_format
4083
4149
 
4084
4150
  def _resolve_run_dependencies(self, dependencies: Dict[str, Any]) -> None:
4085
- from inspect import signature
4151
+ from inspect import iscoroutine, iscoroutinefunction, signature
4086
4152
 
4087
4153
  # Dependencies should already be resolved in run() method
4088
4154
  log_debug("Resolving dependencies")
@@ -4091,7 +4157,10 @@ class Agent:
4091
4157
  return
4092
4158
 
4093
4159
  for key, value in dependencies.items():
4094
- if callable(value):
4160
+ if iscoroutine(value) or iscoroutinefunction(value):
4161
+ log_warning(f"Dependency {key} is a coroutine. Use agent.arun() or agent.aprint_response() instead.")
4162
+ continue
4163
+ elif callable(value):
4095
4164
  try:
4096
4165
  sig = signature(value)
4097
4166
  result = value(agent=self) if "agent" in sig.parameters else value()
@@ -4103,7 +4172,7 @@ class Agent:
4103
4172
  dependencies[key] = value
4104
4173
 
4105
4174
  async def _aresolve_run_dependencies(self, dependencies: Dict[str, Any]) -> None:
4106
- from inspect import iscoroutine, signature
4175
+ from inspect import iscoroutine, iscoroutinefunction, signature
4107
4176
 
4108
4177
  log_debug("Resolving context (async)")
4109
4178
  if not isinstance(dependencies, dict):
@@ -4114,14 +4183,12 @@ class Agent:
4114
4183
  if not callable(value):
4115
4184
  dependencies[key] = value
4116
4185
  continue
4117
-
4118
4186
  try:
4119
4187
  sig = signature(value)
4120
4188
  result = value(agent=self) if "agent" in sig.parameters else value()
4121
4189
 
4122
- if iscoroutine(result):
4190
+ if iscoroutine(result) or iscoroutinefunction(result):
4123
4191
  result = await result
4124
-
4125
4192
  dependencies[key] = result
4126
4193
  except Exception as e:
4127
4194
  log_warning(f"Failed to resolve context for '{key}': {e}")
@@ -4851,7 +4918,7 @@ class Agent:
4851
4918
 
4852
4919
  # 3.3.15 Add the session state to the system message
4853
4920
  if self.add_session_state_to_context and session_state is not None:
4854
- system_message_content += f"\n<session_state>\n{session_state}\n</session_state>\n\n"
4921
+ system_message_content += self._get_formatted_session_state_for_system_message(session_state)
4855
4922
 
4856
4923
  # Return the system message
4857
4924
  return (
@@ -4860,6 +4927,9 @@ class Agent:
4860
4927
  else None
4861
4928
  )
4862
4929
 
4930
+ def _get_formatted_session_state_for_system_message(self, session_state: Dict[str, Any]) -> str:
4931
+ return f"\n<session_state>\n{session_state}\n</session_state>\n\n"
4932
+
4863
4933
  def _get_user_message(
4864
4934
  self,
4865
4935
  *,
@@ -5041,7 +5111,7 @@ class Agent:
5041
5111
  files: Optional[Sequence[File]] = None,
5042
5112
  knowledge_filters: Optional[Dict[str, Any]] = None,
5043
5113
  add_history_to_context: Optional[bool] = None,
5044
- run_dependencies: Optional[Dict[str, Any]] = None,
5114
+ dependencies: Optional[Dict[str, Any]] = None,
5045
5115
  add_dependencies_to_context: Optional[bool] = None,
5046
5116
  add_session_state_to_context: Optional[bool] = None,
5047
5117
  metadata: Optional[Dict[str, Any]] = None,
@@ -5079,7 +5149,7 @@ class Agent:
5079
5149
  session=session,
5080
5150
  session_state=session_state,
5081
5151
  user_id=user_id,
5082
- dependencies=run_dependencies,
5152
+ dependencies=dependencies,
5083
5153
  metadata=metadata,
5084
5154
  add_session_state_to_context=add_session_state_to_context,
5085
5155
  )
@@ -5160,7 +5230,7 @@ class Agent:
5160
5230
  videos=videos,
5161
5231
  files=files,
5162
5232
  knowledge_filters=knowledge_filters,
5163
- run_dependencies=run_dependencies,
5233
+ dependencies=dependencies,
5164
5234
  add_dependencies_to_context=add_dependencies_to_context,
5165
5235
  metadata=metadata,
5166
5236
  **kwargs,
@@ -5173,7 +5243,13 @@ class Agent:
5173
5243
  # 4.3 If input is provided as a dict, try to validate it as a Message
5174
5244
  elif isinstance(input, dict):
5175
5245
  try:
5176
- user_message = Message.model_validate(input)
5246
+ if self.input_schema and is_typed_dict(self.input_schema):
5247
+ import json
5248
+
5249
+ content = json.dumps(input, indent=2, ensure_ascii=False)
5250
+ user_message = Message(role=self.user_message_role, content=content)
5251
+ else:
5252
+ user_message = Message.model_validate(input)
5177
5253
  except Exception as e:
5178
5254
  log_warning(f"Failed to validate message: {e}")
5179
5255
 
@@ -30,6 +30,7 @@ from agno.db.dynamo.utils import (
30
30
  from agno.db.schemas.evals import EvalFilterType, EvalRunRecord, EvalType
31
31
  from agno.db.schemas.knowledge import KnowledgeRow
32
32
  from agno.db.schemas.memory import UserMemory
33
+ from agno.db.utils import generate_deterministic_id
33
34
  from agno.session import AgentSession, Session, TeamSession, WorkflowSession
34
35
  from agno.utils.log import log_debug, log_error
35
36
 
@@ -55,6 +56,7 @@ class DynamoDb(BaseDb):
55
56
  metrics_table: Optional[str] = None,
56
57
  eval_table: Optional[str] = None,
57
58
  knowledge_table: Optional[str] = None,
59
+ id: Optional[str] = None,
58
60
  ):
59
61
  """
60
62
  Interface for interacting with a DynamoDB database.
@@ -69,8 +71,14 @@ class DynamoDb(BaseDb):
69
71
  metrics_table: The name of the metrics table.
70
72
  eval_table: The name of the eval table.
71
73
  knowledge_table: The name of the knowledge table.
74
+ id: ID of the database.
72
75
  """
76
+ if id is None:
77
+ seed = str(db_client) if db_client else f"{region_name}_{aws_access_key_id}"
78
+ id = generate_deterministic_id(seed)
79
+
73
80
  super().__init__(
81
+ id=id,
74
82
  session_table=session_table,
75
83
  memory_table=memory_table,
76
84
  metrics_table=metrics_table,
@@ -16,7 +16,7 @@ from agno.db.firestore.utils import (
16
16
  from agno.db.schemas.evals import EvalFilterType, EvalRunRecord, EvalType
17
17
  from agno.db.schemas.knowledge import KnowledgeRow
18
18
  from agno.db.schemas.memory import UserMemory
19
- from agno.db.utils import deserialize_session_json_fields, serialize_session_json_fields
19
+ from agno.db.utils import deserialize_session_json_fields, generate_deterministic_id, serialize_session_json_fields
20
20
  from agno.session import AgentSession, Session, TeamSession, WorkflowSession
21
21
  from agno.utils.log import log_debug, log_error, log_info
22
22
 
@@ -38,6 +38,7 @@ class FirestoreDb(BaseDb):
38
38
  metrics_collection: Optional[str] = None,
39
39
  eval_collection: Optional[str] = None,
40
40
  knowledge_collection: Optional[str] = None,
41
+ id: Optional[str] = None,
41
42
  ):
42
43
  """
43
44
  Interface for interacting with a Firestore database.
@@ -50,11 +51,17 @@ class FirestoreDb(BaseDb):
50
51
  metrics_collection (Optional[str]): Name of the collection to store metrics.
51
52
  eval_collection (Optional[str]): Name of the collection to store evaluation runs.
52
53
  knowledge_collection (Optional[str]): Name of the collection to store knowledge documents.
54
+ id (Optional[str]): ID of the database.
53
55
 
54
56
  Raises:
55
57
  ValueError: If neither project_id nor db_client is provided.
56
58
  """
59
+ if id is None:
60
+ seed = project_id or str(db_client)
61
+ id = generate_deterministic_id(seed)
62
+
57
63
  super().__init__(
64
+ id=id,
58
65
  session_table=session_collection,
59
66
  memory_table=memory_collection,
60
67
  metrics_table=metrics_collection,
@@ -14,6 +14,7 @@ from agno.db.gcs_json.utils import (
14
14
  from agno.db.schemas.evals import EvalFilterType, EvalRunRecord, EvalType
15
15
  from agno.db.schemas.knowledge import KnowledgeRow
16
16
  from agno.db.schemas.memory import UserMemory
17
+ from agno.db.utils import generate_deterministic_id
17
18
  from agno.session import AgentSession, Session, TeamSession, WorkflowSession
18
19
  from agno.utils.log import log_debug, log_error, log_info, log_warning
19
20
 
@@ -35,6 +36,7 @@ class GcsJsonDb(BaseDb):
35
36
  knowledge_table: Optional[str] = None,
36
37
  project: Optional[str] = None,
37
38
  credentials: Optional[Any] = None,
39
+ id: Optional[str] = None,
38
40
  ):
39
41
  """
40
42
  Interface for interacting with JSON files stored in Google Cloud Storage as database.
@@ -50,8 +52,15 @@ class GcsJsonDb(BaseDb):
50
52
  project (Optional[str]): GCP project ID. If None, uses default project.
51
53
  location (Optional[str]): GCS bucket location. If None, uses default location.
52
54
  credentials (Optional[Any]): GCP credentials. If None, uses default credentials.
55
+ id (Optional[str]): ID of the database.
53
56
  """
57
+ if id is None:
58
+ prefix_suffix = prefix or "agno/"
59
+ seed = f"{bucket_name}_{project}#{prefix_suffix}"
60
+ id = generate_deterministic_id(seed)
61
+
54
62
  super().__init__(
63
+ id=id,
55
64
  session_table=session_table,
56
65
  memory_table=memory_table,
57
66
  metrics_table=metrics_table,
@@ -17,6 +17,7 @@ from agno.db.json.utils import (
17
17
  from agno.db.schemas.evals import EvalFilterType, EvalRunRecord, EvalType
18
18
  from agno.db.schemas.knowledge import KnowledgeRow
19
19
  from agno.db.schemas.memory import UserMemory
20
+ from agno.db.utils import generate_deterministic_id
20
21
  from agno.session import AgentSession, Session, TeamSession, WorkflowSession
21
22
  from agno.utils.log import log_debug, log_error, log_info, log_warning
22
23
 
@@ -30,6 +31,7 @@ class JsonDb(BaseDb):
30
31
  metrics_table: Optional[str] = None,
31
32
  eval_table: Optional[str] = None,
32
33
  knowledge_table: Optional[str] = None,
34
+ id: Optional[str] = None,
33
35
  ):
34
36
  """
35
37
  Interface for interacting with JSON files as database.
@@ -41,8 +43,14 @@ class JsonDb(BaseDb):
41
43
  metrics_table (Optional[str]): Name of the JSON file to store metrics.
42
44
  eval_table (Optional[str]): Name of the JSON file to store evaluation runs.
43
45
  knowledge_table (Optional[str]): Name of the JSON file to store knowledge content.
46
+ id (Optional[str]): ID of the database.
44
47
  """
48
+ if id is None:
49
+ seed = db_path or "agno_json_db"
50
+ id = generate_deterministic_id(seed)
51
+
45
52
  super().__init__(
53
+ id=id,
46
54
  session_table=session_table,
47
55
  memory_table=memory_table,
48
56
  metrics_table=metrics_table,