agno 2.3.9__tar.gz → 2.3.10__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 (616) hide show
  1. {agno-2.3.9 → agno-2.3.10}/PKG-INFO +1 -1
  2. {agno-2.3.9 → agno-2.3.10}/agno/agent/agent.py +0 -12
  3. {agno-2.3.9 → agno-2.3.10}/agno/db/sqlite/async_sqlite.py +1 -1
  4. {agno-2.3.9 → agno-2.3.10}/agno/eval/accuracy.py +11 -8
  5. {agno-2.3.9 → agno-2.3.10}/agno/eval/agent_as_judge.py +9 -8
  6. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/openai.py +1 -1
  7. {agno-2.3.9 → agno-2.3.10}/agno/models/base.py +34 -1
  8. {agno-2.3.9 → agno-2.3.10}/agno/models/google/gemini.py +69 -40
  9. {agno-2.3.9 → agno-2.3.10}/agno/models/message.py +3 -0
  10. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/evals/utils.py +15 -37
  11. {agno-2.3.9 → agno-2.3.10}/agno/team/team.py +14 -8
  12. {agno-2.3.9 → agno-2.3.10}/agno/tools/function.py +37 -23
  13. agno-2.3.10/agno/tools/shopify.py +1519 -0
  14. {agno-2.3.9 → agno-2.3.10}/agno/tools/spotify.py +2 -5
  15. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/pgvector/pgvector.py +1 -1
  16. {agno-2.3.9 → agno-2.3.10}/agno/workflow/parallel.py +2 -0
  17. {agno-2.3.9 → agno-2.3.10}/agno.egg-info/PKG-INFO +1 -1
  18. {agno-2.3.9 → agno-2.3.10}/agno.egg-info/SOURCES.txt +1 -0
  19. {agno-2.3.9 → agno-2.3.10}/pyproject.toml +1 -1
  20. {agno-2.3.9 → agno-2.3.10}/LICENSE +0 -0
  21. {agno-2.3.9 → agno-2.3.10}/README.md +0 -0
  22. {agno-2.3.9 → agno-2.3.10}/agno/__init__.py +0 -0
  23. {agno-2.3.9 → agno-2.3.10}/agno/agent/__init__.py +0 -0
  24. {agno-2.3.9 → agno-2.3.10}/agno/api/__init__.py +0 -0
  25. {agno-2.3.9 → agno-2.3.10}/agno/api/agent.py +0 -0
  26. {agno-2.3.9 → agno-2.3.10}/agno/api/api.py +0 -0
  27. {agno-2.3.9 → agno-2.3.10}/agno/api/evals.py +0 -0
  28. {agno-2.3.9 → agno-2.3.10}/agno/api/os.py +0 -0
  29. {agno-2.3.9 → agno-2.3.10}/agno/api/routes.py +0 -0
  30. {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/__init__.py +0 -0
  31. {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/agent.py +0 -0
  32. {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/evals.py +0 -0
  33. {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/os.py +0 -0
  34. {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/response.py +0 -0
  35. {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/team.py +0 -0
  36. {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/utils.py +0 -0
  37. {agno-2.3.9 → agno-2.3.10}/agno/api/schemas/workflows.py +0 -0
  38. {agno-2.3.9 → agno-2.3.10}/agno/api/settings.py +0 -0
  39. {agno-2.3.9 → agno-2.3.10}/agno/api/team.py +0 -0
  40. {agno-2.3.9 → agno-2.3.10}/agno/api/workflow.py +0 -0
  41. {agno-2.3.9 → agno-2.3.10}/agno/cloud/aws/base.py +0 -0
  42. {agno-2.3.9 → agno-2.3.10}/agno/cloud/aws/s3/__init__.py +0 -0
  43. {agno-2.3.9 → agno-2.3.10}/agno/cloud/aws/s3/api_client.py +0 -0
  44. {agno-2.3.9 → agno-2.3.10}/agno/cloud/aws/s3/bucket.py +0 -0
  45. {agno-2.3.9 → agno-2.3.10}/agno/cloud/aws/s3/object.py +0 -0
  46. {agno-2.3.9 → agno-2.3.10}/agno/compression/__init__.py +0 -0
  47. {agno-2.3.9 → agno-2.3.10}/agno/compression/manager.py +0 -0
  48. {agno-2.3.9 → agno-2.3.10}/agno/culture/__init__.py +0 -0
  49. {agno-2.3.9 → agno-2.3.10}/agno/culture/manager.py +0 -0
  50. {agno-2.3.9 → agno-2.3.10}/agno/db/__init__.py +0 -0
  51. {agno-2.3.9 → agno-2.3.10}/agno/db/async_postgres/__init__.py +0 -0
  52. {agno-2.3.9 → agno-2.3.10}/agno/db/base.py +0 -0
  53. {agno-2.3.9 → agno-2.3.10}/agno/db/dynamo/__init__.py +0 -0
  54. {agno-2.3.9 → agno-2.3.10}/agno/db/dynamo/dynamo.py +0 -0
  55. {agno-2.3.9 → agno-2.3.10}/agno/db/dynamo/schemas.py +0 -0
  56. {agno-2.3.9 → agno-2.3.10}/agno/db/dynamo/utils.py +0 -0
  57. {agno-2.3.9 → agno-2.3.10}/agno/db/firestore/__init__.py +0 -0
  58. {agno-2.3.9 → agno-2.3.10}/agno/db/firestore/firestore.py +0 -0
  59. {agno-2.3.9 → agno-2.3.10}/agno/db/firestore/schemas.py +0 -0
  60. {agno-2.3.9 → agno-2.3.10}/agno/db/firestore/utils.py +0 -0
  61. {agno-2.3.9 → agno-2.3.10}/agno/db/gcs_json/__init__.py +0 -0
  62. {agno-2.3.9 → agno-2.3.10}/agno/db/gcs_json/gcs_json_db.py +0 -0
  63. {agno-2.3.9 → agno-2.3.10}/agno/db/gcs_json/utils.py +0 -0
  64. {agno-2.3.9 → agno-2.3.10}/agno/db/in_memory/__init__.py +0 -0
  65. {agno-2.3.9 → agno-2.3.10}/agno/db/in_memory/in_memory_db.py +0 -0
  66. {agno-2.3.9 → agno-2.3.10}/agno/db/in_memory/utils.py +0 -0
  67. {agno-2.3.9 → agno-2.3.10}/agno/db/json/__init__.py +0 -0
  68. {agno-2.3.9 → agno-2.3.10}/agno/db/json/json_db.py +0 -0
  69. {agno-2.3.9 → agno-2.3.10}/agno/db/json/utils.py +0 -0
  70. {agno-2.3.9 → agno-2.3.10}/agno/db/migrations/__init__.py +0 -0
  71. {agno-2.3.9 → agno-2.3.10}/agno/db/migrations/manager.py +0 -0
  72. {agno-2.3.9 → agno-2.3.10}/agno/db/migrations/v1_to_v2.py +0 -0
  73. {agno-2.3.9 → agno-2.3.10}/agno/db/migrations/versions/__init__.py +0 -0
  74. {agno-2.3.9 → agno-2.3.10}/agno/db/migrations/versions/v2_3_0.py +0 -0
  75. {agno-2.3.9 → agno-2.3.10}/agno/db/mongo/__init__.py +0 -0
  76. {agno-2.3.9 → agno-2.3.10}/agno/db/mongo/async_mongo.py +0 -0
  77. {agno-2.3.9 → agno-2.3.10}/agno/db/mongo/mongo.py +0 -0
  78. {agno-2.3.9 → agno-2.3.10}/agno/db/mongo/schemas.py +0 -0
  79. {agno-2.3.9 → agno-2.3.10}/agno/db/mongo/utils.py +0 -0
  80. {agno-2.3.9 → agno-2.3.10}/agno/db/mysql/__init__.py +0 -0
  81. {agno-2.3.9 → agno-2.3.10}/agno/db/mysql/async_mysql.py +0 -0
  82. {agno-2.3.9 → agno-2.3.10}/agno/db/mysql/mysql.py +0 -0
  83. {agno-2.3.9 → agno-2.3.10}/agno/db/mysql/schemas.py +0 -0
  84. {agno-2.3.9 → agno-2.3.10}/agno/db/mysql/utils.py +0 -0
  85. {agno-2.3.9 → agno-2.3.10}/agno/db/postgres/__init__.py +0 -0
  86. {agno-2.3.9 → agno-2.3.10}/agno/db/postgres/async_postgres.py +0 -0
  87. {agno-2.3.9 → agno-2.3.10}/agno/db/postgres/postgres.py +0 -0
  88. {agno-2.3.9 → agno-2.3.10}/agno/db/postgres/schemas.py +0 -0
  89. {agno-2.3.9 → agno-2.3.10}/agno/db/postgres/utils.py +0 -0
  90. {agno-2.3.9 → agno-2.3.10}/agno/db/redis/__init__.py +0 -0
  91. {agno-2.3.9 → agno-2.3.10}/agno/db/redis/redis.py +0 -0
  92. {agno-2.3.9 → agno-2.3.10}/agno/db/redis/schemas.py +0 -0
  93. {agno-2.3.9 → agno-2.3.10}/agno/db/redis/utils.py +0 -0
  94. {agno-2.3.9 → agno-2.3.10}/agno/db/schemas/__init__.py +0 -0
  95. {agno-2.3.9 → agno-2.3.10}/agno/db/schemas/culture.py +0 -0
  96. {agno-2.3.9 → agno-2.3.10}/agno/db/schemas/evals.py +0 -0
  97. {agno-2.3.9 → agno-2.3.10}/agno/db/schemas/knowledge.py +0 -0
  98. {agno-2.3.9 → agno-2.3.10}/agno/db/schemas/memory.py +0 -0
  99. {agno-2.3.9 → agno-2.3.10}/agno/db/schemas/metrics.py +0 -0
  100. {agno-2.3.9 → agno-2.3.10}/agno/db/singlestore/__init__.py +0 -0
  101. {agno-2.3.9 → agno-2.3.10}/agno/db/singlestore/schemas.py +0 -0
  102. {agno-2.3.9 → agno-2.3.10}/agno/db/singlestore/singlestore.py +0 -0
  103. {agno-2.3.9 → agno-2.3.10}/agno/db/singlestore/utils.py +0 -0
  104. {agno-2.3.9 → agno-2.3.10}/agno/db/sqlite/__init__.py +0 -0
  105. {agno-2.3.9 → agno-2.3.10}/agno/db/sqlite/schemas.py +0 -0
  106. {agno-2.3.9 → agno-2.3.10}/agno/db/sqlite/sqlite.py +0 -0
  107. {agno-2.3.9 → agno-2.3.10}/agno/db/sqlite/utils.py +0 -0
  108. {agno-2.3.9 → agno-2.3.10}/agno/db/surrealdb/__init__.py +0 -0
  109. {agno-2.3.9 → agno-2.3.10}/agno/db/surrealdb/metrics.py +0 -0
  110. {agno-2.3.9 → agno-2.3.10}/agno/db/surrealdb/models.py +0 -0
  111. {agno-2.3.9 → agno-2.3.10}/agno/db/surrealdb/queries.py +0 -0
  112. {agno-2.3.9 → agno-2.3.10}/agno/db/surrealdb/surrealdb.py +0 -0
  113. {agno-2.3.9 → agno-2.3.10}/agno/db/surrealdb/utils.py +0 -0
  114. {agno-2.3.9 → agno-2.3.10}/agno/db/utils.py +0 -0
  115. {agno-2.3.9 → agno-2.3.10}/agno/debug.py +0 -0
  116. {agno-2.3.9 → agno-2.3.10}/agno/eval/__init__.py +0 -0
  117. {agno-2.3.9 → agno-2.3.10}/agno/eval/base.py +0 -0
  118. {agno-2.3.9 → agno-2.3.10}/agno/eval/performance.py +0 -0
  119. {agno-2.3.9 → agno-2.3.10}/agno/eval/reliability.py +0 -0
  120. {agno-2.3.9 → agno-2.3.10}/agno/eval/utils.py +0 -0
  121. {agno-2.3.9 → agno-2.3.10}/agno/exceptions.py +0 -0
  122. {agno-2.3.9 → agno-2.3.10}/agno/filters.py +0 -0
  123. {agno-2.3.9 → agno-2.3.10}/agno/guardrails/__init__.py +0 -0
  124. {agno-2.3.9 → agno-2.3.10}/agno/guardrails/base.py +0 -0
  125. {agno-2.3.9 → agno-2.3.10}/agno/guardrails/openai.py +0 -0
  126. {agno-2.3.9 → agno-2.3.10}/agno/guardrails/pii.py +0 -0
  127. {agno-2.3.9 → agno-2.3.10}/agno/guardrails/prompt_injection.py +0 -0
  128. {agno-2.3.9 → agno-2.3.10}/agno/hooks/__init__.py +0 -0
  129. {agno-2.3.9 → agno-2.3.10}/agno/hooks/decorator.py +0 -0
  130. {agno-2.3.9 → agno-2.3.10}/agno/integrations/__init__.py +0 -0
  131. {agno-2.3.9 → agno-2.3.10}/agno/integrations/discord/__init__.py +0 -0
  132. {agno-2.3.9 → agno-2.3.10}/agno/integrations/discord/client.py +0 -0
  133. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/__init__.py +0 -0
  134. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/__init__.py +0 -0
  135. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/agentic.py +0 -0
  136. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/document.py +0 -0
  137. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/fixed.py +0 -0
  138. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/markdown.py +0 -0
  139. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/recursive.py +0 -0
  140. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/row.py +0 -0
  141. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/semantic.py +0 -0
  142. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/chunking/strategy.py +0 -0
  143. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/content.py +0 -0
  144. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/document/__init__.py +0 -0
  145. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/document/base.py +0 -0
  146. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/__init__.py +0 -0
  147. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  148. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/azure_openai.py +0 -0
  149. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/base.py +0 -0
  150. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/cohere.py +0 -0
  151. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/fastembed.py +0 -0
  152. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/fireworks.py +0 -0
  153. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/google.py +0 -0
  154. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/huggingface.py +0 -0
  155. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/jina.py +0 -0
  156. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/langdb.py +0 -0
  157. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/mistral.py +0 -0
  158. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/nebius.py +0 -0
  159. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/ollama.py +0 -0
  160. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  161. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/together.py +0 -0
  162. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/vllm.py +0 -0
  163. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/embedder/voyageai.py +0 -0
  164. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/knowledge.py +0 -0
  165. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/__init__.py +0 -0
  166. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/arxiv_reader.py +0 -0
  167. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/base.py +0 -0
  168. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/csv_reader.py +0 -0
  169. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/docx_reader.py +0 -0
  170. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
  171. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  172. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/json_reader.py +0 -0
  173. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/markdown_reader.py +0 -0
  174. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/pdf_reader.py +0 -0
  175. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/pptx_reader.py +0 -0
  176. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/reader_factory.py +0 -0
  177. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/s3_reader.py +0 -0
  178. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/tavily_reader.py +0 -0
  179. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/text_reader.py +0 -0
  180. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/web_search_reader.py +0 -0
  181. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/website_reader.py +0 -0
  182. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  183. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reader/youtube_reader.py +0 -0
  184. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/remote_content/__init__.py +0 -0
  185. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/remote_content/remote_content.py +0 -0
  186. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reranker/__init__.py +0 -0
  187. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reranker/base.py +0 -0
  188. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reranker/cohere.py +0 -0
  189. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reranker/infinity.py +0 -0
  190. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  191. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/types.py +0 -0
  192. {agno-2.3.9 → agno-2.3.10}/agno/knowledge/utils.py +0 -0
  193. {agno-2.3.9 → agno-2.3.10}/agno/media.py +0 -0
  194. {agno-2.3.9 → agno-2.3.10}/agno/memory/__init__.py +0 -0
  195. {agno-2.3.9 → agno-2.3.10}/agno/memory/manager.py +0 -0
  196. {agno-2.3.9 → agno-2.3.10}/agno/memory/strategies/__init__.py +0 -0
  197. {agno-2.3.9 → agno-2.3.10}/agno/memory/strategies/base.py +0 -0
  198. {agno-2.3.9 → agno-2.3.10}/agno/memory/strategies/summarize.py +0 -0
  199. {agno-2.3.9 → agno-2.3.10}/agno/memory/strategies/types.py +0 -0
  200. {agno-2.3.9 → agno-2.3.10}/agno/models/__init__.py +0 -0
  201. {agno-2.3.9 → agno-2.3.10}/agno/models/aimlapi/__init__.py +0 -0
  202. {agno-2.3.9 → agno-2.3.10}/agno/models/aimlapi/aimlapi.py +0 -0
  203. {agno-2.3.9 → agno-2.3.10}/agno/models/anthropic/__init__.py +0 -0
  204. {agno-2.3.9 → agno-2.3.10}/agno/models/anthropic/claude.py +0 -0
  205. {agno-2.3.9 → agno-2.3.10}/agno/models/aws/__init__.py +0 -0
  206. {agno-2.3.9 → agno-2.3.10}/agno/models/aws/bedrock.py +0 -0
  207. {agno-2.3.9 → agno-2.3.10}/agno/models/aws/claude.py +0 -0
  208. {agno-2.3.9 → agno-2.3.10}/agno/models/azure/__init__.py +0 -0
  209. {agno-2.3.9 → agno-2.3.10}/agno/models/azure/ai_foundry.py +0 -0
  210. {agno-2.3.9 → agno-2.3.10}/agno/models/azure/openai_chat.py +0 -0
  211. {agno-2.3.9 → agno-2.3.10}/agno/models/cerebras/__init__.py +0 -0
  212. {agno-2.3.9 → agno-2.3.10}/agno/models/cerebras/cerebras.py +0 -0
  213. {agno-2.3.9 → agno-2.3.10}/agno/models/cerebras/cerebras_openai.py +0 -0
  214. {agno-2.3.9 → agno-2.3.10}/agno/models/cohere/__init__.py +0 -0
  215. {agno-2.3.9 → agno-2.3.10}/agno/models/cohere/chat.py +0 -0
  216. {agno-2.3.9 → agno-2.3.10}/agno/models/cometapi/__init__.py +0 -0
  217. {agno-2.3.9 → agno-2.3.10}/agno/models/cometapi/cometapi.py +0 -0
  218. {agno-2.3.9 → agno-2.3.10}/agno/models/dashscope/__init__.py +0 -0
  219. {agno-2.3.9 → agno-2.3.10}/agno/models/dashscope/dashscope.py +0 -0
  220. {agno-2.3.9 → agno-2.3.10}/agno/models/deepinfra/__init__.py +0 -0
  221. {agno-2.3.9 → agno-2.3.10}/agno/models/deepinfra/deepinfra.py +0 -0
  222. {agno-2.3.9 → agno-2.3.10}/agno/models/deepseek/__init__.py +0 -0
  223. {agno-2.3.9 → agno-2.3.10}/agno/models/deepseek/deepseek.py +0 -0
  224. {agno-2.3.9 → agno-2.3.10}/agno/models/defaults.py +0 -0
  225. {agno-2.3.9 → agno-2.3.10}/agno/models/fireworks/__init__.py +0 -0
  226. {agno-2.3.9 → agno-2.3.10}/agno/models/fireworks/fireworks.py +0 -0
  227. {agno-2.3.9 → agno-2.3.10}/agno/models/google/__init__.py +0 -0
  228. {agno-2.3.9 → agno-2.3.10}/agno/models/google/utils.py +0 -0
  229. {agno-2.3.9 → agno-2.3.10}/agno/models/groq/__init__.py +0 -0
  230. {agno-2.3.9 → agno-2.3.10}/agno/models/groq/groq.py +0 -0
  231. {agno-2.3.9 → agno-2.3.10}/agno/models/huggingface/__init__.py +0 -0
  232. {agno-2.3.9 → agno-2.3.10}/agno/models/huggingface/huggingface.py +0 -0
  233. {agno-2.3.9 → agno-2.3.10}/agno/models/ibm/__init__.py +0 -0
  234. {agno-2.3.9 → agno-2.3.10}/agno/models/ibm/watsonx.py +0 -0
  235. {agno-2.3.9 → agno-2.3.10}/agno/models/internlm/__init__.py +0 -0
  236. {agno-2.3.9 → agno-2.3.10}/agno/models/internlm/internlm.py +0 -0
  237. {agno-2.3.9 → agno-2.3.10}/agno/models/langdb/__init__.py +0 -0
  238. {agno-2.3.9 → agno-2.3.10}/agno/models/langdb/langdb.py +0 -0
  239. {agno-2.3.9 → agno-2.3.10}/agno/models/litellm/__init__.py +0 -0
  240. {agno-2.3.9 → agno-2.3.10}/agno/models/litellm/chat.py +0 -0
  241. {agno-2.3.9 → agno-2.3.10}/agno/models/litellm/litellm_openai.py +0 -0
  242. {agno-2.3.9 → agno-2.3.10}/agno/models/llama_cpp/__init__.py +0 -0
  243. {agno-2.3.9 → agno-2.3.10}/agno/models/llama_cpp/llama_cpp.py +0 -0
  244. {agno-2.3.9 → agno-2.3.10}/agno/models/lmstudio/__init__.py +0 -0
  245. {agno-2.3.9 → agno-2.3.10}/agno/models/lmstudio/lmstudio.py +0 -0
  246. {agno-2.3.9 → agno-2.3.10}/agno/models/meta/__init__.py +0 -0
  247. {agno-2.3.9 → agno-2.3.10}/agno/models/meta/llama.py +0 -0
  248. {agno-2.3.9 → agno-2.3.10}/agno/models/meta/llama_openai.py +0 -0
  249. {agno-2.3.9 → agno-2.3.10}/agno/models/metrics.py +0 -0
  250. {agno-2.3.9 → agno-2.3.10}/agno/models/mistral/__init__.py +0 -0
  251. {agno-2.3.9 → agno-2.3.10}/agno/models/mistral/mistral.py +0 -0
  252. {agno-2.3.9 → agno-2.3.10}/agno/models/nebius/__init__.py +0 -0
  253. {agno-2.3.9 → agno-2.3.10}/agno/models/nebius/nebius.py +0 -0
  254. {agno-2.3.9 → agno-2.3.10}/agno/models/nexus/__init__.py +0 -0
  255. {agno-2.3.9 → agno-2.3.10}/agno/models/nexus/nexus.py +0 -0
  256. {agno-2.3.9 → agno-2.3.10}/agno/models/nvidia/__init__.py +0 -0
  257. {agno-2.3.9 → agno-2.3.10}/agno/models/nvidia/nvidia.py +0 -0
  258. {agno-2.3.9 → agno-2.3.10}/agno/models/ollama/__init__.py +0 -0
  259. {agno-2.3.9 → agno-2.3.10}/agno/models/ollama/chat.py +0 -0
  260. {agno-2.3.9 → agno-2.3.10}/agno/models/openai/__init__.py +0 -0
  261. {agno-2.3.9 → agno-2.3.10}/agno/models/openai/chat.py +0 -0
  262. {agno-2.3.9 → agno-2.3.10}/agno/models/openai/like.py +0 -0
  263. {agno-2.3.9 → agno-2.3.10}/agno/models/openai/responses.py +0 -0
  264. {agno-2.3.9 → agno-2.3.10}/agno/models/openrouter/__init__.py +0 -0
  265. {agno-2.3.9 → agno-2.3.10}/agno/models/openrouter/openrouter.py +0 -0
  266. {agno-2.3.9 → agno-2.3.10}/agno/models/perplexity/__init__.py +0 -0
  267. {agno-2.3.9 → agno-2.3.10}/agno/models/perplexity/perplexity.py +0 -0
  268. {agno-2.3.9 → agno-2.3.10}/agno/models/portkey/__init__.py +0 -0
  269. {agno-2.3.9 → agno-2.3.10}/agno/models/portkey/portkey.py +0 -0
  270. {agno-2.3.9 → agno-2.3.10}/agno/models/requesty/__init__.py +0 -0
  271. {agno-2.3.9 → agno-2.3.10}/agno/models/requesty/requesty.py +0 -0
  272. {agno-2.3.9 → agno-2.3.10}/agno/models/response.py +0 -0
  273. {agno-2.3.9 → agno-2.3.10}/agno/models/sambanova/__init__.py +0 -0
  274. {agno-2.3.9 → agno-2.3.10}/agno/models/sambanova/sambanova.py +0 -0
  275. {agno-2.3.9 → agno-2.3.10}/agno/models/siliconflow/__init__.py +0 -0
  276. {agno-2.3.9 → agno-2.3.10}/agno/models/siliconflow/siliconflow.py +0 -0
  277. {agno-2.3.9 → agno-2.3.10}/agno/models/together/__init__.py +0 -0
  278. {agno-2.3.9 → agno-2.3.10}/agno/models/together/together.py +0 -0
  279. {agno-2.3.9 → agno-2.3.10}/agno/models/utils.py +0 -0
  280. {agno-2.3.9 → agno-2.3.10}/agno/models/vercel/__init__.py +0 -0
  281. {agno-2.3.9 → agno-2.3.10}/agno/models/vercel/v0.py +0 -0
  282. {agno-2.3.9 → agno-2.3.10}/agno/models/vertexai/__init__.py +0 -0
  283. {agno-2.3.9 → agno-2.3.10}/agno/models/vertexai/claude.py +0 -0
  284. {agno-2.3.9 → agno-2.3.10}/agno/models/vllm/__init__.py +0 -0
  285. {agno-2.3.9 → agno-2.3.10}/agno/models/vllm/vllm.py +0 -0
  286. {agno-2.3.9 → agno-2.3.10}/agno/models/xai/__init__.py +0 -0
  287. {agno-2.3.9 → agno-2.3.10}/agno/models/xai/xai.py +0 -0
  288. {agno-2.3.9 → agno-2.3.10}/agno/os/__init__.py +0 -0
  289. {agno-2.3.9 → agno-2.3.10}/agno/os/app.py +0 -0
  290. {agno-2.3.9 → agno-2.3.10}/agno/os/auth.py +0 -0
  291. {agno-2.3.9 → agno-2.3.10}/agno/os/config.py +0 -0
  292. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/__init__.py +0 -0
  293. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/a2a/__init__.py +0 -0
  294. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/a2a/a2a.py +0 -0
  295. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/a2a/router.py +0 -0
  296. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/a2a/utils.py +0 -0
  297. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/agui/__init__.py +0 -0
  298. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/agui/agui.py +0 -0
  299. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/agui/router.py +0 -0
  300. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/agui/utils.py +0 -0
  301. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/base.py +0 -0
  302. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/slack/__init__.py +0 -0
  303. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/slack/router.py +0 -0
  304. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/slack/security.py +0 -0
  305. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/slack/slack.py +0 -0
  306. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  307. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/whatsapp/router.py +0 -0
  308. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/whatsapp/security.py +0 -0
  309. {agno-2.3.9 → agno-2.3.10}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  310. {agno-2.3.9 → agno-2.3.10}/agno/os/mcp.py +0 -0
  311. {agno-2.3.9 → agno-2.3.10}/agno/os/middleware/__init__.py +0 -0
  312. {agno-2.3.9 → agno-2.3.10}/agno/os/middleware/jwt.py +0 -0
  313. {agno-2.3.9 → agno-2.3.10}/agno/os/router.py +0 -0
  314. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/__init__.py +0 -0
  315. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/agents/__init__.py +0 -0
  316. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/agents/router.py +0 -0
  317. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/agents/schema.py +0 -0
  318. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/evals/__init__.py +0 -0
  319. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/evals/evals.py +0 -0
  320. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/evals/schemas.py +0 -0
  321. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/health.py +0 -0
  322. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/home.py +0 -0
  323. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/knowledge/__init__.py +0 -0
  324. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/knowledge/knowledge.py +0 -0
  325. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/knowledge/schemas.py +0 -0
  326. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/memory/__init__.py +0 -0
  327. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/memory/memory.py +0 -0
  328. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/memory/schemas.py +0 -0
  329. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/metrics/__init__.py +0 -0
  330. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/metrics/metrics.py +0 -0
  331. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/metrics/schemas.py +0 -0
  332. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/session/__init__.py +0 -0
  333. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/session/session.py +0 -0
  334. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/teams/__init__.py +0 -0
  335. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/teams/router.py +0 -0
  336. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/teams/schema.py +0 -0
  337. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/traces/__init__.py +0 -0
  338. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/traces/schemas.py +0 -0
  339. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/traces/traces.py +0 -0
  340. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/workflows/__init__.py +0 -0
  341. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/workflows/router.py +0 -0
  342. {agno-2.3.9 → agno-2.3.10}/agno/os/routers/workflows/schema.py +0 -0
  343. {agno-2.3.9 → agno-2.3.10}/agno/os/schema.py +0 -0
  344. {agno-2.3.9 → agno-2.3.10}/agno/os/settings.py +0 -0
  345. {agno-2.3.9 → agno-2.3.10}/agno/os/utils.py +0 -0
  346. {agno-2.3.9 → agno-2.3.10}/agno/py.typed +0 -0
  347. {agno-2.3.9 → agno-2.3.10}/agno/reasoning/__init__.py +0 -0
  348. {agno-2.3.9 → agno-2.3.10}/agno/reasoning/anthropic.py +0 -0
  349. {agno-2.3.9 → agno-2.3.10}/agno/reasoning/azure_ai_foundry.py +0 -0
  350. {agno-2.3.9 → agno-2.3.10}/agno/reasoning/deepseek.py +0 -0
  351. {agno-2.3.9 → agno-2.3.10}/agno/reasoning/default.py +0 -0
  352. {agno-2.3.9 → agno-2.3.10}/agno/reasoning/gemini.py +0 -0
  353. {agno-2.3.9 → agno-2.3.10}/agno/reasoning/groq.py +0 -0
  354. {agno-2.3.9 → agno-2.3.10}/agno/reasoning/helpers.py +0 -0
  355. {agno-2.3.9 → agno-2.3.10}/agno/reasoning/ollama.py +0 -0
  356. {agno-2.3.9 → agno-2.3.10}/agno/reasoning/openai.py +0 -0
  357. {agno-2.3.9 → agno-2.3.10}/agno/reasoning/step.py +0 -0
  358. {agno-2.3.9 → agno-2.3.10}/agno/reasoning/vertexai.py +0 -0
  359. {agno-2.3.9 → agno-2.3.10}/agno/run/__init__.py +0 -0
  360. {agno-2.3.9 → agno-2.3.10}/agno/run/agent.py +0 -0
  361. {agno-2.3.9 → agno-2.3.10}/agno/run/base.py +0 -0
  362. {agno-2.3.9 → agno-2.3.10}/agno/run/cancel.py +0 -0
  363. {agno-2.3.9 → agno-2.3.10}/agno/run/messages.py +0 -0
  364. {agno-2.3.9 → agno-2.3.10}/agno/run/requirement.py +0 -0
  365. {agno-2.3.9 → agno-2.3.10}/agno/run/team.py +0 -0
  366. {agno-2.3.9 → agno-2.3.10}/agno/run/workflow.py +0 -0
  367. {agno-2.3.9 → agno-2.3.10}/agno/session/__init__.py +0 -0
  368. {agno-2.3.9 → agno-2.3.10}/agno/session/agent.py +0 -0
  369. {agno-2.3.9 → agno-2.3.10}/agno/session/summary.py +0 -0
  370. {agno-2.3.9 → agno-2.3.10}/agno/session/team.py +0 -0
  371. {agno-2.3.9 → agno-2.3.10}/agno/session/workflow.py +0 -0
  372. {agno-2.3.9 → agno-2.3.10}/agno/table.py +0 -0
  373. {agno-2.3.9 → agno-2.3.10}/agno/team/__init__.py +0 -0
  374. {agno-2.3.9 → agno-2.3.10}/agno/tools/__init__.py +0 -0
  375. {agno-2.3.9 → agno-2.3.10}/agno/tools/agentql.py +0 -0
  376. {agno-2.3.9 → agno-2.3.10}/agno/tools/airflow.py +0 -0
  377. {agno-2.3.9 → agno-2.3.10}/agno/tools/api.py +0 -0
  378. {agno-2.3.9 → agno-2.3.10}/agno/tools/apify.py +0 -0
  379. {agno-2.3.9 → agno-2.3.10}/agno/tools/arxiv.py +0 -0
  380. {agno-2.3.9 → agno-2.3.10}/agno/tools/aws_lambda.py +0 -0
  381. {agno-2.3.9 → agno-2.3.10}/agno/tools/aws_ses.py +0 -0
  382. {agno-2.3.9 → agno-2.3.10}/agno/tools/baidusearch.py +0 -0
  383. {agno-2.3.9 → agno-2.3.10}/agno/tools/bitbucket.py +0 -0
  384. {agno-2.3.9 → agno-2.3.10}/agno/tools/brandfetch.py +0 -0
  385. {agno-2.3.9 → agno-2.3.10}/agno/tools/bravesearch.py +0 -0
  386. {agno-2.3.9 → agno-2.3.10}/agno/tools/brightdata.py +0 -0
  387. {agno-2.3.9 → agno-2.3.10}/agno/tools/browserbase.py +0 -0
  388. {agno-2.3.9 → agno-2.3.10}/agno/tools/calcom.py +0 -0
  389. {agno-2.3.9 → agno-2.3.10}/agno/tools/calculator.py +0 -0
  390. {agno-2.3.9 → agno-2.3.10}/agno/tools/cartesia.py +0 -0
  391. {agno-2.3.9 → agno-2.3.10}/agno/tools/clickup.py +0 -0
  392. {agno-2.3.9 → agno-2.3.10}/agno/tools/confluence.py +0 -0
  393. {agno-2.3.9 → agno-2.3.10}/agno/tools/crawl4ai.py +0 -0
  394. {agno-2.3.9 → agno-2.3.10}/agno/tools/csv_toolkit.py +0 -0
  395. {agno-2.3.9 → agno-2.3.10}/agno/tools/dalle.py +0 -0
  396. {agno-2.3.9 → agno-2.3.10}/agno/tools/daytona.py +0 -0
  397. {agno-2.3.9 → agno-2.3.10}/agno/tools/decorator.py +0 -0
  398. {agno-2.3.9 → agno-2.3.10}/agno/tools/desi_vocal.py +0 -0
  399. {agno-2.3.9 → agno-2.3.10}/agno/tools/discord.py +0 -0
  400. {agno-2.3.9 → agno-2.3.10}/agno/tools/docker.py +0 -0
  401. {agno-2.3.9 → agno-2.3.10}/agno/tools/duckdb.py +0 -0
  402. {agno-2.3.9 → agno-2.3.10}/agno/tools/duckduckgo.py +0 -0
  403. {agno-2.3.9 → agno-2.3.10}/agno/tools/e2b.py +0 -0
  404. {agno-2.3.9 → agno-2.3.10}/agno/tools/eleven_labs.py +0 -0
  405. {agno-2.3.9 → agno-2.3.10}/agno/tools/email.py +0 -0
  406. {agno-2.3.9 → agno-2.3.10}/agno/tools/evm.py +0 -0
  407. {agno-2.3.9 → agno-2.3.10}/agno/tools/exa.py +0 -0
  408. {agno-2.3.9 → agno-2.3.10}/agno/tools/fal.py +0 -0
  409. {agno-2.3.9 → agno-2.3.10}/agno/tools/file.py +0 -0
  410. {agno-2.3.9 → agno-2.3.10}/agno/tools/file_generation.py +0 -0
  411. {agno-2.3.9 → agno-2.3.10}/agno/tools/financial_datasets.py +0 -0
  412. {agno-2.3.9 → agno-2.3.10}/agno/tools/firecrawl.py +0 -0
  413. {agno-2.3.9 → agno-2.3.10}/agno/tools/giphy.py +0 -0
  414. {agno-2.3.9 → agno-2.3.10}/agno/tools/github.py +0 -0
  415. {agno-2.3.9 → agno-2.3.10}/agno/tools/gmail.py +0 -0
  416. {agno-2.3.9 → agno-2.3.10}/agno/tools/google_bigquery.py +0 -0
  417. {agno-2.3.9 → agno-2.3.10}/agno/tools/google_drive.py +0 -0
  418. {agno-2.3.9 → agno-2.3.10}/agno/tools/google_maps.py +0 -0
  419. {agno-2.3.9 → agno-2.3.10}/agno/tools/googlecalendar.py +0 -0
  420. {agno-2.3.9 → agno-2.3.10}/agno/tools/googlesheets.py +0 -0
  421. {agno-2.3.9 → agno-2.3.10}/agno/tools/hackernews.py +0 -0
  422. {agno-2.3.9 → agno-2.3.10}/agno/tools/jina.py +0 -0
  423. {agno-2.3.9 → agno-2.3.10}/agno/tools/jira.py +0 -0
  424. {agno-2.3.9 → agno-2.3.10}/agno/tools/knowledge.py +0 -0
  425. {agno-2.3.9 → agno-2.3.10}/agno/tools/linear.py +0 -0
  426. {agno-2.3.9 → agno-2.3.10}/agno/tools/linkup.py +0 -0
  427. {agno-2.3.9 → agno-2.3.10}/agno/tools/local_file_system.py +0 -0
  428. {agno-2.3.9 → agno-2.3.10}/agno/tools/lumalab.py +0 -0
  429. {agno-2.3.9 → agno-2.3.10}/agno/tools/mcp/__init__.py +0 -0
  430. {agno-2.3.9 → agno-2.3.10}/agno/tools/mcp/mcp.py +0 -0
  431. {agno-2.3.9 → agno-2.3.10}/agno/tools/mcp/multi_mcp.py +0 -0
  432. {agno-2.3.9 → agno-2.3.10}/agno/tools/mcp/params.py +0 -0
  433. {agno-2.3.9 → agno-2.3.10}/agno/tools/mcp_toolbox.py +0 -0
  434. {agno-2.3.9 → agno-2.3.10}/agno/tools/mem0.py +0 -0
  435. {agno-2.3.9 → agno-2.3.10}/agno/tools/memory.py +0 -0
  436. {agno-2.3.9 → agno-2.3.10}/agno/tools/mlx_transcribe.py +0 -0
  437. {agno-2.3.9 → agno-2.3.10}/agno/tools/models/__init__.py +0 -0
  438. {agno-2.3.9 → agno-2.3.10}/agno/tools/models/azure_openai.py +0 -0
  439. {agno-2.3.9 → agno-2.3.10}/agno/tools/models/gemini.py +0 -0
  440. {agno-2.3.9 → agno-2.3.10}/agno/tools/models/groq.py +0 -0
  441. {agno-2.3.9 → agno-2.3.10}/agno/tools/models/morph.py +0 -0
  442. {agno-2.3.9 → agno-2.3.10}/agno/tools/models/nebius.py +0 -0
  443. {agno-2.3.9 → agno-2.3.10}/agno/tools/models_labs.py +0 -0
  444. {agno-2.3.9 → agno-2.3.10}/agno/tools/moviepy_video.py +0 -0
  445. {agno-2.3.9 → agno-2.3.10}/agno/tools/nano_banana.py +0 -0
  446. {agno-2.3.9 → agno-2.3.10}/agno/tools/neo4j.py +0 -0
  447. {agno-2.3.9 → agno-2.3.10}/agno/tools/newspaper.py +0 -0
  448. {agno-2.3.9 → agno-2.3.10}/agno/tools/newspaper4k.py +0 -0
  449. {agno-2.3.9 → agno-2.3.10}/agno/tools/notion.py +0 -0
  450. {agno-2.3.9 → agno-2.3.10}/agno/tools/openai.py +0 -0
  451. {agno-2.3.9 → agno-2.3.10}/agno/tools/openbb.py +0 -0
  452. {agno-2.3.9 → agno-2.3.10}/agno/tools/opencv.py +0 -0
  453. {agno-2.3.9 → agno-2.3.10}/agno/tools/openweather.py +0 -0
  454. {agno-2.3.9 → agno-2.3.10}/agno/tools/oxylabs.py +0 -0
  455. {agno-2.3.9 → agno-2.3.10}/agno/tools/pandas.py +0 -0
  456. {agno-2.3.9 → agno-2.3.10}/agno/tools/parallel.py +0 -0
  457. {agno-2.3.9 → agno-2.3.10}/agno/tools/postgres.py +0 -0
  458. {agno-2.3.9 → agno-2.3.10}/agno/tools/pubmed.py +0 -0
  459. {agno-2.3.9 → agno-2.3.10}/agno/tools/python.py +0 -0
  460. {agno-2.3.9 → agno-2.3.10}/agno/tools/reasoning.py +0 -0
  461. {agno-2.3.9 → agno-2.3.10}/agno/tools/reddit.py +0 -0
  462. {agno-2.3.9 → agno-2.3.10}/agno/tools/redshift.py +0 -0
  463. {agno-2.3.9 → agno-2.3.10}/agno/tools/replicate.py +0 -0
  464. {agno-2.3.9 → agno-2.3.10}/agno/tools/resend.py +0 -0
  465. {agno-2.3.9 → agno-2.3.10}/agno/tools/scrapegraph.py +0 -0
  466. {agno-2.3.9 → agno-2.3.10}/agno/tools/searxng.py +0 -0
  467. {agno-2.3.9 → agno-2.3.10}/agno/tools/serpapi.py +0 -0
  468. {agno-2.3.9 → agno-2.3.10}/agno/tools/serper.py +0 -0
  469. {agno-2.3.9 → agno-2.3.10}/agno/tools/shell.py +0 -0
  470. {agno-2.3.9 → agno-2.3.10}/agno/tools/slack.py +0 -0
  471. {agno-2.3.9 → agno-2.3.10}/agno/tools/sleep.py +0 -0
  472. {agno-2.3.9 → agno-2.3.10}/agno/tools/spider.py +0 -0
  473. {agno-2.3.9 → agno-2.3.10}/agno/tools/sql.py +0 -0
  474. {agno-2.3.9 → agno-2.3.10}/agno/tools/streamlit/__init__.py +0 -0
  475. {agno-2.3.9 → agno-2.3.10}/agno/tools/streamlit/components.py +0 -0
  476. {agno-2.3.9 → agno-2.3.10}/agno/tools/tavily.py +0 -0
  477. {agno-2.3.9 → agno-2.3.10}/agno/tools/telegram.py +0 -0
  478. {agno-2.3.9 → agno-2.3.10}/agno/tools/todoist.py +0 -0
  479. {agno-2.3.9 → agno-2.3.10}/agno/tools/tool_registry.py +0 -0
  480. {agno-2.3.9 → agno-2.3.10}/agno/tools/toolkit.py +0 -0
  481. {agno-2.3.9 → agno-2.3.10}/agno/tools/trafilatura.py +0 -0
  482. {agno-2.3.9 → agno-2.3.10}/agno/tools/trello.py +0 -0
  483. {agno-2.3.9 → agno-2.3.10}/agno/tools/twilio.py +0 -0
  484. {agno-2.3.9 → agno-2.3.10}/agno/tools/user_control_flow.py +0 -0
  485. {agno-2.3.9 → agno-2.3.10}/agno/tools/valyu.py +0 -0
  486. {agno-2.3.9 → agno-2.3.10}/agno/tools/visualization.py +0 -0
  487. {agno-2.3.9 → agno-2.3.10}/agno/tools/webbrowser.py +0 -0
  488. {agno-2.3.9 → agno-2.3.10}/agno/tools/webex.py +0 -0
  489. {agno-2.3.9 → agno-2.3.10}/agno/tools/website.py +0 -0
  490. {agno-2.3.9 → agno-2.3.10}/agno/tools/webtools.py +0 -0
  491. {agno-2.3.9 → agno-2.3.10}/agno/tools/whatsapp.py +0 -0
  492. {agno-2.3.9 → agno-2.3.10}/agno/tools/wikipedia.py +0 -0
  493. {agno-2.3.9 → agno-2.3.10}/agno/tools/workflow.py +0 -0
  494. {agno-2.3.9 → agno-2.3.10}/agno/tools/x.py +0 -0
  495. {agno-2.3.9 → agno-2.3.10}/agno/tools/yfinance.py +0 -0
  496. {agno-2.3.9 → agno-2.3.10}/agno/tools/youtube.py +0 -0
  497. {agno-2.3.9 → agno-2.3.10}/agno/tools/zendesk.py +0 -0
  498. {agno-2.3.9 → agno-2.3.10}/agno/tools/zep.py +0 -0
  499. {agno-2.3.9 → agno-2.3.10}/agno/tools/zoom.py +0 -0
  500. {agno-2.3.9 → agno-2.3.10}/agno/tracing/__init__.py +0 -0
  501. {agno-2.3.9 → agno-2.3.10}/agno/tracing/exporter.py +0 -0
  502. {agno-2.3.9 → agno-2.3.10}/agno/tracing/schemas.py +0 -0
  503. {agno-2.3.9 → agno-2.3.10}/agno/tracing/setup.py +0 -0
  504. {agno-2.3.9 → agno-2.3.10}/agno/utils/__init__.py +0 -0
  505. {agno-2.3.9 → agno-2.3.10}/agno/utils/agent.py +0 -0
  506. {agno-2.3.9 → agno-2.3.10}/agno/utils/audio.py +0 -0
  507. {agno-2.3.9 → agno-2.3.10}/agno/utils/certs.py +0 -0
  508. {agno-2.3.9 → agno-2.3.10}/agno/utils/code_execution.py +0 -0
  509. {agno-2.3.9 → agno-2.3.10}/agno/utils/common.py +0 -0
  510. {agno-2.3.9 → agno-2.3.10}/agno/utils/dttm.py +0 -0
  511. {agno-2.3.9 → agno-2.3.10}/agno/utils/enum.py +0 -0
  512. {agno-2.3.9 → agno-2.3.10}/agno/utils/env.py +0 -0
  513. {agno-2.3.9 → agno-2.3.10}/agno/utils/events.py +0 -0
  514. {agno-2.3.9 → agno-2.3.10}/agno/utils/format_str.py +0 -0
  515. {agno-2.3.9 → agno-2.3.10}/agno/utils/functions.py +0 -0
  516. {agno-2.3.9 → agno-2.3.10}/agno/utils/gemini.py +0 -0
  517. {agno-2.3.9 → agno-2.3.10}/agno/utils/hooks.py +0 -0
  518. {agno-2.3.9 → agno-2.3.10}/agno/utils/http.py +0 -0
  519. {agno-2.3.9 → agno-2.3.10}/agno/utils/json_schema.py +0 -0
  520. {agno-2.3.9 → agno-2.3.10}/agno/utils/knowledge.py +0 -0
  521. {agno-2.3.9 → agno-2.3.10}/agno/utils/location.py +0 -0
  522. {agno-2.3.9 → agno-2.3.10}/agno/utils/log.py +0 -0
  523. {agno-2.3.9 → agno-2.3.10}/agno/utils/mcp.py +0 -0
  524. {agno-2.3.9 → agno-2.3.10}/agno/utils/media.py +0 -0
  525. {agno-2.3.9 → agno-2.3.10}/agno/utils/merge_dict.py +0 -0
  526. {agno-2.3.9 → agno-2.3.10}/agno/utils/message.py +0 -0
  527. {agno-2.3.9 → agno-2.3.10}/agno/utils/models/__init__.py +0 -0
  528. {agno-2.3.9 → agno-2.3.10}/agno/utils/models/ai_foundry.py +0 -0
  529. {agno-2.3.9 → agno-2.3.10}/agno/utils/models/claude.py +0 -0
  530. {agno-2.3.9 → agno-2.3.10}/agno/utils/models/cohere.py +0 -0
  531. {agno-2.3.9 → agno-2.3.10}/agno/utils/models/llama.py +0 -0
  532. {agno-2.3.9 → agno-2.3.10}/agno/utils/models/mistral.py +0 -0
  533. {agno-2.3.9 → agno-2.3.10}/agno/utils/models/openai_responses.py +0 -0
  534. {agno-2.3.9 → agno-2.3.10}/agno/utils/models/schema_utils.py +0 -0
  535. {agno-2.3.9 → agno-2.3.10}/agno/utils/models/watsonx.py +0 -0
  536. {agno-2.3.9 → agno-2.3.10}/agno/utils/openai.py +0 -0
  537. {agno-2.3.9 → agno-2.3.10}/agno/utils/pickle.py +0 -0
  538. {agno-2.3.9 → agno-2.3.10}/agno/utils/pprint.py +0 -0
  539. {agno-2.3.9 → agno-2.3.10}/agno/utils/print_response/__init__.py +0 -0
  540. {agno-2.3.9 → agno-2.3.10}/agno/utils/print_response/agent.py +0 -0
  541. {agno-2.3.9 → agno-2.3.10}/agno/utils/print_response/team.py +0 -0
  542. {agno-2.3.9 → agno-2.3.10}/agno/utils/print_response/workflow.py +0 -0
  543. {agno-2.3.9 → agno-2.3.10}/agno/utils/prompts.py +0 -0
  544. {agno-2.3.9 → agno-2.3.10}/agno/utils/reasoning.py +0 -0
  545. {agno-2.3.9 → agno-2.3.10}/agno/utils/response.py +0 -0
  546. {agno-2.3.9 → agno-2.3.10}/agno/utils/response_iterator.py +0 -0
  547. {agno-2.3.9 → agno-2.3.10}/agno/utils/safe_formatter.py +0 -0
  548. {agno-2.3.9 → agno-2.3.10}/agno/utils/serialize.py +0 -0
  549. {agno-2.3.9 → agno-2.3.10}/agno/utils/shell.py +0 -0
  550. {agno-2.3.9 → agno-2.3.10}/agno/utils/streamlit.py +0 -0
  551. {agno-2.3.9 → agno-2.3.10}/agno/utils/string.py +0 -0
  552. {agno-2.3.9 → agno-2.3.10}/agno/utils/team.py +0 -0
  553. {agno-2.3.9 → agno-2.3.10}/agno/utils/timer.py +0 -0
  554. {agno-2.3.9 → agno-2.3.10}/agno/utils/tokens.py +0 -0
  555. {agno-2.3.9 → agno-2.3.10}/agno/utils/tools.py +0 -0
  556. {agno-2.3.9 → agno-2.3.10}/agno/utils/web.py +0 -0
  557. {agno-2.3.9 → agno-2.3.10}/agno/utils/whatsapp.py +0 -0
  558. {agno-2.3.9 → agno-2.3.10}/agno/utils/yaml_io.py +0 -0
  559. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/__init__.py +0 -0
  560. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/base.py +0 -0
  561. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/cassandra/__init__.py +0 -0
  562. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/cassandra/cassandra.py +0 -0
  563. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  564. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/cassandra/index.py +0 -0
  565. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/chroma/__init__.py +0 -0
  566. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/chroma/chromadb.py +0 -0
  567. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/clickhouse/__init__.py +0 -0
  568. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  569. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/clickhouse/index.py +0 -0
  570. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/couchbase/__init__.py +0 -0
  571. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/couchbase/couchbase.py +0 -0
  572. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/distance.py +0 -0
  573. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/lancedb/__init__.py +0 -0
  574. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/lancedb/lance_db.py +0 -0
  575. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/langchaindb/__init__.py +0 -0
  576. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  577. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/lightrag/__init__.py +0 -0
  578. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/lightrag/lightrag.py +0 -0
  579. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/llamaindex/__init__.py +0 -0
  580. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  581. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/milvus/__init__.py +0 -0
  582. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/milvus/milvus.py +0 -0
  583. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/mongodb/__init__.py +0 -0
  584. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/mongodb/mongodb.py +0 -0
  585. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/pgvector/__init__.py +0 -0
  586. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/pgvector/index.py +0 -0
  587. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/pineconedb/__init__.py +0 -0
  588. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  589. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/qdrant/__init__.py +0 -0
  590. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/qdrant/qdrant.py +0 -0
  591. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/redis/__init__.py +0 -0
  592. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/redis/redisdb.py +0 -0
  593. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/search.py +0 -0
  594. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/singlestore/__init__.py +0 -0
  595. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/singlestore/index.py +0 -0
  596. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/singlestore/singlestore.py +0 -0
  597. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/surrealdb/__init__.py +0 -0
  598. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  599. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/upstashdb/__init__.py +0 -0
  600. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  601. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/weaviate/__init__.py +0 -0
  602. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/weaviate/index.py +0 -0
  603. {agno-2.3.9 → agno-2.3.10}/agno/vectordb/weaviate/weaviate.py +0 -0
  604. {agno-2.3.9 → agno-2.3.10}/agno/workflow/__init__.py +0 -0
  605. {agno-2.3.9 → agno-2.3.10}/agno/workflow/agent.py +0 -0
  606. {agno-2.3.9 → agno-2.3.10}/agno/workflow/condition.py +0 -0
  607. {agno-2.3.9 → agno-2.3.10}/agno/workflow/loop.py +0 -0
  608. {agno-2.3.9 → agno-2.3.10}/agno/workflow/router.py +0 -0
  609. {agno-2.3.9 → agno-2.3.10}/agno/workflow/step.py +0 -0
  610. {agno-2.3.9 → agno-2.3.10}/agno/workflow/steps.py +0 -0
  611. {agno-2.3.9 → agno-2.3.10}/agno/workflow/types.py +0 -0
  612. {agno-2.3.9 → agno-2.3.10}/agno/workflow/workflow.py +0 -0
  613. {agno-2.3.9 → agno-2.3.10}/agno.egg-info/dependency_links.txt +0 -0
  614. {agno-2.3.9 → agno-2.3.10}/agno.egg-info/requires.txt +0 -0
  615. {agno-2.3.9 → agno-2.3.10}/agno.egg-info/top_level.txt +0 -0
  616. {agno-2.3.9 → agno-2.3.10}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.3.9
3
+ Version: 2.3.10
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
@@ -1785,9 +1785,6 @@ class Agent:
1785
1785
  if stream_events is None:
1786
1786
  stream_events = False if self.stream_events is None else self.stream_events
1787
1787
 
1788
- self.stream = self.stream or stream
1789
- self.stream_events = self.stream_events or stream_events
1790
-
1791
1788
  # Prepare arguments for the model
1792
1789
  response_format = (
1793
1790
  self._get_response_format(run_context=run_context) if self.parser_model is None else None
@@ -2711,9 +2708,6 @@ class Agent:
2711
2708
  if stream_events is None:
2712
2709
  stream_events = False if self.stream_events is None else self.stream_events
2713
2710
 
2714
- self.stream = self.stream or stream
2715
- self.stream_events = self.stream_events or stream_events
2716
-
2717
2711
  self.model = cast(Model, self.model)
2718
2712
 
2719
2713
  # Get knowledge filters
@@ -3020,9 +3014,6 @@ class Agent:
3020
3014
  if stream is False:
3021
3015
  stream_events = False
3022
3016
 
3023
- self.stream = self.stream or stream
3024
- self.stream_events = self.stream_events or stream_events
3025
-
3026
3017
  # Run can be continued from previous run response or from passed run_response context
3027
3018
  if run_response is not None:
3028
3019
  # The run is continued from a provided run_response. This contains the updated tools.
@@ -3589,9 +3580,6 @@ class Agent:
3589
3580
  if stream is False:
3590
3581
  stream_events = False
3591
3582
 
3592
- self.stream = self.stream or stream
3593
- self.stream_events = self.stream_events or stream_events
3594
-
3595
3583
  # Get knowledge filters
3596
3584
  knowledge_filters = knowledge_filters
3597
3585
  if self.knowledge_filters or knowledge_filters:
@@ -1825,7 +1825,7 @@ class AsyncSqliteDb(AsyncBaseDb):
1825
1825
  Optional[KnowledgeRow]: The upserted knowledge row, or None if the operation fails.
1826
1826
  """
1827
1827
  try:
1828
- table = await self._get_table(table_type="knowledge")
1828
+ table = await self._get_table(table_type="knowledge", create_table_if_not_found=True)
1829
1829
  if table is None:
1830
1830
  return None
1831
1831
 
@@ -282,7 +282,8 @@ Remember: You must only compare the agent_output to the expected_output. The exp
282
282
  ) -> Optional[AccuracyEvaluation]:
283
283
  """Orchestrate the evaluation process."""
284
284
  try:
285
- accuracy_agent_response = evaluator_agent.run(evaluation_input).content
285
+ response = evaluator_agent.run(evaluation_input, stream=False)
286
+ accuracy_agent_response = response.content
286
287
  if accuracy_agent_response is None or not isinstance(accuracy_agent_response, AccuracyAgentResponse):
287
288
  raise EvalError(f"Evaluator Agent returned an invalid response: {accuracy_agent_response}")
288
289
  return AccuracyEvaluation(
@@ -306,7 +307,7 @@ Remember: You must only compare the agent_output to the expected_output. The exp
306
307
  ) -> Optional[AccuracyEvaluation]:
307
308
  """Orchestrate the evaluation process asynchronously."""
308
309
  try:
309
- response = await evaluator_agent.arun(evaluation_input)
310
+ response = await evaluator_agent.arun(evaluation_input, stream=False)
310
311
  accuracy_agent_response = response.content
311
312
  if accuracy_agent_response is None or not isinstance(accuracy_agent_response, AccuracyAgentResponse):
312
313
  raise EvalError(f"Evaluator Agent returned an invalid response: {accuracy_agent_response}")
@@ -362,9 +363,11 @@ Remember: You must only compare the agent_output to the expected_output. The exp
362
363
  agent_session_id = f"eval_{self.eval_id}_{i + 1}"
363
364
 
364
365
  if self.agent is not None:
365
- output = self.agent.run(input=eval_input, session_id=agent_session_id).content
366
+ agent_response = self.agent.run(input=eval_input, session_id=agent_session_id, stream=False)
367
+ output = agent_response.content
366
368
  elif self.team is not None:
367
- output = self.team.run(input=eval_input, session_id=agent_session_id).content
369
+ team_response = self.team.run(input=eval_input, session_id=agent_session_id, stream=False)
370
+ output = team_response.content
368
371
 
369
372
  if not output:
370
373
  logger.error(f"Failed to generate a valid answer on iteration {i + 1}: {output}")
@@ -505,11 +508,11 @@ Remember: You must only compare the agent_output to the expected_output. The exp
505
508
  agent_session_id = f"eval_{self.eval_id}_{i + 1}"
506
509
 
507
510
  if self.agent is not None:
508
- response = await self.agent.arun(input=eval_input, session_id=agent_session_id)
509
- output = response.content
511
+ agent_response = await self.agent.arun(input=eval_input, session_id=agent_session_id, stream=False)
512
+ output = agent_response.content
510
513
  elif self.team is not None:
511
- response = await self.team.arun(input=eval_input, session_id=agent_session_id) # type: ignore
512
- output = response.content
514
+ team_response = await self.team.arun(input=eval_input, session_id=agent_session_id, stream=False)
515
+ output = team_response.content
513
516
 
514
517
  if not output:
515
518
  logger.error(f"Failed to generate a valid answer on iteration {i + 1}: {output}")
@@ -281,24 +281,25 @@ class AgentAsJudgeEval(BaseEval):
281
281
  </output>
282
282
  """)
283
283
 
284
- response = evaluator_agent.run(prompt).content
285
- if not isinstance(response, (NumericJudgeResponse, BinaryJudgeResponse)):
286
- raise EvalError(f"Invalid response: {response}")
284
+ response = evaluator_agent.run(prompt, stream=False)
285
+ judge_response = response.content
286
+ if not isinstance(judge_response, (NumericJudgeResponse, BinaryJudgeResponse)):
287
+ raise EvalError(f"Invalid response: {judge_response}")
287
288
 
288
289
  # Determine pass/fail based on scoring strategy and response type
289
- if isinstance(response, NumericJudgeResponse):
290
- score = response.score
290
+ if isinstance(judge_response, NumericJudgeResponse):
291
+ score = judge_response.score
291
292
  passed = score >= self.threshold
292
293
  else: # BinaryJudgeResponse
293
294
  score = None
294
- passed = response.passed
295
+ passed = judge_response.passed
295
296
 
296
297
  evaluation = AgentAsJudgeEvaluation(
297
298
  input=input,
298
299
  output=output,
299
300
  criteria=self.criteria,
300
301
  score=score,
301
- reason=response.reason,
302
+ reason=judge_response.reason,
302
303
  passed=passed,
303
304
  )
304
305
 
@@ -332,7 +333,7 @@ class AgentAsJudgeEval(BaseEval):
332
333
  </output>
333
334
  """)
334
335
 
335
- response = await evaluator_agent.arun(prompt)
336
+ response = await evaluator_agent.arun(prompt, stream=False)
336
337
  judge_response = response.content
337
338
  if not isinstance(judge_response, (NumericJudgeResponse, BinaryJudgeResponse)):
338
339
  raise EvalError(f"Invalid response: {judge_response}")
@@ -4,7 +4,7 @@ from typing import Any, Dict, List, Optional, Tuple
4
4
  from typing_extensions import Literal
5
5
 
6
6
  from agno.knowledge.embedder.base import Embedder
7
- from agno.utils.log import log_warning, log_info
7
+ from agno.utils.log import log_info, log_warning
8
8
 
9
9
  try:
10
10
  from openai import AsyncOpenAI
@@ -1801,6 +1801,17 @@ class Model(ABC):
1801
1801
  log_error(f"Error while iterating function result generator for {function_call.function.name}: {e}")
1802
1802
  function_call.error = str(e)
1803
1803
  function_call_success = False
1804
+
1805
+ # For generators, re-capture updated_session_state after consumption
1806
+ # since session_state modifications were made during iteration
1807
+ if function_execution_result.updated_session_state is None:
1808
+ if (
1809
+ function_call.function._run_context is not None
1810
+ and function_call.function._run_context.session_state is not None
1811
+ ):
1812
+ function_execution_result.updated_session_state = function_call.function._run_context.session_state
1813
+ elif function_call.function._session_state is not None:
1814
+ function_execution_result.updated_session_state = function_call.function._session_state
1804
1815
  else:
1805
1816
  from agno.tools.function import ToolResult
1806
1817
 
@@ -2327,7 +2338,29 @@ class Model(ABC):
2327
2338
  log_error(f"Error while iterating function result generator for {function_call.function.name}: {e}")
2328
2339
  function_call.error = str(e)
2329
2340
  function_call_success = False
2330
- else:
2341
+
2342
+ # For generators (sync or async), re-capture updated_session_state after consumption
2343
+ # since session_state modifications were made during iteration
2344
+ if async_function_call_output is not None or isinstance(
2345
+ function_call.result,
2346
+ (GeneratorType, collections.abc.Iterator, AsyncGeneratorType, collections.abc.AsyncIterator),
2347
+ ):
2348
+ if updated_session_state is None:
2349
+ if (
2350
+ function_call.function._run_context is not None
2351
+ and function_call.function._run_context.session_state is not None
2352
+ ):
2353
+ updated_session_state = function_call.function._run_context.session_state
2354
+ elif function_call.function._session_state is not None:
2355
+ updated_session_state = function_call.function._session_state
2356
+
2357
+ if not (
2358
+ async_function_call_output is not None
2359
+ or isinstance(
2360
+ function_call.result,
2361
+ (GeneratorType, collections.abc.Iterator, AsyncGeneratorType, collections.abc.AsyncIterator),
2362
+ )
2363
+ ):
2331
2364
  from agno.tools.function import ToolResult
2332
2365
 
2333
2366
  if isinstance(function_execution_result.result, ToolResult):
@@ -36,6 +36,7 @@ try:
36
36
  GenerateContentResponseUsageMetadata,
37
37
  GoogleSearch,
38
38
  GoogleSearchRetrieval,
39
+ GroundingMetadata,
39
40
  Operation,
40
41
  Part,
41
42
  Retrieval,
@@ -244,8 +245,8 @@ class Gemini(Model):
244
245
  builtin_tools = []
245
246
 
246
247
  if self.grounding:
247
- log_info(
248
- "Grounding enabled. This is a legacy tool. For Gemini 2.0+ Please use enable `search` flag instead."
248
+ log_debug(
249
+ "Gemini Grounding enabled. This is a legacy tool. For Gemini 2.0+ Please use enable `search` flag instead."
249
250
  )
250
251
  builtin_tools.append(
251
252
  Tool(
@@ -258,15 +259,15 @@ class Gemini(Model):
258
259
  )
259
260
 
260
261
  if self.search:
261
- log_info("Google Search enabled.")
262
+ log_debug("Gemini Google Search enabled.")
262
263
  builtin_tools.append(Tool(google_search=GoogleSearch()))
263
264
 
264
265
  if self.url_context:
265
- log_info("URL context enabled.")
266
+ log_debug("Gemini URL context enabled.")
266
267
  builtin_tools.append(Tool(url_context=UrlContext()))
267
268
 
268
269
  if self.vertexai_search:
269
- log_info("Vertex AI Search enabled.")
270
+ log_debug("Gemini Vertex AI Search enabled.")
270
271
  if not self.vertexai_search_datastore:
271
272
  log_error("vertexai_search_datastore must be provided when vertexai_search is enabled.")
272
273
  raise ValueError("vertexai_search_datastore must be provided when vertexai_search is enabled.")
@@ -1008,27 +1009,24 @@ class Gemini(Model):
1008
1009
  citations = Citations()
1009
1010
  citations_raw = {}
1010
1011
  citations_urls = []
1012
+ web_search_queries: List[str] = []
1011
1013
 
1012
1014
  if response.candidates and response.candidates[0].grounding_metadata is not None:
1013
- grounding_metadata = response.candidates[0].grounding_metadata.model_dump()
1014
- citations_raw["grounding_metadata"] = grounding_metadata
1015
+ grounding_metadata: GroundingMetadata = response.candidates[0].grounding_metadata
1016
+ citations_raw["grounding_metadata"] = grounding_metadata.model_dump()
1015
1017
 
1016
- chunks = grounding_metadata.get("grounding_chunks", []) or []
1017
- citation_pairs = []
1018
+ chunks = grounding_metadata.grounding_chunks or []
1019
+ web_search_queries = grounding_metadata.web_search_queries or []
1018
1020
  for chunk in chunks:
1019
- if not isinstance(chunk, dict):
1021
+ if not chunk:
1020
1022
  continue
1021
- web = chunk.get("web")
1022
- if not isinstance(web, dict):
1023
+ web = chunk.web
1024
+ if not web:
1023
1025
  continue
1024
- uri = web.get("uri")
1025
- title = web.get("title")
1026
+ uri = web.uri
1027
+ title = web.title
1026
1028
  if uri:
1027
- citation_pairs.append((uri, title))
1028
-
1029
- # Create citation objects from filtered pairs
1030
- grounding_urls = [UrlCitation(url=url, title=title) for url, title in citation_pairs]
1031
- citations_urls.extend(grounding_urls)
1029
+ citations_urls.append(UrlCitation(url=uri, title=title))
1032
1030
 
1033
1031
  # Handle URLs from URL context tool
1034
1032
  if (
@@ -1036,22 +1034,29 @@ class Gemini(Model):
1036
1034
  and hasattr(response.candidates[0], "url_context_metadata")
1037
1035
  and response.candidates[0].url_context_metadata is not None
1038
1036
  ):
1039
- url_context_metadata = response.candidates[0].url_context_metadata.model_dump()
1040
- citations_raw["url_context_metadata"] = url_context_metadata
1037
+ url_context_metadata = response.candidates[0].url_context_metadata
1038
+ citations_raw["url_context_metadata"] = url_context_metadata.model_dump()
1041
1039
 
1042
- url_metadata_list = url_context_metadata.get("url_metadata", [])
1040
+ url_metadata_list = url_context_metadata.url_metadata or []
1043
1041
  for url_meta in url_metadata_list:
1044
- retrieved_url = url_meta.get("retrieved_url")
1045
- status = url_meta.get("url_retrieval_status", "UNKNOWN")
1042
+ retrieved_url = url_meta.retrieved_url
1043
+ status = "UNKNOWN"
1044
+ if url_meta.url_retrieval_status:
1045
+ status = url_meta.url_retrieval_status.value
1046
1046
  if retrieved_url and status == "URL_RETRIEVAL_STATUS_SUCCESS":
1047
1047
  # Avoid duplicate URLs
1048
1048
  existing_urls = [citation.url for citation in citations_urls]
1049
1049
  if retrieved_url not in existing_urls:
1050
1050
  citations_urls.append(UrlCitation(url=retrieved_url, title=retrieved_url))
1051
1051
 
1052
+ if citations_raw:
1053
+ citations.raw = citations_raw
1054
+ if citations_urls:
1055
+ citations.urls = citations_urls
1056
+ if web_search_queries:
1057
+ citations.search_queries = web_search_queries
1058
+
1052
1059
  if citations_raw or citations_urls:
1053
- citations.raw = citations_raw if citations_raw else None
1054
- citations.urls = citations_urls if citations_urls else None
1055
1060
  model_response.citations = citations
1056
1061
 
1057
1062
  # Extract usage metadata if present
@@ -1150,28 +1155,52 @@ class Gemini(Model):
1150
1155
 
1151
1156
  model_response.tool_calls.append(tool_call)
1152
1157
 
1153
- if response_delta.candidates[0].grounding_metadata is not None:
1154
- citations = Citations()
1155
- grounding_metadata = response_delta.candidates[0].grounding_metadata.model_dump()
1156
- citations.raw = grounding_metadata
1158
+ citations = Citations()
1159
+ citations.raw = {}
1160
+ citations.urls = []
1157
1161
 
1162
+ if (
1163
+ hasattr(response_delta.candidates[0], "grounding_metadata")
1164
+ and response_delta.candidates[0].grounding_metadata is not None
1165
+ ):
1166
+ grounding_metadata = response_delta.candidates[0].grounding_metadata
1167
+ citations.raw["grounding_metadata"] = grounding_metadata.model_dump()
1168
+ citations.search_queries = grounding_metadata.web_search_queries or []
1158
1169
  # Extract url and title
1159
- chunks = grounding_metadata.pop("grounding_chunks", None) or []
1160
- citation_pairs = []
1170
+ chunks = grounding_metadata.grounding_chunks or []
1161
1171
  for chunk in chunks:
1162
- if not isinstance(chunk, dict):
1172
+ if not chunk:
1163
1173
  continue
1164
- web = chunk.get("web")
1165
- if not isinstance(web, dict):
1174
+ web = chunk.web
1175
+ if not web:
1166
1176
  continue
1167
- uri = web.get("uri")
1168
- title = web.get("title")
1177
+ uri = web.uri
1178
+ title = web.title
1169
1179
  if uri:
1170
- citation_pairs.append((uri, title))
1180
+ citations.urls.append(UrlCitation(url=uri, title=title))
1181
+
1182
+ # Handle URLs from URL context tool
1183
+ if (
1184
+ hasattr(response_delta.candidates[0], "url_context_metadata")
1185
+ and response_delta.candidates[0].url_context_metadata is not None
1186
+ ):
1187
+ url_context_metadata = response_delta.candidates[0].url_context_metadata
1171
1188
 
1172
- # Create citation objects from filtered pairs
1173
- citations.urls = [UrlCitation(url=url, title=title) for url, title in citation_pairs]
1189
+ citations.raw["url_context_metadata"] = url_context_metadata.model_dump()
1190
+
1191
+ url_metadata_list = url_context_metadata.url_metadata or []
1192
+ for url_meta in url_metadata_list:
1193
+ retrieved_url = url_meta.retrieved_url
1194
+ status = "UNKNOWN"
1195
+ if url_meta.url_retrieval_status:
1196
+ status = url_meta.url_retrieval_status.value
1197
+ if retrieved_url and status == "URL_RETRIEVAL_STATUS_SUCCESS":
1198
+ # Avoid duplicate URLs
1199
+ existing_urls = [citation.url for citation in citations.urls]
1200
+ if retrieved_url not in existing_urls:
1201
+ citations.urls.append(UrlCitation(url=retrieved_url, title=retrieved_url))
1174
1202
 
1203
+ if citations.raw or citations.urls:
1175
1204
  model_response.citations = citations
1176
1205
 
1177
1206
  # Extract usage metadata if present
@@ -42,6 +42,9 @@ class Citations(BaseModel):
42
42
  # Raw citations from the model
43
43
  raw: Optional[Any] = None
44
44
 
45
+ # Search queries used to retrieve the citations
46
+ search_queries: Optional[List[str]] = None
47
+
45
48
  # URLs of the citations.
46
49
  urls: Optional[List[UrlCitation]] = None
47
50
 
@@ -66,14 +66,14 @@ async def run_agent_as_judge_eval(
66
66
 
67
67
  # Run agent/team to get output
68
68
  if agent:
69
- agent_response = await agent.arun(eval_run_input.input)
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
71
  model_id = agent.model.id if agent and agent.model else None
72
72
  model_provider = agent.model.provider if agent and agent.model else None
73
73
  agent_id = agent.id
74
74
  team_id = None
75
75
  elif team:
76
- team_response = await team.arun(eval_run_input.input)
76
+ team_response = await team.arun(eval_run_input.input, stream=False)
77
77
  output = str(team_response.content) if team_response.content else ""
78
78
  model_id = team.model.id if team and team.model else None
79
79
  model_provider = team.model.provider if team and team.model else None
@@ -125,39 +125,21 @@ async def run_performance_eval(
125
125
  default_model: Optional[Model] = None,
126
126
  ) -> EvalSchema:
127
127
  """Run a performance evaluation for the given agent or team"""
128
- # Create sync or async function based on DB type
129
- if isinstance(db, AsyncBaseDb):
130
- if agent:
131
-
132
- async def run_component(): # type: ignore
133
- return await agent.arun(eval_run_input.input)
134
-
135
- model_id = agent.model.id if agent and agent.model else None
136
- model_provider = agent.model.provider if agent and agent.model else None
137
-
138
- elif team:
139
-
140
- async def run_component(): # type: ignore
141
- return await team.arun(eval_run_input.input)
142
-
143
- model_id = team.model.id if team and team.model else None
144
- model_provider = team.model.provider if team and team.model else None
145
- else:
146
- if agent:
128
+ if agent:
147
129
 
148
- def run_component(): # type: ignore
149
- return agent.run(eval_run_input.input)
130
+ async def run_component(): # type: ignore
131
+ return await agent.arun(eval_run_input.input, stream=False)
150
132
 
151
- model_id = agent.model.id if agent and agent.model else None
152
- model_provider = agent.model.provider if agent and agent.model else None
133
+ model_id = agent.model.id if agent and agent.model else None
134
+ model_provider = agent.model.provider if agent and agent.model else None
153
135
 
154
- elif team:
136
+ elif team:
155
137
 
156
- def run_component():
157
- return team.run(eval_run_input.input)
138
+ async def run_component(): # type: ignore
139
+ return await team.arun(eval_run_input.input, stream=False)
158
140
 
159
- model_id = team.model.id if team and team.model else None
160
- model_provider = team.model.provider if team and team.model else None
141
+ model_id = team.model.id if team and team.model else None
142
+ model_provider = team.model.provider if team and team.model else None
161
143
 
162
144
  performance_eval = PerformanceEval(
163
145
  db=db,
@@ -171,11 +153,7 @@ async def run_performance_eval(
171
153
  model_provider=model_provider,
172
154
  )
173
155
 
174
- # PerformanceEval needs sync/async check because it wraps a function
175
- if isinstance(db, AsyncBaseDb):
176
- result = await performance_eval.arun(print_results=False, print_summary=False)
177
- else:
178
- result = performance_eval.run(print_results=False, print_summary=False)
156
+ result = await performance_eval.arun(print_results=False, print_summary=False)
179
157
  if not result:
180
158
  raise HTTPException(status_code=500, detail="Failed to run performance evaluation")
181
159
 
@@ -210,7 +188,7 @@ async def run_reliability_eval(
210
188
  raise HTTPException(status_code=400, detail="expected_tool_calls is required for reliability evaluations")
211
189
 
212
190
  if agent:
213
- agent_response = await agent.arun(eval_run_input.input)
191
+ agent_response = await agent.arun(eval_run_input.input, stream=False)
214
192
  reliability_eval = ReliabilityEval(
215
193
  db=db,
216
194
  name=eval_run_input.name,
@@ -221,7 +199,7 @@ async def run_reliability_eval(
221
199
  model_provider = agent.model.provider if agent and agent.model else None
222
200
 
223
201
  elif team:
224
- team_response = await team.arun(eval_run_input.input)
202
+ team_response = await team.arun(eval_run_input.input, stream=False)
225
203
  reliability_eval = ReliabilityEval(
226
204
  db=db,
227
205
  name=eval_run_input.name,
@@ -1541,6 +1541,8 @@ class Team:
1541
1541
  add_history_to_context=add_history_to_context,
1542
1542
  add_session_state_to_context=add_session_state_to_context,
1543
1543
  add_dependencies_to_context=add_dependencies_to_context,
1544
+ stream=False,
1545
+ stream_events=False,
1544
1546
  )
1545
1547
 
1546
1548
  # 3. Prepare run messages
@@ -1753,6 +1755,8 @@ class Team:
1753
1755
  add_history_to_context=add_history_to_context,
1754
1756
  add_session_state_to_context=add_session_state_to_context,
1755
1757
  add_dependencies_to_context=add_dependencies_to_context,
1758
+ stream=True,
1759
+ stream_events=stream_events,
1756
1760
  )
1757
1761
 
1758
1762
  # 3. Prepare run messages
@@ -2182,9 +2186,6 @@ class Team:
2182
2186
  if stream_events is None:
2183
2187
  stream_events = False if self.stream_events is None else self.stream_events
2184
2188
 
2185
- self.stream = self.stream or stream
2186
- self.stream_events = self.stream_events or stream_events
2187
-
2188
2189
  self.model = cast(Model, self.model)
2189
2190
 
2190
2191
  if self.metadata is not None:
@@ -2394,6 +2395,8 @@ class Team:
2394
2395
  add_history_to_context=add_history_to_context,
2395
2396
  add_dependencies_to_context=add_dependencies_to_context,
2396
2397
  add_session_state_to_context=add_session_state_to_context,
2398
+ stream=False,
2399
+ stream_events=False,
2397
2400
  )
2398
2401
 
2399
2402
  # 5. Prepare run messages
@@ -2638,6 +2641,10 @@ class Team:
2638
2641
  files=run_input.files,
2639
2642
  debug_mode=debug_mode,
2640
2643
  add_history_to_context=add_history_to_context,
2644
+ add_dependencies_to_context=add_dependencies_to_context,
2645
+ add_session_state_to_context=add_session_state_to_context,
2646
+ stream=True,
2647
+ stream_events=stream_events,
2641
2648
  )
2642
2649
 
2643
2650
  # 6. Prepare run messages
@@ -3046,9 +3053,6 @@ class Team:
3046
3053
  if stream_events is None:
3047
3054
  stream_events = False if self.stream_events is None else self.stream_events
3048
3055
 
3049
- self.stream = self.stream or stream
3050
- self.stream_events = self.stream_events or stream_events
3051
-
3052
3056
  self.model = cast(Model, self.model)
3053
3057
 
3054
3058
  if self.metadata is not None:
@@ -5397,6 +5401,8 @@ class Team:
5397
5401
  add_history_to_context: Optional[bool] = None,
5398
5402
  add_dependencies_to_context: Optional[bool] = None,
5399
5403
  add_session_state_to_context: Optional[bool] = None,
5404
+ stream: Optional[bool] = None,
5405
+ stream_events: Optional[bool] = None,
5400
5406
  check_mcp_tools: bool = True,
5401
5407
  ) -> List[Union[Function, dict]]:
5402
5408
  # Connect tools that require connection management
@@ -5491,8 +5497,8 @@ class Team:
5491
5497
  team_run_context=team_run_context,
5492
5498
  input=user_message_content,
5493
5499
  user_id=user_id,
5494
- stream=self.stream or False,
5495
- stream_events=self.stream_events or False,
5500
+ stream=stream or False,
5501
+ stream_events=stream_events or False,
5496
5502
  async_mode=async_mode,
5497
5503
  images=images, # type: ignore
5498
5504
  videos=videos, # type: ignore
@@ -908,21 +908,16 @@ class FunctionCall(BaseModel):
908
908
  else:
909
909
  result = self.function.entrypoint(**entrypoint_args, **self.arguments) # type: ignore
910
910
 
911
- updated_session_state = None
912
- if entrypoint_args.get("run_context") is not None:
913
- run_context = entrypoint_args.get("run_context")
914
- updated_session_state = (
915
- run_context.session_state
916
- if run_context is not None and run_context.session_state is not None
917
- else None
918
- )
919
- else:
920
- if self.function._session_state is not None:
921
- updated_session_state = self.function._session_state
922
-
923
911
  # Handle generator case
924
912
  if isgenerator(result):
925
913
  self.result = result # Store generator directly, can't cache
914
+ # For generators, don't capture updated_session_state yet -
915
+ # session_state is passed by reference, so mutations made during
916
+ # generator iteration are already reflected in the original dict.
917
+ # Returning None prevents stale state from being merged later.
918
+ execution_result = FunctionExecutionResult(
919
+ status="success", result=self.result, updated_session_state=None
920
+ )
926
921
  else:
927
922
  self.result = result
928
923
  # Only cache non-generator results
@@ -931,9 +926,21 @@ class FunctionCall(BaseModel):
931
926
  cache_file = self.function._get_cache_file_path(cache_key)
932
927
  self.function._save_to_cache(cache_file, self.result)
933
928
 
934
- execution_result = FunctionExecutionResult(
935
- status="success", result=self.result, updated_session_state=updated_session_state
936
- )
929
+ updated_session_state = None
930
+ if entrypoint_args.get("run_context") is not None:
931
+ run_context = entrypoint_args.get("run_context")
932
+ updated_session_state = (
933
+ run_context.session_state
934
+ if run_context is not None and run_context.session_state is not None
935
+ else None
936
+ )
937
+ else:
938
+ if self.function._session_state is not None:
939
+ updated_session_state = self.function._session_state
940
+
941
+ execution_result = FunctionExecutionResult(
942
+ status="success", result=self.result, updated_session_state=updated_session_state
943
+ )
937
944
 
938
945
  except AgentRunException as e:
939
946
  log_debug(f"{e.__class__.__name__}: {e}")
@@ -1143,14 +1150,21 @@ class FunctionCall(BaseModel):
1143
1150
  cache_file = self.function._get_cache_file_path(cache_key)
1144
1151
  self.function._save_to_cache(cache_file, self.result)
1145
1152
 
1146
- updated_session_state = None
1147
- if entrypoint_args.get("run_context") is not None:
1148
- run_context = entrypoint_args.get("run_context")
1149
- updated_session_state = (
1150
- run_context.session_state
1151
- if run_context is not None and run_context.session_state is not None
1152
- else None
1153
- )
1153
+ # For generators, don't capture updated_session_state -
1154
+ # session_state is passed by reference, so mutations made during
1155
+ # generator iteration are already reflected in the original dict.
1156
+ # Returning None prevents stale state from being merged later.
1157
+ if isgenerator(self.result) or isasyncgen(self.result):
1158
+ updated_session_state = None
1159
+ else:
1160
+ updated_session_state = None
1161
+ if entrypoint_args.get("run_context") is not None:
1162
+ run_context = entrypoint_args.get("run_context")
1163
+ updated_session_state = (
1164
+ run_context.session_state
1165
+ if run_context is not None and run_context.session_state is not None
1166
+ else None
1167
+ )
1154
1168
 
1155
1169
  execution_result = FunctionExecutionResult(
1156
1170
  status="success", result=self.result, updated_session_state=updated_session_state