agno 2.1.2__tar.gz → 2.1.3__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 (551) hide show
  1. {agno-2.1.2 → agno-2.1.3}/PKG-INFO +1 -1
  2. {agno-2.1.2 → agno-2.1.3}/agno/db/firestore/firestore.py +1 -3
  3. {agno-2.1.2 → agno-2.1.3}/agno/db/gcs_json/gcs_json_db.py +5 -3
  4. {agno-2.1.2 → agno-2.1.3}/agno/db/in_memory/in_memory_db.py +7 -5
  5. {agno-2.1.2 → agno-2.1.3}/agno/models/aws/bedrock.py +1 -1
  6. agno-2.1.3/agno/models/openrouter/openrouter.py +66 -0
  7. agno-2.1.3/agno/models/vertexai/claude.py +74 -0
  8. {agno-2.1.2 → agno-2.1.3}/agno/os/app.py +52 -2
  9. {agno-2.1.2 → agno-2.1.3}/agno/os/mcp.py +3 -3
  10. {agno-2.1.2 → agno-2.1.3}/agno/os/utils.py +2 -1
  11. {agno-2.1.2 → agno-2.1.3}/agno/tools/file.py +4 -2
  12. {agno-2.1.2 → agno-2.1.3}/agno/utils/merge_dict.py +3 -3
  13. agno-2.1.3/agno/utils/print_response/__init__.py +0 -0
  14. {agno-2.1.2 → agno-2.1.3}/agno/workflow/parallel.py +5 -5
  15. {agno-2.1.2 → agno-2.1.3}/agno/workflow/workflow.py +9 -5
  16. {agno-2.1.2 → agno-2.1.3}/agno.egg-info/PKG-INFO +1 -1
  17. {agno-2.1.2 → agno-2.1.3}/agno.egg-info/SOURCES.txt +2 -0
  18. {agno-2.1.2 → agno-2.1.3}/pyproject.toml +1 -1
  19. agno-2.1.2/agno/models/openrouter/openrouter.py +0 -28
  20. {agno-2.1.2 → agno-2.1.3}/LICENSE +0 -0
  21. {agno-2.1.2 → agno-2.1.3}/README.md +0 -0
  22. {agno-2.1.2 → agno-2.1.3}/agno/__init__.py +0 -0
  23. {agno-2.1.2 → agno-2.1.3}/agno/agent/__init__.py +0 -0
  24. {agno-2.1.2 → agno-2.1.3}/agno/agent/agent.py +0 -0
  25. {agno-2.1.2 → agno-2.1.3}/agno/api/__init__.py +0 -0
  26. {agno-2.1.2 → agno-2.1.3}/agno/api/agent.py +0 -0
  27. {agno-2.1.2 → agno-2.1.3}/agno/api/api.py +0 -0
  28. {agno-2.1.2 → agno-2.1.3}/agno/api/evals.py +0 -0
  29. {agno-2.1.2 → agno-2.1.3}/agno/api/os.py +0 -0
  30. {agno-2.1.2 → agno-2.1.3}/agno/api/routes.py +0 -0
  31. {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/__init__.py +0 -0
  32. {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/agent.py +0 -0
  33. {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/evals.py +0 -0
  34. {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/os.py +0 -0
  35. {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/response.py +0 -0
  36. {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/team.py +0 -0
  37. {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/utils.py +0 -0
  38. {agno-2.1.2 → agno-2.1.3}/agno/api/schemas/workflows.py +0 -0
  39. {agno-2.1.2 → agno-2.1.3}/agno/api/settings.py +0 -0
  40. {agno-2.1.2 → agno-2.1.3}/agno/api/team.py +0 -0
  41. {agno-2.1.2 → agno-2.1.3}/agno/api/workflow.py +0 -0
  42. {agno-2.1.2 → agno-2.1.3}/agno/cloud/aws/base.py +0 -0
  43. {agno-2.1.2 → agno-2.1.3}/agno/cloud/aws/s3/__init__.py +0 -0
  44. {agno-2.1.2 → agno-2.1.3}/agno/cloud/aws/s3/api_client.py +0 -0
  45. {agno-2.1.2 → agno-2.1.3}/agno/cloud/aws/s3/bucket.py +0 -0
  46. {agno-2.1.2 → agno-2.1.3}/agno/cloud/aws/s3/object.py +0 -0
  47. {agno-2.1.2 → agno-2.1.3}/agno/db/__init__.py +0 -0
  48. {agno-2.1.2 → agno-2.1.3}/agno/db/base.py +0 -0
  49. {agno-2.1.2 → agno-2.1.3}/agno/db/dynamo/__init__.py +0 -0
  50. {agno-2.1.2 → agno-2.1.3}/agno/db/dynamo/dynamo.py +0 -0
  51. {agno-2.1.2 → agno-2.1.3}/agno/db/dynamo/schemas.py +0 -0
  52. {agno-2.1.2 → agno-2.1.3}/agno/db/dynamo/utils.py +0 -0
  53. {agno-2.1.2 → agno-2.1.3}/agno/db/firestore/__init__.py +0 -0
  54. {agno-2.1.2 → agno-2.1.3}/agno/db/firestore/schemas.py +0 -0
  55. {agno-2.1.2 → agno-2.1.3}/agno/db/firestore/utils.py +0 -0
  56. {agno-2.1.2 → agno-2.1.3}/agno/db/gcs_json/__init__.py +0 -0
  57. {agno-2.1.2 → agno-2.1.3}/agno/db/gcs_json/utils.py +0 -0
  58. {agno-2.1.2 → agno-2.1.3}/agno/db/in_memory/__init__.py +0 -0
  59. {agno-2.1.2 → agno-2.1.3}/agno/db/in_memory/utils.py +0 -0
  60. {agno-2.1.2 → agno-2.1.3}/agno/db/json/__init__.py +0 -0
  61. {agno-2.1.2 → agno-2.1.3}/agno/db/json/json_db.py +0 -0
  62. {agno-2.1.2 → agno-2.1.3}/agno/db/json/utils.py +0 -0
  63. {agno-2.1.2 → agno-2.1.3}/agno/db/migrations/__init__.py +0 -0
  64. {agno-2.1.2 → agno-2.1.3}/agno/db/migrations/v1_to_v2.py +0 -0
  65. {agno-2.1.2 → agno-2.1.3}/agno/db/mongo/__init__.py +0 -0
  66. {agno-2.1.2 → agno-2.1.3}/agno/db/mongo/mongo.py +0 -0
  67. {agno-2.1.2 → agno-2.1.3}/agno/db/mongo/schemas.py +0 -0
  68. {agno-2.1.2 → agno-2.1.3}/agno/db/mongo/utils.py +0 -0
  69. {agno-2.1.2 → agno-2.1.3}/agno/db/mysql/__init__.py +0 -0
  70. {agno-2.1.2 → agno-2.1.3}/agno/db/mysql/mysql.py +0 -0
  71. {agno-2.1.2 → agno-2.1.3}/agno/db/mysql/schemas.py +0 -0
  72. {agno-2.1.2 → agno-2.1.3}/agno/db/mysql/utils.py +0 -0
  73. {agno-2.1.2 → agno-2.1.3}/agno/db/postgres/__init__.py +0 -0
  74. {agno-2.1.2 → agno-2.1.3}/agno/db/postgres/postgres.py +0 -0
  75. {agno-2.1.2 → agno-2.1.3}/agno/db/postgres/schemas.py +0 -0
  76. {agno-2.1.2 → agno-2.1.3}/agno/db/postgres/utils.py +0 -0
  77. {agno-2.1.2 → agno-2.1.3}/agno/db/redis/__init__.py +0 -0
  78. {agno-2.1.2 → agno-2.1.3}/agno/db/redis/redis.py +0 -0
  79. {agno-2.1.2 → agno-2.1.3}/agno/db/redis/schemas.py +0 -0
  80. {agno-2.1.2 → agno-2.1.3}/agno/db/redis/utils.py +0 -0
  81. {agno-2.1.2 → agno-2.1.3}/agno/db/schemas/__init__.py +0 -0
  82. {agno-2.1.2 → agno-2.1.3}/agno/db/schemas/evals.py +0 -0
  83. {agno-2.1.2 → agno-2.1.3}/agno/db/schemas/knowledge.py +0 -0
  84. {agno-2.1.2 → agno-2.1.3}/agno/db/schemas/memory.py +0 -0
  85. {agno-2.1.2 → agno-2.1.3}/agno/db/schemas/metrics.py +0 -0
  86. {agno-2.1.2 → agno-2.1.3}/agno/db/singlestore/__init__.py +0 -0
  87. {agno-2.1.2 → agno-2.1.3}/agno/db/singlestore/schemas.py +0 -0
  88. {agno-2.1.2 → agno-2.1.3}/agno/db/singlestore/singlestore.py +0 -0
  89. {agno-2.1.2 → agno-2.1.3}/agno/db/singlestore/utils.py +0 -0
  90. {agno-2.1.2 → agno-2.1.3}/agno/db/sqlite/__init__.py +0 -0
  91. {agno-2.1.2 → agno-2.1.3}/agno/db/sqlite/schemas.py +0 -0
  92. {agno-2.1.2 → agno-2.1.3}/agno/db/sqlite/sqlite.py +0 -0
  93. {agno-2.1.2 → agno-2.1.3}/agno/db/sqlite/utils.py +0 -0
  94. {agno-2.1.2 → agno-2.1.3}/agno/db/utils.py +0 -0
  95. {agno-2.1.2 → agno-2.1.3}/agno/debug.py +0 -0
  96. {agno-2.1.2 → agno-2.1.3}/agno/eval/__init__.py +0 -0
  97. {agno-2.1.2 → agno-2.1.3}/agno/eval/accuracy.py +0 -0
  98. {agno-2.1.2 → agno-2.1.3}/agno/eval/performance.py +0 -0
  99. {agno-2.1.2 → agno-2.1.3}/agno/eval/reliability.py +0 -0
  100. {agno-2.1.2 → agno-2.1.3}/agno/eval/utils.py +0 -0
  101. {agno-2.1.2 → agno-2.1.3}/agno/exceptions.py +0 -0
  102. {agno-2.1.2 → agno-2.1.3}/agno/guardrails/__init__.py +0 -0
  103. {agno-2.1.2 → agno-2.1.3}/agno/guardrails/base.py +0 -0
  104. {agno-2.1.2 → agno-2.1.3}/agno/guardrails/openai.py +0 -0
  105. {agno-2.1.2 → agno-2.1.3}/agno/guardrails/pii.py +0 -0
  106. {agno-2.1.2 → agno-2.1.3}/agno/guardrails/prompt_injection.py +0 -0
  107. {agno-2.1.2 → agno-2.1.3}/agno/integrations/__init__.py +0 -0
  108. {agno-2.1.2 → agno-2.1.3}/agno/integrations/discord/__init__.py +0 -0
  109. {agno-2.1.2 → agno-2.1.3}/agno/integrations/discord/client.py +0 -0
  110. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/__init__.py +0 -0
  111. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/__init__.py +0 -0
  112. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/agentic.py +0 -0
  113. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/document.py +0 -0
  114. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/fixed.py +0 -0
  115. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/markdown.py +0 -0
  116. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/recursive.py +0 -0
  117. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/row.py +0 -0
  118. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/semantic.py +0 -0
  119. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/chunking/strategy.py +0 -0
  120. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/content.py +0 -0
  121. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/document/__init__.py +0 -0
  122. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/document/base.py +0 -0
  123. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/__init__.py +0 -0
  124. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  125. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/azure_openai.py +0 -0
  126. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/base.py +0 -0
  127. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/cohere.py +0 -0
  128. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/fastembed.py +0 -0
  129. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/fireworks.py +0 -0
  130. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/google.py +0 -0
  131. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/huggingface.py +0 -0
  132. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/jina.py +0 -0
  133. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/langdb.py +0 -0
  134. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/mistral.py +0 -0
  135. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/nebius.py +0 -0
  136. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/ollama.py +0 -0
  137. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/openai.py +0 -0
  138. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  139. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/together.py +0 -0
  140. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/embedder/voyageai.py +0 -0
  141. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/knowledge.py +0 -0
  142. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/__init__.py +0 -0
  143. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/arxiv_reader.py +0 -0
  144. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/base.py +0 -0
  145. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/csv_reader.py +0 -0
  146. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/docx_reader.py +0 -0
  147. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
  148. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  149. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/json_reader.py +0 -0
  150. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/markdown_reader.py +0 -0
  151. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/pdf_reader.py +0 -0
  152. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/reader_factory.py +0 -0
  153. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/s3_reader.py +0 -0
  154. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/text_reader.py +0 -0
  155. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/web_search_reader.py +0 -0
  156. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/website_reader.py +0 -0
  157. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  158. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reader/youtube_reader.py +0 -0
  159. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/remote_content/__init__.py +0 -0
  160. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/remote_content/remote_content.py +0 -0
  161. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reranker/__init__.py +0 -0
  162. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reranker/base.py +0 -0
  163. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reranker/cohere.py +0 -0
  164. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reranker/infinity.py +0 -0
  165. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  166. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/types.py +0 -0
  167. {agno-2.1.2 → agno-2.1.3}/agno/knowledge/utils.py +0 -0
  168. {agno-2.1.2 → agno-2.1.3}/agno/media.py +0 -0
  169. {agno-2.1.2 → agno-2.1.3}/agno/memory/__init__.py +0 -0
  170. {agno-2.1.2 → agno-2.1.3}/agno/memory/manager.py +0 -0
  171. {agno-2.1.2 → agno-2.1.3}/agno/models/__init__.py +0 -0
  172. {agno-2.1.2 → agno-2.1.3}/agno/models/aimlapi/__init__.py +0 -0
  173. {agno-2.1.2 → agno-2.1.3}/agno/models/aimlapi/aimlapi.py +0 -0
  174. {agno-2.1.2 → agno-2.1.3}/agno/models/anthropic/__init__.py +0 -0
  175. {agno-2.1.2 → agno-2.1.3}/agno/models/anthropic/claude.py +0 -0
  176. {agno-2.1.2 → agno-2.1.3}/agno/models/aws/__init__.py +0 -0
  177. {agno-2.1.2 → agno-2.1.3}/agno/models/aws/claude.py +0 -0
  178. {agno-2.1.2 → agno-2.1.3}/agno/models/azure/__init__.py +0 -0
  179. {agno-2.1.2 → agno-2.1.3}/agno/models/azure/ai_foundry.py +0 -0
  180. {agno-2.1.2 → agno-2.1.3}/agno/models/azure/openai_chat.py +0 -0
  181. {agno-2.1.2 → agno-2.1.3}/agno/models/base.py +0 -0
  182. {agno-2.1.2 → agno-2.1.3}/agno/models/cerebras/__init__.py +0 -0
  183. {agno-2.1.2 → agno-2.1.3}/agno/models/cerebras/cerebras.py +0 -0
  184. {agno-2.1.2 → agno-2.1.3}/agno/models/cerebras/cerebras_openai.py +0 -0
  185. {agno-2.1.2 → agno-2.1.3}/agno/models/cohere/__init__.py +0 -0
  186. {agno-2.1.2 → agno-2.1.3}/agno/models/cohere/chat.py +0 -0
  187. {agno-2.1.2 → agno-2.1.3}/agno/models/cometapi/__init__.py +0 -0
  188. {agno-2.1.2 → agno-2.1.3}/agno/models/cometapi/cometapi.py +0 -0
  189. {agno-2.1.2 → agno-2.1.3}/agno/models/dashscope/__init__.py +0 -0
  190. {agno-2.1.2 → agno-2.1.3}/agno/models/dashscope/dashscope.py +0 -0
  191. {agno-2.1.2 → agno-2.1.3}/agno/models/deepinfra/__init__.py +0 -0
  192. {agno-2.1.2 → agno-2.1.3}/agno/models/deepinfra/deepinfra.py +0 -0
  193. {agno-2.1.2 → agno-2.1.3}/agno/models/deepseek/__init__.py +0 -0
  194. {agno-2.1.2 → agno-2.1.3}/agno/models/deepseek/deepseek.py +0 -0
  195. {agno-2.1.2 → agno-2.1.3}/agno/models/defaults.py +0 -0
  196. {agno-2.1.2 → agno-2.1.3}/agno/models/fireworks/__init__.py +0 -0
  197. {agno-2.1.2 → agno-2.1.3}/agno/models/fireworks/fireworks.py +0 -0
  198. {agno-2.1.2 → agno-2.1.3}/agno/models/google/__init__.py +0 -0
  199. {agno-2.1.2 → agno-2.1.3}/agno/models/google/gemini.py +0 -0
  200. {agno-2.1.2 → agno-2.1.3}/agno/models/groq/__init__.py +0 -0
  201. {agno-2.1.2 → agno-2.1.3}/agno/models/groq/groq.py +0 -0
  202. {agno-2.1.2 → agno-2.1.3}/agno/models/huggingface/__init__.py +0 -0
  203. {agno-2.1.2 → agno-2.1.3}/agno/models/huggingface/huggingface.py +0 -0
  204. {agno-2.1.2 → agno-2.1.3}/agno/models/ibm/__init__.py +0 -0
  205. {agno-2.1.2 → agno-2.1.3}/agno/models/ibm/watsonx.py +0 -0
  206. {agno-2.1.2 → agno-2.1.3}/agno/models/internlm/__init__.py +0 -0
  207. {agno-2.1.2 → agno-2.1.3}/agno/models/internlm/internlm.py +0 -0
  208. {agno-2.1.2 → agno-2.1.3}/agno/models/langdb/__init__.py +0 -0
  209. {agno-2.1.2 → agno-2.1.3}/agno/models/langdb/langdb.py +0 -0
  210. {agno-2.1.2 → agno-2.1.3}/agno/models/litellm/__init__.py +0 -0
  211. {agno-2.1.2 → agno-2.1.3}/agno/models/litellm/chat.py +0 -0
  212. {agno-2.1.2 → agno-2.1.3}/agno/models/litellm/litellm_openai.py +0 -0
  213. {agno-2.1.2 → agno-2.1.3}/agno/models/llama_cpp/__init__.py +0 -0
  214. {agno-2.1.2 → agno-2.1.3}/agno/models/llama_cpp/llama_cpp.py +0 -0
  215. {agno-2.1.2 → agno-2.1.3}/agno/models/lmstudio/__init__.py +0 -0
  216. {agno-2.1.2 → agno-2.1.3}/agno/models/lmstudio/lmstudio.py +0 -0
  217. {agno-2.1.2 → agno-2.1.3}/agno/models/message.py +0 -0
  218. {agno-2.1.2 → agno-2.1.3}/agno/models/meta/__init__.py +0 -0
  219. {agno-2.1.2 → agno-2.1.3}/agno/models/meta/llama.py +0 -0
  220. {agno-2.1.2 → agno-2.1.3}/agno/models/meta/llama_openai.py +0 -0
  221. {agno-2.1.2 → agno-2.1.3}/agno/models/metrics.py +0 -0
  222. {agno-2.1.2 → agno-2.1.3}/agno/models/mistral/__init__.py +0 -0
  223. {agno-2.1.2 → agno-2.1.3}/agno/models/mistral/mistral.py +0 -0
  224. {agno-2.1.2 → agno-2.1.3}/agno/models/nebius/__init__.py +0 -0
  225. {agno-2.1.2 → agno-2.1.3}/agno/models/nebius/nebius.py +0 -0
  226. {agno-2.1.2 → agno-2.1.3}/agno/models/nexus/__init__.py +0 -0
  227. {agno-2.1.2 → agno-2.1.3}/agno/models/nexus/nexus.py +0 -0
  228. {agno-2.1.2 → agno-2.1.3}/agno/models/nvidia/__init__.py +0 -0
  229. {agno-2.1.2 → agno-2.1.3}/agno/models/nvidia/nvidia.py +0 -0
  230. {agno-2.1.2 → agno-2.1.3}/agno/models/ollama/__init__.py +0 -0
  231. {agno-2.1.2 → agno-2.1.3}/agno/models/ollama/chat.py +0 -0
  232. {agno-2.1.2 → agno-2.1.3}/agno/models/openai/__init__.py +0 -0
  233. {agno-2.1.2 → agno-2.1.3}/agno/models/openai/chat.py +0 -0
  234. {agno-2.1.2 → agno-2.1.3}/agno/models/openai/like.py +0 -0
  235. {agno-2.1.2 → agno-2.1.3}/agno/models/openai/responses.py +0 -0
  236. {agno-2.1.2 → agno-2.1.3}/agno/models/openrouter/__init__.py +0 -0
  237. {agno-2.1.2 → agno-2.1.3}/agno/models/perplexity/__init__.py +0 -0
  238. {agno-2.1.2 → agno-2.1.3}/agno/models/perplexity/perplexity.py +0 -0
  239. {agno-2.1.2 → agno-2.1.3}/agno/models/portkey/__init__.py +0 -0
  240. {agno-2.1.2 → agno-2.1.3}/agno/models/portkey/portkey.py +0 -0
  241. {agno-2.1.2 → agno-2.1.3}/agno/models/requesty/__init__.py +0 -0
  242. {agno-2.1.2 → agno-2.1.3}/agno/models/requesty/requesty.py +0 -0
  243. {agno-2.1.2 → agno-2.1.3}/agno/models/response.py +0 -0
  244. {agno-2.1.2 → agno-2.1.3}/agno/models/sambanova/__init__.py +0 -0
  245. {agno-2.1.2 → agno-2.1.3}/agno/models/sambanova/sambanova.py +0 -0
  246. {agno-2.1.2 → agno-2.1.3}/agno/models/siliconflow/__init__.py +0 -0
  247. {agno-2.1.2 → agno-2.1.3}/agno/models/siliconflow/siliconflow.py +0 -0
  248. {agno-2.1.2 → agno-2.1.3}/agno/models/together/__init__.py +0 -0
  249. {agno-2.1.2 → agno-2.1.3}/agno/models/together/together.py +0 -0
  250. {agno-2.1.2 → agno-2.1.3}/agno/models/utils.py +0 -0
  251. {agno-2.1.2 → agno-2.1.3}/agno/models/vercel/__init__.py +0 -0
  252. {agno-2.1.2 → agno-2.1.3}/agno/models/vercel/v0.py +0 -0
  253. {agno-2.1.2/agno/reasoning → agno-2.1.3/agno/models/vertexai}/__init__.py +0 -0
  254. {agno-2.1.2 → agno-2.1.3}/agno/models/vllm/__init__.py +0 -0
  255. {agno-2.1.2 → agno-2.1.3}/agno/models/vllm/vllm.py +0 -0
  256. {agno-2.1.2 → agno-2.1.3}/agno/models/xai/__init__.py +0 -0
  257. {agno-2.1.2 → agno-2.1.3}/agno/models/xai/xai.py +0 -0
  258. {agno-2.1.2 → agno-2.1.3}/agno/os/__init__.py +0 -0
  259. {agno-2.1.2 → agno-2.1.3}/agno/os/auth.py +0 -0
  260. {agno-2.1.2 → agno-2.1.3}/agno/os/config.py +0 -0
  261. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/__init__.py +0 -0
  262. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/a2a/__init__.py +0 -0
  263. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/a2a/a2a.py +0 -0
  264. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/a2a/router.py +0 -0
  265. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/a2a/utils.py +0 -0
  266. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/agui/__init__.py +0 -0
  267. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/agui/agui.py +0 -0
  268. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/agui/router.py +0 -0
  269. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/agui/utils.py +0 -0
  270. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/base.py +0 -0
  271. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/slack/__init__.py +0 -0
  272. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/slack/router.py +0 -0
  273. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/slack/security.py +0 -0
  274. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/slack/slack.py +0 -0
  275. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  276. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/whatsapp/router.py +0 -0
  277. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/whatsapp/security.py +0 -0
  278. {agno-2.1.2 → agno-2.1.3}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  279. {agno-2.1.2 → agno-2.1.3}/agno/os/middleware/__init__.py +0 -0
  280. {agno-2.1.2 → agno-2.1.3}/agno/os/middleware/jwt.py +0 -0
  281. {agno-2.1.2 → agno-2.1.3}/agno/os/router.py +0 -0
  282. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/__init__.py +0 -0
  283. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/evals/__init__.py +0 -0
  284. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/evals/evals.py +0 -0
  285. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/evals/schemas.py +0 -0
  286. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/evals/utils.py +0 -0
  287. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/health.py +0 -0
  288. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/home.py +0 -0
  289. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/knowledge/__init__.py +0 -0
  290. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/knowledge/knowledge.py +0 -0
  291. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/knowledge/schemas.py +0 -0
  292. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/memory/__init__.py +0 -0
  293. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/memory/memory.py +0 -0
  294. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/memory/schemas.py +0 -0
  295. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/metrics/__init__.py +0 -0
  296. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/metrics/metrics.py +0 -0
  297. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/metrics/schemas.py +0 -0
  298. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/session/__init__.py +0 -0
  299. {agno-2.1.2 → agno-2.1.3}/agno/os/routers/session/session.py +0 -0
  300. {agno-2.1.2 → agno-2.1.3}/agno/os/schema.py +0 -0
  301. {agno-2.1.2 → agno-2.1.3}/agno/os/settings.py +0 -0
  302. {agno-2.1.2 → agno-2.1.3}/agno/py.typed +0 -0
  303. {agno-2.1.2/agno/run → agno-2.1.3/agno/reasoning}/__init__.py +0 -0
  304. {agno-2.1.2 → agno-2.1.3}/agno/reasoning/azure_ai_foundry.py +0 -0
  305. {agno-2.1.2 → agno-2.1.3}/agno/reasoning/deepseek.py +0 -0
  306. {agno-2.1.2 → agno-2.1.3}/agno/reasoning/default.py +0 -0
  307. {agno-2.1.2 → agno-2.1.3}/agno/reasoning/groq.py +0 -0
  308. {agno-2.1.2 → agno-2.1.3}/agno/reasoning/helpers.py +0 -0
  309. {agno-2.1.2 → agno-2.1.3}/agno/reasoning/ollama.py +0 -0
  310. {agno-2.1.2 → agno-2.1.3}/agno/reasoning/openai.py +0 -0
  311. {agno-2.1.2 → agno-2.1.3}/agno/reasoning/step.py +0 -0
  312. {agno-2.1.2/agno/tools/models → agno-2.1.3/agno/run}/__init__.py +0 -0
  313. {agno-2.1.2 → agno-2.1.3}/agno/run/agent.py +0 -0
  314. {agno-2.1.2 → agno-2.1.3}/agno/run/base.py +0 -0
  315. {agno-2.1.2 → agno-2.1.3}/agno/run/cancel.py +0 -0
  316. {agno-2.1.2 → agno-2.1.3}/agno/run/messages.py +0 -0
  317. {agno-2.1.2 → agno-2.1.3}/agno/run/team.py +0 -0
  318. {agno-2.1.2 → agno-2.1.3}/agno/run/workflow.py +0 -0
  319. {agno-2.1.2 → agno-2.1.3}/agno/session/__init__.py +0 -0
  320. {agno-2.1.2 → agno-2.1.3}/agno/session/agent.py +0 -0
  321. {agno-2.1.2 → agno-2.1.3}/agno/session/summary.py +0 -0
  322. {agno-2.1.2 → agno-2.1.3}/agno/session/team.py +0 -0
  323. {agno-2.1.2 → agno-2.1.3}/agno/session/workflow.py +0 -0
  324. {agno-2.1.2 → agno-2.1.3}/agno/team/__init__.py +0 -0
  325. {agno-2.1.2 → agno-2.1.3}/agno/team/team.py +0 -0
  326. {agno-2.1.2 → agno-2.1.3}/agno/tools/__init__.py +0 -0
  327. {agno-2.1.2 → agno-2.1.3}/agno/tools/agentql.py +0 -0
  328. {agno-2.1.2 → agno-2.1.3}/agno/tools/airflow.py +0 -0
  329. {agno-2.1.2 → agno-2.1.3}/agno/tools/api.py +0 -0
  330. {agno-2.1.2 → agno-2.1.3}/agno/tools/apify.py +0 -0
  331. {agno-2.1.2 → agno-2.1.3}/agno/tools/arxiv.py +0 -0
  332. {agno-2.1.2 → agno-2.1.3}/agno/tools/aws_lambda.py +0 -0
  333. {agno-2.1.2 → agno-2.1.3}/agno/tools/aws_ses.py +0 -0
  334. {agno-2.1.2 → agno-2.1.3}/agno/tools/baidusearch.py +0 -0
  335. {agno-2.1.2 → agno-2.1.3}/agno/tools/bitbucket.py +0 -0
  336. {agno-2.1.2 → agno-2.1.3}/agno/tools/brandfetch.py +0 -0
  337. {agno-2.1.2 → agno-2.1.3}/agno/tools/bravesearch.py +0 -0
  338. {agno-2.1.2 → agno-2.1.3}/agno/tools/brightdata.py +0 -0
  339. {agno-2.1.2 → agno-2.1.3}/agno/tools/browserbase.py +0 -0
  340. {agno-2.1.2 → agno-2.1.3}/agno/tools/calcom.py +0 -0
  341. {agno-2.1.2 → agno-2.1.3}/agno/tools/calculator.py +0 -0
  342. {agno-2.1.2 → agno-2.1.3}/agno/tools/cartesia.py +0 -0
  343. {agno-2.1.2 → agno-2.1.3}/agno/tools/clickup.py +0 -0
  344. {agno-2.1.2 → agno-2.1.3}/agno/tools/confluence.py +0 -0
  345. {agno-2.1.2 → agno-2.1.3}/agno/tools/crawl4ai.py +0 -0
  346. {agno-2.1.2 → agno-2.1.3}/agno/tools/csv_toolkit.py +0 -0
  347. {agno-2.1.2 → agno-2.1.3}/agno/tools/dalle.py +0 -0
  348. {agno-2.1.2 → agno-2.1.3}/agno/tools/daytona.py +0 -0
  349. {agno-2.1.2 → agno-2.1.3}/agno/tools/decorator.py +0 -0
  350. {agno-2.1.2 → agno-2.1.3}/agno/tools/desi_vocal.py +0 -0
  351. {agno-2.1.2 → agno-2.1.3}/agno/tools/discord.py +0 -0
  352. {agno-2.1.2 → agno-2.1.3}/agno/tools/docker.py +0 -0
  353. {agno-2.1.2 → agno-2.1.3}/agno/tools/duckdb.py +0 -0
  354. {agno-2.1.2 → agno-2.1.3}/agno/tools/duckduckgo.py +0 -0
  355. {agno-2.1.2 → agno-2.1.3}/agno/tools/e2b.py +0 -0
  356. {agno-2.1.2 → agno-2.1.3}/agno/tools/eleven_labs.py +0 -0
  357. {agno-2.1.2 → agno-2.1.3}/agno/tools/email.py +0 -0
  358. {agno-2.1.2 → agno-2.1.3}/agno/tools/evm.py +0 -0
  359. {agno-2.1.2 → agno-2.1.3}/agno/tools/exa.py +0 -0
  360. {agno-2.1.2 → agno-2.1.3}/agno/tools/fal.py +0 -0
  361. {agno-2.1.2 → agno-2.1.3}/agno/tools/file_generation.py +0 -0
  362. {agno-2.1.2 → agno-2.1.3}/agno/tools/financial_datasets.py +0 -0
  363. {agno-2.1.2 → agno-2.1.3}/agno/tools/firecrawl.py +0 -0
  364. {agno-2.1.2 → agno-2.1.3}/agno/tools/function.py +0 -0
  365. {agno-2.1.2 → agno-2.1.3}/agno/tools/giphy.py +0 -0
  366. {agno-2.1.2 → agno-2.1.3}/agno/tools/github.py +0 -0
  367. {agno-2.1.2 → agno-2.1.3}/agno/tools/gmail.py +0 -0
  368. {agno-2.1.2 → agno-2.1.3}/agno/tools/google_bigquery.py +0 -0
  369. {agno-2.1.2 → agno-2.1.3}/agno/tools/google_maps.py +0 -0
  370. {agno-2.1.2 → agno-2.1.3}/agno/tools/googlecalendar.py +0 -0
  371. {agno-2.1.2 → agno-2.1.3}/agno/tools/googlesearch.py +0 -0
  372. {agno-2.1.2 → agno-2.1.3}/agno/tools/googlesheets.py +0 -0
  373. {agno-2.1.2 → agno-2.1.3}/agno/tools/hackernews.py +0 -0
  374. {agno-2.1.2 → agno-2.1.3}/agno/tools/jina.py +0 -0
  375. {agno-2.1.2 → agno-2.1.3}/agno/tools/jira.py +0 -0
  376. {agno-2.1.2 → agno-2.1.3}/agno/tools/knowledge.py +0 -0
  377. {agno-2.1.2 → agno-2.1.3}/agno/tools/linear.py +0 -0
  378. {agno-2.1.2 → agno-2.1.3}/agno/tools/linkup.py +0 -0
  379. {agno-2.1.2 → agno-2.1.3}/agno/tools/local_file_system.py +0 -0
  380. {agno-2.1.2 → agno-2.1.3}/agno/tools/lumalab.py +0 -0
  381. {agno-2.1.2 → agno-2.1.3}/agno/tools/mcp.py +0 -0
  382. {agno-2.1.2 → agno-2.1.3}/agno/tools/mcp_toolbox.py +0 -0
  383. {agno-2.1.2 → agno-2.1.3}/agno/tools/mem0.py +0 -0
  384. {agno-2.1.2 → agno-2.1.3}/agno/tools/memori.py +0 -0
  385. {agno-2.1.2 → agno-2.1.3}/agno/tools/memory.py +0 -0
  386. {agno-2.1.2 → agno-2.1.3}/agno/tools/mlx_transcribe.py +0 -0
  387. {agno-2.1.2/agno/tools/streamlit → agno-2.1.3/agno/tools/models}/__init__.py +0 -0
  388. {agno-2.1.2 → agno-2.1.3}/agno/tools/models/azure_openai.py +0 -0
  389. {agno-2.1.2 → agno-2.1.3}/agno/tools/models/gemini.py +0 -0
  390. {agno-2.1.2 → agno-2.1.3}/agno/tools/models/groq.py +0 -0
  391. {agno-2.1.2 → agno-2.1.3}/agno/tools/models/morph.py +0 -0
  392. {agno-2.1.2 → agno-2.1.3}/agno/tools/models/nebius.py +0 -0
  393. {agno-2.1.2 → agno-2.1.3}/agno/tools/models_labs.py +0 -0
  394. {agno-2.1.2 → agno-2.1.3}/agno/tools/moviepy_video.py +0 -0
  395. {agno-2.1.2 → agno-2.1.3}/agno/tools/neo4j.py +0 -0
  396. {agno-2.1.2 → agno-2.1.3}/agno/tools/newspaper.py +0 -0
  397. {agno-2.1.2 → agno-2.1.3}/agno/tools/newspaper4k.py +0 -0
  398. {agno-2.1.2 → agno-2.1.3}/agno/tools/openai.py +0 -0
  399. {agno-2.1.2 → agno-2.1.3}/agno/tools/openbb.py +0 -0
  400. {agno-2.1.2 → agno-2.1.3}/agno/tools/opencv.py +0 -0
  401. {agno-2.1.2 → agno-2.1.3}/agno/tools/openweather.py +0 -0
  402. {agno-2.1.2 → agno-2.1.3}/agno/tools/oxylabs.py +0 -0
  403. {agno-2.1.2 → agno-2.1.3}/agno/tools/pandas.py +0 -0
  404. {agno-2.1.2 → agno-2.1.3}/agno/tools/postgres.py +0 -0
  405. {agno-2.1.2 → agno-2.1.3}/agno/tools/pubmed.py +0 -0
  406. {agno-2.1.2 → agno-2.1.3}/agno/tools/python.py +0 -0
  407. {agno-2.1.2 → agno-2.1.3}/agno/tools/reasoning.py +0 -0
  408. {agno-2.1.2 → agno-2.1.3}/agno/tools/reddit.py +0 -0
  409. {agno-2.1.2 → agno-2.1.3}/agno/tools/replicate.py +0 -0
  410. {agno-2.1.2 → agno-2.1.3}/agno/tools/resend.py +0 -0
  411. {agno-2.1.2 → agno-2.1.3}/agno/tools/scrapegraph.py +0 -0
  412. {agno-2.1.2 → agno-2.1.3}/agno/tools/searxng.py +0 -0
  413. {agno-2.1.2 → agno-2.1.3}/agno/tools/serpapi.py +0 -0
  414. {agno-2.1.2 → agno-2.1.3}/agno/tools/serper.py +0 -0
  415. {agno-2.1.2 → agno-2.1.3}/agno/tools/shell.py +0 -0
  416. {agno-2.1.2 → agno-2.1.3}/agno/tools/slack.py +0 -0
  417. {agno-2.1.2 → agno-2.1.3}/agno/tools/sleep.py +0 -0
  418. {agno-2.1.2 → agno-2.1.3}/agno/tools/spider.py +0 -0
  419. {agno-2.1.2 → agno-2.1.3}/agno/tools/sql.py +0 -0
  420. {agno-2.1.2/agno/utils → agno-2.1.3/agno/tools/streamlit}/__init__.py +0 -0
  421. {agno-2.1.2 → agno-2.1.3}/agno/tools/streamlit/components.py +0 -0
  422. {agno-2.1.2 → agno-2.1.3}/agno/tools/tavily.py +0 -0
  423. {agno-2.1.2 → agno-2.1.3}/agno/tools/telegram.py +0 -0
  424. {agno-2.1.2 → agno-2.1.3}/agno/tools/todoist.py +0 -0
  425. {agno-2.1.2 → agno-2.1.3}/agno/tools/tool_registry.py +0 -0
  426. {agno-2.1.2 → agno-2.1.3}/agno/tools/toolkit.py +0 -0
  427. {agno-2.1.2 → agno-2.1.3}/agno/tools/trafilatura.py +0 -0
  428. {agno-2.1.2 → agno-2.1.3}/agno/tools/trello.py +0 -0
  429. {agno-2.1.2 → agno-2.1.3}/agno/tools/twilio.py +0 -0
  430. {agno-2.1.2 → agno-2.1.3}/agno/tools/user_control_flow.py +0 -0
  431. {agno-2.1.2 → agno-2.1.3}/agno/tools/valyu.py +0 -0
  432. {agno-2.1.2 → agno-2.1.3}/agno/tools/visualization.py +0 -0
  433. {agno-2.1.2 → agno-2.1.3}/agno/tools/webbrowser.py +0 -0
  434. {agno-2.1.2 → agno-2.1.3}/agno/tools/webex.py +0 -0
  435. {agno-2.1.2 → agno-2.1.3}/agno/tools/website.py +0 -0
  436. {agno-2.1.2 → agno-2.1.3}/agno/tools/webtools.py +0 -0
  437. {agno-2.1.2 → agno-2.1.3}/agno/tools/whatsapp.py +0 -0
  438. {agno-2.1.2 → agno-2.1.3}/agno/tools/wikipedia.py +0 -0
  439. {agno-2.1.2 → agno-2.1.3}/agno/tools/workflow.py +0 -0
  440. {agno-2.1.2 → agno-2.1.3}/agno/tools/x.py +0 -0
  441. {agno-2.1.2 → agno-2.1.3}/agno/tools/yfinance.py +0 -0
  442. {agno-2.1.2 → agno-2.1.3}/agno/tools/youtube.py +0 -0
  443. {agno-2.1.2 → agno-2.1.3}/agno/tools/zendesk.py +0 -0
  444. {agno-2.1.2 → agno-2.1.3}/agno/tools/zep.py +0 -0
  445. {agno-2.1.2 → agno-2.1.3}/agno/tools/zoom.py +0 -0
  446. {agno-2.1.2/agno/utils/models → agno-2.1.3/agno/utils}/__init__.py +0 -0
  447. {agno-2.1.2 → agno-2.1.3}/agno/utils/audio.py +0 -0
  448. {agno-2.1.2 → agno-2.1.3}/agno/utils/certs.py +0 -0
  449. {agno-2.1.2 → agno-2.1.3}/agno/utils/code_execution.py +0 -0
  450. {agno-2.1.2 → agno-2.1.3}/agno/utils/common.py +0 -0
  451. {agno-2.1.2 → agno-2.1.3}/agno/utils/dttm.py +0 -0
  452. {agno-2.1.2 → agno-2.1.3}/agno/utils/enum.py +0 -0
  453. {agno-2.1.2 → agno-2.1.3}/agno/utils/env.py +0 -0
  454. {agno-2.1.2 → agno-2.1.3}/agno/utils/events.py +0 -0
  455. {agno-2.1.2 → agno-2.1.3}/agno/utils/format_str.py +0 -0
  456. {agno-2.1.2 → agno-2.1.3}/agno/utils/functions.py +0 -0
  457. {agno-2.1.2 → agno-2.1.3}/agno/utils/gemini.py +0 -0
  458. {agno-2.1.2 → agno-2.1.3}/agno/utils/hooks.py +0 -0
  459. {agno-2.1.2 → agno-2.1.3}/agno/utils/http.py +0 -0
  460. {agno-2.1.2 → agno-2.1.3}/agno/utils/json_schema.py +0 -0
  461. {agno-2.1.2 → agno-2.1.3}/agno/utils/knowledge.py +0 -0
  462. {agno-2.1.2 → agno-2.1.3}/agno/utils/location.py +0 -0
  463. {agno-2.1.2 → agno-2.1.3}/agno/utils/log.py +0 -0
  464. {agno-2.1.2 → agno-2.1.3}/agno/utils/mcp.py +0 -0
  465. {agno-2.1.2 → agno-2.1.3}/agno/utils/media.py +0 -0
  466. {agno-2.1.2 → agno-2.1.3}/agno/utils/message.py +0 -0
  467. {agno-2.1.2/agno/utils/print_response → agno-2.1.3/agno/utils/models}/__init__.py +0 -0
  468. {agno-2.1.2 → agno-2.1.3}/agno/utils/models/ai_foundry.py +0 -0
  469. {agno-2.1.2 → agno-2.1.3}/agno/utils/models/claude.py +0 -0
  470. {agno-2.1.2 → agno-2.1.3}/agno/utils/models/cohere.py +0 -0
  471. {agno-2.1.2 → agno-2.1.3}/agno/utils/models/llama.py +0 -0
  472. {agno-2.1.2 → agno-2.1.3}/agno/utils/models/mistral.py +0 -0
  473. {agno-2.1.2 → agno-2.1.3}/agno/utils/models/openai_responses.py +0 -0
  474. {agno-2.1.2 → agno-2.1.3}/agno/utils/models/schema_utils.py +0 -0
  475. {agno-2.1.2 → agno-2.1.3}/agno/utils/models/watsonx.py +0 -0
  476. {agno-2.1.2 → agno-2.1.3}/agno/utils/openai.py +0 -0
  477. {agno-2.1.2 → agno-2.1.3}/agno/utils/pickle.py +0 -0
  478. {agno-2.1.2 → agno-2.1.3}/agno/utils/pprint.py +0 -0
  479. {agno-2.1.2 → agno-2.1.3}/agno/utils/print_response/agent.py +0 -0
  480. {agno-2.1.2 → agno-2.1.3}/agno/utils/print_response/team.py +0 -0
  481. {agno-2.1.2 → agno-2.1.3}/agno/utils/print_response/workflow.py +0 -0
  482. {agno-2.1.2 → agno-2.1.3}/agno/utils/prompts.py +0 -0
  483. {agno-2.1.2 → agno-2.1.3}/agno/utils/reasoning.py +0 -0
  484. {agno-2.1.2 → agno-2.1.3}/agno/utils/response.py +0 -0
  485. {agno-2.1.2 → agno-2.1.3}/agno/utils/response_iterator.py +0 -0
  486. {agno-2.1.2 → agno-2.1.3}/agno/utils/safe_formatter.py +0 -0
  487. {agno-2.1.2 → agno-2.1.3}/agno/utils/serialize.py +0 -0
  488. {agno-2.1.2 → agno-2.1.3}/agno/utils/shell.py +0 -0
  489. {agno-2.1.2 → agno-2.1.3}/agno/utils/streamlit.py +0 -0
  490. {agno-2.1.2 → agno-2.1.3}/agno/utils/string.py +0 -0
  491. {agno-2.1.2 → agno-2.1.3}/agno/utils/team.py +0 -0
  492. {agno-2.1.2 → agno-2.1.3}/agno/utils/timer.py +0 -0
  493. {agno-2.1.2 → agno-2.1.3}/agno/utils/tools.py +0 -0
  494. {agno-2.1.2 → agno-2.1.3}/agno/utils/web.py +0 -0
  495. {agno-2.1.2 → agno-2.1.3}/agno/utils/whatsapp.py +0 -0
  496. {agno-2.1.2 → agno-2.1.3}/agno/utils/yaml_io.py +0 -0
  497. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/__init__.py +0 -0
  498. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/base.py +0 -0
  499. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/cassandra/__init__.py +0 -0
  500. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/cassandra/cassandra.py +0 -0
  501. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  502. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/cassandra/index.py +0 -0
  503. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/chroma/__init__.py +0 -0
  504. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/chroma/chromadb.py +0 -0
  505. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/clickhouse/__init__.py +0 -0
  506. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  507. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/clickhouse/index.py +0 -0
  508. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/couchbase/__init__.py +0 -0
  509. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/couchbase/couchbase.py +0 -0
  510. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/distance.py +0 -0
  511. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/lancedb/__init__.py +0 -0
  512. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/lancedb/lance_db.py +0 -0
  513. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/langchaindb/__init__.py +0 -0
  514. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  515. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/lightrag/__init__.py +0 -0
  516. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/lightrag/lightrag.py +0 -0
  517. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/llamaindex/__init__.py +0 -0
  518. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  519. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/milvus/__init__.py +0 -0
  520. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/milvus/milvus.py +0 -0
  521. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/mongodb/__init__.py +0 -0
  522. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/mongodb/mongodb.py +0 -0
  523. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/pgvector/__init__.py +0 -0
  524. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/pgvector/index.py +0 -0
  525. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/pgvector/pgvector.py +0 -0
  526. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/pineconedb/__init__.py +0 -0
  527. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  528. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/qdrant/__init__.py +0 -0
  529. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/qdrant/qdrant.py +0 -0
  530. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/search.py +0 -0
  531. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/singlestore/__init__.py +0 -0
  532. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/singlestore/index.py +0 -0
  533. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/singlestore/singlestore.py +0 -0
  534. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/surrealdb/__init__.py +0 -0
  535. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  536. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/upstashdb/__init__.py +0 -0
  537. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  538. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/weaviate/__init__.py +0 -0
  539. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/weaviate/index.py +0 -0
  540. {agno-2.1.2 → agno-2.1.3}/agno/vectordb/weaviate/weaviate.py +0 -0
  541. {agno-2.1.2 → agno-2.1.3}/agno/workflow/__init__.py +0 -0
  542. {agno-2.1.2 → agno-2.1.3}/agno/workflow/condition.py +0 -0
  543. {agno-2.1.2 → agno-2.1.3}/agno/workflow/loop.py +0 -0
  544. {agno-2.1.2 → agno-2.1.3}/agno/workflow/router.py +0 -0
  545. {agno-2.1.2 → agno-2.1.3}/agno/workflow/step.py +0 -0
  546. {agno-2.1.2 → agno-2.1.3}/agno/workflow/steps.py +0 -0
  547. {agno-2.1.2 → agno-2.1.3}/agno/workflow/types.py +0 -0
  548. {agno-2.1.2 → agno-2.1.3}/agno.egg-info/dependency_links.txt +0 -0
  549. {agno-2.1.2 → agno-2.1.3}/agno.egg-info/requires.txt +0 -0
  550. {agno-2.1.2 → agno-2.1.3}/agno.egg-info/top_level.txt +0 -0
  551. {agno-2.1.2 → agno-2.1.3}/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.3
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
@@ -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"]:
@@ -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
@@ -0,0 +1,74 @@
1
+ from dataclasses import dataclass
2
+ from os import getenv
3
+ from typing import Any, Dict, Optional
4
+
5
+ from agno.models.anthropic import Claude as AnthropicClaude
6
+
7
+ try:
8
+ from anthropic import AnthropicVertex as AnthropicClient
9
+ from anthropic import (
10
+ AsyncAnthropicVertex as AsyncAnthropicClient,
11
+ )
12
+ except ImportError as e:
13
+ raise ImportError("`anthropic` not installed. Please install it with `pip install anthropic`") from e
14
+
15
+
16
+ @dataclass
17
+ class Claude(AnthropicClaude):
18
+ """
19
+ A class representing Anthropic Claude model.
20
+
21
+ For more information, see: https://docs.anthropic.com/en/api/messages
22
+ """
23
+
24
+ id: str = "claude-sonnet-4@20250514"
25
+ name: str = "Claude"
26
+ provider: str = "VertexAI"
27
+
28
+ # Client parameters
29
+ region: Optional[str] = None
30
+ project_id: Optional[str] = None
31
+ base_url: Optional[str] = None
32
+
33
+ # Anthropic clients
34
+ client: Optional[AnthropicClient] = None
35
+ async_client: Optional[AsyncAnthropicClient] = None
36
+
37
+ def _get_client_params(self) -> Dict[str, Any]:
38
+ client_params: Dict[str, Any] = {}
39
+
40
+ # Add API key to client parameters
41
+ client_params["region"] = self.region or getenv("CLOUD_ML_REGION")
42
+ client_params["project_id"] = self.project_id or getenv("ANTHROPIC_VERTEX_PROJECT_ID")
43
+ client_params["base_url"] = self.base_url or getenv("ANTHROPIC_VERTEX_BASE_URL")
44
+ if self.timeout is not None:
45
+ client_params["timeout"] = self.timeout
46
+
47
+ # Add additional client parameters
48
+ if self.client_params is not None:
49
+ client_params.update(self.client_params)
50
+ if self.default_headers is not None:
51
+ client_params["default_headers"] = self.default_headers
52
+ return client_params
53
+
54
+ def get_client(self) -> AnthropicClient:
55
+ """
56
+ Returns an instance of the Anthropic client.
57
+ """
58
+ if self.client and not self.client.is_closed():
59
+ return self.client
60
+
61
+ _client_params = self._get_client_params()
62
+ self.client = AnthropicClient(**_client_params)
63
+ return self.client
64
+
65
+ def get_async_client(self) -> AsyncAnthropicClient:
66
+ """
67
+ Returns an instance of the async Anthropic client.
68
+ """
69
+ if self.async_client:
70
+ return self.async_client
71
+
72
+ _client_params = self._get_client_params()
73
+ self.async_client = AsyncAnthropicClient(**_client_params)
74
+ return self.async_client
@@ -64,6 +64,30 @@ async def mcp_lifespan(_, mcp_tools):
64
64
  await tool.close()
65
65
 
66
66
 
67
+ def _combine_app_lifespans(lifespans: list) -> Any:
68
+ """Combine multiple FastAPI app lifespan context managers into one."""
69
+ if len(lifespans) == 1:
70
+ return lifespans[0]
71
+
72
+ from contextlib import asynccontextmanager
73
+
74
+ @asynccontextmanager
75
+ async def combined_lifespan(app):
76
+ async def _run_nested(index: int):
77
+ if index >= len(lifespans):
78
+ yield
79
+ return
80
+
81
+ async with lifespans[index](app):
82
+ async for _ in _run_nested(index + 1):
83
+ yield
84
+
85
+ async for _ in _run_nested(0):
86
+ yield
87
+
88
+ return combined_lifespan
89
+
90
+
67
91
  class AgentOS:
68
92
  def __init__(
69
93
  self,
@@ -220,7 +244,7 @@ class AgentOS:
220
244
  async with mcp_tools_lifespan(app): # type: ignore
221
245
  yield
222
246
 
223
- app_lifespan = combined_lifespan # type: ignore
247
+ app_lifespan = combined_lifespan
224
248
  else:
225
249
  app_lifespan = mcp_tools_lifespan
226
250
 
@@ -237,6 +261,32 @@ class AgentOS:
237
261
  def get_app(self) -> FastAPI:
238
262
  if self.base_app:
239
263
  fastapi_app = self.base_app
264
+
265
+ # Initialize MCP server if enabled
266
+ if self.enable_mcp_server:
267
+ from agno.os.mcp import get_mcp_server
268
+
269
+ self._mcp_app = get_mcp_server(self)
270
+
271
+ # Collect all lifespans that need to be combined
272
+ lifespans = []
273
+
274
+ if fastapi_app.router.lifespan_context:
275
+ lifespans.append(fastapi_app.router.lifespan_context)
276
+
277
+ if self.mcp_tools:
278
+ lifespans.append(partial(mcp_lifespan, mcp_tools=self.mcp_tools))
279
+
280
+ if self.enable_mcp_server and self._mcp_app:
281
+ lifespans.append(self._mcp_app.lifespan)
282
+
283
+ if self.lifespan:
284
+ lifespans.append(self.lifespan)
285
+
286
+ # Combine lifespans and set them in the app
287
+ if lifespans:
288
+ fastapi_app.router.lifespan_context = _combine_app_lifespans(lifespans)
289
+
240
290
  else:
241
291
  if self.enable_mcp_server:
242
292
  from contextlib import asynccontextmanager
@@ -255,7 +305,7 @@ class AgentOS:
255
305
  async with self._mcp_app.lifespan(app): # type: ignore
256
306
  yield
257
307
 
258
- final_lifespan = combined_lifespan # type: ignore
308
+ final_lifespan = combined_lifespan
259
309
 
260
310
  fastapi_app = self._make_app(lifespan=final_lifespan)
261
311
  else:
@@ -78,21 +78,21 @@ def get_mcp_server(
78
78
  agent = get_agent_by_id(agent_id, os.agents)
79
79
  if agent is None:
80
80
  raise Exception(f"Agent {agent_id} not found")
81
- return agent.run(message)
81
+ return await agent.arun(message)
82
82
 
83
83
  @mcp.tool(name="run_team", description="Run a team", tags={"core"}) # type: ignore
84
84
  async def run_team(team_id: str, message: str) -> TeamRunOutput:
85
85
  team = get_team_by_id(team_id, os.teams)
86
86
  if team is None:
87
87
  raise Exception(f"Team {team_id} not found")
88
- return team.run(message)
88
+ return await team.arun(message)
89
89
 
90
90
  @mcp.tool(name="run_workflow", description="Run a workflow", tags={"core"}) # type: ignore
91
91
  async def run_workflow(workflow_id: str, message: str) -> WorkflowRunOutput:
92
92
  workflow = get_workflow_by_id(workflow_id, os.workflows)
93
93
  if workflow is None:
94
94
  raise Exception(f"Workflow {workflow_id} not found")
95
- return workflow.run(message)
95
+ return await workflow.arun(message)
96
96
 
97
97
  # Session Management Tools
98
98
  @mcp.tool(name="get_sessions_for_agent", description="Get list of sessions for an agent", tags={"session"}) # type: ignore
@@ -96,7 +96,7 @@ def get_session_name(session: Dict[str, Any]) -> str:
96
96
  run = None
97
97
  for r in runs:
98
98
  # If agent_id is not present, it's a team run
99
- if not r.get("agent_id"):
99
+ if not r.get("agent_id"):
100
100
  run = r
101
101
  break
102
102
  # Fallback to first run if no team run found
@@ -112,6 +112,7 @@ def get_session_name(session: Dict[str, Any]) -> str:
112
112
  elif isinstance(workflow_input, dict):
113
113
  try:
114
114
  import json
115
+
115
116
  return json.dumps(workflow_input)
116
117
  except (TypeError, ValueError):
117
118
  pass
@@ -75,7 +75,9 @@ class FileTools(Toolkit):
75
75
  """
76
76
  try:
77
77
  log_info(f"Reading files in : {self.base_dir}")
78
- return json.dumps([str(file_path) for file_path in self.base_dir.iterdir()], indent=4)
78
+ return json.dumps(
79
+ [str(file_path.relative_to(self.base_dir)) for file_path in self.base_dir.iterdir()], indent=4
80
+ )
79
81
  except Exception as e:
80
82
  log_error(f"Error reading files: {e}")
81
83
  return f"Error reading files: {e}"
@@ -93,7 +95,7 @@ class FileTools(Toolkit):
93
95
  log_debug(f"Searching files in {self.base_dir} with pattern {pattern}")
94
96
  matching_files = list(self.base_dir.glob(pattern))
95
97
 
96
- file_paths = [str(file_path) for file_path in matching_files]
98
+ file_paths = [str(file_path.relative_to(self.base_dir)) for file_path in matching_files]
97
99
 
98
100
  result = {
99
101
  "pattern": pattern,
@@ -27,7 +27,7 @@ def merge_parallel_session_states(original_state: Dict[str, Any], modified_state
27
27
  """
28
28
  if not original_state or not modified_states:
29
29
  return
30
-
30
+
31
31
  # Collect all actual changes (keys where value differs from original)
32
32
  all_changes = {}
33
33
  for modified_state in modified_states:
@@ -35,7 +35,7 @@ def merge_parallel_session_states(original_state: Dict[str, Any], modified_state
35
35
  for key, value in modified_state.items():
36
36
  if key not in original_state or original_state[key] != value:
37
37
  all_changes[key] = value
38
-
38
+
39
39
  # Apply all collected changes to the original state
40
40
  for key, value in all_changes.items():
41
- original_state[key] = value
41
+ original_state[key] = value
File without changes
@@ -14,8 +14,8 @@ from agno.run.workflow import (
14
14
  WorkflowRunOutput,
15
15
  WorkflowRunOutputEvent,
16
16
  )
17
- from agno.utils.merge_dict import merge_parallel_session_states
18
17
  from agno.utils.log import log_debug, logger
18
+ from agno.utils.merge_dict import merge_parallel_session_states
19
19
  from agno.workflow.condition import Condition
20
20
  from agno.workflow.step import Step
21
21
  from agno.workflow.types import StepInput, StepOutput, StepType
@@ -220,7 +220,7 @@ class Parallel:
220
220
  idx, step = step_with_index
221
221
  # Use the individual session_state copy for this step
222
222
  step_session_state = session_state_copies[idx]
223
-
223
+
224
224
  try:
225
225
  step_result = step.execute(
226
226
  step_input,
@@ -350,7 +350,7 @@ class Parallel:
350
350
  idx, step = step_with_index
351
351
  # Use the individual session_state copy for this step
352
352
  step_session_state = session_state_copies[idx]
353
-
353
+
354
354
  try:
355
355
  step_events = []
356
356
 
@@ -506,7 +506,7 @@ class Parallel:
506
506
  idx, step = step_with_index
507
507
  # Use the individual session_state copy for this step
508
508
  step_session_state = session_state_copies[idx]
509
-
509
+
510
510
  try:
511
511
  inner_step_result = await step.aexecute(
512
512
  step_input,
@@ -637,7 +637,7 @@ class Parallel:
637
637
  idx, step = step_with_index
638
638
  # Use the individual session_state copy for this step
639
639
  step_session_state = session_state_copies[idx]
640
-
640
+
641
641
  try:
642
642
  step_events = []
643
643
 
@@ -875,9 +875,7 @@ class Workflow:
875
875
  return func(**call_kwargs)
876
876
  except TypeError as e:
877
877
  # If signature inspection fails, fall back to original method
878
- logger.error(
879
- f"Function signature inspection failed: {e}. Falling back to original calling convention."
880
- )
878
+ logger.error(f"Function signature inspection failed: {e}. Falling back to original calling convention.")
881
879
  return func(**kwargs)
882
880
 
883
881
  def _execute(
@@ -892,7 +890,8 @@ class Workflow:
892
890
  from inspect import isasyncgenfunction, iscoroutinefunction, isgeneratorfunction
893
891
 
894
892
  workflow_run_response.status = RunStatus.running
895
- register_run(workflow_run_response.run_id) # type: ignore
893
+ if workflow_run_response.run_id:
894
+ register_run(workflow_run_response.run_id) # type: ignore
896
895
 
897
896
  if callable(self.steps):
898
897
  if iscoroutinefunction(self.steps) or isasyncgenfunction(self.steps):
@@ -1346,7 +1345,8 @@ class Workflow:
1346
1345
  workflow_run_response.status = RunStatus.running
1347
1346
 
1348
1347
  # Register run for cancellation tracking
1349
- register_run(workflow_run_response.run_id) # type: ignore
1348
+ if workflow_run_response.run_id:
1349
+ register_run(workflow_run_response.run_id) # type: ignore
1350
1350
 
1351
1351
  if callable(self.steps):
1352
1352
  # Execute the workflow with the custom executor
@@ -1507,6 +1507,10 @@ class Workflow:
1507
1507
 
1508
1508
  workflow_run_response.status = RunStatus.running
1509
1509
 
1510
+ # Register run for cancellation tracking
1511
+ if workflow_run_response.run_id:
1512
+ register_run(workflow_run_response.run_id)
1513
+
1510
1514
  workflow_started_event = WorkflowStartedEvent(
1511
1515
  run_id=workflow_run_response.run_id or "",
1512
1516
  workflow_name=workflow_run_response.workflow_name,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.1.2
3
+ Version: 2.1.3
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
@@ -243,6 +243,8 @@ agno/models/together/__init__.py
243
243
  agno/models/together/together.py
244
244
  agno/models/vercel/__init__.py
245
245
  agno/models/vercel/v0.py
246
+ agno/models/vertexai/__init__.py
247
+ agno/models/vertexai/claude.py
246
248
  agno/models/vllm/__init__.py
247
249
  agno/models/vllm/vllm.py
248
250
  agno/models/xai/__init__.py
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agno"
3
- version = "2.1.2"
3
+ version = "2.1.3"
4
4
  description = "Agno: a lightweight library for building Multi-Agent Systems"
5
5
  requires-python = ">=3.7,<4"
6
6
  readme = "README.md"
@@ -1,28 +0,0 @@
1
- from dataclasses import dataclass, field
2
- from os import getenv
3
- from typing import Optional
4
-
5
- from agno.models.openai.like import OpenAILike
6
-
7
-
8
- @dataclass
9
- class OpenRouter(OpenAILike):
10
- """
11
- A class for using models hosted on OpenRouter.
12
-
13
- Attributes:
14
- id (str): The model id. Defaults to "gpt-4o".
15
- name (str): The model name. Defaults to "OpenRouter".
16
- provider (str): The provider name. Defaults to "OpenRouter".
17
- api_key (Optional[str]): The API key.
18
- base_url (str): The base URL. Defaults to "https://openrouter.ai/api/v1".
19
- max_tokens (int): The maximum number of tokens. Defaults to 1024.
20
- """
21
-
22
- id: str = "gpt-4o"
23
- name: str = "OpenRouter"
24
- provider: str = "OpenRouter"
25
-
26
- api_key: Optional[str] = field(default_factory=lambda: getenv("OPENROUTER_API_KEY"))
27
- base_url: str = "https://openrouter.ai/api/v1"
28
- max_tokens: int = 1024
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes