agno 2.1.2__tar.gz → 2.1.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 (552) hide show
  1. {agno-2.1.2 → agno-2.1.4}/PKG-INFO +1 -1
  2. {agno-2.1.2 → agno-2.1.4}/agno/agent/agent.py +39 -69
  3. {agno-2.1.2 → agno-2.1.4}/agno/db/dynamo/dynamo.py +8 -6
  4. {agno-2.1.2 → agno-2.1.4}/agno/db/dynamo/schemas.py +1 -10
  5. {agno-2.1.2 → agno-2.1.4}/agno/db/dynamo/utils.py +2 -2
  6. {agno-2.1.2 → agno-2.1.4}/agno/db/firestore/firestore.py +1 -3
  7. {agno-2.1.2 → agno-2.1.4}/agno/db/gcs_json/gcs_json_db.py +5 -3
  8. {agno-2.1.2 → agno-2.1.4}/agno/db/in_memory/in_memory_db.py +7 -5
  9. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/fastembed.py +1 -1
  10. {agno-2.1.2 → agno-2.1.4}/agno/models/aws/bedrock.py +1 -1
  11. agno-2.1.4/agno/models/openrouter/openrouter.py +66 -0
  12. agno-2.1.4/agno/models/vertexai/claude.py +74 -0
  13. {agno-2.1.2 → agno-2.1.4}/agno/os/app.py +59 -5
  14. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/agui/utils.py +6 -0
  15. {agno-2.1.2 → agno-2.1.4}/agno/os/mcp.py +3 -3
  16. {agno-2.1.2 → agno-2.1.4}/agno/os/schema.py +2 -0
  17. {agno-2.1.2 → agno-2.1.4}/agno/os/utils.py +4 -2
  18. {agno-2.1.2 → agno-2.1.4}/agno/session/workflow.py +69 -1
  19. {agno-2.1.2 → agno-2.1.4}/agno/team/team.py +29 -79
  20. {agno-2.1.2 → agno-2.1.4}/agno/tools/file.py +4 -2
  21. {agno-2.1.2 → agno-2.1.4}/agno/tools/function.py +36 -18
  22. agno-2.1.4/agno/tools/google_drive.py +270 -0
  23. {agno-2.1.2 → agno-2.1.4}/agno/utils/merge_dict.py +3 -3
  24. agno-2.1.4/agno/utils/print_response/__init__.py +0 -0
  25. {agno-2.1.2 → agno-2.1.4}/agno/utils/print_response/workflow.py +112 -12
  26. {agno-2.1.2 → agno-2.1.4}/agno/workflow/condition.py +25 -0
  27. {agno-2.1.2 → agno-2.1.4}/agno/workflow/loop.py +25 -0
  28. {agno-2.1.2 → agno-2.1.4}/agno/workflow/parallel.py +142 -118
  29. {agno-2.1.2 → agno-2.1.4}/agno/workflow/router.py +25 -0
  30. {agno-2.1.2 → agno-2.1.4}/agno/workflow/step.py +138 -25
  31. {agno-2.1.2 → agno-2.1.4}/agno/workflow/steps.py +25 -0
  32. {agno-2.1.2 → agno-2.1.4}/agno/workflow/types.py +26 -1
  33. {agno-2.1.2 → agno-2.1.4}/agno/workflow/workflow.py +234 -12
  34. {agno-2.1.2 → agno-2.1.4}/agno.egg-info/PKG-INFO +1 -1
  35. {agno-2.1.2 → agno-2.1.4}/agno.egg-info/SOURCES.txt +3 -0
  36. {agno-2.1.2 → agno-2.1.4}/pyproject.toml +1 -1
  37. agno-2.1.2/agno/models/openrouter/openrouter.py +0 -28
  38. {agno-2.1.2 → agno-2.1.4}/LICENSE +0 -0
  39. {agno-2.1.2 → agno-2.1.4}/README.md +0 -0
  40. {agno-2.1.2 → agno-2.1.4}/agno/__init__.py +0 -0
  41. {agno-2.1.2 → agno-2.1.4}/agno/agent/__init__.py +0 -0
  42. {agno-2.1.2 → agno-2.1.4}/agno/api/__init__.py +0 -0
  43. {agno-2.1.2 → agno-2.1.4}/agno/api/agent.py +0 -0
  44. {agno-2.1.2 → agno-2.1.4}/agno/api/api.py +0 -0
  45. {agno-2.1.2 → agno-2.1.4}/agno/api/evals.py +0 -0
  46. {agno-2.1.2 → agno-2.1.4}/agno/api/os.py +0 -0
  47. {agno-2.1.2 → agno-2.1.4}/agno/api/routes.py +0 -0
  48. {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/__init__.py +0 -0
  49. {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/agent.py +0 -0
  50. {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/evals.py +0 -0
  51. {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/os.py +0 -0
  52. {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/response.py +0 -0
  53. {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/team.py +0 -0
  54. {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/utils.py +0 -0
  55. {agno-2.1.2 → agno-2.1.4}/agno/api/schemas/workflows.py +0 -0
  56. {agno-2.1.2 → agno-2.1.4}/agno/api/settings.py +0 -0
  57. {agno-2.1.2 → agno-2.1.4}/agno/api/team.py +0 -0
  58. {agno-2.1.2 → agno-2.1.4}/agno/api/workflow.py +0 -0
  59. {agno-2.1.2 → agno-2.1.4}/agno/cloud/aws/base.py +0 -0
  60. {agno-2.1.2 → agno-2.1.4}/agno/cloud/aws/s3/__init__.py +0 -0
  61. {agno-2.1.2 → agno-2.1.4}/agno/cloud/aws/s3/api_client.py +0 -0
  62. {agno-2.1.2 → agno-2.1.4}/agno/cloud/aws/s3/bucket.py +0 -0
  63. {agno-2.1.2 → agno-2.1.4}/agno/cloud/aws/s3/object.py +0 -0
  64. {agno-2.1.2 → agno-2.1.4}/agno/db/__init__.py +0 -0
  65. {agno-2.1.2 → agno-2.1.4}/agno/db/base.py +0 -0
  66. {agno-2.1.2 → agno-2.1.4}/agno/db/dynamo/__init__.py +0 -0
  67. {agno-2.1.2 → agno-2.1.4}/agno/db/firestore/__init__.py +0 -0
  68. {agno-2.1.2 → agno-2.1.4}/agno/db/firestore/schemas.py +0 -0
  69. {agno-2.1.2 → agno-2.1.4}/agno/db/firestore/utils.py +0 -0
  70. {agno-2.1.2 → agno-2.1.4}/agno/db/gcs_json/__init__.py +0 -0
  71. {agno-2.1.2 → agno-2.1.4}/agno/db/gcs_json/utils.py +0 -0
  72. {agno-2.1.2 → agno-2.1.4}/agno/db/in_memory/__init__.py +0 -0
  73. {agno-2.1.2 → agno-2.1.4}/agno/db/in_memory/utils.py +0 -0
  74. {agno-2.1.2 → agno-2.1.4}/agno/db/json/__init__.py +0 -0
  75. {agno-2.1.2 → agno-2.1.4}/agno/db/json/json_db.py +0 -0
  76. {agno-2.1.2 → agno-2.1.4}/agno/db/json/utils.py +0 -0
  77. {agno-2.1.2 → agno-2.1.4}/agno/db/migrations/__init__.py +0 -0
  78. {agno-2.1.2 → agno-2.1.4}/agno/db/migrations/v1_to_v2.py +0 -0
  79. {agno-2.1.2 → agno-2.1.4}/agno/db/mongo/__init__.py +0 -0
  80. {agno-2.1.2 → agno-2.1.4}/agno/db/mongo/mongo.py +0 -0
  81. {agno-2.1.2 → agno-2.1.4}/agno/db/mongo/schemas.py +0 -0
  82. {agno-2.1.2 → agno-2.1.4}/agno/db/mongo/utils.py +0 -0
  83. {agno-2.1.2 → agno-2.1.4}/agno/db/mysql/__init__.py +0 -0
  84. {agno-2.1.2 → agno-2.1.4}/agno/db/mysql/mysql.py +0 -0
  85. {agno-2.1.2 → agno-2.1.4}/agno/db/mysql/schemas.py +0 -0
  86. {agno-2.1.2 → agno-2.1.4}/agno/db/mysql/utils.py +0 -0
  87. {agno-2.1.2 → agno-2.1.4}/agno/db/postgres/__init__.py +0 -0
  88. {agno-2.1.2 → agno-2.1.4}/agno/db/postgres/postgres.py +0 -0
  89. {agno-2.1.2 → agno-2.1.4}/agno/db/postgres/schemas.py +0 -0
  90. {agno-2.1.2 → agno-2.1.4}/agno/db/postgres/utils.py +0 -0
  91. {agno-2.1.2 → agno-2.1.4}/agno/db/redis/__init__.py +0 -0
  92. {agno-2.1.2 → agno-2.1.4}/agno/db/redis/redis.py +0 -0
  93. {agno-2.1.2 → agno-2.1.4}/agno/db/redis/schemas.py +0 -0
  94. {agno-2.1.2 → agno-2.1.4}/agno/db/redis/utils.py +0 -0
  95. {agno-2.1.2 → agno-2.1.4}/agno/db/schemas/__init__.py +0 -0
  96. {agno-2.1.2 → agno-2.1.4}/agno/db/schemas/evals.py +0 -0
  97. {agno-2.1.2 → agno-2.1.4}/agno/db/schemas/knowledge.py +0 -0
  98. {agno-2.1.2 → agno-2.1.4}/agno/db/schemas/memory.py +0 -0
  99. {agno-2.1.2 → agno-2.1.4}/agno/db/schemas/metrics.py +0 -0
  100. {agno-2.1.2 → agno-2.1.4}/agno/db/singlestore/__init__.py +0 -0
  101. {agno-2.1.2 → agno-2.1.4}/agno/db/singlestore/schemas.py +0 -0
  102. {agno-2.1.2 → agno-2.1.4}/agno/db/singlestore/singlestore.py +0 -0
  103. {agno-2.1.2 → agno-2.1.4}/agno/db/singlestore/utils.py +0 -0
  104. {agno-2.1.2 → agno-2.1.4}/agno/db/sqlite/__init__.py +0 -0
  105. {agno-2.1.2 → agno-2.1.4}/agno/db/sqlite/schemas.py +0 -0
  106. {agno-2.1.2 → agno-2.1.4}/agno/db/sqlite/sqlite.py +0 -0
  107. {agno-2.1.2 → agno-2.1.4}/agno/db/sqlite/utils.py +0 -0
  108. {agno-2.1.2 → agno-2.1.4}/agno/db/utils.py +0 -0
  109. {agno-2.1.2 → agno-2.1.4}/agno/debug.py +0 -0
  110. {agno-2.1.2 → agno-2.1.4}/agno/eval/__init__.py +0 -0
  111. {agno-2.1.2 → agno-2.1.4}/agno/eval/accuracy.py +0 -0
  112. {agno-2.1.2 → agno-2.1.4}/agno/eval/performance.py +0 -0
  113. {agno-2.1.2 → agno-2.1.4}/agno/eval/reliability.py +0 -0
  114. {agno-2.1.2 → agno-2.1.4}/agno/eval/utils.py +0 -0
  115. {agno-2.1.2 → agno-2.1.4}/agno/exceptions.py +0 -0
  116. {agno-2.1.2 → agno-2.1.4}/agno/guardrails/__init__.py +0 -0
  117. {agno-2.1.2 → agno-2.1.4}/agno/guardrails/base.py +0 -0
  118. {agno-2.1.2 → agno-2.1.4}/agno/guardrails/openai.py +0 -0
  119. {agno-2.1.2 → agno-2.1.4}/agno/guardrails/pii.py +0 -0
  120. {agno-2.1.2 → agno-2.1.4}/agno/guardrails/prompt_injection.py +0 -0
  121. {agno-2.1.2 → agno-2.1.4}/agno/integrations/__init__.py +0 -0
  122. {agno-2.1.2 → agno-2.1.4}/agno/integrations/discord/__init__.py +0 -0
  123. {agno-2.1.2 → agno-2.1.4}/agno/integrations/discord/client.py +0 -0
  124. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/__init__.py +0 -0
  125. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/__init__.py +0 -0
  126. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/agentic.py +0 -0
  127. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/document.py +0 -0
  128. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/fixed.py +0 -0
  129. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/markdown.py +0 -0
  130. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/recursive.py +0 -0
  131. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/row.py +0 -0
  132. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/semantic.py +0 -0
  133. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/chunking/strategy.py +0 -0
  134. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/content.py +0 -0
  135. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/document/__init__.py +0 -0
  136. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/document/base.py +0 -0
  137. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/__init__.py +0 -0
  138. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  139. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/azure_openai.py +0 -0
  140. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/base.py +0 -0
  141. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/cohere.py +0 -0
  142. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/fireworks.py +0 -0
  143. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/google.py +0 -0
  144. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/huggingface.py +0 -0
  145. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/jina.py +0 -0
  146. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/langdb.py +0 -0
  147. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/mistral.py +0 -0
  148. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/nebius.py +0 -0
  149. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/ollama.py +0 -0
  150. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/openai.py +0 -0
  151. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  152. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/together.py +0 -0
  153. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/embedder/voyageai.py +0 -0
  154. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/knowledge.py +0 -0
  155. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/__init__.py +0 -0
  156. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/arxiv_reader.py +0 -0
  157. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/base.py +0 -0
  158. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/csv_reader.py +0 -0
  159. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/docx_reader.py +0 -0
  160. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
  161. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  162. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/json_reader.py +0 -0
  163. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/markdown_reader.py +0 -0
  164. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/pdf_reader.py +0 -0
  165. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/reader_factory.py +0 -0
  166. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/s3_reader.py +0 -0
  167. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/text_reader.py +0 -0
  168. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/web_search_reader.py +0 -0
  169. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/website_reader.py +0 -0
  170. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  171. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reader/youtube_reader.py +0 -0
  172. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/remote_content/__init__.py +0 -0
  173. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/remote_content/remote_content.py +0 -0
  174. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reranker/__init__.py +0 -0
  175. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reranker/base.py +0 -0
  176. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reranker/cohere.py +0 -0
  177. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reranker/infinity.py +0 -0
  178. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  179. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/types.py +0 -0
  180. {agno-2.1.2 → agno-2.1.4}/agno/knowledge/utils.py +0 -0
  181. {agno-2.1.2 → agno-2.1.4}/agno/media.py +0 -0
  182. {agno-2.1.2 → agno-2.1.4}/agno/memory/__init__.py +0 -0
  183. {agno-2.1.2 → agno-2.1.4}/agno/memory/manager.py +0 -0
  184. {agno-2.1.2 → agno-2.1.4}/agno/models/__init__.py +0 -0
  185. {agno-2.1.2 → agno-2.1.4}/agno/models/aimlapi/__init__.py +0 -0
  186. {agno-2.1.2 → agno-2.1.4}/agno/models/aimlapi/aimlapi.py +0 -0
  187. {agno-2.1.2 → agno-2.1.4}/agno/models/anthropic/__init__.py +0 -0
  188. {agno-2.1.2 → agno-2.1.4}/agno/models/anthropic/claude.py +0 -0
  189. {agno-2.1.2 → agno-2.1.4}/agno/models/aws/__init__.py +0 -0
  190. {agno-2.1.2 → agno-2.1.4}/agno/models/aws/claude.py +0 -0
  191. {agno-2.1.2 → agno-2.1.4}/agno/models/azure/__init__.py +0 -0
  192. {agno-2.1.2 → agno-2.1.4}/agno/models/azure/ai_foundry.py +0 -0
  193. {agno-2.1.2 → agno-2.1.4}/agno/models/azure/openai_chat.py +0 -0
  194. {agno-2.1.2 → agno-2.1.4}/agno/models/base.py +0 -0
  195. {agno-2.1.2 → agno-2.1.4}/agno/models/cerebras/__init__.py +0 -0
  196. {agno-2.1.2 → agno-2.1.4}/agno/models/cerebras/cerebras.py +0 -0
  197. {agno-2.1.2 → agno-2.1.4}/agno/models/cerebras/cerebras_openai.py +0 -0
  198. {agno-2.1.2 → agno-2.1.4}/agno/models/cohere/__init__.py +0 -0
  199. {agno-2.1.2 → agno-2.1.4}/agno/models/cohere/chat.py +0 -0
  200. {agno-2.1.2 → agno-2.1.4}/agno/models/cometapi/__init__.py +0 -0
  201. {agno-2.1.2 → agno-2.1.4}/agno/models/cometapi/cometapi.py +0 -0
  202. {agno-2.1.2 → agno-2.1.4}/agno/models/dashscope/__init__.py +0 -0
  203. {agno-2.1.2 → agno-2.1.4}/agno/models/dashscope/dashscope.py +0 -0
  204. {agno-2.1.2 → agno-2.1.4}/agno/models/deepinfra/__init__.py +0 -0
  205. {agno-2.1.2 → agno-2.1.4}/agno/models/deepinfra/deepinfra.py +0 -0
  206. {agno-2.1.2 → agno-2.1.4}/agno/models/deepseek/__init__.py +0 -0
  207. {agno-2.1.2 → agno-2.1.4}/agno/models/deepseek/deepseek.py +0 -0
  208. {agno-2.1.2 → agno-2.1.4}/agno/models/defaults.py +0 -0
  209. {agno-2.1.2 → agno-2.1.4}/agno/models/fireworks/__init__.py +0 -0
  210. {agno-2.1.2 → agno-2.1.4}/agno/models/fireworks/fireworks.py +0 -0
  211. {agno-2.1.2 → agno-2.1.4}/agno/models/google/__init__.py +0 -0
  212. {agno-2.1.2 → agno-2.1.4}/agno/models/google/gemini.py +0 -0
  213. {agno-2.1.2 → agno-2.1.4}/agno/models/groq/__init__.py +0 -0
  214. {agno-2.1.2 → agno-2.1.4}/agno/models/groq/groq.py +0 -0
  215. {agno-2.1.2 → agno-2.1.4}/agno/models/huggingface/__init__.py +0 -0
  216. {agno-2.1.2 → agno-2.1.4}/agno/models/huggingface/huggingface.py +0 -0
  217. {agno-2.1.2 → agno-2.1.4}/agno/models/ibm/__init__.py +0 -0
  218. {agno-2.1.2 → agno-2.1.4}/agno/models/ibm/watsonx.py +0 -0
  219. {agno-2.1.2 → agno-2.1.4}/agno/models/internlm/__init__.py +0 -0
  220. {agno-2.1.2 → agno-2.1.4}/agno/models/internlm/internlm.py +0 -0
  221. {agno-2.1.2 → agno-2.1.4}/agno/models/langdb/__init__.py +0 -0
  222. {agno-2.1.2 → agno-2.1.4}/agno/models/langdb/langdb.py +0 -0
  223. {agno-2.1.2 → agno-2.1.4}/agno/models/litellm/__init__.py +0 -0
  224. {agno-2.1.2 → agno-2.1.4}/agno/models/litellm/chat.py +0 -0
  225. {agno-2.1.2 → agno-2.1.4}/agno/models/litellm/litellm_openai.py +0 -0
  226. {agno-2.1.2 → agno-2.1.4}/agno/models/llama_cpp/__init__.py +0 -0
  227. {agno-2.1.2 → agno-2.1.4}/agno/models/llama_cpp/llama_cpp.py +0 -0
  228. {agno-2.1.2 → agno-2.1.4}/agno/models/lmstudio/__init__.py +0 -0
  229. {agno-2.1.2 → agno-2.1.4}/agno/models/lmstudio/lmstudio.py +0 -0
  230. {agno-2.1.2 → agno-2.1.4}/agno/models/message.py +0 -0
  231. {agno-2.1.2 → agno-2.1.4}/agno/models/meta/__init__.py +0 -0
  232. {agno-2.1.2 → agno-2.1.4}/agno/models/meta/llama.py +0 -0
  233. {agno-2.1.2 → agno-2.1.4}/agno/models/meta/llama_openai.py +0 -0
  234. {agno-2.1.2 → agno-2.1.4}/agno/models/metrics.py +0 -0
  235. {agno-2.1.2 → agno-2.1.4}/agno/models/mistral/__init__.py +0 -0
  236. {agno-2.1.2 → agno-2.1.4}/agno/models/mistral/mistral.py +0 -0
  237. {agno-2.1.2 → agno-2.1.4}/agno/models/nebius/__init__.py +0 -0
  238. {agno-2.1.2 → agno-2.1.4}/agno/models/nebius/nebius.py +0 -0
  239. {agno-2.1.2 → agno-2.1.4}/agno/models/nexus/__init__.py +0 -0
  240. {agno-2.1.2 → agno-2.1.4}/agno/models/nexus/nexus.py +0 -0
  241. {agno-2.1.2 → agno-2.1.4}/agno/models/nvidia/__init__.py +0 -0
  242. {agno-2.1.2 → agno-2.1.4}/agno/models/nvidia/nvidia.py +0 -0
  243. {agno-2.1.2 → agno-2.1.4}/agno/models/ollama/__init__.py +0 -0
  244. {agno-2.1.2 → agno-2.1.4}/agno/models/ollama/chat.py +0 -0
  245. {agno-2.1.2 → agno-2.1.4}/agno/models/openai/__init__.py +0 -0
  246. {agno-2.1.2 → agno-2.1.4}/agno/models/openai/chat.py +0 -0
  247. {agno-2.1.2 → agno-2.1.4}/agno/models/openai/like.py +0 -0
  248. {agno-2.1.2 → agno-2.1.4}/agno/models/openai/responses.py +0 -0
  249. {agno-2.1.2 → agno-2.1.4}/agno/models/openrouter/__init__.py +0 -0
  250. {agno-2.1.2 → agno-2.1.4}/agno/models/perplexity/__init__.py +0 -0
  251. {agno-2.1.2 → agno-2.1.4}/agno/models/perplexity/perplexity.py +0 -0
  252. {agno-2.1.2 → agno-2.1.4}/agno/models/portkey/__init__.py +0 -0
  253. {agno-2.1.2 → agno-2.1.4}/agno/models/portkey/portkey.py +0 -0
  254. {agno-2.1.2 → agno-2.1.4}/agno/models/requesty/__init__.py +0 -0
  255. {agno-2.1.2 → agno-2.1.4}/agno/models/requesty/requesty.py +0 -0
  256. {agno-2.1.2 → agno-2.1.4}/agno/models/response.py +0 -0
  257. {agno-2.1.2 → agno-2.1.4}/agno/models/sambanova/__init__.py +0 -0
  258. {agno-2.1.2 → agno-2.1.4}/agno/models/sambanova/sambanova.py +0 -0
  259. {agno-2.1.2 → agno-2.1.4}/agno/models/siliconflow/__init__.py +0 -0
  260. {agno-2.1.2 → agno-2.1.4}/agno/models/siliconflow/siliconflow.py +0 -0
  261. {agno-2.1.2 → agno-2.1.4}/agno/models/together/__init__.py +0 -0
  262. {agno-2.1.2 → agno-2.1.4}/agno/models/together/together.py +0 -0
  263. {agno-2.1.2 → agno-2.1.4}/agno/models/utils.py +0 -0
  264. {agno-2.1.2 → agno-2.1.4}/agno/models/vercel/__init__.py +0 -0
  265. {agno-2.1.2 → agno-2.1.4}/agno/models/vercel/v0.py +0 -0
  266. {agno-2.1.2/agno/reasoning → agno-2.1.4/agno/models/vertexai}/__init__.py +0 -0
  267. {agno-2.1.2 → agno-2.1.4}/agno/models/vllm/__init__.py +0 -0
  268. {agno-2.1.2 → agno-2.1.4}/agno/models/vllm/vllm.py +0 -0
  269. {agno-2.1.2 → agno-2.1.4}/agno/models/xai/__init__.py +0 -0
  270. {agno-2.1.2 → agno-2.1.4}/agno/models/xai/xai.py +0 -0
  271. {agno-2.1.2 → agno-2.1.4}/agno/os/__init__.py +0 -0
  272. {agno-2.1.2 → agno-2.1.4}/agno/os/auth.py +0 -0
  273. {agno-2.1.2 → agno-2.1.4}/agno/os/config.py +0 -0
  274. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/__init__.py +0 -0
  275. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/a2a/__init__.py +0 -0
  276. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/a2a/a2a.py +0 -0
  277. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/a2a/router.py +0 -0
  278. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/a2a/utils.py +0 -0
  279. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/agui/__init__.py +0 -0
  280. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/agui/agui.py +0 -0
  281. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/agui/router.py +0 -0
  282. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/base.py +0 -0
  283. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/slack/__init__.py +0 -0
  284. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/slack/router.py +0 -0
  285. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/slack/security.py +0 -0
  286. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/slack/slack.py +0 -0
  287. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  288. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/whatsapp/router.py +0 -0
  289. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/whatsapp/security.py +0 -0
  290. {agno-2.1.2 → agno-2.1.4}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  291. {agno-2.1.2 → agno-2.1.4}/agno/os/middleware/__init__.py +0 -0
  292. {agno-2.1.2 → agno-2.1.4}/agno/os/middleware/jwt.py +0 -0
  293. {agno-2.1.2 → agno-2.1.4}/agno/os/router.py +0 -0
  294. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/__init__.py +0 -0
  295. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/evals/__init__.py +0 -0
  296. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/evals/evals.py +0 -0
  297. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/evals/schemas.py +0 -0
  298. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/evals/utils.py +0 -0
  299. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/health.py +0 -0
  300. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/home.py +0 -0
  301. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/knowledge/__init__.py +0 -0
  302. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/knowledge/knowledge.py +0 -0
  303. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/knowledge/schemas.py +0 -0
  304. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/memory/__init__.py +0 -0
  305. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/memory/memory.py +0 -0
  306. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/memory/schemas.py +0 -0
  307. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/metrics/__init__.py +0 -0
  308. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/metrics/metrics.py +0 -0
  309. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/metrics/schemas.py +0 -0
  310. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/session/__init__.py +0 -0
  311. {agno-2.1.2 → agno-2.1.4}/agno/os/routers/session/session.py +0 -0
  312. {agno-2.1.2 → agno-2.1.4}/agno/os/settings.py +0 -0
  313. {agno-2.1.2 → agno-2.1.4}/agno/py.typed +0 -0
  314. {agno-2.1.2/agno/run → agno-2.1.4/agno/reasoning}/__init__.py +0 -0
  315. {agno-2.1.2 → agno-2.1.4}/agno/reasoning/azure_ai_foundry.py +0 -0
  316. {agno-2.1.2 → agno-2.1.4}/agno/reasoning/deepseek.py +0 -0
  317. {agno-2.1.2 → agno-2.1.4}/agno/reasoning/default.py +0 -0
  318. {agno-2.1.2 → agno-2.1.4}/agno/reasoning/groq.py +0 -0
  319. {agno-2.1.2 → agno-2.1.4}/agno/reasoning/helpers.py +0 -0
  320. {agno-2.1.2 → agno-2.1.4}/agno/reasoning/ollama.py +0 -0
  321. {agno-2.1.2 → agno-2.1.4}/agno/reasoning/openai.py +0 -0
  322. {agno-2.1.2 → agno-2.1.4}/agno/reasoning/step.py +0 -0
  323. {agno-2.1.2/agno/tools/models → agno-2.1.4/agno/run}/__init__.py +0 -0
  324. {agno-2.1.2 → agno-2.1.4}/agno/run/agent.py +0 -0
  325. {agno-2.1.2 → agno-2.1.4}/agno/run/base.py +0 -0
  326. {agno-2.1.2 → agno-2.1.4}/agno/run/cancel.py +0 -0
  327. {agno-2.1.2 → agno-2.1.4}/agno/run/messages.py +0 -0
  328. {agno-2.1.2 → agno-2.1.4}/agno/run/team.py +0 -0
  329. {agno-2.1.2 → agno-2.1.4}/agno/run/workflow.py +0 -0
  330. {agno-2.1.2 → agno-2.1.4}/agno/session/__init__.py +0 -0
  331. {agno-2.1.2 → agno-2.1.4}/agno/session/agent.py +0 -0
  332. {agno-2.1.2 → agno-2.1.4}/agno/session/summary.py +0 -0
  333. {agno-2.1.2 → agno-2.1.4}/agno/session/team.py +0 -0
  334. {agno-2.1.2 → agno-2.1.4}/agno/team/__init__.py +0 -0
  335. {agno-2.1.2 → agno-2.1.4}/agno/tools/__init__.py +0 -0
  336. {agno-2.1.2 → agno-2.1.4}/agno/tools/agentql.py +0 -0
  337. {agno-2.1.2 → agno-2.1.4}/agno/tools/airflow.py +0 -0
  338. {agno-2.1.2 → agno-2.1.4}/agno/tools/api.py +0 -0
  339. {agno-2.1.2 → agno-2.1.4}/agno/tools/apify.py +0 -0
  340. {agno-2.1.2 → agno-2.1.4}/agno/tools/arxiv.py +0 -0
  341. {agno-2.1.2 → agno-2.1.4}/agno/tools/aws_lambda.py +0 -0
  342. {agno-2.1.2 → agno-2.1.4}/agno/tools/aws_ses.py +0 -0
  343. {agno-2.1.2 → agno-2.1.4}/agno/tools/baidusearch.py +0 -0
  344. {agno-2.1.2 → agno-2.1.4}/agno/tools/bitbucket.py +0 -0
  345. {agno-2.1.2 → agno-2.1.4}/agno/tools/brandfetch.py +0 -0
  346. {agno-2.1.2 → agno-2.1.4}/agno/tools/bravesearch.py +0 -0
  347. {agno-2.1.2 → agno-2.1.4}/agno/tools/brightdata.py +0 -0
  348. {agno-2.1.2 → agno-2.1.4}/agno/tools/browserbase.py +0 -0
  349. {agno-2.1.2 → agno-2.1.4}/agno/tools/calcom.py +0 -0
  350. {agno-2.1.2 → agno-2.1.4}/agno/tools/calculator.py +0 -0
  351. {agno-2.1.2 → agno-2.1.4}/agno/tools/cartesia.py +0 -0
  352. {agno-2.1.2 → agno-2.1.4}/agno/tools/clickup.py +0 -0
  353. {agno-2.1.2 → agno-2.1.4}/agno/tools/confluence.py +0 -0
  354. {agno-2.1.2 → agno-2.1.4}/agno/tools/crawl4ai.py +0 -0
  355. {agno-2.1.2 → agno-2.1.4}/agno/tools/csv_toolkit.py +0 -0
  356. {agno-2.1.2 → agno-2.1.4}/agno/tools/dalle.py +0 -0
  357. {agno-2.1.2 → agno-2.1.4}/agno/tools/daytona.py +0 -0
  358. {agno-2.1.2 → agno-2.1.4}/agno/tools/decorator.py +0 -0
  359. {agno-2.1.2 → agno-2.1.4}/agno/tools/desi_vocal.py +0 -0
  360. {agno-2.1.2 → agno-2.1.4}/agno/tools/discord.py +0 -0
  361. {agno-2.1.2 → agno-2.1.4}/agno/tools/docker.py +0 -0
  362. {agno-2.1.2 → agno-2.1.4}/agno/tools/duckdb.py +0 -0
  363. {agno-2.1.2 → agno-2.1.4}/agno/tools/duckduckgo.py +0 -0
  364. {agno-2.1.2 → agno-2.1.4}/agno/tools/e2b.py +0 -0
  365. {agno-2.1.2 → agno-2.1.4}/agno/tools/eleven_labs.py +0 -0
  366. {agno-2.1.2 → agno-2.1.4}/agno/tools/email.py +0 -0
  367. {agno-2.1.2 → agno-2.1.4}/agno/tools/evm.py +0 -0
  368. {agno-2.1.2 → agno-2.1.4}/agno/tools/exa.py +0 -0
  369. {agno-2.1.2 → agno-2.1.4}/agno/tools/fal.py +0 -0
  370. {agno-2.1.2 → agno-2.1.4}/agno/tools/file_generation.py +0 -0
  371. {agno-2.1.2 → agno-2.1.4}/agno/tools/financial_datasets.py +0 -0
  372. {agno-2.1.2 → agno-2.1.4}/agno/tools/firecrawl.py +0 -0
  373. {agno-2.1.2 → agno-2.1.4}/agno/tools/giphy.py +0 -0
  374. {agno-2.1.2 → agno-2.1.4}/agno/tools/github.py +0 -0
  375. {agno-2.1.2 → agno-2.1.4}/agno/tools/gmail.py +0 -0
  376. {agno-2.1.2 → agno-2.1.4}/agno/tools/google_bigquery.py +0 -0
  377. {agno-2.1.2 → agno-2.1.4}/agno/tools/google_maps.py +0 -0
  378. {agno-2.1.2 → agno-2.1.4}/agno/tools/googlecalendar.py +0 -0
  379. {agno-2.1.2 → agno-2.1.4}/agno/tools/googlesearch.py +0 -0
  380. {agno-2.1.2 → agno-2.1.4}/agno/tools/googlesheets.py +0 -0
  381. {agno-2.1.2 → agno-2.1.4}/agno/tools/hackernews.py +0 -0
  382. {agno-2.1.2 → agno-2.1.4}/agno/tools/jina.py +0 -0
  383. {agno-2.1.2 → agno-2.1.4}/agno/tools/jira.py +0 -0
  384. {agno-2.1.2 → agno-2.1.4}/agno/tools/knowledge.py +0 -0
  385. {agno-2.1.2 → agno-2.1.4}/agno/tools/linear.py +0 -0
  386. {agno-2.1.2 → agno-2.1.4}/agno/tools/linkup.py +0 -0
  387. {agno-2.1.2 → agno-2.1.4}/agno/tools/local_file_system.py +0 -0
  388. {agno-2.1.2 → agno-2.1.4}/agno/tools/lumalab.py +0 -0
  389. {agno-2.1.2 → agno-2.1.4}/agno/tools/mcp.py +0 -0
  390. {agno-2.1.2 → agno-2.1.4}/agno/tools/mcp_toolbox.py +0 -0
  391. {agno-2.1.2 → agno-2.1.4}/agno/tools/mem0.py +0 -0
  392. {agno-2.1.2 → agno-2.1.4}/agno/tools/memori.py +0 -0
  393. {agno-2.1.2 → agno-2.1.4}/agno/tools/memory.py +0 -0
  394. {agno-2.1.2 → agno-2.1.4}/agno/tools/mlx_transcribe.py +0 -0
  395. {agno-2.1.2/agno/tools/streamlit → agno-2.1.4/agno/tools/models}/__init__.py +0 -0
  396. {agno-2.1.2 → agno-2.1.4}/agno/tools/models/azure_openai.py +0 -0
  397. {agno-2.1.2 → agno-2.1.4}/agno/tools/models/gemini.py +0 -0
  398. {agno-2.1.2 → agno-2.1.4}/agno/tools/models/groq.py +0 -0
  399. {agno-2.1.2 → agno-2.1.4}/agno/tools/models/morph.py +0 -0
  400. {agno-2.1.2 → agno-2.1.4}/agno/tools/models/nebius.py +0 -0
  401. {agno-2.1.2 → agno-2.1.4}/agno/tools/models_labs.py +0 -0
  402. {agno-2.1.2 → agno-2.1.4}/agno/tools/moviepy_video.py +0 -0
  403. {agno-2.1.2 → agno-2.1.4}/agno/tools/neo4j.py +0 -0
  404. {agno-2.1.2 → agno-2.1.4}/agno/tools/newspaper.py +0 -0
  405. {agno-2.1.2 → agno-2.1.4}/agno/tools/newspaper4k.py +0 -0
  406. {agno-2.1.2 → agno-2.1.4}/agno/tools/openai.py +0 -0
  407. {agno-2.1.2 → agno-2.1.4}/agno/tools/openbb.py +0 -0
  408. {agno-2.1.2 → agno-2.1.4}/agno/tools/opencv.py +0 -0
  409. {agno-2.1.2 → agno-2.1.4}/agno/tools/openweather.py +0 -0
  410. {agno-2.1.2 → agno-2.1.4}/agno/tools/oxylabs.py +0 -0
  411. {agno-2.1.2 → agno-2.1.4}/agno/tools/pandas.py +0 -0
  412. {agno-2.1.2 → agno-2.1.4}/agno/tools/postgres.py +0 -0
  413. {agno-2.1.2 → agno-2.1.4}/agno/tools/pubmed.py +0 -0
  414. {agno-2.1.2 → agno-2.1.4}/agno/tools/python.py +0 -0
  415. {agno-2.1.2 → agno-2.1.4}/agno/tools/reasoning.py +0 -0
  416. {agno-2.1.2 → agno-2.1.4}/agno/tools/reddit.py +0 -0
  417. {agno-2.1.2 → agno-2.1.4}/agno/tools/replicate.py +0 -0
  418. {agno-2.1.2 → agno-2.1.4}/agno/tools/resend.py +0 -0
  419. {agno-2.1.2 → agno-2.1.4}/agno/tools/scrapegraph.py +0 -0
  420. {agno-2.1.2 → agno-2.1.4}/agno/tools/searxng.py +0 -0
  421. {agno-2.1.2 → agno-2.1.4}/agno/tools/serpapi.py +0 -0
  422. {agno-2.1.2 → agno-2.1.4}/agno/tools/serper.py +0 -0
  423. {agno-2.1.2 → agno-2.1.4}/agno/tools/shell.py +0 -0
  424. {agno-2.1.2 → agno-2.1.4}/agno/tools/slack.py +0 -0
  425. {agno-2.1.2 → agno-2.1.4}/agno/tools/sleep.py +0 -0
  426. {agno-2.1.2 → agno-2.1.4}/agno/tools/spider.py +0 -0
  427. {agno-2.1.2 → agno-2.1.4}/agno/tools/sql.py +0 -0
  428. {agno-2.1.2/agno/utils → agno-2.1.4/agno/tools/streamlit}/__init__.py +0 -0
  429. {agno-2.1.2 → agno-2.1.4}/agno/tools/streamlit/components.py +0 -0
  430. {agno-2.1.2 → agno-2.1.4}/agno/tools/tavily.py +0 -0
  431. {agno-2.1.2 → agno-2.1.4}/agno/tools/telegram.py +0 -0
  432. {agno-2.1.2 → agno-2.1.4}/agno/tools/todoist.py +0 -0
  433. {agno-2.1.2 → agno-2.1.4}/agno/tools/tool_registry.py +0 -0
  434. {agno-2.1.2 → agno-2.1.4}/agno/tools/toolkit.py +0 -0
  435. {agno-2.1.2 → agno-2.1.4}/agno/tools/trafilatura.py +0 -0
  436. {agno-2.1.2 → agno-2.1.4}/agno/tools/trello.py +0 -0
  437. {agno-2.1.2 → agno-2.1.4}/agno/tools/twilio.py +0 -0
  438. {agno-2.1.2 → agno-2.1.4}/agno/tools/user_control_flow.py +0 -0
  439. {agno-2.1.2 → agno-2.1.4}/agno/tools/valyu.py +0 -0
  440. {agno-2.1.2 → agno-2.1.4}/agno/tools/visualization.py +0 -0
  441. {agno-2.1.2 → agno-2.1.4}/agno/tools/webbrowser.py +0 -0
  442. {agno-2.1.2 → agno-2.1.4}/agno/tools/webex.py +0 -0
  443. {agno-2.1.2 → agno-2.1.4}/agno/tools/website.py +0 -0
  444. {agno-2.1.2 → agno-2.1.4}/agno/tools/webtools.py +0 -0
  445. {agno-2.1.2 → agno-2.1.4}/agno/tools/whatsapp.py +0 -0
  446. {agno-2.1.2 → agno-2.1.4}/agno/tools/wikipedia.py +0 -0
  447. {agno-2.1.2 → agno-2.1.4}/agno/tools/workflow.py +0 -0
  448. {agno-2.1.2 → agno-2.1.4}/agno/tools/x.py +0 -0
  449. {agno-2.1.2 → agno-2.1.4}/agno/tools/yfinance.py +0 -0
  450. {agno-2.1.2 → agno-2.1.4}/agno/tools/youtube.py +0 -0
  451. {agno-2.1.2 → agno-2.1.4}/agno/tools/zendesk.py +0 -0
  452. {agno-2.1.2 → agno-2.1.4}/agno/tools/zep.py +0 -0
  453. {agno-2.1.2 → agno-2.1.4}/agno/tools/zoom.py +0 -0
  454. {agno-2.1.2/agno/utils/models → agno-2.1.4/agno/utils}/__init__.py +0 -0
  455. {agno-2.1.2 → agno-2.1.4}/agno/utils/audio.py +0 -0
  456. {agno-2.1.2 → agno-2.1.4}/agno/utils/certs.py +0 -0
  457. {agno-2.1.2 → agno-2.1.4}/agno/utils/code_execution.py +0 -0
  458. {agno-2.1.2 → agno-2.1.4}/agno/utils/common.py +0 -0
  459. {agno-2.1.2 → agno-2.1.4}/agno/utils/dttm.py +0 -0
  460. {agno-2.1.2 → agno-2.1.4}/agno/utils/enum.py +0 -0
  461. {agno-2.1.2 → agno-2.1.4}/agno/utils/env.py +0 -0
  462. {agno-2.1.2 → agno-2.1.4}/agno/utils/events.py +0 -0
  463. {agno-2.1.2 → agno-2.1.4}/agno/utils/format_str.py +0 -0
  464. {agno-2.1.2 → agno-2.1.4}/agno/utils/functions.py +0 -0
  465. {agno-2.1.2 → agno-2.1.4}/agno/utils/gemini.py +0 -0
  466. {agno-2.1.2 → agno-2.1.4}/agno/utils/hooks.py +0 -0
  467. {agno-2.1.2 → agno-2.1.4}/agno/utils/http.py +0 -0
  468. {agno-2.1.2 → agno-2.1.4}/agno/utils/json_schema.py +0 -0
  469. {agno-2.1.2 → agno-2.1.4}/agno/utils/knowledge.py +0 -0
  470. {agno-2.1.2 → agno-2.1.4}/agno/utils/location.py +0 -0
  471. {agno-2.1.2 → agno-2.1.4}/agno/utils/log.py +0 -0
  472. {agno-2.1.2 → agno-2.1.4}/agno/utils/mcp.py +0 -0
  473. {agno-2.1.2 → agno-2.1.4}/agno/utils/media.py +0 -0
  474. {agno-2.1.2 → agno-2.1.4}/agno/utils/message.py +0 -0
  475. {agno-2.1.2/agno/utils/print_response → agno-2.1.4/agno/utils/models}/__init__.py +0 -0
  476. {agno-2.1.2 → agno-2.1.4}/agno/utils/models/ai_foundry.py +0 -0
  477. {agno-2.1.2 → agno-2.1.4}/agno/utils/models/claude.py +0 -0
  478. {agno-2.1.2 → agno-2.1.4}/agno/utils/models/cohere.py +0 -0
  479. {agno-2.1.2 → agno-2.1.4}/agno/utils/models/llama.py +0 -0
  480. {agno-2.1.2 → agno-2.1.4}/agno/utils/models/mistral.py +0 -0
  481. {agno-2.1.2 → agno-2.1.4}/agno/utils/models/openai_responses.py +0 -0
  482. {agno-2.1.2 → agno-2.1.4}/agno/utils/models/schema_utils.py +0 -0
  483. {agno-2.1.2 → agno-2.1.4}/agno/utils/models/watsonx.py +0 -0
  484. {agno-2.1.2 → agno-2.1.4}/agno/utils/openai.py +0 -0
  485. {agno-2.1.2 → agno-2.1.4}/agno/utils/pickle.py +0 -0
  486. {agno-2.1.2 → agno-2.1.4}/agno/utils/pprint.py +0 -0
  487. {agno-2.1.2 → agno-2.1.4}/agno/utils/print_response/agent.py +0 -0
  488. {agno-2.1.2 → agno-2.1.4}/agno/utils/print_response/team.py +0 -0
  489. {agno-2.1.2 → agno-2.1.4}/agno/utils/prompts.py +0 -0
  490. {agno-2.1.2 → agno-2.1.4}/agno/utils/reasoning.py +0 -0
  491. {agno-2.1.2 → agno-2.1.4}/agno/utils/response.py +0 -0
  492. {agno-2.1.2 → agno-2.1.4}/agno/utils/response_iterator.py +0 -0
  493. {agno-2.1.2 → agno-2.1.4}/agno/utils/safe_formatter.py +0 -0
  494. {agno-2.1.2 → agno-2.1.4}/agno/utils/serialize.py +0 -0
  495. {agno-2.1.2 → agno-2.1.4}/agno/utils/shell.py +0 -0
  496. {agno-2.1.2 → agno-2.1.4}/agno/utils/streamlit.py +0 -0
  497. {agno-2.1.2 → agno-2.1.4}/agno/utils/string.py +0 -0
  498. {agno-2.1.2 → agno-2.1.4}/agno/utils/team.py +0 -0
  499. {agno-2.1.2 → agno-2.1.4}/agno/utils/timer.py +0 -0
  500. {agno-2.1.2 → agno-2.1.4}/agno/utils/tools.py +0 -0
  501. {agno-2.1.2 → agno-2.1.4}/agno/utils/web.py +0 -0
  502. {agno-2.1.2 → agno-2.1.4}/agno/utils/whatsapp.py +0 -0
  503. {agno-2.1.2 → agno-2.1.4}/agno/utils/yaml_io.py +0 -0
  504. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/__init__.py +0 -0
  505. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/base.py +0 -0
  506. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/cassandra/__init__.py +0 -0
  507. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/cassandra/cassandra.py +0 -0
  508. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  509. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/cassandra/index.py +0 -0
  510. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/chroma/__init__.py +0 -0
  511. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/chroma/chromadb.py +0 -0
  512. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/clickhouse/__init__.py +0 -0
  513. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  514. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/clickhouse/index.py +0 -0
  515. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/couchbase/__init__.py +0 -0
  516. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/couchbase/couchbase.py +0 -0
  517. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/distance.py +0 -0
  518. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/lancedb/__init__.py +0 -0
  519. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/lancedb/lance_db.py +0 -0
  520. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/langchaindb/__init__.py +0 -0
  521. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  522. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/lightrag/__init__.py +0 -0
  523. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/lightrag/lightrag.py +0 -0
  524. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/llamaindex/__init__.py +0 -0
  525. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  526. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/milvus/__init__.py +0 -0
  527. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/milvus/milvus.py +0 -0
  528. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/mongodb/__init__.py +0 -0
  529. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/mongodb/mongodb.py +0 -0
  530. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/pgvector/__init__.py +0 -0
  531. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/pgvector/index.py +0 -0
  532. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/pgvector/pgvector.py +0 -0
  533. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/pineconedb/__init__.py +0 -0
  534. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  535. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/qdrant/__init__.py +0 -0
  536. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/qdrant/qdrant.py +0 -0
  537. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/search.py +0 -0
  538. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/singlestore/__init__.py +0 -0
  539. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/singlestore/index.py +0 -0
  540. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/singlestore/singlestore.py +0 -0
  541. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/surrealdb/__init__.py +0 -0
  542. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  543. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/upstashdb/__init__.py +0 -0
  544. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  545. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/weaviate/__init__.py +0 -0
  546. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/weaviate/index.py +0 -0
  547. {agno-2.1.2 → agno-2.1.4}/agno/vectordb/weaviate/weaviate.py +0 -0
  548. {agno-2.1.2 → agno-2.1.4}/agno/workflow/__init__.py +0 -0
  549. {agno-2.1.2 → agno-2.1.4}/agno.egg-info/dependency_links.txt +0 -0
  550. {agno-2.1.2 → agno-2.1.4}/agno.egg-info/requires.txt +0 -0
  551. {agno-2.1.2 → agno-2.1.4}/agno.egg-info/top_level.txt +0 -0
  552. {agno-2.1.2 → agno-2.1.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.1.2
3
+ Version: 2.1.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
@@ -957,7 +957,6 @@ class Agent:
957
957
  dependencies: Optional[Dict[str, Any]] = None,
958
958
  response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
959
959
  stream_intermediate_steps: bool = False,
960
- workflow_context: Optional[Dict] = None,
961
960
  yield_run_response: bool = False,
962
961
  debug_mode: Optional[bool] = None,
963
962
  **kwargs: Any,
@@ -973,7 +972,8 @@ class Agent:
973
972
  6. Optional: Save output to file if save_response_to_file is set
974
973
  7. Add the RunOutput to the Agent Session
975
974
  8. Update Agent Memory
976
- 9. Save session to storage
975
+ 9. Create the run completed event
976
+ 10. Save session to storage
977
977
  """
978
978
 
979
979
  # Register run for cancellation tracking
@@ -1034,7 +1034,7 @@ class Agent:
1034
1034
  try:
1035
1035
  # Start the Run by yielding a RunStarted event
1036
1036
  if stream_intermediate_steps:
1037
- yield self._handle_event(create_run_started_event(run_response), run_response, workflow_context)
1037
+ yield self._handle_event(create_run_started_event(run_response), run_response)
1038
1038
 
1039
1039
  # 3. Reason about the task if reasoning is enabled
1040
1040
  yield from self._handle_reasoning_stream(run_response=run_response, run_messages=run_messages)
@@ -1050,7 +1050,6 @@ class Agent:
1050
1050
  run_messages=run_messages,
1051
1051
  response_format=response_format,
1052
1052
  stream_intermediate_steps=stream_intermediate_steps,
1053
- workflow_context=workflow_context,
1054
1053
  ):
1055
1054
  raise_if_cancelled(run_response.run_id) # type: ignore
1056
1055
  yield event
@@ -1066,7 +1065,6 @@ class Agent:
1066
1065
  run_messages=run_messages,
1067
1066
  response_format=response_format,
1068
1067
  stream_intermediate_steps=stream_intermediate_steps,
1069
- workflow_context=workflow_context,
1070
1068
  ):
1071
1069
  raise_if_cancelled(run_response.run_id) # type: ignore
1072
1070
  if isinstance(event, RunContentEvent):
@@ -1084,7 +1082,6 @@ class Agent:
1084
1082
  run_response=run_response,
1085
1083
  run_messages=run_messages,
1086
1084
  stream_intermediate_steps=stream_intermediate_steps,
1087
- workflow_context=workflow_context,
1088
1085
  ):
1089
1086
  raise_if_cancelled(run_response.run_id) # type: ignore
1090
1087
  yield event
@@ -1115,9 +1112,6 @@ class Agent:
1115
1112
  # 5. Calculate session metrics
1116
1113
  self._update_session_metrics(session=session, run_response=run_response)
1117
1114
 
1118
- completed_event = self._handle_event(
1119
- create_run_completed_event(from_run_response=run_response), run_response, workflow_context
1120
- )
1121
1115
  # 6. Optional: Save output to file if save_response_to_file is set
1122
1116
  self.save_run_response_to_file(
1123
1117
  run_response=run_response,
@@ -1134,7 +1128,12 @@ class Agent:
1134
1128
  run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
1135
1129
  )
1136
1130
 
1137
- # 9. Save session to storage
1131
+ # 9. Create the run completed event
1132
+ completed_event = self._handle_event(
1133
+ create_run_completed_event(from_run_response=run_response), run_response
1134
+ )
1135
+
1136
+ # 10. Save session to storage
1138
1137
  self.save_session(session=session)
1139
1138
 
1140
1139
  if stream_intermediate_steps:
@@ -1158,7 +1157,6 @@ class Agent:
1158
1157
  yield self._handle_event(
1159
1158
  create_run_cancelled_event(from_run_response=run_response, reason=str(e)),
1160
1159
  run_response,
1161
- workflow_context,
1162
1160
  )
1163
1161
 
1164
1162
  # Add the RunOutput to Agent Session even when cancelled
@@ -1302,9 +1300,6 @@ class Agent:
1302
1300
  )
1303
1301
  add_history = add_history_to_context if add_history_to_context is not None else self.add_history_to_context
1304
1302
 
1305
- # Extract workflow context from kwargs if present
1306
- workflow_context = kwargs.pop("workflow_context", None)
1307
-
1308
1303
  # Initialize Knowledge Filters
1309
1304
  effective_filters = knowledge_filters
1310
1305
 
@@ -1380,7 +1375,6 @@ class Agent:
1380
1375
  dependencies=run_dependencies,
1381
1376
  response_format=response_format,
1382
1377
  stream_intermediate_steps=stream_intermediate_steps,
1383
- workflow_context=workflow_context,
1384
1378
  yield_run_response=yield_run_response,
1385
1379
  debug_mode=debug_mode,
1386
1380
  **kwargs,
@@ -1651,7 +1645,6 @@ class Agent:
1651
1645
  dependencies: Optional[Dict[str, Any]] = None,
1652
1646
  response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
1653
1647
  stream_intermediate_steps: bool = False,
1654
- workflow_context: Optional[Dict] = None,
1655
1648
  yield_run_response: Optional[bool] = None,
1656
1649
  debug_mode: Optional[bool] = None,
1657
1650
  **kwargs: Any,
@@ -1667,7 +1660,8 @@ class Agent:
1667
1660
  6. Calculate session metrics
1668
1661
  7. Add RunOutput to Agent Session
1669
1662
  8. Update Agent Memory
1670
- 9. Save session to storage
1663
+ 9. Create the run completed event
1664
+ 10. Save session to storage
1671
1665
  """
1672
1666
 
1673
1667
  # 1. Resolving here for async requirement
@@ -1731,7 +1725,7 @@ class Agent:
1731
1725
  try:
1732
1726
  # Start the Run by yielding a RunStarted event
1733
1727
  if stream_intermediate_steps:
1734
- yield self._handle_event(create_run_started_event(run_response), run_response, workflow_context)
1728
+ yield self._handle_event(create_run_started_event(run_response), run_response)
1735
1729
 
1736
1730
  # 4. Reason about the task if reasoning is enabled
1737
1731
  async for item in self._ahandle_reasoning_stream(run_response=run_response, run_messages=run_messages):
@@ -1749,7 +1743,6 @@ class Agent:
1749
1743
  run_messages=run_messages,
1750
1744
  response_format=response_format,
1751
1745
  stream_intermediate_steps=stream_intermediate_steps,
1752
- workflow_context=workflow_context,
1753
1746
  ):
1754
1747
  raise_if_cancelled(run_response.run_id) # type: ignore
1755
1748
  yield event
@@ -1765,7 +1758,6 @@ class Agent:
1765
1758
  run_messages=run_messages,
1766
1759
  response_format=response_format,
1767
1760
  stream_intermediate_steps=stream_intermediate_steps,
1768
- workflow_context=workflow_context,
1769
1761
  ):
1770
1762
  raise_if_cancelled(run_response.run_id) # type: ignore
1771
1763
  if isinstance(event, RunContentEvent):
@@ -1782,7 +1774,6 @@ class Agent:
1782
1774
  session=session,
1783
1775
  run_response=run_response,
1784
1776
  run_messages=run_messages,
1785
- workflow_context=workflow_context,
1786
1777
  stream_intermediate_steps=stream_intermediate_steps,
1787
1778
  ):
1788
1779
  raise_if_cancelled(run_response.run_id) # type: ignore
@@ -1811,10 +1802,6 @@ class Agent:
1811
1802
  if run_response.metrics:
1812
1803
  run_response.metrics.stop_timer()
1813
1804
 
1814
- completed_event = self._handle_event(
1815
- create_run_completed_event(from_run_response=run_response), run_response, workflow_context
1816
- )
1817
-
1818
1805
  # 6. Calculate session metrics
1819
1806
  self._update_session_metrics(session=session, run_response=run_response)
1820
1807
 
@@ -1835,7 +1822,12 @@ class Agent:
1835
1822
  ):
1836
1823
  yield event
1837
1824
 
1838
- # 9. Save session to storage
1825
+ # 9. Create the run completed event
1826
+ completed_event = self._handle_event(
1827
+ create_run_completed_event(from_run_response=run_response), run_response
1828
+ )
1829
+
1830
+ # 10. Save session to storage
1839
1831
  self.save_session(session=session)
1840
1832
 
1841
1833
  if stream_intermediate_steps:
@@ -1859,7 +1851,6 @@ class Agent:
1859
1851
  yield self._handle_event(
1860
1852
  create_run_cancelled_event(from_run_response=run_response, reason=str(e)),
1861
1853
  run_response,
1862
- workflow_context,
1863
1854
  )
1864
1855
 
1865
1856
  # Add the RunOutput to Agent Session even when cancelled
@@ -1999,9 +1990,6 @@ class Agent:
1999
1990
  )
2000
1991
  add_history = add_history_to_context if add_history_to_context is not None else self.add_history_to_context
2001
1992
 
2002
- # Extract workflow context from kwargs if present
2003
- workflow_context = kwargs.pop("workflow_context", None)
2004
-
2005
1993
  effective_filters = knowledge_filters
2006
1994
  # When filters are passed manually
2007
1995
  if self.knowledge_filters or knowledge_filters:
@@ -2074,7 +2062,6 @@ class Agent:
2074
2062
  metadata=metadata,
2075
2063
  response_format=response_format,
2076
2064
  stream_intermediate_steps=stream_intermediate_steps,
2077
- workflow_context=workflow_context,
2078
2065
  yield_run_response=yield_run_response,
2079
2066
  dependencies=run_dependencies,
2080
2067
  debug_mode=debug_mode,
@@ -2093,7 +2080,6 @@ class Agent:
2093
2080
  metadata=metadata,
2094
2081
  response_format=response_format,
2095
2082
  stream_intermediate_steps=stream_intermediate_steps,
2096
- workflow_context=workflow_context,
2097
2083
  yield_run_response=yield_run_response,
2098
2084
  dependencies=run_dependencies,
2099
2085
  debug_mode=debug_mode,
@@ -2484,11 +2470,12 @@ class Agent:
2484
2470
  Steps:
2485
2471
  1. Handle any updated tools
2486
2472
  2. Generate a response from the Model
2487
- 3. Update Agent Memory
2488
- 4. Calculate session metrics
2489
- 5. Save output to file if save_response_to_file is set
2490
- 6. Add RunOutput to Agent Session
2491
- 7. Save session to storage
2473
+ 3. Calculate session metrics
2474
+ 4. Save output to file if save_response_to_file is set
2475
+ 5. Add the run to memory
2476
+ 6. Update Agent Memory
2477
+ 7. Create the run completed event
2478
+ 8. Save session to storage
2492
2479
  """
2493
2480
 
2494
2481
  if dependencies is not None:
@@ -2523,8 +2510,6 @@ class Agent:
2523
2510
 
2524
2511
  run_response.status = RunStatus.completed
2525
2512
 
2526
- completed_event = self._handle_event(create_run_completed_event(run_response), run_response)
2527
-
2528
2513
  # Set the run duration
2529
2514
  if run_response.metrics:
2530
2515
  run_response.metrics.stop_timer()
@@ -2542,7 +2527,10 @@ class Agent:
2542
2527
  run_response=run_response, run_messages=run_messages, session=session, user_id=user_id
2543
2528
  )
2544
2529
 
2545
- # 7. Save session to storage
2530
+ # 7. Create the run completed event
2531
+ completed_event = self._handle_event(create_run_completed_event(run_response), run_response)
2532
+
2533
+ # 8. Save session to storage
2546
2534
  self.save_session(session=session)
2547
2535
 
2548
2536
  if stream_intermediate_steps:
@@ -2882,11 +2870,12 @@ class Agent:
2882
2870
  Steps:
2883
2871
  1. Handle any updated tools
2884
2872
  2. Generate a response from the Model
2885
- 3. Add the run to memory
2886
- 4. Update Agent Memory
2887
- 5. Calculate session metrics
2888
- 6. Save output to file if save_response_to_file is set
2889
- 7. Save session to storage
2873
+ 3. Calculate session metrics
2874
+ 4. Save output to file if save_response_to_file is set
2875
+ 5. Add the run to memory
2876
+ 6. Update Agent Memory
2877
+ 7. Create the run completed event
2878
+ 8. Save session to storage
2890
2879
  """
2891
2880
  # Resolve dependencies
2892
2881
  if dependencies is not None:
@@ -2923,8 +2912,6 @@ class Agent:
2923
2912
 
2924
2913
  run_response.status = RunStatus.completed
2925
2914
 
2926
- completed_event = self._handle_event(create_run_completed_event(run_response), run_response)
2927
-
2928
2915
  # Set the run duration
2929
2916
  if run_response.metrics:
2930
2917
  run_response.metrics.stop_timer()
@@ -2943,7 +2930,10 @@ class Agent:
2943
2930
  ):
2944
2931
  yield event
2945
2932
 
2946
- # 7. Save session to storage
2933
+ # 7. Create the run completed event
2934
+ completed_event = self._handle_event(create_run_completed_event(run_response), run_response)
2935
+
2936
+ # 8. Save session to storage
2947
2937
  self.save_session(session=session)
2948
2938
 
2949
2939
  if stream_intermediate_steps:
@@ -3608,7 +3598,6 @@ class Agent:
3608
3598
  run_messages: RunMessages,
3609
3599
  response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
3610
3600
  stream_intermediate_steps: bool = False,
3611
- workflow_context: Optional[Dict] = None,
3612
3601
  ) -> Iterator[RunOutputEvent]:
3613
3602
  self.model = cast(Model, self.model)
3614
3603
 
@@ -3642,7 +3631,6 @@ class Agent:
3642
3631
  reasoning_state=reasoning_state,
3643
3632
  parse_structured_output=self.should_parse_structured_output,
3644
3633
  stream_intermediate_steps=stream_intermediate_steps,
3645
- workflow_context=workflow_context,
3646
3634
  )
3647
3635
 
3648
3636
  # Determine reasoning completed
@@ -3685,7 +3673,6 @@ class Agent:
3685
3673
  run_messages: RunMessages,
3686
3674
  response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
3687
3675
  stream_intermediate_steps: bool = False,
3688
- workflow_context: Optional[Dict] = None,
3689
3676
  ) -> AsyncIterator[RunOutputEvent]:
3690
3677
  self.model = cast(Model, self.model)
3691
3678
 
@@ -3721,7 +3708,6 @@ class Agent:
3721
3708
  reasoning_state=reasoning_state,
3722
3709
  parse_structured_output=self.should_parse_structured_output,
3723
3710
  stream_intermediate_steps=stream_intermediate_steps,
3724
- workflow_context=workflow_context,
3725
3711
  ):
3726
3712
  yield event
3727
3713
 
@@ -3766,7 +3752,6 @@ class Agent:
3766
3752
  reasoning_state: Optional[Dict[str, Any]] = None,
3767
3753
  parse_structured_output: bool = False,
3768
3754
  stream_intermediate_steps: bool = False,
3769
- workflow_context: Optional[Dict] = None,
3770
3755
  ) -> Iterator[RunOutputEvent]:
3771
3756
  if isinstance(model_response_event, tuple(get_args(RunOutputEvent))) or isinstance(
3772
3757
  model_response_event, tuple(get_args(TeamRunOutputEvent))
@@ -3830,7 +3815,6 @@ class Agent:
3830
3815
  content_type=content_type,
3831
3816
  ),
3832
3817
  run_response,
3833
- workflow_context=workflow_context,
3834
3818
  )
3835
3819
  elif (
3836
3820
  model_response_event.content is not None
@@ -3849,7 +3833,6 @@ class Agent:
3849
3833
  model_provider_data=model_response_event.provider_data,
3850
3834
  ),
3851
3835
  run_response,
3852
- workflow_context=workflow_context,
3853
3836
  )
3854
3837
 
3855
3838
  # Process audio
@@ -3910,7 +3893,6 @@ class Agent:
3910
3893
  response_audio=run_response.response_audio,
3911
3894
  ),
3912
3895
  run_response,
3913
- workflow_context=workflow_context,
3914
3896
  )
3915
3897
 
3916
3898
  if model_response_event.images is not None:
@@ -3920,7 +3902,6 @@ class Agent:
3920
3902
  image=model_response_event.images[-1],
3921
3903
  ),
3922
3904
  run_response,
3923
- workflow_context=workflow_context,
3924
3905
  )
3925
3906
 
3926
3907
  if model_response.images is None:
@@ -6892,7 +6873,6 @@ class Agent:
6892
6873
  run_response: RunOutput,
6893
6874
  run_messages: RunMessages,
6894
6875
  stream_intermediate_steps: bool = False,
6895
- workflow_context: Optional[Dict] = None,
6896
6876
  ):
6897
6877
  """Parse the model response using the output model."""
6898
6878
  from agno.utils.events import (
@@ -6916,7 +6896,6 @@ class Agent:
6916
6896
  run_response=run_response,
6917
6897
  model_response=model_response,
6918
6898
  model_response_event=model_response_event,
6919
- workflow_context=workflow_context,
6920
6899
  stream_intermediate_steps=stream_intermediate_steps,
6921
6900
  )
6922
6901
 
@@ -6945,7 +6924,6 @@ class Agent:
6945
6924
  run_response: RunOutput,
6946
6925
  run_messages: RunMessages,
6947
6926
  stream_intermediate_steps: bool = False,
6948
- workflow_context: Optional[Dict] = None,
6949
6927
  ):
6950
6928
  """Parse the model response using the output model."""
6951
6929
  from agno.utils.events import (
@@ -6971,7 +6949,6 @@ class Agent:
6971
6949
  run_response=run_response,
6972
6950
  model_response=model_response,
6973
6951
  model_response_event=model_response_event,
6974
- workflow_context=workflow_context,
6975
6952
  stream_intermediate_steps=stream_intermediate_steps,
6976
6953
  ):
6977
6954
  yield event
@@ -6986,14 +6963,7 @@ class Agent:
6986
6963
  # Update the RunResponse metrics
6987
6964
  run_response.metrics = self._calculate_run_metrics(messages_for_run_response)
6988
6965
 
6989
- def _handle_event(self, event: RunOutputEvent, run_response: RunOutput, workflow_context: Optional[Dict] = None):
6990
- if workflow_context:
6991
- event.workflow_id = workflow_context.get("workflow_id")
6992
- event.workflow_run_id = workflow_context.get("workflow_run_id")
6993
- event.step_id = workflow_context.get("step_id")
6994
- event.step_name = workflow_context.get("step_name")
6995
- event.step_index = workflow_context.get("step_index")
6996
-
6966
+ def _handle_event(self, event: RunOutputEvent, run_response: RunOutput):
6997
6967
  # We only store events that are not run_response_content events
6998
6968
  events_to_skip = [event.value for event in self.events_to_skip] if self.events_to_skip else []
6999
6969
  if self.store_events and event.event not in events_to_skip:
@@ -1454,17 +1454,17 @@ class DynamoDb(BaseDb):
1454
1454
  """
1455
1455
  import json
1456
1456
 
1457
- item = {}
1457
+ item: Dict[str, Any] = {}
1458
1458
  for key, value in data.items():
1459
1459
  if value is not None:
1460
1460
  if isinstance(value, bool):
1461
- item[key] = {"BOOL": str(value)}
1461
+ item[key] = {"BOOL": value}
1462
1462
  elif isinstance(value, (int, float)):
1463
1463
  item[key] = {"N": str(value)}
1464
1464
  elif isinstance(value, str):
1465
1465
  item[key] = {"S": str(value)}
1466
1466
  elif isinstance(value, (dict, list)):
1467
- item[key] = {"S": json.dumps(str(value))}
1467
+ item[key] = {"S": json.dumps(value)}
1468
1468
  else:
1469
1469
  item[key] = {"S": str(value)}
1470
1470
  return item
@@ -1803,14 +1803,16 @@ class DynamoDb(BaseDb):
1803
1803
 
1804
1804
  if filter_type is not None:
1805
1805
  if filter_type == EvalFilterType.AGENT:
1806
- filter_expressions.append("agent_id IS NOT NULL")
1806
+ filter_expressions.append("attribute_exists(agent_id)")
1807
1807
  elif filter_type == EvalFilterType.TEAM:
1808
- filter_expressions.append("team_id IS NOT NULL")
1808
+ filter_expressions.append("attribute_exists(team_id)")
1809
1809
  elif filter_type == EvalFilterType.WORKFLOW:
1810
- filter_expressions.append("workflow_id IS NOT NULL")
1810
+ filter_expressions.append("attribute_exists(workflow_id)")
1811
1811
 
1812
1812
  if filter_expressions:
1813
1813
  scan_kwargs["FilterExpression"] = " AND ".join(filter_expressions)
1814
+
1815
+ if expression_values:
1814
1816
  scan_kwargs["ExpressionAttributeValues"] = expression_values # type: ignore
1815
1817
 
1816
1818
  # Execute scan
@@ -73,6 +73,7 @@ USER_MEMORY_TABLE_SCHEMA = {
73
73
  {"AttributeName": "user_id", "AttributeType": "S"},
74
74
  {"AttributeName": "agent_id", "AttributeType": "S"},
75
75
  {"AttributeName": "team_id", "AttributeType": "S"},
76
+ {"AttributeName": "workflow_id", "AttributeType": "S"},
76
77
  {"AttributeName": "updated_at", "AttributeType": "S"},
77
78
  ],
78
79
  "GlobalSecondaryIndexes": [
@@ -123,7 +124,6 @@ EVAL_TABLE_SCHEMA = {
123
124
  "AttributeDefinitions": [
124
125
  {"AttributeName": "run_id", "AttributeType": "S"},
125
126
  {"AttributeName": "eval_type", "AttributeType": "S"},
126
- {"AttributeName": "eval_input", "AttributeType": "S"},
127
127
  {"AttributeName": "agent_id", "AttributeType": "S"},
128
128
  {"AttributeName": "team_id", "AttributeType": "S"},
129
129
  {"AttributeName": "workflow_id", "AttributeType": "S"},
@@ -176,18 +176,9 @@ KNOWLEDGE_TABLE_SCHEMA = {
176
176
  "KeySchema": [{"AttributeName": "id", "KeyType": "HASH"}],
177
177
  "AttributeDefinitions": [
178
178
  {"AttributeName": "id", "AttributeType": "S"},
179
- {"AttributeName": "name", "AttributeType": "S"},
180
- {"AttributeName": "description", "AttributeType": "S"},
181
- {"AttributeName": "metadata", "AttributeType": "S"},
182
179
  {"AttributeName": "type", "AttributeType": "S"},
183
- {"AttributeName": "size", "AttributeType": "N"},
184
- {"AttributeName": "linked_to", "AttributeType": "S"},
185
- {"AttributeName": "access_count", "AttributeType": "N"},
186
180
  {"AttributeName": "status", "AttributeType": "S"},
187
- {"AttributeName": "status_message", "AttributeType": "S"},
188
181
  {"AttributeName": "created_at", "AttributeType": "N"},
189
- {"AttributeName": "updated_at", "AttributeType": "N"},
190
- {"AttributeName": "external_id", "AttributeType": "S"},
191
182
  ],
192
183
  "GlobalSecondaryIndexes": [
193
184
  {
@@ -23,7 +23,7 @@ def serialize_to_dynamo_item(data: Dict[str, Any]) -> Dict[str, Any]:
23
23
  A DynamoDB-ready dict with the serialized data
24
24
 
25
25
  """
26
- item = {}
26
+ item: Dict[str, Any] = {}
27
27
  for key, value in data.items():
28
28
  if value is not None:
29
29
  if isinstance(value, (int, float)):
@@ -31,7 +31,7 @@ def serialize_to_dynamo_item(data: Dict[str, Any]) -> Dict[str, Any]:
31
31
  elif isinstance(value, str):
32
32
  item[key] = {"S": value}
33
33
  elif isinstance(value, bool):
34
- item[key] = {"BOOL": str(value)}
34
+ item[key] = {"BOOL": value}
35
35
  elif isinstance(value, (dict, list)):
36
36
  item[key] = {"S": json.dumps(value)}
37
37
  else:
@@ -682,9 +682,7 @@ class FirestoreDb(BaseDb):
682
682
  log_error(f"Error deleting memories: {e}")
683
683
  raise e
684
684
 
685
- def get_all_memory_topics(
686
- self, create_collection_if_not_found: Optional[bool] = True
687
- ) -> List[str]:
685
+ def get_all_memory_topics(self, create_collection_if_not_found: Optional[bool] = True) -> List[str]:
688
686
  """Get all memory topics from the database.
689
687
 
690
688
  Returns:
@@ -472,7 +472,8 @@ class GcsJsonDb(BaseDb):
472
472
 
473
473
  # Filter out the memory, with optional user_id verification
474
474
  memories = [
475
- m for m in memories
475
+ m
476
+ for m in memories
476
477
  if not (m.get("memory_id") == memory_id and (user_id is None or m.get("user_id") == user_id))
477
478
  ]
478
479
 
@@ -499,7 +500,8 @@ class GcsJsonDb(BaseDb):
499
500
 
500
501
  # Filter out memories, with optional user_id verification
501
502
  memories = [
502
- m for m in memories
503
+ m
504
+ for m in memories
503
505
  if not (m.get("memory_id") in memory_ids and (user_id is None or m.get("user_id") == user_id))
504
506
  ]
505
507
 
@@ -642,7 +644,7 @@ class GcsJsonDb(BaseDb):
642
644
  user_stats[memory_user_id] = {
643
645
  "user_id": memory_user_id,
644
646
  "total_memories": 0,
645
- "last_memory_updated_at": 0
647
+ "last_memory_updated_at": 0,
646
648
  }
647
649
  user_stats[memory_user_id]["total_memories"] += 1
648
650
  updated_at = memory.get("updated_at", 0)
@@ -359,8 +359,7 @@ class InMemoryDb(BaseDb):
359
359
  # If user_id is provided, verify ownership before deleting
360
360
  if user_id is not None:
361
361
  self._memories = [
362
- m for m in self._memories
363
- if not (m.get("memory_id") == memory_id and m.get("user_id") == user_id)
362
+ m for m in self._memories if not (m.get("memory_id") == memory_id and m.get("user_id") == user_id)
364
363
  ]
365
364
  else:
366
365
  self._memories = [m for m in self._memories if m.get("memory_id") != memory_id]
@@ -388,8 +387,7 @@ class InMemoryDb(BaseDb):
388
387
  # If user_id is provided, verify ownership before deleting
389
388
  if user_id is not None:
390
389
  self._memories = [
391
- m for m in self._memories
392
- if not (m.get("memory_id") in memory_ids and m.get("user_id") == user_id)
390
+ m for m in self._memories if not (m.get("memory_id") in memory_ids and m.get("user_id") == user_id)
393
391
  ]
394
392
  else:
395
393
  self._memories = [m for m in self._memories if m.get("memory_id") not in memory_ids]
@@ -532,7 +530,11 @@ class InMemoryDb(BaseDb):
532
530
 
533
531
  if memory_user_id:
534
532
  if memory_user_id not in user_stats:
535
- user_stats[memory_user_id] = {"user_id": memory_user_id, "total_memories": 0, "last_memory_updated_at": 0}
533
+ user_stats[memory_user_id] = {
534
+ "user_id": memory_user_id,
535
+ "total_memories": 0,
536
+ "last_memory_updated_at": 0,
537
+ }
536
538
  user_stats[memory_user_id]["total_memories"] += 1
537
539
  updated_at = memory.get("updated_at", 0)
538
540
  if updated_at > user_stats[memory_user_id]["last_memory_updated_at"]:
@@ -23,7 +23,7 @@ class FastEmbedEmbedder(Embedder):
23
23
  """Using BAAI/bge-small-en-v1.5 model, more models available: https://qdrant.github.io/fastembed/examples/Supported_Models/"""
24
24
 
25
25
  id: str = "BAAI/bge-small-en-v1.5"
26
- dimensions: int = 384
26
+ dimensions: Optional[int] = 384
27
27
 
28
28
  def get_embedding(self, text: str) -> List[float]:
29
29
  model = TextEmbedding(model_name=self.id)
@@ -360,7 +360,7 @@ class AwsBedrock(Model):
360
360
  formatted_messages, system_message = self._format_messages(messages)
361
361
 
362
362
  tool_config = None
363
- if tools:
363
+ if tools:
364
364
  tool_config = {"tools": self._format_tools_for_request(tools)}
365
365
 
366
366
  body = {
@@ -0,0 +1,66 @@
1
+ from dataclasses import dataclass, field
2
+ from os import getenv
3
+ from typing import Any, Dict, List, Optional, Type, Union
4
+
5
+ from pydantic import BaseModel
6
+
7
+ from agno.models.openai.like import OpenAILike
8
+ from agno.run.agent import RunOutput
9
+
10
+
11
+ @dataclass
12
+ class OpenRouter(OpenAILike):
13
+ """
14
+ A class for using models hosted on OpenRouter.
15
+
16
+ Attributes:
17
+ id (str): The model id. Defaults to "gpt-4o".
18
+ name (str): The model name. Defaults to "OpenRouter".
19
+ provider (str): The provider name. Defaults to "OpenRouter".
20
+ api_key (Optional[str]): The API key.
21
+ base_url (str): The base URL. Defaults to "https://openrouter.ai/api/v1".
22
+ max_tokens (int): The maximum number of tokens. Defaults to 1024.
23
+ fallback_models (Optional[List[str]]): List of fallback model IDs to use if the primary model
24
+ fails due to rate limits, timeouts, or unavailability. OpenRouter will automatically try
25
+ these models in order. Example: ["anthropic/claude-sonnet-4", "deepseek/deepseek-r1"]
26
+ """
27
+
28
+ id: str = "gpt-4o"
29
+ name: str = "OpenRouter"
30
+ provider: str = "OpenRouter"
31
+
32
+ api_key: Optional[str] = field(default_factory=lambda: getenv("OPENROUTER_API_KEY"))
33
+ base_url: str = "https://openrouter.ai/api/v1"
34
+ max_tokens: int = 1024
35
+ models: Optional[List[str]] = None # Dynamic model routing https://openrouter.ai/docs/features/model-routing
36
+
37
+ def get_request_params(
38
+ self,
39
+ response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
40
+ tools: Optional[List[Dict[str, Any]]] = None,
41
+ tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
42
+ run_response: Optional[RunOutput] = None,
43
+ ) -> Dict[str, Any]:
44
+ """
45
+ Returns keyword arguments for API requests, including fallback models configuration.
46
+
47
+ Returns:
48
+ Dict[str, Any]: A dictionary of keyword arguments for API requests.
49
+ """
50
+ # Get base request params from parent class
51
+ request_params = super().get_request_params(
52
+ response_format=response_format, tools=tools, tool_choice=tool_choice, run_response=run_response
53
+ )
54
+
55
+ # Add fallback models to extra_body if specified
56
+ if self.models:
57
+ # Get existing extra_body or create new dict
58
+ extra_body = request_params.get("extra_body") or {}
59
+
60
+ # Merge fallback models into extra_body
61
+ extra_body["models"] = self.models
62
+
63
+ # Update request params
64
+ request_params["extra_body"] = extra_body
65
+
66
+ return request_params