agno 2.3.20__tar.gz → 2.3.21__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 (635) hide show
  1. {agno-2.3.20 → agno-2.3.21}/PKG-INFO +59 -129
  2. agno-2.3.21/README.md +167 -0
  3. {agno-2.3.20 → agno-2.3.21}/agno/eval/agent_as_judge.py +24 -14
  4. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/mistral.py +1 -1
  5. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/evals/evals.py +0 -9
  6. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/evals/utils.py +6 -6
  7. {agno-2.3.20 → agno-2.3.21}/agno/run/agent.py +19 -19
  8. {agno-2.3.20 → agno-2.3.21}/agno/run/team.py +19 -19
  9. {agno-2.3.20 → agno-2.3.21}/agno.egg-info/PKG-INFO +59 -129
  10. {agno-2.3.20 → agno-2.3.21}/pyproject.toml +1 -1
  11. agno-2.3.20/README.md +0 -237
  12. {agno-2.3.20 → agno-2.3.21}/LICENSE +0 -0
  13. {agno-2.3.20 → agno-2.3.21}/agno/__init__.py +0 -0
  14. {agno-2.3.20 → agno-2.3.21}/agno/agent/__init__.py +0 -0
  15. {agno-2.3.20 → agno-2.3.21}/agno/agent/agent.py +0 -0
  16. {agno-2.3.20 → agno-2.3.21}/agno/agent/remote.py +0 -0
  17. {agno-2.3.20 → agno-2.3.21}/agno/api/__init__.py +0 -0
  18. {agno-2.3.20 → agno-2.3.21}/agno/api/agent.py +0 -0
  19. {agno-2.3.20 → agno-2.3.21}/agno/api/api.py +0 -0
  20. {agno-2.3.20 → agno-2.3.21}/agno/api/evals.py +0 -0
  21. {agno-2.3.20 → agno-2.3.21}/agno/api/os.py +0 -0
  22. {agno-2.3.20 → agno-2.3.21}/agno/api/routes.py +0 -0
  23. {agno-2.3.20 → agno-2.3.21}/agno/api/schemas/__init__.py +0 -0
  24. {agno-2.3.20 → agno-2.3.21}/agno/api/schemas/agent.py +0 -0
  25. {agno-2.3.20 → agno-2.3.21}/agno/api/schemas/evals.py +0 -0
  26. {agno-2.3.20 → agno-2.3.21}/agno/api/schemas/os.py +0 -0
  27. {agno-2.3.20 → agno-2.3.21}/agno/api/schemas/response.py +0 -0
  28. {agno-2.3.20 → agno-2.3.21}/agno/api/schemas/team.py +0 -0
  29. {agno-2.3.20 → agno-2.3.21}/agno/api/schemas/utils.py +0 -0
  30. {agno-2.3.20 → agno-2.3.21}/agno/api/schemas/workflows.py +0 -0
  31. {agno-2.3.20 → agno-2.3.21}/agno/api/settings.py +0 -0
  32. {agno-2.3.20 → agno-2.3.21}/agno/api/team.py +0 -0
  33. {agno-2.3.20 → agno-2.3.21}/agno/api/workflow.py +0 -0
  34. {agno-2.3.20 → agno-2.3.21}/agno/client/__init__.py +0 -0
  35. {agno-2.3.20 → agno-2.3.21}/agno/client/os.py +0 -0
  36. {agno-2.3.20 → agno-2.3.21}/agno/cloud/aws/base.py +0 -0
  37. {agno-2.3.20 → agno-2.3.21}/agno/cloud/aws/s3/__init__.py +0 -0
  38. {agno-2.3.20 → agno-2.3.21}/agno/cloud/aws/s3/api_client.py +0 -0
  39. {agno-2.3.20 → agno-2.3.21}/agno/cloud/aws/s3/bucket.py +0 -0
  40. {agno-2.3.20 → agno-2.3.21}/agno/cloud/aws/s3/object.py +0 -0
  41. {agno-2.3.20 → agno-2.3.21}/agno/compression/__init__.py +0 -0
  42. {agno-2.3.20 → agno-2.3.21}/agno/compression/manager.py +0 -0
  43. {agno-2.3.20 → agno-2.3.21}/agno/culture/__init__.py +0 -0
  44. {agno-2.3.20 → agno-2.3.21}/agno/culture/manager.py +0 -0
  45. {agno-2.3.20 → agno-2.3.21}/agno/db/__init__.py +0 -0
  46. {agno-2.3.20 → agno-2.3.21}/agno/db/async_postgres/__init__.py +0 -0
  47. {agno-2.3.20 → agno-2.3.21}/agno/db/base.py +0 -0
  48. {agno-2.3.20 → agno-2.3.21}/agno/db/dynamo/__init__.py +0 -0
  49. {agno-2.3.20 → agno-2.3.21}/agno/db/dynamo/dynamo.py +0 -0
  50. {agno-2.3.20 → agno-2.3.21}/agno/db/dynamo/schemas.py +0 -0
  51. {agno-2.3.20 → agno-2.3.21}/agno/db/dynamo/utils.py +0 -0
  52. {agno-2.3.20 → agno-2.3.21}/agno/db/firestore/__init__.py +0 -0
  53. {agno-2.3.20 → agno-2.3.21}/agno/db/firestore/firestore.py +0 -0
  54. {agno-2.3.20 → agno-2.3.21}/agno/db/firestore/schemas.py +0 -0
  55. {agno-2.3.20 → agno-2.3.21}/agno/db/firestore/utils.py +0 -0
  56. {agno-2.3.20 → agno-2.3.21}/agno/db/gcs_json/__init__.py +0 -0
  57. {agno-2.3.20 → agno-2.3.21}/agno/db/gcs_json/gcs_json_db.py +0 -0
  58. {agno-2.3.20 → agno-2.3.21}/agno/db/gcs_json/utils.py +0 -0
  59. {agno-2.3.20 → agno-2.3.21}/agno/db/in_memory/__init__.py +0 -0
  60. {agno-2.3.20 → agno-2.3.21}/agno/db/in_memory/in_memory_db.py +0 -0
  61. {agno-2.3.20 → agno-2.3.21}/agno/db/in_memory/utils.py +0 -0
  62. {agno-2.3.20 → agno-2.3.21}/agno/db/json/__init__.py +0 -0
  63. {agno-2.3.20 → agno-2.3.21}/agno/db/json/json_db.py +0 -0
  64. {agno-2.3.20 → agno-2.3.21}/agno/db/json/utils.py +0 -0
  65. {agno-2.3.20 → agno-2.3.21}/agno/db/migrations/__init__.py +0 -0
  66. {agno-2.3.20 → agno-2.3.21}/agno/db/migrations/manager.py +0 -0
  67. {agno-2.3.20 → agno-2.3.21}/agno/db/migrations/v1_to_v2.py +0 -0
  68. {agno-2.3.20 → agno-2.3.21}/agno/db/migrations/versions/__init__.py +0 -0
  69. {agno-2.3.20 → agno-2.3.21}/agno/db/migrations/versions/v2_3_0.py +0 -0
  70. {agno-2.3.20 → agno-2.3.21}/agno/db/mongo/__init__.py +0 -0
  71. {agno-2.3.20 → agno-2.3.21}/agno/db/mongo/async_mongo.py +0 -0
  72. {agno-2.3.20 → agno-2.3.21}/agno/db/mongo/mongo.py +0 -0
  73. {agno-2.3.20 → agno-2.3.21}/agno/db/mongo/schemas.py +0 -0
  74. {agno-2.3.20 → agno-2.3.21}/agno/db/mongo/utils.py +0 -0
  75. {agno-2.3.20 → agno-2.3.21}/agno/db/mysql/__init__.py +0 -0
  76. {agno-2.3.20 → agno-2.3.21}/agno/db/mysql/async_mysql.py +0 -0
  77. {agno-2.3.20 → agno-2.3.21}/agno/db/mysql/mysql.py +0 -0
  78. {agno-2.3.20 → agno-2.3.21}/agno/db/mysql/schemas.py +0 -0
  79. {agno-2.3.20 → agno-2.3.21}/agno/db/mysql/utils.py +0 -0
  80. {agno-2.3.20 → agno-2.3.21}/agno/db/postgres/__init__.py +0 -0
  81. {agno-2.3.20 → agno-2.3.21}/agno/db/postgres/async_postgres.py +0 -0
  82. {agno-2.3.20 → agno-2.3.21}/agno/db/postgres/postgres.py +0 -0
  83. {agno-2.3.20 → agno-2.3.21}/agno/db/postgres/schemas.py +0 -0
  84. {agno-2.3.20 → agno-2.3.21}/agno/db/postgres/utils.py +0 -0
  85. {agno-2.3.20 → agno-2.3.21}/agno/db/redis/__init__.py +0 -0
  86. {agno-2.3.20 → agno-2.3.21}/agno/db/redis/redis.py +0 -0
  87. {agno-2.3.20 → agno-2.3.21}/agno/db/redis/schemas.py +0 -0
  88. {agno-2.3.20 → agno-2.3.21}/agno/db/redis/utils.py +0 -0
  89. {agno-2.3.20 → agno-2.3.21}/agno/db/schemas/__init__.py +0 -0
  90. {agno-2.3.20 → agno-2.3.21}/agno/db/schemas/culture.py +0 -0
  91. {agno-2.3.20 → agno-2.3.21}/agno/db/schemas/evals.py +0 -0
  92. {agno-2.3.20 → agno-2.3.21}/agno/db/schemas/knowledge.py +0 -0
  93. {agno-2.3.20 → agno-2.3.21}/agno/db/schemas/memory.py +0 -0
  94. {agno-2.3.20 → agno-2.3.21}/agno/db/schemas/metrics.py +0 -0
  95. {agno-2.3.20 → agno-2.3.21}/agno/db/singlestore/__init__.py +0 -0
  96. {agno-2.3.20 → agno-2.3.21}/agno/db/singlestore/schemas.py +0 -0
  97. {agno-2.3.20 → agno-2.3.21}/agno/db/singlestore/singlestore.py +0 -0
  98. {agno-2.3.20 → agno-2.3.21}/agno/db/singlestore/utils.py +0 -0
  99. {agno-2.3.20 → agno-2.3.21}/agno/db/sqlite/__init__.py +0 -0
  100. {agno-2.3.20 → agno-2.3.21}/agno/db/sqlite/async_sqlite.py +0 -0
  101. {agno-2.3.20 → agno-2.3.21}/agno/db/sqlite/schemas.py +0 -0
  102. {agno-2.3.20 → agno-2.3.21}/agno/db/sqlite/sqlite.py +0 -0
  103. {agno-2.3.20 → agno-2.3.21}/agno/db/sqlite/utils.py +0 -0
  104. {agno-2.3.20 → agno-2.3.21}/agno/db/surrealdb/__init__.py +0 -0
  105. {agno-2.3.20 → agno-2.3.21}/agno/db/surrealdb/metrics.py +0 -0
  106. {agno-2.3.20 → agno-2.3.21}/agno/db/surrealdb/models.py +0 -0
  107. {agno-2.3.20 → agno-2.3.21}/agno/db/surrealdb/queries.py +0 -0
  108. {agno-2.3.20 → agno-2.3.21}/agno/db/surrealdb/surrealdb.py +0 -0
  109. {agno-2.3.20 → agno-2.3.21}/agno/db/surrealdb/utils.py +0 -0
  110. {agno-2.3.20 → agno-2.3.21}/agno/db/utils.py +0 -0
  111. {agno-2.3.20 → agno-2.3.21}/agno/debug.py +0 -0
  112. {agno-2.3.20 → agno-2.3.21}/agno/eval/__init__.py +0 -0
  113. {agno-2.3.20 → agno-2.3.21}/agno/eval/accuracy.py +0 -0
  114. {agno-2.3.20 → agno-2.3.21}/agno/eval/base.py +0 -0
  115. {agno-2.3.20 → agno-2.3.21}/agno/eval/performance.py +0 -0
  116. {agno-2.3.20 → agno-2.3.21}/agno/eval/reliability.py +0 -0
  117. {agno-2.3.20 → agno-2.3.21}/agno/eval/utils.py +0 -0
  118. {agno-2.3.20 → agno-2.3.21}/agno/exceptions.py +0 -0
  119. {agno-2.3.20 → agno-2.3.21}/agno/filters.py +0 -0
  120. {agno-2.3.20 → agno-2.3.21}/agno/guardrails/__init__.py +0 -0
  121. {agno-2.3.20 → agno-2.3.21}/agno/guardrails/base.py +0 -0
  122. {agno-2.3.20 → agno-2.3.21}/agno/guardrails/openai.py +0 -0
  123. {agno-2.3.20 → agno-2.3.21}/agno/guardrails/pii.py +0 -0
  124. {agno-2.3.20 → agno-2.3.21}/agno/guardrails/prompt_injection.py +0 -0
  125. {agno-2.3.20 → agno-2.3.21}/agno/hooks/__init__.py +0 -0
  126. {agno-2.3.20 → agno-2.3.21}/agno/hooks/decorator.py +0 -0
  127. {agno-2.3.20 → agno-2.3.21}/agno/integrations/__init__.py +0 -0
  128. {agno-2.3.20 → agno-2.3.21}/agno/integrations/discord/__init__.py +0 -0
  129. {agno-2.3.20 → agno-2.3.21}/agno/integrations/discord/client.py +0 -0
  130. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/__init__.py +0 -0
  131. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/chunking/__init__.py +0 -0
  132. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/chunking/agentic.py +0 -0
  133. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/chunking/document.py +0 -0
  134. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/chunking/fixed.py +0 -0
  135. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/chunking/markdown.py +0 -0
  136. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/chunking/recursive.py +0 -0
  137. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/chunking/row.py +0 -0
  138. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/chunking/semantic.py +0 -0
  139. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/chunking/strategy.py +0 -0
  140. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/content.py +0 -0
  141. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/document/__init__.py +0 -0
  142. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/document/base.py +0 -0
  143. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/__init__.py +0 -0
  144. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  145. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/azure_openai.py +0 -0
  146. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/base.py +0 -0
  147. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/cohere.py +0 -0
  148. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/fastembed.py +0 -0
  149. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/fireworks.py +0 -0
  150. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/google.py +0 -0
  151. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/huggingface.py +0 -0
  152. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/jina.py +0 -0
  153. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/langdb.py +0 -0
  154. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/nebius.py +0 -0
  155. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/ollama.py +0 -0
  156. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/openai.py +0 -0
  157. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  158. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/together.py +0 -0
  159. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/vllm.py +0 -0
  160. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/embedder/voyageai.py +0 -0
  161. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/knowledge.py +0 -0
  162. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/__init__.py +0 -0
  163. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/arxiv_reader.py +0 -0
  164. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/base.py +0 -0
  165. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/csv_reader.py +0 -0
  166. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/docx_reader.py +0 -0
  167. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
  168. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  169. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/json_reader.py +0 -0
  170. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/markdown_reader.py +0 -0
  171. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/pdf_reader.py +0 -0
  172. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/pptx_reader.py +0 -0
  173. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/reader_factory.py +0 -0
  174. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/s3_reader.py +0 -0
  175. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/tavily_reader.py +0 -0
  176. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/text_reader.py +0 -0
  177. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/web_search_reader.py +0 -0
  178. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/website_reader.py +0 -0
  179. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  180. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reader/youtube_reader.py +0 -0
  181. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/remote_content/__init__.py +0 -0
  182. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/remote_content/remote_content.py +0 -0
  183. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reranker/__init__.py +0 -0
  184. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reranker/base.py +0 -0
  185. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reranker/cohere.py +0 -0
  186. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reranker/infinity.py +0 -0
  187. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  188. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/types.py +0 -0
  189. {agno-2.3.20 → agno-2.3.21}/agno/knowledge/utils.py +0 -0
  190. {agno-2.3.20 → agno-2.3.21}/agno/media.py +0 -0
  191. {agno-2.3.20 → agno-2.3.21}/agno/memory/__init__.py +0 -0
  192. {agno-2.3.20 → agno-2.3.21}/agno/memory/manager.py +0 -0
  193. {agno-2.3.20 → agno-2.3.21}/agno/memory/strategies/__init__.py +0 -0
  194. {agno-2.3.20 → agno-2.3.21}/agno/memory/strategies/base.py +0 -0
  195. {agno-2.3.20 → agno-2.3.21}/agno/memory/strategies/summarize.py +0 -0
  196. {agno-2.3.20 → agno-2.3.21}/agno/memory/strategies/types.py +0 -0
  197. {agno-2.3.20 → agno-2.3.21}/agno/models/__init__.py +0 -0
  198. {agno-2.3.20 → agno-2.3.21}/agno/models/aimlapi/__init__.py +0 -0
  199. {agno-2.3.20 → agno-2.3.21}/agno/models/aimlapi/aimlapi.py +0 -0
  200. {agno-2.3.20 → agno-2.3.21}/agno/models/anthropic/__init__.py +0 -0
  201. {agno-2.3.20 → agno-2.3.21}/agno/models/anthropic/claude.py +0 -0
  202. {agno-2.3.20 → agno-2.3.21}/agno/models/aws/__init__.py +0 -0
  203. {agno-2.3.20 → agno-2.3.21}/agno/models/aws/bedrock.py +0 -0
  204. {agno-2.3.20 → agno-2.3.21}/agno/models/aws/claude.py +0 -0
  205. {agno-2.3.20 → agno-2.3.21}/agno/models/azure/__init__.py +0 -0
  206. {agno-2.3.20 → agno-2.3.21}/agno/models/azure/ai_foundry.py +0 -0
  207. {agno-2.3.20 → agno-2.3.21}/agno/models/azure/openai_chat.py +0 -0
  208. {agno-2.3.20 → agno-2.3.21}/agno/models/base.py +0 -0
  209. {agno-2.3.20 → agno-2.3.21}/agno/models/cerebras/__init__.py +0 -0
  210. {agno-2.3.20 → agno-2.3.21}/agno/models/cerebras/cerebras.py +0 -0
  211. {agno-2.3.20 → agno-2.3.21}/agno/models/cerebras/cerebras_openai.py +0 -0
  212. {agno-2.3.20 → agno-2.3.21}/agno/models/cohere/__init__.py +0 -0
  213. {agno-2.3.20 → agno-2.3.21}/agno/models/cohere/chat.py +0 -0
  214. {agno-2.3.20 → agno-2.3.21}/agno/models/cometapi/__init__.py +0 -0
  215. {agno-2.3.20 → agno-2.3.21}/agno/models/cometapi/cometapi.py +0 -0
  216. {agno-2.3.20 → agno-2.3.21}/agno/models/dashscope/__init__.py +0 -0
  217. {agno-2.3.20 → agno-2.3.21}/agno/models/dashscope/dashscope.py +0 -0
  218. {agno-2.3.20 → agno-2.3.21}/agno/models/deepinfra/__init__.py +0 -0
  219. {agno-2.3.20 → agno-2.3.21}/agno/models/deepinfra/deepinfra.py +0 -0
  220. {agno-2.3.20 → agno-2.3.21}/agno/models/deepseek/__init__.py +0 -0
  221. {agno-2.3.20 → agno-2.3.21}/agno/models/deepseek/deepseek.py +0 -0
  222. {agno-2.3.20 → agno-2.3.21}/agno/models/defaults.py +0 -0
  223. {agno-2.3.20 → agno-2.3.21}/agno/models/fireworks/__init__.py +0 -0
  224. {agno-2.3.20 → agno-2.3.21}/agno/models/fireworks/fireworks.py +0 -0
  225. {agno-2.3.20 → agno-2.3.21}/agno/models/google/__init__.py +0 -0
  226. {agno-2.3.20 → agno-2.3.21}/agno/models/google/gemini.py +0 -0
  227. {agno-2.3.20 → agno-2.3.21}/agno/models/google/utils.py +0 -0
  228. {agno-2.3.20 → agno-2.3.21}/agno/models/groq/__init__.py +0 -0
  229. {agno-2.3.20 → agno-2.3.21}/agno/models/groq/groq.py +0 -0
  230. {agno-2.3.20 → agno-2.3.21}/agno/models/huggingface/__init__.py +0 -0
  231. {agno-2.3.20 → agno-2.3.21}/agno/models/huggingface/huggingface.py +0 -0
  232. {agno-2.3.20 → agno-2.3.21}/agno/models/ibm/__init__.py +0 -0
  233. {agno-2.3.20 → agno-2.3.21}/agno/models/ibm/watsonx.py +0 -0
  234. {agno-2.3.20 → agno-2.3.21}/agno/models/internlm/__init__.py +0 -0
  235. {agno-2.3.20 → agno-2.3.21}/agno/models/internlm/internlm.py +0 -0
  236. {agno-2.3.20 → agno-2.3.21}/agno/models/langdb/__init__.py +0 -0
  237. {agno-2.3.20 → agno-2.3.21}/agno/models/langdb/langdb.py +0 -0
  238. {agno-2.3.20 → agno-2.3.21}/agno/models/litellm/__init__.py +0 -0
  239. {agno-2.3.20 → agno-2.3.21}/agno/models/litellm/chat.py +0 -0
  240. {agno-2.3.20 → agno-2.3.21}/agno/models/litellm/litellm_openai.py +0 -0
  241. {agno-2.3.20 → agno-2.3.21}/agno/models/llama_cpp/__init__.py +0 -0
  242. {agno-2.3.20 → agno-2.3.21}/agno/models/llama_cpp/llama_cpp.py +0 -0
  243. {agno-2.3.20 → agno-2.3.21}/agno/models/lmstudio/__init__.py +0 -0
  244. {agno-2.3.20 → agno-2.3.21}/agno/models/lmstudio/lmstudio.py +0 -0
  245. {agno-2.3.20 → agno-2.3.21}/agno/models/message.py +0 -0
  246. {agno-2.3.20 → agno-2.3.21}/agno/models/meta/__init__.py +0 -0
  247. {agno-2.3.20 → agno-2.3.21}/agno/models/meta/llama.py +0 -0
  248. {agno-2.3.20 → agno-2.3.21}/agno/models/meta/llama_openai.py +0 -0
  249. {agno-2.3.20 → agno-2.3.21}/agno/models/metrics.py +0 -0
  250. {agno-2.3.20 → agno-2.3.21}/agno/models/mistral/__init__.py +0 -0
  251. {agno-2.3.20 → agno-2.3.21}/agno/models/mistral/mistral.py +0 -0
  252. {agno-2.3.20 → agno-2.3.21}/agno/models/nebius/__init__.py +0 -0
  253. {agno-2.3.20 → agno-2.3.21}/agno/models/nebius/nebius.py +0 -0
  254. {agno-2.3.20 → agno-2.3.21}/agno/models/nexus/__init__.py +0 -0
  255. {agno-2.3.20 → agno-2.3.21}/agno/models/nexus/nexus.py +0 -0
  256. {agno-2.3.20 → agno-2.3.21}/agno/models/nvidia/__init__.py +0 -0
  257. {agno-2.3.20 → agno-2.3.21}/agno/models/nvidia/nvidia.py +0 -0
  258. {agno-2.3.20 → agno-2.3.21}/agno/models/ollama/__init__.py +0 -0
  259. {agno-2.3.20 → agno-2.3.21}/agno/models/ollama/chat.py +0 -0
  260. {agno-2.3.20 → agno-2.3.21}/agno/models/openai/__init__.py +0 -0
  261. {agno-2.3.20 → agno-2.3.21}/agno/models/openai/chat.py +0 -0
  262. {agno-2.3.20 → agno-2.3.21}/agno/models/openai/like.py +0 -0
  263. {agno-2.3.20 → agno-2.3.21}/agno/models/openai/responses.py +0 -0
  264. {agno-2.3.20 → agno-2.3.21}/agno/models/openrouter/__init__.py +0 -0
  265. {agno-2.3.20 → agno-2.3.21}/agno/models/openrouter/openrouter.py +0 -0
  266. {agno-2.3.20 → agno-2.3.21}/agno/models/perplexity/__init__.py +0 -0
  267. {agno-2.3.20 → agno-2.3.21}/agno/models/perplexity/perplexity.py +0 -0
  268. {agno-2.3.20 → agno-2.3.21}/agno/models/portkey/__init__.py +0 -0
  269. {agno-2.3.20 → agno-2.3.21}/agno/models/portkey/portkey.py +0 -0
  270. {agno-2.3.20 → agno-2.3.21}/agno/models/requesty/__init__.py +0 -0
  271. {agno-2.3.20 → agno-2.3.21}/agno/models/requesty/requesty.py +0 -0
  272. {agno-2.3.20 → agno-2.3.21}/agno/models/response.py +0 -0
  273. {agno-2.3.20 → agno-2.3.21}/agno/models/sambanova/__init__.py +0 -0
  274. {agno-2.3.20 → agno-2.3.21}/agno/models/sambanova/sambanova.py +0 -0
  275. {agno-2.3.20 → agno-2.3.21}/agno/models/siliconflow/__init__.py +0 -0
  276. {agno-2.3.20 → agno-2.3.21}/agno/models/siliconflow/siliconflow.py +0 -0
  277. {agno-2.3.20 → agno-2.3.21}/agno/models/together/__init__.py +0 -0
  278. {agno-2.3.20 → agno-2.3.21}/agno/models/together/together.py +0 -0
  279. {agno-2.3.20 → agno-2.3.21}/agno/models/utils.py +0 -0
  280. {agno-2.3.20 → agno-2.3.21}/agno/models/vercel/__init__.py +0 -0
  281. {agno-2.3.20 → agno-2.3.21}/agno/models/vercel/v0.py +0 -0
  282. {agno-2.3.20 → agno-2.3.21}/agno/models/vertexai/__init__.py +0 -0
  283. {agno-2.3.20 → agno-2.3.21}/agno/models/vertexai/claude.py +0 -0
  284. {agno-2.3.20 → agno-2.3.21}/agno/models/vllm/__init__.py +0 -0
  285. {agno-2.3.20 → agno-2.3.21}/agno/models/vllm/vllm.py +0 -0
  286. {agno-2.3.20 → agno-2.3.21}/agno/models/xai/__init__.py +0 -0
  287. {agno-2.3.20 → agno-2.3.21}/agno/models/xai/xai.py +0 -0
  288. {agno-2.3.20 → agno-2.3.21}/agno/os/__init__.py +0 -0
  289. {agno-2.3.20 → agno-2.3.21}/agno/os/app.py +0 -0
  290. {agno-2.3.20 → agno-2.3.21}/agno/os/auth.py +0 -0
  291. {agno-2.3.20 → agno-2.3.21}/agno/os/config.py +0 -0
  292. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/__init__.py +0 -0
  293. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/a2a/__init__.py +0 -0
  294. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/a2a/a2a.py +0 -0
  295. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/a2a/router.py +0 -0
  296. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/a2a/utils.py +0 -0
  297. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/agui/__init__.py +0 -0
  298. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/agui/agui.py +0 -0
  299. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/agui/router.py +0 -0
  300. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/agui/utils.py +0 -0
  301. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/base.py +0 -0
  302. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/slack/__init__.py +0 -0
  303. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/slack/router.py +0 -0
  304. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/slack/security.py +0 -0
  305. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/slack/slack.py +0 -0
  306. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  307. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/whatsapp/router.py +0 -0
  308. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/whatsapp/security.py +0 -0
  309. {agno-2.3.20 → agno-2.3.21}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  310. {agno-2.3.20 → agno-2.3.21}/agno/os/managers.py +0 -0
  311. {agno-2.3.20 → agno-2.3.21}/agno/os/mcp.py +0 -0
  312. {agno-2.3.20 → agno-2.3.21}/agno/os/middleware/__init__.py +0 -0
  313. {agno-2.3.20 → agno-2.3.21}/agno/os/middleware/jwt.py +0 -0
  314. {agno-2.3.20 → agno-2.3.21}/agno/os/router.py +0 -0
  315. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/__init__.py +0 -0
  316. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/agents/__init__.py +0 -0
  317. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/agents/router.py +0 -0
  318. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/agents/schema.py +0 -0
  319. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/database.py +0 -0
  320. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/evals/__init__.py +0 -0
  321. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/evals/schemas.py +0 -0
  322. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/health.py +0 -0
  323. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/home.py +0 -0
  324. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/knowledge/__init__.py +0 -0
  325. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/knowledge/knowledge.py +0 -0
  326. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/knowledge/schemas.py +0 -0
  327. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/memory/__init__.py +0 -0
  328. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/memory/memory.py +0 -0
  329. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/memory/schemas.py +0 -0
  330. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/metrics/__init__.py +0 -0
  331. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/metrics/metrics.py +0 -0
  332. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/metrics/schemas.py +0 -0
  333. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/session/__init__.py +0 -0
  334. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/session/session.py +0 -0
  335. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/teams/__init__.py +0 -0
  336. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/teams/router.py +0 -0
  337. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/teams/schema.py +0 -0
  338. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/traces/__init__.py +0 -0
  339. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/traces/schemas.py +0 -0
  340. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/traces/traces.py +0 -0
  341. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/workflows/__init__.py +0 -0
  342. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/workflows/router.py +0 -0
  343. {agno-2.3.20 → agno-2.3.21}/agno/os/routers/workflows/schema.py +0 -0
  344. {agno-2.3.20 → agno-2.3.21}/agno/os/schema.py +0 -0
  345. {agno-2.3.20 → agno-2.3.21}/agno/os/scopes.py +0 -0
  346. {agno-2.3.20 → agno-2.3.21}/agno/os/settings.py +0 -0
  347. {agno-2.3.20 → agno-2.3.21}/agno/os/utils.py +0 -0
  348. {agno-2.3.20 → agno-2.3.21}/agno/py.typed +0 -0
  349. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/__init__.py +0 -0
  350. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/anthropic.py +0 -0
  351. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/azure_ai_foundry.py +0 -0
  352. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/deepseek.py +0 -0
  353. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/default.py +0 -0
  354. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/gemini.py +0 -0
  355. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/groq.py +0 -0
  356. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/helpers.py +0 -0
  357. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/manager.py +0 -0
  358. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/ollama.py +0 -0
  359. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/openai.py +0 -0
  360. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/step.py +0 -0
  361. {agno-2.3.20 → agno-2.3.21}/agno/reasoning/vertexai.py +0 -0
  362. {agno-2.3.20 → agno-2.3.21}/agno/remote/__init__.py +0 -0
  363. {agno-2.3.20 → agno-2.3.21}/agno/remote/base.py +0 -0
  364. {agno-2.3.20 → agno-2.3.21}/agno/run/__init__.py +0 -0
  365. {agno-2.3.20 → agno-2.3.21}/agno/run/base.py +0 -0
  366. {agno-2.3.20 → agno-2.3.21}/agno/run/cancel.py +0 -0
  367. {agno-2.3.20 → agno-2.3.21}/agno/run/cancellation_management/__init__.py +0 -0
  368. {agno-2.3.20 → agno-2.3.21}/agno/run/cancellation_management/base.py +0 -0
  369. {agno-2.3.20 → agno-2.3.21}/agno/run/cancellation_management/in_memory_cancellation_manager.py +0 -0
  370. {agno-2.3.20 → agno-2.3.21}/agno/run/cancellation_management/redis_cancellation_manager.py +0 -0
  371. {agno-2.3.20 → agno-2.3.21}/agno/run/messages.py +0 -0
  372. {agno-2.3.20 → agno-2.3.21}/agno/run/requirement.py +0 -0
  373. {agno-2.3.20 → agno-2.3.21}/agno/run/workflow.py +0 -0
  374. {agno-2.3.20 → agno-2.3.21}/agno/session/__init__.py +0 -0
  375. {agno-2.3.20 → agno-2.3.21}/agno/session/agent.py +0 -0
  376. {agno-2.3.20 → agno-2.3.21}/agno/session/summary.py +0 -0
  377. {agno-2.3.20 → agno-2.3.21}/agno/session/team.py +0 -0
  378. {agno-2.3.20 → agno-2.3.21}/agno/session/workflow.py +0 -0
  379. {agno-2.3.20 → agno-2.3.21}/agno/table.py +0 -0
  380. {agno-2.3.20 → agno-2.3.21}/agno/team/__init__.py +0 -0
  381. {agno-2.3.20 → agno-2.3.21}/agno/team/remote.py +0 -0
  382. {agno-2.3.20 → agno-2.3.21}/agno/team/team.py +0 -0
  383. {agno-2.3.20 → agno-2.3.21}/agno/tools/__init__.py +0 -0
  384. {agno-2.3.20 → agno-2.3.21}/agno/tools/agentql.py +0 -0
  385. {agno-2.3.20 → agno-2.3.21}/agno/tools/airflow.py +0 -0
  386. {agno-2.3.20 → agno-2.3.21}/agno/tools/api.py +0 -0
  387. {agno-2.3.20 → agno-2.3.21}/agno/tools/apify.py +0 -0
  388. {agno-2.3.20 → agno-2.3.21}/agno/tools/arxiv.py +0 -0
  389. {agno-2.3.20 → agno-2.3.21}/agno/tools/aws_lambda.py +0 -0
  390. {agno-2.3.20 → agno-2.3.21}/agno/tools/aws_ses.py +0 -0
  391. {agno-2.3.20 → agno-2.3.21}/agno/tools/baidusearch.py +0 -0
  392. {agno-2.3.20 → agno-2.3.21}/agno/tools/bitbucket.py +0 -0
  393. {agno-2.3.20 → agno-2.3.21}/agno/tools/brandfetch.py +0 -0
  394. {agno-2.3.20 → agno-2.3.21}/agno/tools/bravesearch.py +0 -0
  395. {agno-2.3.20 → agno-2.3.21}/agno/tools/brightdata.py +0 -0
  396. {agno-2.3.20 → agno-2.3.21}/agno/tools/browserbase.py +0 -0
  397. {agno-2.3.20 → agno-2.3.21}/agno/tools/calcom.py +0 -0
  398. {agno-2.3.20 → agno-2.3.21}/agno/tools/calculator.py +0 -0
  399. {agno-2.3.20 → agno-2.3.21}/agno/tools/cartesia.py +0 -0
  400. {agno-2.3.20 → agno-2.3.21}/agno/tools/clickup.py +0 -0
  401. {agno-2.3.20 → agno-2.3.21}/agno/tools/confluence.py +0 -0
  402. {agno-2.3.20 → agno-2.3.21}/agno/tools/crawl4ai.py +0 -0
  403. {agno-2.3.20 → agno-2.3.21}/agno/tools/csv_toolkit.py +0 -0
  404. {agno-2.3.20 → agno-2.3.21}/agno/tools/dalle.py +0 -0
  405. {agno-2.3.20 → agno-2.3.21}/agno/tools/daytona.py +0 -0
  406. {agno-2.3.20 → agno-2.3.21}/agno/tools/decorator.py +0 -0
  407. {agno-2.3.20 → agno-2.3.21}/agno/tools/desi_vocal.py +0 -0
  408. {agno-2.3.20 → agno-2.3.21}/agno/tools/discord.py +0 -0
  409. {agno-2.3.20 → agno-2.3.21}/agno/tools/docker.py +0 -0
  410. {agno-2.3.20 → agno-2.3.21}/agno/tools/duckdb.py +0 -0
  411. {agno-2.3.20 → agno-2.3.21}/agno/tools/duckduckgo.py +0 -0
  412. {agno-2.3.20 → agno-2.3.21}/agno/tools/e2b.py +0 -0
  413. {agno-2.3.20 → agno-2.3.21}/agno/tools/eleven_labs.py +0 -0
  414. {agno-2.3.20 → agno-2.3.21}/agno/tools/email.py +0 -0
  415. {agno-2.3.20 → agno-2.3.21}/agno/tools/evm.py +0 -0
  416. {agno-2.3.20 → agno-2.3.21}/agno/tools/exa.py +0 -0
  417. {agno-2.3.20 → agno-2.3.21}/agno/tools/fal.py +0 -0
  418. {agno-2.3.20 → agno-2.3.21}/agno/tools/file.py +0 -0
  419. {agno-2.3.20 → agno-2.3.21}/agno/tools/file_generation.py +0 -0
  420. {agno-2.3.20 → agno-2.3.21}/agno/tools/financial_datasets.py +0 -0
  421. {agno-2.3.20 → agno-2.3.21}/agno/tools/firecrawl.py +0 -0
  422. {agno-2.3.20 → agno-2.3.21}/agno/tools/function.py +0 -0
  423. {agno-2.3.20 → agno-2.3.21}/agno/tools/giphy.py +0 -0
  424. {agno-2.3.20 → agno-2.3.21}/agno/tools/github.py +0 -0
  425. {agno-2.3.20 → agno-2.3.21}/agno/tools/gmail.py +0 -0
  426. {agno-2.3.20 → agno-2.3.21}/agno/tools/google_bigquery.py +0 -0
  427. {agno-2.3.20 → agno-2.3.21}/agno/tools/google_drive.py +0 -0
  428. {agno-2.3.20 → agno-2.3.21}/agno/tools/google_maps.py +0 -0
  429. {agno-2.3.20 → agno-2.3.21}/agno/tools/googlecalendar.py +0 -0
  430. {agno-2.3.20 → agno-2.3.21}/agno/tools/googlesheets.py +0 -0
  431. {agno-2.3.20 → agno-2.3.21}/agno/tools/hackernews.py +0 -0
  432. {agno-2.3.20 → agno-2.3.21}/agno/tools/jina.py +0 -0
  433. {agno-2.3.20 → agno-2.3.21}/agno/tools/jira.py +0 -0
  434. {agno-2.3.20 → agno-2.3.21}/agno/tools/knowledge.py +0 -0
  435. {agno-2.3.20 → agno-2.3.21}/agno/tools/linear.py +0 -0
  436. {agno-2.3.20 → agno-2.3.21}/agno/tools/linkup.py +0 -0
  437. {agno-2.3.20 → agno-2.3.21}/agno/tools/local_file_system.py +0 -0
  438. {agno-2.3.20 → agno-2.3.21}/agno/tools/lumalab.py +0 -0
  439. {agno-2.3.20 → agno-2.3.21}/agno/tools/mcp/__init__.py +0 -0
  440. {agno-2.3.20 → agno-2.3.21}/agno/tools/mcp/mcp.py +0 -0
  441. {agno-2.3.20 → agno-2.3.21}/agno/tools/mcp/multi_mcp.py +0 -0
  442. {agno-2.3.20 → agno-2.3.21}/agno/tools/mcp/params.py +0 -0
  443. {agno-2.3.20 → agno-2.3.21}/agno/tools/mcp_toolbox.py +0 -0
  444. {agno-2.3.20 → agno-2.3.21}/agno/tools/mem0.py +0 -0
  445. {agno-2.3.20 → agno-2.3.21}/agno/tools/memory.py +0 -0
  446. {agno-2.3.20 → agno-2.3.21}/agno/tools/mlx_transcribe.py +0 -0
  447. {agno-2.3.20 → agno-2.3.21}/agno/tools/models/__init__.py +0 -0
  448. {agno-2.3.20 → agno-2.3.21}/agno/tools/models/azure_openai.py +0 -0
  449. {agno-2.3.20 → agno-2.3.21}/agno/tools/models/gemini.py +0 -0
  450. {agno-2.3.20 → agno-2.3.21}/agno/tools/models/groq.py +0 -0
  451. {agno-2.3.20 → agno-2.3.21}/agno/tools/models/morph.py +0 -0
  452. {agno-2.3.20 → agno-2.3.21}/agno/tools/models/nebius.py +0 -0
  453. {agno-2.3.20 → agno-2.3.21}/agno/tools/models_labs.py +0 -0
  454. {agno-2.3.20 → agno-2.3.21}/agno/tools/moviepy_video.py +0 -0
  455. {agno-2.3.20 → agno-2.3.21}/agno/tools/nano_banana.py +0 -0
  456. {agno-2.3.20 → agno-2.3.21}/agno/tools/neo4j.py +0 -0
  457. {agno-2.3.20 → agno-2.3.21}/agno/tools/newspaper.py +0 -0
  458. {agno-2.3.20 → agno-2.3.21}/agno/tools/newspaper4k.py +0 -0
  459. {agno-2.3.20 → agno-2.3.21}/agno/tools/notion.py +0 -0
  460. {agno-2.3.20 → agno-2.3.21}/agno/tools/openai.py +0 -0
  461. {agno-2.3.20 → agno-2.3.21}/agno/tools/openbb.py +0 -0
  462. {agno-2.3.20 → agno-2.3.21}/agno/tools/opencv.py +0 -0
  463. {agno-2.3.20 → agno-2.3.21}/agno/tools/openweather.py +0 -0
  464. {agno-2.3.20 → agno-2.3.21}/agno/tools/oxylabs.py +0 -0
  465. {agno-2.3.20 → agno-2.3.21}/agno/tools/pandas.py +0 -0
  466. {agno-2.3.20 → agno-2.3.21}/agno/tools/parallel.py +0 -0
  467. {agno-2.3.20 → agno-2.3.21}/agno/tools/postgres.py +0 -0
  468. {agno-2.3.20 → agno-2.3.21}/agno/tools/pubmed.py +0 -0
  469. {agno-2.3.20 → agno-2.3.21}/agno/tools/python.py +0 -0
  470. {agno-2.3.20 → agno-2.3.21}/agno/tools/reasoning.py +0 -0
  471. {agno-2.3.20 → agno-2.3.21}/agno/tools/reddit.py +0 -0
  472. {agno-2.3.20 → agno-2.3.21}/agno/tools/redshift.py +0 -0
  473. {agno-2.3.20 → agno-2.3.21}/agno/tools/replicate.py +0 -0
  474. {agno-2.3.20 → agno-2.3.21}/agno/tools/resend.py +0 -0
  475. {agno-2.3.20 → agno-2.3.21}/agno/tools/scrapegraph.py +0 -0
  476. {agno-2.3.20 → agno-2.3.21}/agno/tools/searxng.py +0 -0
  477. {agno-2.3.20 → agno-2.3.21}/agno/tools/serpapi.py +0 -0
  478. {agno-2.3.20 → agno-2.3.21}/agno/tools/serper.py +0 -0
  479. {agno-2.3.20 → agno-2.3.21}/agno/tools/shell.py +0 -0
  480. {agno-2.3.20 → agno-2.3.21}/agno/tools/shopify.py +0 -0
  481. {agno-2.3.20 → agno-2.3.21}/agno/tools/slack.py +0 -0
  482. {agno-2.3.20 → agno-2.3.21}/agno/tools/sleep.py +0 -0
  483. {agno-2.3.20 → agno-2.3.21}/agno/tools/spider.py +0 -0
  484. {agno-2.3.20 → agno-2.3.21}/agno/tools/spotify.py +0 -0
  485. {agno-2.3.20 → agno-2.3.21}/agno/tools/sql.py +0 -0
  486. {agno-2.3.20 → agno-2.3.21}/agno/tools/streamlit/__init__.py +0 -0
  487. {agno-2.3.20 → agno-2.3.21}/agno/tools/streamlit/components.py +0 -0
  488. {agno-2.3.20 → agno-2.3.21}/agno/tools/tavily.py +0 -0
  489. {agno-2.3.20 → agno-2.3.21}/agno/tools/telegram.py +0 -0
  490. {agno-2.3.20 → agno-2.3.21}/agno/tools/todoist.py +0 -0
  491. {agno-2.3.20 → agno-2.3.21}/agno/tools/tool_registry.py +0 -0
  492. {agno-2.3.20 → agno-2.3.21}/agno/tools/toolkit.py +0 -0
  493. {agno-2.3.20 → agno-2.3.21}/agno/tools/trafilatura.py +0 -0
  494. {agno-2.3.20 → agno-2.3.21}/agno/tools/trello.py +0 -0
  495. {agno-2.3.20 → agno-2.3.21}/agno/tools/twilio.py +0 -0
  496. {agno-2.3.20 → agno-2.3.21}/agno/tools/user_control_flow.py +0 -0
  497. {agno-2.3.20 → agno-2.3.21}/agno/tools/valyu.py +0 -0
  498. {agno-2.3.20 → agno-2.3.21}/agno/tools/visualization.py +0 -0
  499. {agno-2.3.20 → agno-2.3.21}/agno/tools/webbrowser.py +0 -0
  500. {agno-2.3.20 → agno-2.3.21}/agno/tools/webex.py +0 -0
  501. {agno-2.3.20 → agno-2.3.21}/agno/tools/website.py +0 -0
  502. {agno-2.3.20 → agno-2.3.21}/agno/tools/webtools.py +0 -0
  503. {agno-2.3.20 → agno-2.3.21}/agno/tools/whatsapp.py +0 -0
  504. {agno-2.3.20 → agno-2.3.21}/agno/tools/wikipedia.py +0 -0
  505. {agno-2.3.20 → agno-2.3.21}/agno/tools/workflow.py +0 -0
  506. {agno-2.3.20 → agno-2.3.21}/agno/tools/x.py +0 -0
  507. {agno-2.3.20 → agno-2.3.21}/agno/tools/yfinance.py +0 -0
  508. {agno-2.3.20 → agno-2.3.21}/agno/tools/youtube.py +0 -0
  509. {agno-2.3.20 → agno-2.3.21}/agno/tools/zendesk.py +0 -0
  510. {agno-2.3.20 → agno-2.3.21}/agno/tools/zep.py +0 -0
  511. {agno-2.3.20 → agno-2.3.21}/agno/tools/zoom.py +0 -0
  512. {agno-2.3.20 → agno-2.3.21}/agno/tracing/__init__.py +0 -0
  513. {agno-2.3.20 → agno-2.3.21}/agno/tracing/exporter.py +0 -0
  514. {agno-2.3.20 → agno-2.3.21}/agno/tracing/schemas.py +0 -0
  515. {agno-2.3.20 → agno-2.3.21}/agno/tracing/setup.py +0 -0
  516. {agno-2.3.20 → agno-2.3.21}/agno/utils/__init__.py +0 -0
  517. {agno-2.3.20 → agno-2.3.21}/agno/utils/agent.py +0 -0
  518. {agno-2.3.20 → agno-2.3.21}/agno/utils/audio.py +0 -0
  519. {agno-2.3.20 → agno-2.3.21}/agno/utils/certs.py +0 -0
  520. {agno-2.3.20 → agno-2.3.21}/agno/utils/code_execution.py +0 -0
  521. {agno-2.3.20 → agno-2.3.21}/agno/utils/common.py +0 -0
  522. {agno-2.3.20 → agno-2.3.21}/agno/utils/cryptography.py +0 -0
  523. {agno-2.3.20 → agno-2.3.21}/agno/utils/dttm.py +0 -0
  524. {agno-2.3.20 → agno-2.3.21}/agno/utils/enum.py +0 -0
  525. {agno-2.3.20 → agno-2.3.21}/agno/utils/env.py +0 -0
  526. {agno-2.3.20 → agno-2.3.21}/agno/utils/events.py +0 -0
  527. {agno-2.3.20 → agno-2.3.21}/agno/utils/format_str.py +0 -0
  528. {agno-2.3.20 → agno-2.3.21}/agno/utils/functions.py +0 -0
  529. {agno-2.3.20 → agno-2.3.21}/agno/utils/gemini.py +0 -0
  530. {agno-2.3.20 → agno-2.3.21}/agno/utils/hooks.py +0 -0
  531. {agno-2.3.20 → agno-2.3.21}/agno/utils/http.py +0 -0
  532. {agno-2.3.20 → agno-2.3.21}/agno/utils/json_schema.py +0 -0
  533. {agno-2.3.20 → agno-2.3.21}/agno/utils/knowledge.py +0 -0
  534. {agno-2.3.20 → agno-2.3.21}/agno/utils/location.py +0 -0
  535. {agno-2.3.20 → agno-2.3.21}/agno/utils/log.py +0 -0
  536. {agno-2.3.20 → agno-2.3.21}/agno/utils/mcp.py +0 -0
  537. {agno-2.3.20 → agno-2.3.21}/agno/utils/media.py +0 -0
  538. {agno-2.3.20 → agno-2.3.21}/agno/utils/merge_dict.py +0 -0
  539. {agno-2.3.20 → agno-2.3.21}/agno/utils/message.py +0 -0
  540. {agno-2.3.20 → agno-2.3.21}/agno/utils/models/__init__.py +0 -0
  541. {agno-2.3.20 → agno-2.3.21}/agno/utils/models/ai_foundry.py +0 -0
  542. {agno-2.3.20 → agno-2.3.21}/agno/utils/models/claude.py +0 -0
  543. {agno-2.3.20 → agno-2.3.21}/agno/utils/models/cohere.py +0 -0
  544. {agno-2.3.20 → agno-2.3.21}/agno/utils/models/llama.py +0 -0
  545. {agno-2.3.20 → agno-2.3.21}/agno/utils/models/mistral.py +0 -0
  546. {agno-2.3.20 → agno-2.3.21}/agno/utils/models/openai_responses.py +0 -0
  547. {agno-2.3.20 → agno-2.3.21}/agno/utils/models/schema_utils.py +0 -0
  548. {agno-2.3.20 → agno-2.3.21}/agno/utils/models/watsonx.py +0 -0
  549. {agno-2.3.20 → agno-2.3.21}/agno/utils/openai.py +0 -0
  550. {agno-2.3.20 → agno-2.3.21}/agno/utils/os.py +0 -0
  551. {agno-2.3.20 → agno-2.3.21}/agno/utils/pickle.py +0 -0
  552. {agno-2.3.20 → agno-2.3.21}/agno/utils/pprint.py +0 -0
  553. {agno-2.3.20 → agno-2.3.21}/agno/utils/print_response/__init__.py +0 -0
  554. {agno-2.3.20 → agno-2.3.21}/agno/utils/print_response/agent.py +0 -0
  555. {agno-2.3.20 → agno-2.3.21}/agno/utils/print_response/team.py +0 -0
  556. {agno-2.3.20 → agno-2.3.21}/agno/utils/print_response/workflow.py +0 -0
  557. {agno-2.3.20 → agno-2.3.21}/agno/utils/prompts.py +0 -0
  558. {agno-2.3.20 → agno-2.3.21}/agno/utils/reasoning.py +0 -0
  559. {agno-2.3.20 → agno-2.3.21}/agno/utils/remote.py +0 -0
  560. {agno-2.3.20 → agno-2.3.21}/agno/utils/response.py +0 -0
  561. {agno-2.3.20 → agno-2.3.21}/agno/utils/response_iterator.py +0 -0
  562. {agno-2.3.20 → agno-2.3.21}/agno/utils/safe_formatter.py +0 -0
  563. {agno-2.3.20 → agno-2.3.21}/agno/utils/serialize.py +0 -0
  564. {agno-2.3.20 → agno-2.3.21}/agno/utils/shell.py +0 -0
  565. {agno-2.3.20 → agno-2.3.21}/agno/utils/streamlit.py +0 -0
  566. {agno-2.3.20 → agno-2.3.21}/agno/utils/string.py +0 -0
  567. {agno-2.3.20 → agno-2.3.21}/agno/utils/team.py +0 -0
  568. {agno-2.3.20 → agno-2.3.21}/agno/utils/timer.py +0 -0
  569. {agno-2.3.20 → agno-2.3.21}/agno/utils/tokens.py +0 -0
  570. {agno-2.3.20 → agno-2.3.21}/agno/utils/tools.py +0 -0
  571. {agno-2.3.20 → agno-2.3.21}/agno/utils/web.py +0 -0
  572. {agno-2.3.20 → agno-2.3.21}/agno/utils/whatsapp.py +0 -0
  573. {agno-2.3.20 → agno-2.3.21}/agno/utils/yaml_io.py +0 -0
  574. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/__init__.py +0 -0
  575. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/base.py +0 -0
  576. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/cassandra/__init__.py +0 -0
  577. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/cassandra/cassandra.py +0 -0
  578. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  579. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/cassandra/index.py +0 -0
  580. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/chroma/__init__.py +0 -0
  581. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/chroma/chromadb.py +0 -0
  582. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/clickhouse/__init__.py +0 -0
  583. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  584. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/clickhouse/index.py +0 -0
  585. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/couchbase/__init__.py +0 -0
  586. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/couchbase/couchbase.py +0 -0
  587. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/distance.py +0 -0
  588. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/lancedb/__init__.py +0 -0
  589. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/lancedb/lance_db.py +0 -0
  590. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/langchaindb/__init__.py +0 -0
  591. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  592. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/lightrag/__init__.py +0 -0
  593. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/lightrag/lightrag.py +0 -0
  594. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/llamaindex/__init__.py +0 -0
  595. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  596. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/milvus/__init__.py +0 -0
  597. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/milvus/milvus.py +0 -0
  598. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/mongodb/__init__.py +0 -0
  599. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/mongodb/mongodb.py +0 -0
  600. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/pgvector/__init__.py +0 -0
  601. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/pgvector/index.py +0 -0
  602. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/pgvector/pgvector.py +0 -0
  603. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/pineconedb/__init__.py +0 -0
  604. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  605. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/qdrant/__init__.py +0 -0
  606. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/qdrant/qdrant.py +0 -0
  607. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/redis/__init__.py +0 -0
  608. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/redis/redisdb.py +0 -0
  609. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/search.py +0 -0
  610. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/singlestore/__init__.py +0 -0
  611. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/singlestore/index.py +0 -0
  612. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/singlestore/singlestore.py +0 -0
  613. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/surrealdb/__init__.py +0 -0
  614. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  615. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/upstashdb/__init__.py +0 -0
  616. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  617. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/weaviate/__init__.py +0 -0
  618. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/weaviate/index.py +0 -0
  619. {agno-2.3.20 → agno-2.3.21}/agno/vectordb/weaviate/weaviate.py +0 -0
  620. {agno-2.3.20 → agno-2.3.21}/agno/workflow/__init__.py +0 -0
  621. {agno-2.3.20 → agno-2.3.21}/agno/workflow/agent.py +0 -0
  622. {agno-2.3.20 → agno-2.3.21}/agno/workflow/condition.py +0 -0
  623. {agno-2.3.20 → agno-2.3.21}/agno/workflow/loop.py +0 -0
  624. {agno-2.3.20 → agno-2.3.21}/agno/workflow/parallel.py +0 -0
  625. {agno-2.3.20 → agno-2.3.21}/agno/workflow/remote.py +0 -0
  626. {agno-2.3.20 → agno-2.3.21}/agno/workflow/router.py +0 -0
  627. {agno-2.3.20 → agno-2.3.21}/agno/workflow/step.py +0 -0
  628. {agno-2.3.20 → agno-2.3.21}/agno/workflow/steps.py +0 -0
  629. {agno-2.3.20 → agno-2.3.21}/agno/workflow/types.py +0 -0
  630. {agno-2.3.20 → agno-2.3.21}/agno/workflow/workflow.py +0 -0
  631. {agno-2.3.20 → agno-2.3.21}/agno.egg-info/SOURCES.txt +0 -0
  632. {agno-2.3.20 → agno-2.3.21}/agno.egg-info/dependency_links.txt +0 -0
  633. {agno-2.3.20 → agno-2.3.21}/agno.egg-info/requires.txt +0 -0
  634. {agno-2.3.20 → agno-2.3.21}/agno.egg-info/top_level.txt +0 -0
  635. {agno-2.3.20 → agno-2.3.21}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.3.20
3
+ Version: 2.3.21
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
@@ -415,7 +415,7 @@ Dynamic: license-file
415
415
  <div align="center">
416
416
  <a href="https://docs.agno.com">Documentation</a>
417
417
  <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
418
- <a href="https://docs.agno.com/examples/use-cases/agents/overview">Examples</a>
418
+ <a href="https://github.com/agno-agi/agno/tree/main/cookbook">Cookbook</a>
419
419
  <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
420
420
  <a href="https://www.agno.com/?utm_source=github&utm_medium=readme&utm_campaign=agno-github">Website</a>
421
421
  <br />
@@ -423,25 +423,27 @@ Dynamic: license-file
423
423
 
424
424
  ## What is Agno?
425
425
 
426
- Agno is an incredibly fast multi-agent framework, runtime and control plane.
426
+ Agno is a multi-agent framework, runtime, and control plane. Use it to build private and secure AI products that run in your cloud.
427
427
 
428
- Companies want to build AI products, run them securely in their cloud, and manage their agents with a beautiful UI. This takes more than calling an LLM API, it requires a thoughtfully designed agentic platform.
428
+ - **Build** agents, teams, and workflows with memory, knowledge, guardrails, and 100+ toolkits.
429
+ - **Run** in production with a stateless FastAPI runtime. Horizontally scalable.
430
+ - **Manage** with a control plane that connects directly to your runtime — no data leaves your environment.
429
431
 
430
- Agno provides the unified stack for building, running and managing multi-agent systems:
432
+ ## Why Agno?
431
433
 
432
- - **Framework**: Build agents, multi-agent teams and workflows with memory, knowledge, state, guardrails, HITL, context compression, MCP, A2A and 100+ toolkits.
433
- - **AgentOS Runtime**: Run your multi-agent system in production with a secure, stateless runtime and ready to use integration endpoints.
434
- - **AgentOS Control Plane**: Test, monitor and manage AgentOS deployments across environments with full operational visibility.
434
+ - **Your cloud, your data:** AgentOS runs entirely in your infrastructure. Zero data leaves your environment.
435
+ - **Production-ready from day one:** Pre-built FastAPI runtime with SSE endpoints, ready to deploy.
436
+ - **Actually fast:** 529× faster than LangGraph, 24× lower memory. Matters at scale.
435
437
 
436
- Checkout the full list of features [here](#features).
438
+ ## Getting Started
437
439
 
438
- ## Getting started
440
+ New to Agno? Start with the [getting started guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_getting_started).
439
441
 
440
- If you're new to Agno, follow our [quickstart](https://docs.agno.com/get-started/quickstart) to build your first Agent and chat with it using the AgentOS UI.
442
+ Then:
443
+ - Browse the [cookbooks](https://github.com/agno-agi/agno/tree/main/cookbook) for real-world examples
444
+ - Read the [docs](https://docs.agno.com) to learn more.
441
445
 
442
- After that, checkout the [examples gallery](https://docs.agno.com/examples/use-cases/agents/overview) and build real-world applications with Agno.
443
-
444
- ## Documentation, Community & More Examples
446
+ ## Resources
445
447
 
446
448
  - Docs: <a href="https://docs.agno.com" target="_blank" rel="noopener noreferrer">docs.agno.com</a>
447
449
  - Cookbook: <a href="https://github.com/agno-agi/agno/tree/main/cookbook" target="_blank" rel="noopener noreferrer">Cookbook</a>
@@ -497,144 +499,72 @@ When you run the example script shared above, you get a FastAPI app that you can
497
499
 
498
500
  https://github.com/user-attachments/assets/feb23db8-15cc-4e88-be7c-01a21a03ebf6
499
501
 
500
- ## The Complete Agentic Solution
502
+ ## Private by Design
501
503
 
502
- Agno provides the complete solution for companies building agentic systems:
504
+ This is the part we care most about.
503
505
 
504
- - The fastest framework for building agents, multi-agent teams and agentic workflows.
505
- - A ready-to-use FastAPI app that gets you building AI products on day one.
506
- - A control plane for testing, monitoring and managing your system.
506
+ AgentOS runs in **your** cloud. The control plane UI connects directly to your runtime from your browser. Your data never touches our servers. No retention costs, no vendor lock-in, no compliance headaches.
507
507
 
508
- Agno brings a novel architecture that no other framework provides, your AgentOS runs securely in your cloud, and the control plane connects directly to it from your browser. You don't need to send data to any external services or pay retention costs, you get complete privacy and control.
508
+ This isn't a privacy mode or enterprise add-on. It's how Agno works.
509
509
 
510
510
  ## Features
511
511
 
512
- Agno is an incredibly feature-rich framework purpose-built for Agent Engineering. Here are some key features:
513
-
514
- | **Category** | **Feature** | **Description** |
515
- | -------------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
516
- | **Foundational Principles** | **Model Agnostic** | Supports all model providers so you can choose the best model for your use case |
517
- | | **Type Safe** | Enforces structured I/O through input_schema and output_schema for predictable and composable agent behavior. |
518
- | | **Dynamic Context** | Inject variables, state, and retrieved data at runtime into context. Compress, summarize and filter context to keep your Agents focused and efficient. |
519
- | | **Designed for Scale** | Designed around async execution and long-running tasks for high throughput agent workloads. |
520
- | **Memory, Knowledge, and Persistence** | **Persistent Storage** | Give your Agents, Teams, and Workflows a database to persist session history, state, and messages. |
521
- | | **User Memory** | Built in memory layer that helps agents recall user specific context across sessions. |
522
- | | **Agentic RAG** | Connect to 20+ vector stores (called **Knowledge**) with hybrid search, reranking, and chunking out of the box. |
523
- | | **Culture** | Shared long term collective memory that compounds across agents and time. |
524
- | | **Ephemeral Context** | In memory scratchpad for short lived reasoning without polluting long term state. |
525
- | **Execution & Control** | **Human-in-the-Loop** | Native support for confirmations, approvals, manual overrides, and external actions. |
526
- | | **Guardrails** | Built-in safeguards for validation, security, and prompt protection. |
527
- | | **Agent Lifecycle Hooks** | Pre and post hooks to validate, enrich, or transform inputs and outputs. |
528
- | | **MCP Integration** | First-class support for the Model Context Protocol (MCP) to connect Agents with external systems. |
529
- | | **A2A Integration** | First-class support for the Agent to Agent communication protocol (A2A). |
530
- | | **Toolkits** | 100+ built in toolkits with thousands of tools covering data, code, web, and enterprise APIs. |
531
- | **Runtime & Evaluation** | **Runtime** | Prebuilt FastAPI runtime with SSE compatible endpoints. Production ready from day one. |
532
- | | **Control Plane (UI)** | Integrated interface to test, observe, and debug your agents, teams, and workflows in real time. |
533
- | | **Natively Multimodal** | Agents can process and generate text, images, audio, video, and files. |
534
- | | **Evals** | Measure Accuracy, Performance, Latency, and Reliability across agents and workflows. |
535
- | | **Durable Execution** | Built in support for long running, resumable workflows. |
536
- | **Security & Privacy** | **Private by Design** | Runs entirely in your cloud. The UI connects directly to your AgentOS from your browser, no data is ever sent externally. |
537
- | | **Data Governance** | Your data lives securely in your Agent database, no external data sharing or vendor lock-in. |
538
- | | **Access Control** | Role-based access (RBAC) and per-agent permissions to protect sensitive contexts and tools. |
539
-
540
- Every part of Agno is built for real-world deployment — where developer experience meets production performance.
541
-
542
- ## Setup Your Coding Agent to Use Agno
543
-
544
- For LLMs and AI assistants to understand and navigate Agno's documentation, we provide an [llms.txt](https://docs.agno.com/llms.txt) or [llms-full.txt](https://docs.agno.com/llms-full.txt) file. This file is built for AI systems to efficiently parse and reference our documentation.
545
-
546
- ### IDE Integration
547
-
548
- When building Agno agents, using Agno documentation as a source in your IDE is a great way to speed up your development. Here's how to integrate with Cursor:
549
-
550
- 1. In Cursor, go to the "Cursor Settings" menu.
551
- 2. Find the "Indexing & Docs" section.
552
- 3. Add `https://docs.agno.com/llms-full.txt` to the list of documentation URLs.
553
- 4. Save the changes.
554
-
555
- Now, Cursor will have access to the Agno documentation. You can do the same with other IDEs like VSCode, Windsurf etc.
512
+ **Core**
513
+ - Model agnostic — works with OpenAI, Anthropic, Google, local models, whatever
514
+ - Type-safe I/O with `input_schema` and `output_schema`
515
+ - Async-first, built for long-running tasks
516
+ - Natively multimodal (text, images, audio, video, files)
517
+
518
+ **Memory & Knowledge**
519
+ - Persistent storage for session history and state
520
+ - User memory that persists across sessions
521
+ - Agentic RAG with 20+ vector stores, hybrid search, reranking
522
+ - Culture shared long-term memory across agents
523
+
524
+ **Execution**
525
+ - Human-in-the-loop (confirmations, approvals, overrides)
526
+ - Guardrails for validation and security
527
+ - Pre/post hooks for the agent lifecycle
528
+ - First-class MCP and A2A support
529
+ - 100+ built-in toolkits
530
+
531
+ **Production**
532
+ - Ready-to-use FastAPI runtime
533
+ - Integrated control plane UI
534
+ - Evals for accuracy, performance, latency
535
+ - Durable execution for resumable workflows
536
+ - RBAC and per-agent permissions
556
537
 
557
538
  ## Performance
558
539
 
559
- If you're building with Agno, you're guaranteed best-in-class performance by default. Our obsession with performance is necessary because even simple AI workflows can spawn hundreds of Agents and because many tasks are long-running -- stateless, horizontal scalability is key for success.
560
-
561
- At Agno, we optimize performance across 3 dimensions:
562
-
563
- 1. **Agent performance:** We optimize static operations (instantiation, memory footprint) and runtime operations (tool calls, memory updates, history management).
564
- 2. **System performance:** The AgentOS API is async by default and has a minimal memory footprint. The system is stateless and horizontally scalable, with a focus on preventing memory leaks. It handles parallel and batch embedding generation during knowledge ingestion, metrics collection in background tasks, and other system-level optimizations.
565
- 3. **Agent reliability and accuracy:** Monitored through evals, which we'll explore later.
566
-
567
- ### Agent Performance
568
-
569
- Let's measure the time it takes to instantiate an Agent and the memory footprint of an Agent. Here are the numbers (last measured in Oct 2025, on an Apple M4 MacBook Pro):
570
-
571
- - **Agent instantiation:** ~3μs on average
572
- - **Memory footprint:** ~6.6Kib on average
573
-
574
- We'll show below that Agno Agents instantiate **529× faster than Langgraph**, **57× faster than PydanticAI**, and **70× faster than CrewAI**. Agno Agents also use **24× lower memory than Langgraph**, **4× lower than PydanticAI**, and **10× lower than CrewAI**.
575
-
576
- > [!NOTE]
577
- > Run time performance is bottlenecked by inference and hard to benchmark accurately, so we focus on minimizing overhead, reducing memory usage, and parallelizing tool calls.
578
-
579
- ### Instantiation Time
540
+ We're obsessive about performance because agent workloads spawn hundreds of instances and run long tasks. Stateless, horizontal scalability isn't optional.
580
541
 
581
- Let's measure instantiation time for an Agent with 1 tool. We'll run the evaluation 1000 times to get a baseline measurement. We'll compare Agno to LangGraph, CrewAI and Pydantic AI.
542
+ **Benchmarks** (Apple M4 MacBook Pro, Oct 2025):
582
543
 
583
- > [!NOTE]
584
- > The code for this benchmark is available [here](https://github.com/agno-agi/agno/tree/main/cookbook/evals/performance). You should run the evaluation yourself on your own machine, please, do not take these results at face value.
544
+ | Metric | Agno | LangGraph | PydanticAI | CrewAI |
545
+ |--------|------|-----------|------------|--------|
546
+ | Instantiation | **3μs** | 1,587μs (529× slower) | 170μs (57× slower) | 210μs (70× slower) |
547
+ | Memory | **6.6 KiB** | 161 KiB (24× higher) | 29 KiB (4× higher) | 66 KiB (10× higher) |
585
548
 
586
- ```shell
587
- # Setup virtual environment
588
- ./scripts/perf_setup.sh
589
- source .venvs/perfenv/bin/activate
590
-
591
- # Agno
592
- python cookbook/evals/performance/instantiate_agent_with_tool.py
593
-
594
- # LangGraph
595
- python cookbook/evals/performance/comparison/langgraph_instantiation.py
596
- # CrewAI
597
- python cookbook/evals/performance/comparison/crewai_instantiation.py
598
- # Pydantic AI
599
- python cookbook/evals/performance/comparison/pydantic_ai_instantiation.py
600
- ```
601
-
602
- LangGraph is on the right, **let's start it first and give it a head start**. Then CrewAI and Pydantic AI follow, and finally Agno. Agno obviously finishes first, but let's see by how much.
549
+ Run the benchmarks yourself: [`cookbook/evals/performance`](https://github.com/agno-agi/agno/tree/main/cookbook/evals/performance)
603
550
 
604
551
  https://github.com/user-attachments/assets/54b98576-1859-4880-9f2d-15e1a426719d
605
552
 
606
- ### Memory Usage
607
-
608
- To measure memory usage, we use the `tracemalloc` library. We first calculate a baseline memory usage by running an empty function, then run the Agent 1000x times and calculate the difference. This gives a (reasonably) isolated measurement of the memory usage of the Agent.
609
-
610
- We recommend running the evaluation yourself on your own machine, and digging into the code to see how it works. If we've made a mistake, please let us know.
611
-
612
- ### Results
613
-
614
- Taking Agno as the baseline, we can see that:
615
-
616
- | Metric | Agno | Langgraph | PydanticAI | CrewAI |
617
- | ------------------ | ---- | ----------- | ---------- | ---------- |
618
- | **Time (seconds)** | 1× | 529× slower | 57× slower | 70× slower |
619
- | **Memory (MiB)** | 1× | 24× higher | 4× higher | 10× higher |
553
+ ## IDE Integration
620
554
 
621
- Exact numbers from the benchmark:
555
+ For AI-assisted development, add our docs to your IDE:
622
556
 
623
- | Metric | Agno | Langgraph | PydanticAI | CrewAI |
624
- | ------------------ | -------- | --------- | ---------- | -------- |
625
- | **Time (seconds)** | 0.000003 | 0.001587 | 0.000170 | 0.000210 |
626
- | **Memory (MiB)** | 0.006642 | 0.161435 | 0.028712 | 0.065652 |
557
+ **Cursor:** Settings Indexing & Docs Add `https://docs.agno.com/llms-full.txt`
627
558
 
628
- > [!NOTE]
629
- > Agno agents are designed for performance and while we share benchmarks against other frameworks, we should be mindful that accuracy and reliability are more important than speed.
559
+ Works with VSCode, Windsurf, and other AI-enabled editors too.
630
560
 
631
- ## Contributions
561
+ ## Contributing
632
562
 
633
- We welcome contributions, read our [contributing guide](https://github.com/agno-agi/agno/blob/v2.0/CONTRIBUTING.md) to get started.
563
+ We welcome contributions. See the [contributing guide](https://github.com/agno-agi/agno/blob/v2.0/CONTRIBUTING.md).
634
564
 
635
565
  ## Telemetry
636
566
 
637
- Agno logs which model an agent used so we can prioritize updates to the most popular providers. You can disable this by setting `AGNO_TELEMETRY=false` in your environment.
567
+ Agno logs which model providers are used so we can prioritize updates. Disable with `AGNO_TELEMETRY=false`.
638
568
 
639
569
  <p align="left">
640
570
  <a href="#top">⬆️ Back to Top</a>
agno-2.3.21/README.md ADDED
@@ -0,0 +1,167 @@
1
+ <div align="center" id="top">
2
+ <a href="https://agno.com">
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://agno-public.s3.us-east-1.amazonaws.com/assets/logo-dark.svg">
5
+ <source media="(prefers-color-scheme: light)" srcset="https://agno-public.s3.us-east-1.amazonaws.com/assets/logo-light.svg">
6
+ <img src="https://agno-public.s3.us-east-1.amazonaws.com/assets/logo-light.svg" alt="Agno">
7
+ </picture>
8
+ </a>
9
+ </div>
10
+
11
+ <div align="center">
12
+ <a href="https://docs.agno.com">Documentation</a>
13
+ <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
14
+ <a href="https://github.com/agno-agi/agno/tree/main/cookbook">Cookbook</a>
15
+ <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
16
+ <a href="https://www.agno.com/?utm_source=github&utm_medium=readme&utm_campaign=agno-github">Website</a>
17
+ <br />
18
+ </div>
19
+
20
+ ## What is Agno?
21
+
22
+ Agno is a multi-agent framework, runtime, and control plane. Use it to build private and secure AI products that run in your cloud.
23
+
24
+ - **Build** agents, teams, and workflows with memory, knowledge, guardrails, and 100+ toolkits.
25
+ - **Run** in production with a stateless FastAPI runtime. Horizontally scalable.
26
+ - **Manage** with a control plane that connects directly to your runtime — no data leaves your environment.
27
+
28
+ ## Why Agno?
29
+
30
+ - **Your cloud, your data:** AgentOS runs entirely in your infrastructure. Zero data leaves your environment.
31
+ - **Production-ready from day one:** Pre-built FastAPI runtime with SSE endpoints, ready to deploy.
32
+ - **Actually fast:** 529× faster than LangGraph, 24× lower memory. Matters at scale.
33
+
34
+ ## Getting Started
35
+
36
+ New to Agno? Start with the [getting started guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_getting_started).
37
+
38
+ Then:
39
+ - Browse the [cookbooks](https://github.com/agno-agi/agno/tree/main/cookbook) for real-world examples
40
+ - Read the [docs](https://docs.agno.com) to learn more.
41
+
42
+ ## Resources
43
+
44
+ - Docs: <a href="https://docs.agno.com" target="_blank" rel="noopener noreferrer">docs.agno.com</a>
45
+ - Cookbook: <a href="https://github.com/agno-agi/agno/tree/main/cookbook" target="_blank" rel="noopener noreferrer">Cookbook</a>
46
+ - Community forum: <a href="https://community.agno.com/" target="_blank" rel="noopener noreferrer">community.agno.com</a>
47
+ - Discord: <a href="https://discord.gg/4MtYHHrgA8" target="_blank" rel="noopener noreferrer">discord</a>
48
+
49
+ ## Example
50
+
51
+ Here's an example of an Agent that connects to an MCP server, manages conversation state in a database, is served using a FastAPI application that you can chat with using the [AgentOS UI](https://os.agno.com).
52
+
53
+ ```python agno_agent.py
54
+ from agno.agent import Agent
55
+ from agno.db.sqlite import SqliteDb
56
+ from agno.models.anthropic import Claude
57
+ from agno.os import AgentOS
58
+ from agno.tools.mcp import MCPTools
59
+
60
+ # ************* Create Agent *************
61
+ agno_agent = Agent(
62
+ name="Agno Agent",
63
+ model=Claude(id="claude-sonnet-4-5"),
64
+ # Add a database to the Agent
65
+ db=SqliteDb(db_file="agno.db"),
66
+ # Add the Agno MCP server to the Agent
67
+ tools=[MCPTools(transport="streamable-http", url="https://docs.agno.com/mcp")],
68
+ # Add the previous session history to the context
69
+ add_history_to_context=True,
70
+ markdown=True,
71
+ )
72
+
73
+
74
+ # ************* Create AgentOS *************
75
+ agent_os = AgentOS(agents=[agno_agent])
76
+ # Get the FastAPI app for the AgentOS
77
+ app = agent_os.get_app()
78
+
79
+ # ************* Run AgentOS *************
80
+ if __name__ == "__main__":
81
+ agent_os.serve(app="agno_agent:app", reload=True)
82
+ ```
83
+
84
+ ## AgentOS - Production Runtime for Multi-Agent Systems
85
+
86
+ Building Agents is easy, running them as a secure, scalable service is hard. AgentOS solves this by providing a high performance runtime for serving multi-agent systems in production. Key features include:
87
+
88
+ 1. **Pre-built FastAPI app**: AgentOS includes a ready-to-use FastAPI app for running your agents, teams and workflows. This gives you a significant head start when building an AI product.
89
+
90
+ 2. **Integrated Control Plane**: The [AgentOS UI](https://os.agno.com) connects directly to your runtime, so you can test, monitor and manage your system in real time with full operational visibility.
91
+
92
+ 3. **Private by Design**: AgentOS runs entirely in your cloud, ensuring complete data privacy. No data leaves your environment, making it ideal for security conscious enterprises..
93
+
94
+ When you run the example script shared above, you get a FastAPI app that you can connect to the [AgentOS UI](https://os.agno.com). Here's what it looks like in action:
95
+
96
+ https://github.com/user-attachments/assets/feb23db8-15cc-4e88-be7c-01a21a03ebf6
97
+
98
+ ## Private by Design
99
+
100
+ This is the part we care most about.
101
+
102
+ AgentOS runs in **your** cloud. The control plane UI connects directly to your runtime from your browser. Your data never touches our servers. No retention costs, no vendor lock-in, no compliance headaches.
103
+
104
+ This isn't a privacy mode or enterprise add-on. It's how Agno works.
105
+
106
+ ## Features
107
+
108
+ **Core**
109
+ - Model agnostic — works with OpenAI, Anthropic, Google, local models, whatever
110
+ - Type-safe I/O with `input_schema` and `output_schema`
111
+ - Async-first, built for long-running tasks
112
+ - Natively multimodal (text, images, audio, video, files)
113
+
114
+ **Memory & Knowledge**
115
+ - Persistent storage for session history and state
116
+ - User memory that persists across sessions
117
+ - Agentic RAG with 20+ vector stores, hybrid search, reranking
118
+ - Culture — shared long-term memory across agents
119
+
120
+ **Execution**
121
+ - Human-in-the-loop (confirmations, approvals, overrides)
122
+ - Guardrails for validation and security
123
+ - Pre/post hooks for the agent lifecycle
124
+ - First-class MCP and A2A support
125
+ - 100+ built-in toolkits
126
+
127
+ **Production**
128
+ - Ready-to-use FastAPI runtime
129
+ - Integrated control plane UI
130
+ - Evals for accuracy, performance, latency
131
+ - Durable execution for resumable workflows
132
+ - RBAC and per-agent permissions
133
+
134
+ ## Performance
135
+
136
+ We're obsessive about performance because agent workloads spawn hundreds of instances and run long tasks. Stateless, horizontal scalability isn't optional.
137
+
138
+ **Benchmarks** (Apple M4 MacBook Pro, Oct 2025):
139
+
140
+ | Metric | Agno | LangGraph | PydanticAI | CrewAI |
141
+ |--------|------|-----------|------------|--------|
142
+ | Instantiation | **3μs** | 1,587μs (529× slower) | 170μs (57× slower) | 210μs (70× slower) |
143
+ | Memory | **6.6 KiB** | 161 KiB (24× higher) | 29 KiB (4× higher) | 66 KiB (10× higher) |
144
+
145
+ Run the benchmarks yourself: [`cookbook/evals/performance`](https://github.com/agno-agi/agno/tree/main/cookbook/evals/performance)
146
+
147
+ https://github.com/user-attachments/assets/54b98576-1859-4880-9f2d-15e1a426719d
148
+
149
+ ## IDE Integration
150
+
151
+ For AI-assisted development, add our docs to your IDE:
152
+
153
+ **Cursor:** Settings → Indexing & Docs → Add `https://docs.agno.com/llms-full.txt`
154
+
155
+ Works with VSCode, Windsurf, and other AI-enabled editors too.
156
+
157
+ ## Contributing
158
+
159
+ We welcome contributions. See the [contributing guide](https://github.com/agno-agi/agno/blob/v2.0/CONTRIBUTING.md).
160
+
161
+ ## Telemetry
162
+
163
+ Agno logs which model providers are used so we can prioritize updates. Disable with `AGNO_TELEMETRY=false`.
164
+
165
+ <p align="left">
166
+ <a href="#top">⬆️ Back to Top</a>
167
+ </p>
@@ -518,8 +518,11 @@ class AgentAsJudgeEval(BaseEval):
518
518
  if self.print_summary or print_summary:
519
519
  result.print_summary(console)
520
520
 
521
+ # evaluator model info
522
+ model_id = self.model.id if self.model is not None else None
523
+ model_provider = self.model.provider if self.model is not None else None
521
524
  # Log to DB
522
- self._log_eval_to_db(run_id=run_id, result=result)
525
+ self._log_eval_to_db(run_id=run_id, result=result, model_id=model_id, model_provider=model_provider)
523
526
 
524
527
  if self.telemetry:
525
528
  from agno.api.evals import EvalRunCreate, create_eval_run_telemetry
@@ -613,8 +616,11 @@ class AgentAsJudgeEval(BaseEval):
613
616
  if self.print_summary or print_summary:
614
617
  result.print_summary(console)
615
618
 
619
+ # evaluator model info
620
+ model_id = self.model.id if self.model is not None else None
621
+ model_provider = self.model.provider if self.model is not None else None
616
622
  # Log to DB
617
- await self._async_log_eval_to_db(run_id=run_id, result=result)
623
+ await self._async_log_eval_to_db(run_id=run_id, result=result, model_id=model_id, model_provider=model_provider)
618
624
 
619
625
  if self.telemetry:
620
626
  from agno.api.evals import EvalRunCreate, async_create_eval_run_telemetry
@@ -681,8 +687,11 @@ class AgentAsJudgeEval(BaseEval):
681
687
  if self.print_summary or print_summary:
682
688
  result.print_summary(console)
683
689
 
690
+ # evaluator model info
691
+ model_id = self.model.id if self.model is not None else None
692
+ model_provider = self.model.provider if self.model is not None else None
684
693
  # Log to DB
685
- self._log_eval_to_db(run_id=run_id, result=result)
694
+ self._log_eval_to_db(run_id=run_id, result=result, model_id=model_id, model_provider=model_provider)
686
695
 
687
696
  if self.telemetry:
688
697
  from agno.api.evals import EvalRunCreate, create_eval_run_telemetry
@@ -748,8 +757,11 @@ class AgentAsJudgeEval(BaseEval):
748
757
  if self.print_summary or print_summary:
749
758
  result.print_summary(console)
750
759
 
760
+ # evaluator model info
761
+ model_id = self.model.id if self.model is not None else None
762
+ model_provider = self.model.provider if self.model is not None else None
751
763
  # Log to DB
752
- await self._async_log_eval_to_db(run_id=run_id, result=result)
764
+ await self._async_log_eval_to_db(run_id=run_id, result=result, model_id=model_id, model_provider=model_provider)
753
765
 
754
766
  if self.telemetry:
755
767
  from agno.api.evals import EvalRunCreate, async_create_eval_run_telemetry
@@ -801,15 +813,14 @@ class AgentAsJudgeEval(BaseEval):
801
813
  if isinstance(run_output, RunOutput):
802
814
  agent_id = run_output.agent_id
803
815
  team_id = None
804
- model_id = run_output.model
805
- model_provider = run_output.model_provider
806
816
  elif isinstance(run_output, TeamRunOutput):
807
817
  agent_id = None
808
818
  team_id = run_output.team_id
809
- model_id = run_output.model
810
- model_provider = run_output.model_provider
811
819
 
812
- # Log to DB if we have a valid result (use run_id from result)
820
+ # evaluator model info
821
+ model_id = self.model.id if self.model is not None else None
822
+ model_provider = self.model.provider if self.model is not None else None
823
+ # Log to DB if we have a valid result
813
824
  if result:
814
825
  self._log_eval_to_db(
815
826
  run_id=result.run_id,
@@ -841,15 +852,14 @@ class AgentAsJudgeEval(BaseEval):
841
852
  if isinstance(run_output, RunOutput):
842
853
  agent_id = run_output.agent_id
843
854
  team_id = None
844
- model_id = run_output.model
845
- model_provider = run_output.model_provider
846
855
  elif isinstance(run_output, TeamRunOutput):
847
856
  agent_id = None
848
857
  team_id = run_output.team_id
849
- model_id = run_output.model
850
- model_provider = run_output.model_provider
851
858
 
852
- # Log to DB if we have a valid result (use run_id from result)
859
+ # evaluator model info
860
+ model_id = self.model.id if self.model is not None else None
861
+ model_provider = self.model.provider if self.model is not None else None
862
+ # Log to DB if we have a valid result
853
863
  if result:
854
864
  await self._async_log_eval_to_db(
855
865
  run_id=result.run_id,
@@ -37,7 +37,7 @@ class MistralEmbedder(Embedder):
37
37
  "api_key": self.api_key,
38
38
  "endpoint": self.endpoint,
39
39
  "max_retries": self.max_retries,
40
- "timeout": self.timeout,
40
+ "timeout_ms": self.timeout * 1000 if self.timeout else None,
41
41
  }
42
42
  _client_params = {k: v for k, v in _client_params.items() if v is not None}
43
43
 
@@ -144,15 +144,6 @@ def attach_routes(
144
144
  headers=headers,
145
145
  )
146
146
 
147
- # TODO: Delete me:
148
- # Filtering out agent-as-judge by default for now,
149
- # as they are not supported yet in the AgentOS UI.
150
- eval_types = eval_types or [
151
- EvalType.ACCURACY,
152
- EvalType.PERFORMANCE,
153
- EvalType.RELIABILITY,
154
- ]
155
-
156
147
  if isinstance(db, AsyncBaseDb):
157
148
  db = cast(AsyncBaseDb, db)
158
149
  eval_runs, total_count = await db.get_eval_runs(
@@ -68,15 +68,11 @@ async def run_agent_as_judge_eval(
68
68
  if agent:
69
69
  agent_response = await agent.arun(eval_run_input.input, stream=False)
70
70
  output = str(agent_response.content) if agent_response.content else ""
71
- model_id = agent.model.id if agent and agent.model else None
72
- model_provider = agent.model.provider if agent and agent.model else None
73
71
  agent_id = agent.id
74
72
  team_id = None
75
73
  elif team:
76
74
  team_response = await team.arun(eval_run_input.input, stream=False)
77
75
  output = str(team_response.content) if team_response.content else ""
78
- model_id = team.model.id if team and team.model else None
79
- model_provider = team.model.provider if team and team.model else None
80
76
  agent_id = None
81
77
  team_id = team.id
82
78
  else:
@@ -98,13 +94,17 @@ async def run_agent_as_judge_eval(
98
94
  if not result:
99
95
  raise HTTPException(status_code=500, detail="Failed to run agent as judge evaluation")
100
96
 
97
+ # Use evaluator's model
98
+ eval_model_id = agent_as_judge_eval.model.id if agent_as_judge_eval.model is not None else None
99
+ eval_model_provider = agent_as_judge_eval.model.provider if agent_as_judge_eval.model is not None else None
100
+
101
101
  eval_run = EvalSchema.from_agent_as_judge_eval(
102
102
  agent_as_judge_eval=agent_as_judge_eval,
103
103
  result=result,
104
104
  agent_id=agent_id,
105
105
  team_id=team_id,
106
- model_id=model_id,
107
- model_provider=model_provider,
106
+ model_id=eval_model_id,
107
+ model_provider=eval_model_provider,
108
108
  )
109
109
 
110
110
  # Restore original model after eval
@@ -55,8 +55,11 @@ class RunInput:
55
55
  return self.input_content.model_dump_json(exclude_none=True)
56
56
  elif isinstance(self.input_content, Message):
57
57
  return json.dumps(self.input_content.to_dict())
58
- elif isinstance(self.input_content, list) and self.input_content and isinstance(self.input_content[0], Message):
59
- return json.dumps([m.to_dict() for m in self.input_content])
58
+ elif isinstance(self.input_content, list):
59
+ try:
60
+ return json.dumps(self.to_dict().get("input_content"))
61
+ except Exception:
62
+ return str(self.input_content)
60
63
  else:
61
64
  return str(self.input_content)
62
65
 
@@ -71,22 +74,15 @@ class RunInput:
71
74
  result["input_content"] = self.input_content.model_dump(exclude_none=True)
72
75
  elif isinstance(self.input_content, Message):
73
76
  result["input_content"] = self.input_content.to_dict()
74
-
75
- # Handle input_content provided as a list of Message objects
76
- elif (
77
- isinstance(self.input_content, list)
78
- and self.input_content
79
- and isinstance(self.input_content[0], Message)
80
- ):
81
- result["input_content"] = [m.to_dict() for m in self.input_content]
82
-
83
- # Handle input_content provided as a list of dicts
84
- elif (
85
- isinstance(self.input_content, list) and self.input_content and isinstance(self.input_content[0], dict)
86
- ):
87
- for content in self.input_content:
88
- # Handle media input
89
- if isinstance(content, dict):
77
+ elif isinstance(self.input_content, list):
78
+ serialized_items: List[Any] = []
79
+ for item in self.input_content:
80
+ if isinstance(item, Message):
81
+ serialized_items.append(item.to_dict())
82
+ elif isinstance(item, BaseModel):
83
+ serialized_items.append(item.model_dump(exclude_none=True))
84
+ elif isinstance(item, dict):
85
+ content = dict(item)
90
86
  if content.get("images"):
91
87
  content["images"] = [
92
88
  img.to_dict() if isinstance(img, Image) else img for img in content["images"]
@@ -103,7 +99,11 @@ class RunInput:
103
99
  content["files"] = [
104
100
  file.to_dict() if isinstance(file, File) else file for file in content["files"]
105
101
  ]
106
- result["input_content"] = self.input_content
102
+ serialized_items.append(content)
103
+ else:
104
+ serialized_items.append(item)
105
+
106
+ result["input_content"] = serialized_items
107
107
  else:
108
108
  result["input_content"] = self.input_content
109
109