agno 2.3.22__tar.gz → 2.3.24__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 (648) hide show
  1. {agno-2.3.22 → agno-2.3.24}/PKG-INFO +1 -1
  2. {agno-2.3.22 → agno-2.3.24}/agno/agent/agent.py +28 -1
  3. {agno-2.3.22 → agno-2.3.24}/agno/agent/remote.py +1 -1
  4. {agno-2.3.22 → agno-2.3.24}/agno/db/mongo/mongo.py +9 -1
  5. {agno-2.3.22 → agno-2.3.24}/agno/db/mysql/async_mysql.py +5 -7
  6. {agno-2.3.22 → agno-2.3.24}/agno/db/mysql/mysql.py +5 -7
  7. {agno-2.3.22 → agno-2.3.24}/agno/db/mysql/schemas.py +39 -21
  8. {agno-2.3.22 → agno-2.3.24}/agno/db/postgres/async_postgres.py +10 -2
  9. {agno-2.3.22 → agno-2.3.24}/agno/db/postgres/postgres.py +5 -7
  10. {agno-2.3.22 → agno-2.3.24}/agno/db/postgres/schemas.py +39 -21
  11. {agno-2.3.22 → agno-2.3.24}/agno/db/singlestore/schemas.py +41 -21
  12. {agno-2.3.22 → agno-2.3.24}/agno/db/singlestore/singlestore.py +14 -3
  13. {agno-2.3.22 → agno-2.3.24}/agno/db/sqlite/async_sqlite.py +7 -2
  14. {agno-2.3.22 → agno-2.3.24}/agno/db/sqlite/schemas.py +36 -21
  15. {agno-2.3.22 → agno-2.3.24}/agno/db/sqlite/sqlite.py +3 -7
  16. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/chunking/markdown.py +94 -8
  17. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/chunking/semantic.py +2 -2
  18. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/knowledge.py +215 -207
  19. {agno-2.3.22 → agno-2.3.24}/agno/models/base.py +32 -8
  20. {agno-2.3.22 → agno-2.3.24}/agno/models/google/gemini.py +27 -4
  21. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/agents/router.py +1 -1
  22. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/evals/evals.py +2 -2
  23. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/knowledge/knowledge.py +21 -5
  24. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/knowledge/schemas.py +1 -1
  25. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/memory/memory.py +4 -4
  26. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/session/session.py +2 -2
  27. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/teams/router.py +2 -2
  28. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/traces/traces.py +3 -3
  29. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/workflows/router.py +1 -1
  30. {agno-2.3.22 → agno-2.3.24}/agno/os/schema.py +1 -1
  31. {agno-2.3.22 → agno-2.3.24}/agno/os/utils.py +1 -1
  32. {agno-2.3.22 → agno-2.3.24}/agno/remote/base.py +1 -1
  33. {agno-2.3.22 → agno-2.3.24}/agno/team/remote.py +1 -1
  34. {agno-2.3.22 → agno-2.3.24}/agno/team/team.py +24 -4
  35. {agno-2.3.22 → agno-2.3.24}/agno/tools/brandfetch.py +27 -18
  36. {agno-2.3.22 → agno-2.3.24}/agno/tools/browserbase.py +150 -13
  37. {agno-2.3.22 → agno-2.3.24}/agno/tools/crawl4ai.py +3 -0
  38. {agno-2.3.22 → agno-2.3.24}/agno/tools/file.py +14 -13
  39. {agno-2.3.22 → agno-2.3.24}/agno/tools/function.py +15 -2
  40. {agno-2.3.22 → agno-2.3.24}/agno/tools/mcp/mcp.py +1 -0
  41. {agno-2.3.22 → agno-2.3.24}/agno/tools/mlx_transcribe.py +10 -7
  42. {agno-2.3.22 → agno-2.3.24}/agno/tools/python.py +14 -6
  43. {agno-2.3.22 → agno-2.3.24}/agno/tools/toolkit.py +122 -23
  44. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/cassandra/cassandra.py +1 -1
  45. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/chroma/chromadb.py +1 -1
  46. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/clickhouse/clickhousedb.py +1 -1
  47. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/couchbase/couchbase.py +1 -1
  48. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/milvus/milvus.py +1 -1
  49. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/mongodb/mongodb.py +13 -3
  50. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/pgvector/pgvector.py +1 -1
  51. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/pineconedb/pineconedb.py +2 -2
  52. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/qdrant/qdrant.py +1 -1
  53. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/redis/redisdb.py +2 -2
  54. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/singlestore/singlestore.py +1 -1
  55. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/surrealdb/surrealdb.py +2 -2
  56. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/weaviate/weaviate.py +1 -1
  57. {agno-2.3.22 → agno-2.3.24}/agno/workflow/remote.py +1 -1
  58. {agno-2.3.22 → agno-2.3.24}/agno/workflow/workflow.py +14 -0
  59. {agno-2.3.22 → agno-2.3.24}/agno.egg-info/PKG-INFO +1 -1
  60. {agno-2.3.22 → agno-2.3.24}/pyproject.toml +1 -1
  61. {agno-2.3.22 → agno-2.3.24}/LICENSE +0 -0
  62. {agno-2.3.22 → agno-2.3.24}/README.md +0 -0
  63. {agno-2.3.22 → agno-2.3.24}/agno/__init__.py +0 -0
  64. {agno-2.3.22 → agno-2.3.24}/agno/agent/__init__.py +0 -0
  65. {agno-2.3.22 → agno-2.3.24}/agno/api/__init__.py +0 -0
  66. {agno-2.3.22 → agno-2.3.24}/agno/api/agent.py +0 -0
  67. {agno-2.3.22 → agno-2.3.24}/agno/api/api.py +0 -0
  68. {agno-2.3.22 → agno-2.3.24}/agno/api/evals.py +0 -0
  69. {agno-2.3.22 → agno-2.3.24}/agno/api/os.py +0 -0
  70. {agno-2.3.22 → agno-2.3.24}/agno/api/routes.py +0 -0
  71. {agno-2.3.22 → agno-2.3.24}/agno/api/schemas/__init__.py +0 -0
  72. {agno-2.3.22 → agno-2.3.24}/agno/api/schemas/agent.py +0 -0
  73. {agno-2.3.22 → agno-2.3.24}/agno/api/schemas/evals.py +0 -0
  74. {agno-2.3.22 → agno-2.3.24}/agno/api/schemas/os.py +0 -0
  75. {agno-2.3.22 → agno-2.3.24}/agno/api/schemas/response.py +0 -0
  76. {agno-2.3.22 → agno-2.3.24}/agno/api/schemas/team.py +0 -0
  77. {agno-2.3.22 → agno-2.3.24}/agno/api/schemas/utils.py +0 -0
  78. {agno-2.3.22 → agno-2.3.24}/agno/api/schemas/workflows.py +0 -0
  79. {agno-2.3.22 → agno-2.3.24}/agno/api/settings.py +0 -0
  80. {agno-2.3.22 → agno-2.3.24}/agno/api/team.py +0 -0
  81. {agno-2.3.22 → agno-2.3.24}/agno/api/workflow.py +0 -0
  82. {agno-2.3.22 → agno-2.3.24}/agno/client/__init__.py +0 -0
  83. {agno-2.3.22 → agno-2.3.24}/agno/client/a2a/__init__.py +0 -0
  84. {agno-2.3.22 → agno-2.3.24}/agno/client/a2a/client.py +0 -0
  85. {agno-2.3.22 → agno-2.3.24}/agno/client/a2a/schemas.py +0 -0
  86. {agno-2.3.22 → agno-2.3.24}/agno/client/a2a/utils.py +0 -0
  87. {agno-2.3.22 → agno-2.3.24}/agno/client/os.py +0 -0
  88. {agno-2.3.22 → agno-2.3.24}/agno/cloud/aws/base.py +0 -0
  89. {agno-2.3.22 → agno-2.3.24}/agno/cloud/aws/s3/__init__.py +0 -0
  90. {agno-2.3.22 → agno-2.3.24}/agno/cloud/aws/s3/api_client.py +0 -0
  91. {agno-2.3.22 → agno-2.3.24}/agno/cloud/aws/s3/bucket.py +0 -0
  92. {agno-2.3.22 → agno-2.3.24}/agno/cloud/aws/s3/object.py +0 -0
  93. {agno-2.3.22 → agno-2.3.24}/agno/compression/__init__.py +0 -0
  94. {agno-2.3.22 → agno-2.3.24}/agno/compression/manager.py +0 -0
  95. {agno-2.3.22 → agno-2.3.24}/agno/culture/__init__.py +0 -0
  96. {agno-2.3.22 → agno-2.3.24}/agno/culture/manager.py +0 -0
  97. {agno-2.3.22 → agno-2.3.24}/agno/db/__init__.py +0 -0
  98. {agno-2.3.22 → agno-2.3.24}/agno/db/async_postgres/__init__.py +0 -0
  99. {agno-2.3.22 → agno-2.3.24}/agno/db/base.py +0 -0
  100. {agno-2.3.22 → agno-2.3.24}/agno/db/dynamo/__init__.py +0 -0
  101. {agno-2.3.22 → agno-2.3.24}/agno/db/dynamo/dynamo.py +0 -0
  102. {agno-2.3.22 → agno-2.3.24}/agno/db/dynamo/schemas.py +0 -0
  103. {agno-2.3.22 → agno-2.3.24}/agno/db/dynamo/utils.py +0 -0
  104. {agno-2.3.22 → agno-2.3.24}/agno/db/firestore/__init__.py +0 -0
  105. {agno-2.3.22 → agno-2.3.24}/agno/db/firestore/firestore.py +0 -0
  106. {agno-2.3.22 → agno-2.3.24}/agno/db/firestore/schemas.py +0 -0
  107. {agno-2.3.22 → agno-2.3.24}/agno/db/firestore/utils.py +0 -0
  108. {agno-2.3.22 → agno-2.3.24}/agno/db/gcs_json/__init__.py +0 -0
  109. {agno-2.3.22 → agno-2.3.24}/agno/db/gcs_json/gcs_json_db.py +0 -0
  110. {agno-2.3.22 → agno-2.3.24}/agno/db/gcs_json/utils.py +0 -0
  111. {agno-2.3.22 → agno-2.3.24}/agno/db/in_memory/__init__.py +0 -0
  112. {agno-2.3.22 → agno-2.3.24}/agno/db/in_memory/in_memory_db.py +0 -0
  113. {agno-2.3.22 → agno-2.3.24}/agno/db/in_memory/utils.py +0 -0
  114. {agno-2.3.22 → agno-2.3.24}/agno/db/json/__init__.py +0 -0
  115. {agno-2.3.22 → agno-2.3.24}/agno/db/json/json_db.py +0 -0
  116. {agno-2.3.22 → agno-2.3.24}/agno/db/json/utils.py +0 -0
  117. {agno-2.3.22 → agno-2.3.24}/agno/db/migrations/__init__.py +0 -0
  118. {agno-2.3.22 → agno-2.3.24}/agno/db/migrations/manager.py +0 -0
  119. {agno-2.3.22 → agno-2.3.24}/agno/db/migrations/utils.py +0 -0
  120. {agno-2.3.22 → agno-2.3.24}/agno/db/migrations/v1_to_v2.py +0 -0
  121. {agno-2.3.22 → agno-2.3.24}/agno/db/migrations/versions/__init__.py +0 -0
  122. {agno-2.3.22 → agno-2.3.24}/agno/db/migrations/versions/v2_3_0.py +0 -0
  123. {agno-2.3.22 → agno-2.3.24}/agno/db/mongo/__init__.py +0 -0
  124. {agno-2.3.22 → agno-2.3.24}/agno/db/mongo/async_mongo.py +0 -0
  125. {agno-2.3.22 → agno-2.3.24}/agno/db/mongo/schemas.py +0 -0
  126. {agno-2.3.22 → agno-2.3.24}/agno/db/mongo/utils.py +0 -0
  127. {agno-2.3.22 → agno-2.3.24}/agno/db/mysql/__init__.py +0 -0
  128. {agno-2.3.22 → agno-2.3.24}/agno/db/mysql/utils.py +0 -0
  129. {agno-2.3.22 → agno-2.3.24}/agno/db/postgres/__init__.py +0 -0
  130. {agno-2.3.22 → agno-2.3.24}/agno/db/postgres/utils.py +0 -0
  131. {agno-2.3.22 → agno-2.3.24}/agno/db/redis/__init__.py +0 -0
  132. {agno-2.3.22 → agno-2.3.24}/agno/db/redis/redis.py +0 -0
  133. {agno-2.3.22 → agno-2.3.24}/agno/db/redis/schemas.py +0 -0
  134. {agno-2.3.22 → agno-2.3.24}/agno/db/redis/utils.py +0 -0
  135. {agno-2.3.22 → agno-2.3.24}/agno/db/schemas/__init__.py +0 -0
  136. {agno-2.3.22 → agno-2.3.24}/agno/db/schemas/culture.py +0 -0
  137. {agno-2.3.22 → agno-2.3.24}/agno/db/schemas/evals.py +0 -0
  138. {agno-2.3.22 → agno-2.3.24}/agno/db/schemas/knowledge.py +0 -0
  139. {agno-2.3.22 → agno-2.3.24}/agno/db/schemas/memory.py +0 -0
  140. {agno-2.3.22 → agno-2.3.24}/agno/db/schemas/metrics.py +0 -0
  141. {agno-2.3.22 → agno-2.3.24}/agno/db/singlestore/__init__.py +0 -0
  142. {agno-2.3.22 → agno-2.3.24}/agno/db/singlestore/utils.py +0 -0
  143. {agno-2.3.22 → agno-2.3.24}/agno/db/sqlite/__init__.py +0 -0
  144. {agno-2.3.22 → agno-2.3.24}/agno/db/sqlite/utils.py +0 -0
  145. {agno-2.3.22 → agno-2.3.24}/agno/db/surrealdb/__init__.py +0 -0
  146. {agno-2.3.22 → agno-2.3.24}/agno/db/surrealdb/metrics.py +0 -0
  147. {agno-2.3.22 → agno-2.3.24}/agno/db/surrealdb/models.py +0 -0
  148. {agno-2.3.22 → agno-2.3.24}/agno/db/surrealdb/queries.py +0 -0
  149. {agno-2.3.22 → agno-2.3.24}/agno/db/surrealdb/surrealdb.py +0 -0
  150. {agno-2.3.22 → agno-2.3.24}/agno/db/surrealdb/utils.py +0 -0
  151. {agno-2.3.22 → agno-2.3.24}/agno/db/utils.py +0 -0
  152. {agno-2.3.22 → agno-2.3.24}/agno/debug.py +0 -0
  153. {agno-2.3.22 → agno-2.3.24}/agno/eval/__init__.py +0 -0
  154. {agno-2.3.22 → agno-2.3.24}/agno/eval/accuracy.py +0 -0
  155. {agno-2.3.22 → agno-2.3.24}/agno/eval/agent_as_judge.py +0 -0
  156. {agno-2.3.22 → agno-2.3.24}/agno/eval/base.py +0 -0
  157. {agno-2.3.22 → agno-2.3.24}/agno/eval/performance.py +0 -0
  158. {agno-2.3.22 → agno-2.3.24}/agno/eval/reliability.py +0 -0
  159. {agno-2.3.22 → agno-2.3.24}/agno/eval/utils.py +0 -0
  160. {agno-2.3.22 → agno-2.3.24}/agno/exceptions.py +0 -0
  161. {agno-2.3.22 → agno-2.3.24}/agno/filters.py +0 -0
  162. {agno-2.3.22 → agno-2.3.24}/agno/guardrails/__init__.py +0 -0
  163. {agno-2.3.22 → agno-2.3.24}/agno/guardrails/base.py +0 -0
  164. {agno-2.3.22 → agno-2.3.24}/agno/guardrails/openai.py +0 -0
  165. {agno-2.3.22 → agno-2.3.24}/agno/guardrails/pii.py +0 -0
  166. {agno-2.3.22 → agno-2.3.24}/agno/guardrails/prompt_injection.py +0 -0
  167. {agno-2.3.22 → agno-2.3.24}/agno/hooks/__init__.py +0 -0
  168. {agno-2.3.22 → agno-2.3.24}/agno/hooks/decorator.py +0 -0
  169. {agno-2.3.22 → agno-2.3.24}/agno/integrations/__init__.py +0 -0
  170. {agno-2.3.22 → agno-2.3.24}/agno/integrations/discord/__init__.py +0 -0
  171. {agno-2.3.22 → agno-2.3.24}/agno/integrations/discord/client.py +0 -0
  172. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/__init__.py +0 -0
  173. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/chunking/__init__.py +0 -0
  174. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/chunking/agentic.py +0 -0
  175. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/chunking/document.py +0 -0
  176. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/chunking/fixed.py +0 -0
  177. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/chunking/recursive.py +0 -0
  178. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/chunking/row.py +0 -0
  179. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/chunking/strategy.py +0 -0
  180. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/content.py +0 -0
  181. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/document/__init__.py +0 -0
  182. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/document/base.py +0 -0
  183. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/__init__.py +0 -0
  184. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  185. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/azure_openai.py +0 -0
  186. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/base.py +0 -0
  187. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/cohere.py +0 -0
  188. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/fastembed.py +0 -0
  189. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/fireworks.py +0 -0
  190. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/google.py +0 -0
  191. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/huggingface.py +0 -0
  192. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/jina.py +0 -0
  193. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/langdb.py +0 -0
  194. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/mistral.py +0 -0
  195. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/nebius.py +0 -0
  196. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/ollama.py +0 -0
  197. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/openai.py +0 -0
  198. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  199. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/together.py +0 -0
  200. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/vllm.py +0 -0
  201. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/embedder/voyageai.py +0 -0
  202. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/__init__.py +0 -0
  203. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/arxiv_reader.py +0 -0
  204. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/base.py +0 -0
  205. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/csv_reader.py +0 -0
  206. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/docx_reader.py +0 -0
  207. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
  208. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  209. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/json_reader.py +0 -0
  210. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/markdown_reader.py +0 -0
  211. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/pdf_reader.py +0 -0
  212. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/pptx_reader.py +0 -0
  213. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/reader_factory.py +0 -0
  214. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/s3_reader.py +0 -0
  215. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/tavily_reader.py +0 -0
  216. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/text_reader.py +0 -0
  217. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/web_search_reader.py +0 -0
  218. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/website_reader.py +0 -0
  219. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  220. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reader/youtube_reader.py +0 -0
  221. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/remote_content/__init__.py +0 -0
  222. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/remote_content/remote_content.py +0 -0
  223. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reranker/__init__.py +0 -0
  224. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reranker/base.py +0 -0
  225. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reranker/cohere.py +0 -0
  226. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reranker/infinity.py +0 -0
  227. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  228. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/types.py +0 -0
  229. {agno-2.3.22 → agno-2.3.24}/agno/knowledge/utils.py +0 -0
  230. {agno-2.3.22 → agno-2.3.24}/agno/media.py +0 -0
  231. {agno-2.3.22 → agno-2.3.24}/agno/memory/__init__.py +0 -0
  232. {agno-2.3.22 → agno-2.3.24}/agno/memory/manager.py +0 -0
  233. {agno-2.3.22 → agno-2.3.24}/agno/memory/strategies/__init__.py +0 -0
  234. {agno-2.3.22 → agno-2.3.24}/agno/memory/strategies/base.py +0 -0
  235. {agno-2.3.22 → agno-2.3.24}/agno/memory/strategies/summarize.py +0 -0
  236. {agno-2.3.22 → agno-2.3.24}/agno/memory/strategies/types.py +0 -0
  237. {agno-2.3.22 → agno-2.3.24}/agno/models/__init__.py +0 -0
  238. {agno-2.3.22 → agno-2.3.24}/agno/models/aimlapi/__init__.py +0 -0
  239. {agno-2.3.22 → agno-2.3.24}/agno/models/aimlapi/aimlapi.py +0 -0
  240. {agno-2.3.22 → agno-2.3.24}/agno/models/anthropic/__init__.py +0 -0
  241. {agno-2.3.22 → agno-2.3.24}/agno/models/anthropic/claude.py +0 -0
  242. {agno-2.3.22 → agno-2.3.24}/agno/models/aws/__init__.py +0 -0
  243. {agno-2.3.22 → agno-2.3.24}/agno/models/aws/bedrock.py +0 -0
  244. {agno-2.3.22 → agno-2.3.24}/agno/models/aws/claude.py +0 -0
  245. {agno-2.3.22 → agno-2.3.24}/agno/models/azure/__init__.py +0 -0
  246. {agno-2.3.22 → agno-2.3.24}/agno/models/azure/ai_foundry.py +0 -0
  247. {agno-2.3.22 → agno-2.3.24}/agno/models/azure/openai_chat.py +0 -0
  248. {agno-2.3.22 → agno-2.3.24}/agno/models/cerebras/__init__.py +0 -0
  249. {agno-2.3.22 → agno-2.3.24}/agno/models/cerebras/cerebras.py +0 -0
  250. {agno-2.3.22 → agno-2.3.24}/agno/models/cerebras/cerebras_openai.py +0 -0
  251. {agno-2.3.22 → agno-2.3.24}/agno/models/cohere/__init__.py +0 -0
  252. {agno-2.3.22 → agno-2.3.24}/agno/models/cohere/chat.py +0 -0
  253. {agno-2.3.22 → agno-2.3.24}/agno/models/cometapi/__init__.py +0 -0
  254. {agno-2.3.22 → agno-2.3.24}/agno/models/cometapi/cometapi.py +0 -0
  255. {agno-2.3.22 → agno-2.3.24}/agno/models/dashscope/__init__.py +0 -0
  256. {agno-2.3.22 → agno-2.3.24}/agno/models/dashscope/dashscope.py +0 -0
  257. {agno-2.3.22 → agno-2.3.24}/agno/models/deepinfra/__init__.py +0 -0
  258. {agno-2.3.22 → agno-2.3.24}/agno/models/deepinfra/deepinfra.py +0 -0
  259. {agno-2.3.22 → agno-2.3.24}/agno/models/deepseek/__init__.py +0 -0
  260. {agno-2.3.22 → agno-2.3.24}/agno/models/deepseek/deepseek.py +0 -0
  261. {agno-2.3.22 → agno-2.3.24}/agno/models/defaults.py +0 -0
  262. {agno-2.3.22 → agno-2.3.24}/agno/models/fireworks/__init__.py +0 -0
  263. {agno-2.3.22 → agno-2.3.24}/agno/models/fireworks/fireworks.py +0 -0
  264. {agno-2.3.22 → agno-2.3.24}/agno/models/google/__init__.py +0 -0
  265. {agno-2.3.22 → agno-2.3.24}/agno/models/google/utils.py +0 -0
  266. {agno-2.3.22 → agno-2.3.24}/agno/models/groq/__init__.py +0 -0
  267. {agno-2.3.22 → agno-2.3.24}/agno/models/groq/groq.py +0 -0
  268. {agno-2.3.22 → agno-2.3.24}/agno/models/huggingface/__init__.py +0 -0
  269. {agno-2.3.22 → agno-2.3.24}/agno/models/huggingface/huggingface.py +0 -0
  270. {agno-2.3.22 → agno-2.3.24}/agno/models/ibm/__init__.py +0 -0
  271. {agno-2.3.22 → agno-2.3.24}/agno/models/ibm/watsonx.py +0 -0
  272. {agno-2.3.22 → agno-2.3.24}/agno/models/internlm/__init__.py +0 -0
  273. {agno-2.3.22 → agno-2.3.24}/agno/models/internlm/internlm.py +0 -0
  274. {agno-2.3.22 → agno-2.3.24}/agno/models/langdb/__init__.py +0 -0
  275. {agno-2.3.22 → agno-2.3.24}/agno/models/langdb/langdb.py +0 -0
  276. {agno-2.3.22 → agno-2.3.24}/agno/models/litellm/__init__.py +0 -0
  277. {agno-2.3.22 → agno-2.3.24}/agno/models/litellm/chat.py +0 -0
  278. {agno-2.3.22 → agno-2.3.24}/agno/models/litellm/litellm_openai.py +0 -0
  279. {agno-2.3.22 → agno-2.3.24}/agno/models/llama_cpp/__init__.py +0 -0
  280. {agno-2.3.22 → agno-2.3.24}/agno/models/llama_cpp/llama_cpp.py +0 -0
  281. {agno-2.3.22 → agno-2.3.24}/agno/models/lmstudio/__init__.py +0 -0
  282. {agno-2.3.22 → agno-2.3.24}/agno/models/lmstudio/lmstudio.py +0 -0
  283. {agno-2.3.22 → agno-2.3.24}/agno/models/message.py +0 -0
  284. {agno-2.3.22 → agno-2.3.24}/agno/models/meta/__init__.py +0 -0
  285. {agno-2.3.22 → agno-2.3.24}/agno/models/meta/llama.py +0 -0
  286. {agno-2.3.22 → agno-2.3.24}/agno/models/meta/llama_openai.py +0 -0
  287. {agno-2.3.22 → agno-2.3.24}/agno/models/metrics.py +0 -0
  288. {agno-2.3.22 → agno-2.3.24}/agno/models/mistral/__init__.py +0 -0
  289. {agno-2.3.22 → agno-2.3.24}/agno/models/mistral/mistral.py +0 -0
  290. {agno-2.3.22 → agno-2.3.24}/agno/models/nebius/__init__.py +0 -0
  291. {agno-2.3.22 → agno-2.3.24}/agno/models/nebius/nebius.py +0 -0
  292. {agno-2.3.22 → agno-2.3.24}/agno/models/nexus/__init__.py +0 -0
  293. {agno-2.3.22 → agno-2.3.24}/agno/models/nexus/nexus.py +0 -0
  294. {agno-2.3.22 → agno-2.3.24}/agno/models/nvidia/__init__.py +0 -0
  295. {agno-2.3.22 → agno-2.3.24}/agno/models/nvidia/nvidia.py +0 -0
  296. {agno-2.3.22 → agno-2.3.24}/agno/models/ollama/__init__.py +0 -0
  297. {agno-2.3.22 → agno-2.3.24}/agno/models/ollama/chat.py +0 -0
  298. {agno-2.3.22 → agno-2.3.24}/agno/models/openai/__init__.py +0 -0
  299. {agno-2.3.22 → agno-2.3.24}/agno/models/openai/chat.py +0 -0
  300. {agno-2.3.22 → agno-2.3.24}/agno/models/openai/like.py +0 -0
  301. {agno-2.3.22 → agno-2.3.24}/agno/models/openai/responses.py +0 -0
  302. {agno-2.3.22 → agno-2.3.24}/agno/models/openrouter/__init__.py +0 -0
  303. {agno-2.3.22 → agno-2.3.24}/agno/models/openrouter/openrouter.py +0 -0
  304. {agno-2.3.22 → agno-2.3.24}/agno/models/perplexity/__init__.py +0 -0
  305. {agno-2.3.22 → agno-2.3.24}/agno/models/perplexity/perplexity.py +0 -0
  306. {agno-2.3.22 → agno-2.3.24}/agno/models/portkey/__init__.py +0 -0
  307. {agno-2.3.22 → agno-2.3.24}/agno/models/portkey/portkey.py +0 -0
  308. {agno-2.3.22 → agno-2.3.24}/agno/models/requesty/__init__.py +0 -0
  309. {agno-2.3.22 → agno-2.3.24}/agno/models/requesty/requesty.py +0 -0
  310. {agno-2.3.22 → agno-2.3.24}/agno/models/response.py +0 -0
  311. {agno-2.3.22 → agno-2.3.24}/agno/models/sambanova/__init__.py +0 -0
  312. {agno-2.3.22 → agno-2.3.24}/agno/models/sambanova/sambanova.py +0 -0
  313. {agno-2.3.22 → agno-2.3.24}/agno/models/siliconflow/__init__.py +0 -0
  314. {agno-2.3.22 → agno-2.3.24}/agno/models/siliconflow/siliconflow.py +0 -0
  315. {agno-2.3.22 → agno-2.3.24}/agno/models/together/__init__.py +0 -0
  316. {agno-2.3.22 → agno-2.3.24}/agno/models/together/together.py +0 -0
  317. {agno-2.3.22 → agno-2.3.24}/agno/models/utils.py +0 -0
  318. {agno-2.3.22 → agno-2.3.24}/agno/models/vercel/__init__.py +0 -0
  319. {agno-2.3.22 → agno-2.3.24}/agno/models/vercel/v0.py +0 -0
  320. {agno-2.3.22 → agno-2.3.24}/agno/models/vertexai/__init__.py +0 -0
  321. {agno-2.3.22 → agno-2.3.24}/agno/models/vertexai/claude.py +0 -0
  322. {agno-2.3.22 → agno-2.3.24}/agno/models/vllm/__init__.py +0 -0
  323. {agno-2.3.22 → agno-2.3.24}/agno/models/vllm/vllm.py +0 -0
  324. {agno-2.3.22 → agno-2.3.24}/agno/models/xai/__init__.py +0 -0
  325. {agno-2.3.22 → agno-2.3.24}/agno/models/xai/xai.py +0 -0
  326. {agno-2.3.22 → agno-2.3.24}/agno/os/__init__.py +0 -0
  327. {agno-2.3.22 → agno-2.3.24}/agno/os/app.py +0 -0
  328. {agno-2.3.22 → agno-2.3.24}/agno/os/auth.py +0 -0
  329. {agno-2.3.22 → agno-2.3.24}/agno/os/config.py +0 -0
  330. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/__init__.py +0 -0
  331. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/a2a/__init__.py +0 -0
  332. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/a2a/a2a.py +0 -0
  333. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/a2a/router.py +0 -0
  334. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/a2a/utils.py +0 -0
  335. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/agui/__init__.py +0 -0
  336. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/agui/agui.py +0 -0
  337. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/agui/router.py +0 -0
  338. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/agui/utils.py +0 -0
  339. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/base.py +0 -0
  340. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/slack/__init__.py +0 -0
  341. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/slack/router.py +0 -0
  342. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/slack/security.py +0 -0
  343. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/slack/slack.py +0 -0
  344. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  345. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/whatsapp/router.py +0 -0
  346. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/whatsapp/security.py +0 -0
  347. {agno-2.3.22 → agno-2.3.24}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  348. {agno-2.3.22 → agno-2.3.24}/agno/os/managers.py +0 -0
  349. {agno-2.3.22 → agno-2.3.24}/agno/os/mcp.py +0 -0
  350. {agno-2.3.22 → agno-2.3.24}/agno/os/middleware/__init__.py +0 -0
  351. {agno-2.3.22 → agno-2.3.24}/agno/os/middleware/jwt.py +0 -0
  352. {agno-2.3.22 → agno-2.3.24}/agno/os/router.py +0 -0
  353. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/__init__.py +0 -0
  354. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/agents/__init__.py +0 -0
  355. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/agents/schema.py +0 -0
  356. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/database.py +0 -0
  357. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/evals/__init__.py +0 -0
  358. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/evals/schemas.py +0 -0
  359. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/evals/utils.py +0 -0
  360. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/health.py +0 -0
  361. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/home.py +0 -0
  362. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/knowledge/__init__.py +0 -0
  363. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/memory/__init__.py +0 -0
  364. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/memory/schemas.py +0 -0
  365. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/metrics/__init__.py +0 -0
  366. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/metrics/metrics.py +0 -0
  367. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/metrics/schemas.py +0 -0
  368. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/session/__init__.py +0 -0
  369. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/teams/__init__.py +0 -0
  370. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/teams/schema.py +0 -0
  371. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/traces/__init__.py +0 -0
  372. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/traces/schemas.py +0 -0
  373. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/workflows/__init__.py +0 -0
  374. {agno-2.3.22 → agno-2.3.24}/agno/os/routers/workflows/schema.py +0 -0
  375. {agno-2.3.22 → agno-2.3.24}/agno/os/scopes.py +0 -0
  376. {agno-2.3.22 → agno-2.3.24}/agno/os/settings.py +0 -0
  377. {agno-2.3.22 → agno-2.3.24}/agno/py.typed +0 -0
  378. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/__init__.py +0 -0
  379. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/anthropic.py +0 -0
  380. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/azure_ai_foundry.py +0 -0
  381. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/deepseek.py +0 -0
  382. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/default.py +0 -0
  383. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/gemini.py +0 -0
  384. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/groq.py +0 -0
  385. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/helpers.py +0 -0
  386. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/manager.py +0 -0
  387. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/ollama.py +0 -0
  388. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/openai.py +0 -0
  389. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/step.py +0 -0
  390. {agno-2.3.22 → agno-2.3.24}/agno/reasoning/vertexai.py +0 -0
  391. {agno-2.3.22 → agno-2.3.24}/agno/remote/__init__.py +0 -0
  392. {agno-2.3.22 → agno-2.3.24}/agno/run/__init__.py +0 -0
  393. {agno-2.3.22 → agno-2.3.24}/agno/run/agent.py +0 -0
  394. {agno-2.3.22 → agno-2.3.24}/agno/run/base.py +0 -0
  395. {agno-2.3.22 → agno-2.3.24}/agno/run/cancel.py +0 -0
  396. {agno-2.3.22 → agno-2.3.24}/agno/run/cancellation_management/__init__.py +0 -0
  397. {agno-2.3.22 → agno-2.3.24}/agno/run/cancellation_management/base.py +0 -0
  398. {agno-2.3.22 → agno-2.3.24}/agno/run/cancellation_management/in_memory_cancellation_manager.py +0 -0
  399. {agno-2.3.22 → agno-2.3.24}/agno/run/cancellation_management/redis_cancellation_manager.py +0 -0
  400. {agno-2.3.22 → agno-2.3.24}/agno/run/messages.py +0 -0
  401. {agno-2.3.22 → agno-2.3.24}/agno/run/requirement.py +0 -0
  402. {agno-2.3.22 → agno-2.3.24}/agno/run/team.py +0 -0
  403. {agno-2.3.22 → agno-2.3.24}/agno/run/workflow.py +0 -0
  404. {agno-2.3.22 → agno-2.3.24}/agno/session/__init__.py +0 -0
  405. {agno-2.3.22 → agno-2.3.24}/agno/session/agent.py +0 -0
  406. {agno-2.3.22 → agno-2.3.24}/agno/session/summary.py +0 -0
  407. {agno-2.3.22 → agno-2.3.24}/agno/session/team.py +0 -0
  408. {agno-2.3.22 → agno-2.3.24}/agno/session/workflow.py +0 -0
  409. {agno-2.3.22 → agno-2.3.24}/agno/skills/__init__.py +0 -0
  410. {agno-2.3.22 → agno-2.3.24}/agno/skills/agent_skills.py +0 -0
  411. {agno-2.3.22 → agno-2.3.24}/agno/skills/errors.py +0 -0
  412. {agno-2.3.22 → agno-2.3.24}/agno/skills/loaders/__init__.py +0 -0
  413. {agno-2.3.22 → agno-2.3.24}/agno/skills/loaders/base.py +0 -0
  414. {agno-2.3.22 → agno-2.3.24}/agno/skills/loaders/local.py +0 -0
  415. {agno-2.3.22 → agno-2.3.24}/agno/skills/skill.py +0 -0
  416. {agno-2.3.22 → agno-2.3.24}/agno/skills/utils.py +0 -0
  417. {agno-2.3.22 → agno-2.3.24}/agno/skills/validator.py +0 -0
  418. {agno-2.3.22 → agno-2.3.24}/agno/table.py +0 -0
  419. {agno-2.3.22 → agno-2.3.24}/agno/team/__init__.py +0 -0
  420. {agno-2.3.22 → agno-2.3.24}/agno/tools/__init__.py +0 -0
  421. {agno-2.3.22 → agno-2.3.24}/agno/tools/agentql.py +0 -0
  422. {agno-2.3.22 → agno-2.3.24}/agno/tools/airflow.py +0 -0
  423. {agno-2.3.22 → agno-2.3.24}/agno/tools/api.py +0 -0
  424. {agno-2.3.22 → agno-2.3.24}/agno/tools/apify.py +0 -0
  425. {agno-2.3.22 → agno-2.3.24}/agno/tools/arxiv.py +0 -0
  426. {agno-2.3.22 → agno-2.3.24}/agno/tools/aws_lambda.py +0 -0
  427. {agno-2.3.22 → agno-2.3.24}/agno/tools/aws_ses.py +0 -0
  428. {agno-2.3.22 → agno-2.3.24}/agno/tools/baidusearch.py +0 -0
  429. {agno-2.3.22 → agno-2.3.24}/agno/tools/bitbucket.py +0 -0
  430. {agno-2.3.22 → agno-2.3.24}/agno/tools/bravesearch.py +0 -0
  431. {agno-2.3.22 → agno-2.3.24}/agno/tools/brightdata.py +0 -0
  432. {agno-2.3.22 → agno-2.3.24}/agno/tools/calcom.py +0 -0
  433. {agno-2.3.22 → agno-2.3.24}/agno/tools/calculator.py +0 -0
  434. {agno-2.3.22 → agno-2.3.24}/agno/tools/cartesia.py +0 -0
  435. {agno-2.3.22 → agno-2.3.24}/agno/tools/clickup.py +0 -0
  436. {agno-2.3.22 → agno-2.3.24}/agno/tools/confluence.py +0 -0
  437. {agno-2.3.22 → agno-2.3.24}/agno/tools/csv_toolkit.py +0 -0
  438. {agno-2.3.22 → agno-2.3.24}/agno/tools/dalle.py +0 -0
  439. {agno-2.3.22 → agno-2.3.24}/agno/tools/daytona.py +0 -0
  440. {agno-2.3.22 → agno-2.3.24}/agno/tools/decorator.py +0 -0
  441. {agno-2.3.22 → agno-2.3.24}/agno/tools/desi_vocal.py +0 -0
  442. {agno-2.3.22 → agno-2.3.24}/agno/tools/discord.py +0 -0
  443. {agno-2.3.22 → agno-2.3.24}/agno/tools/docker.py +0 -0
  444. {agno-2.3.22 → agno-2.3.24}/agno/tools/duckdb.py +0 -0
  445. {agno-2.3.22 → agno-2.3.24}/agno/tools/duckduckgo.py +0 -0
  446. {agno-2.3.22 → agno-2.3.24}/agno/tools/e2b.py +0 -0
  447. {agno-2.3.22 → agno-2.3.24}/agno/tools/eleven_labs.py +0 -0
  448. {agno-2.3.22 → agno-2.3.24}/agno/tools/email.py +0 -0
  449. {agno-2.3.22 → agno-2.3.24}/agno/tools/evm.py +0 -0
  450. {agno-2.3.22 → agno-2.3.24}/agno/tools/exa.py +0 -0
  451. {agno-2.3.22 → agno-2.3.24}/agno/tools/fal.py +0 -0
  452. {agno-2.3.22 → agno-2.3.24}/agno/tools/file_generation.py +0 -0
  453. {agno-2.3.22 → agno-2.3.24}/agno/tools/financial_datasets.py +0 -0
  454. {agno-2.3.22 → agno-2.3.24}/agno/tools/firecrawl.py +0 -0
  455. {agno-2.3.22 → agno-2.3.24}/agno/tools/giphy.py +0 -0
  456. {agno-2.3.22 → agno-2.3.24}/agno/tools/github.py +0 -0
  457. {agno-2.3.22 → agno-2.3.24}/agno/tools/gmail.py +0 -0
  458. {agno-2.3.22 → agno-2.3.24}/agno/tools/google_bigquery.py +0 -0
  459. {agno-2.3.22 → agno-2.3.24}/agno/tools/google_drive.py +0 -0
  460. {agno-2.3.22 → agno-2.3.24}/agno/tools/google_maps.py +0 -0
  461. {agno-2.3.22 → agno-2.3.24}/agno/tools/googlecalendar.py +0 -0
  462. {agno-2.3.22 → agno-2.3.24}/agno/tools/googlesheets.py +0 -0
  463. {agno-2.3.22 → agno-2.3.24}/agno/tools/hackernews.py +0 -0
  464. {agno-2.3.22 → agno-2.3.24}/agno/tools/jina.py +0 -0
  465. {agno-2.3.22 → agno-2.3.24}/agno/tools/jira.py +0 -0
  466. {agno-2.3.22 → agno-2.3.24}/agno/tools/knowledge.py +0 -0
  467. {agno-2.3.22 → agno-2.3.24}/agno/tools/linear.py +0 -0
  468. {agno-2.3.22 → agno-2.3.24}/agno/tools/linkup.py +0 -0
  469. {agno-2.3.22 → agno-2.3.24}/agno/tools/local_file_system.py +0 -0
  470. {agno-2.3.22 → agno-2.3.24}/agno/tools/lumalab.py +0 -0
  471. {agno-2.3.22 → agno-2.3.24}/agno/tools/mcp/__init__.py +0 -0
  472. {agno-2.3.22 → agno-2.3.24}/agno/tools/mcp/multi_mcp.py +0 -0
  473. {agno-2.3.22 → agno-2.3.24}/agno/tools/mcp/params.py +0 -0
  474. {agno-2.3.22 → agno-2.3.24}/agno/tools/mcp_toolbox.py +0 -0
  475. {agno-2.3.22 → agno-2.3.24}/agno/tools/mem0.py +0 -0
  476. {agno-2.3.22 → agno-2.3.24}/agno/tools/memory.py +0 -0
  477. {agno-2.3.22 → agno-2.3.24}/agno/tools/models/__init__.py +0 -0
  478. {agno-2.3.22 → agno-2.3.24}/agno/tools/models/azure_openai.py +0 -0
  479. {agno-2.3.22 → agno-2.3.24}/agno/tools/models/gemini.py +0 -0
  480. {agno-2.3.22 → agno-2.3.24}/agno/tools/models/groq.py +0 -0
  481. {agno-2.3.22 → agno-2.3.24}/agno/tools/models/morph.py +0 -0
  482. {agno-2.3.22 → agno-2.3.24}/agno/tools/models/nebius.py +0 -0
  483. {agno-2.3.22 → agno-2.3.24}/agno/tools/models_labs.py +0 -0
  484. {agno-2.3.22 → agno-2.3.24}/agno/tools/moviepy_video.py +0 -0
  485. {agno-2.3.22 → agno-2.3.24}/agno/tools/nano_banana.py +0 -0
  486. {agno-2.3.22 → agno-2.3.24}/agno/tools/neo4j.py +0 -0
  487. {agno-2.3.22 → agno-2.3.24}/agno/tools/newspaper.py +0 -0
  488. {agno-2.3.22 → agno-2.3.24}/agno/tools/newspaper4k.py +0 -0
  489. {agno-2.3.22 → agno-2.3.24}/agno/tools/notion.py +0 -0
  490. {agno-2.3.22 → agno-2.3.24}/agno/tools/openai.py +0 -0
  491. {agno-2.3.22 → agno-2.3.24}/agno/tools/openbb.py +0 -0
  492. {agno-2.3.22 → agno-2.3.24}/agno/tools/opencv.py +0 -0
  493. {agno-2.3.22 → agno-2.3.24}/agno/tools/openweather.py +0 -0
  494. {agno-2.3.22 → agno-2.3.24}/agno/tools/oxylabs.py +0 -0
  495. {agno-2.3.22 → agno-2.3.24}/agno/tools/pandas.py +0 -0
  496. {agno-2.3.22 → agno-2.3.24}/agno/tools/parallel.py +0 -0
  497. {agno-2.3.22 → agno-2.3.24}/agno/tools/postgres.py +0 -0
  498. {agno-2.3.22 → agno-2.3.24}/agno/tools/pubmed.py +0 -0
  499. {agno-2.3.22 → agno-2.3.24}/agno/tools/reasoning.py +0 -0
  500. {agno-2.3.22 → agno-2.3.24}/agno/tools/reddit.py +0 -0
  501. {agno-2.3.22 → agno-2.3.24}/agno/tools/redshift.py +0 -0
  502. {agno-2.3.22 → agno-2.3.24}/agno/tools/replicate.py +0 -0
  503. {agno-2.3.22 → agno-2.3.24}/agno/tools/resend.py +0 -0
  504. {agno-2.3.22 → agno-2.3.24}/agno/tools/scrapegraph.py +0 -0
  505. {agno-2.3.22 → agno-2.3.24}/agno/tools/searxng.py +0 -0
  506. {agno-2.3.22 → agno-2.3.24}/agno/tools/serpapi.py +0 -0
  507. {agno-2.3.22 → agno-2.3.24}/agno/tools/serper.py +0 -0
  508. {agno-2.3.22 → agno-2.3.24}/agno/tools/shell.py +0 -0
  509. {agno-2.3.22 → agno-2.3.24}/agno/tools/shopify.py +0 -0
  510. {agno-2.3.22 → agno-2.3.24}/agno/tools/slack.py +0 -0
  511. {agno-2.3.22 → agno-2.3.24}/agno/tools/sleep.py +0 -0
  512. {agno-2.3.22 → agno-2.3.24}/agno/tools/spider.py +0 -0
  513. {agno-2.3.22 → agno-2.3.24}/agno/tools/spotify.py +0 -0
  514. {agno-2.3.22 → agno-2.3.24}/agno/tools/sql.py +0 -0
  515. {agno-2.3.22 → agno-2.3.24}/agno/tools/streamlit/__init__.py +0 -0
  516. {agno-2.3.22 → agno-2.3.24}/agno/tools/streamlit/components.py +0 -0
  517. {agno-2.3.22 → agno-2.3.24}/agno/tools/tavily.py +0 -0
  518. {agno-2.3.22 → agno-2.3.24}/agno/tools/telegram.py +0 -0
  519. {agno-2.3.22 → agno-2.3.24}/agno/tools/todoist.py +0 -0
  520. {agno-2.3.22 → agno-2.3.24}/agno/tools/tool_registry.py +0 -0
  521. {agno-2.3.22 → agno-2.3.24}/agno/tools/trafilatura.py +0 -0
  522. {agno-2.3.22 → agno-2.3.24}/agno/tools/trello.py +0 -0
  523. {agno-2.3.22 → agno-2.3.24}/agno/tools/twilio.py +0 -0
  524. {agno-2.3.22 → agno-2.3.24}/agno/tools/user_control_flow.py +0 -0
  525. {agno-2.3.22 → agno-2.3.24}/agno/tools/valyu.py +0 -0
  526. {agno-2.3.22 → agno-2.3.24}/agno/tools/visualization.py +0 -0
  527. {agno-2.3.22 → agno-2.3.24}/agno/tools/webbrowser.py +0 -0
  528. {agno-2.3.22 → agno-2.3.24}/agno/tools/webex.py +0 -0
  529. {agno-2.3.22 → agno-2.3.24}/agno/tools/website.py +0 -0
  530. {agno-2.3.22 → agno-2.3.24}/agno/tools/webtools.py +0 -0
  531. {agno-2.3.22 → agno-2.3.24}/agno/tools/whatsapp.py +0 -0
  532. {agno-2.3.22 → agno-2.3.24}/agno/tools/wikipedia.py +0 -0
  533. {agno-2.3.22 → agno-2.3.24}/agno/tools/workflow.py +0 -0
  534. {agno-2.3.22 → agno-2.3.24}/agno/tools/x.py +0 -0
  535. {agno-2.3.22 → agno-2.3.24}/agno/tools/yfinance.py +0 -0
  536. {agno-2.3.22 → agno-2.3.24}/agno/tools/youtube.py +0 -0
  537. {agno-2.3.22 → agno-2.3.24}/agno/tools/zendesk.py +0 -0
  538. {agno-2.3.22 → agno-2.3.24}/agno/tools/zep.py +0 -0
  539. {agno-2.3.22 → agno-2.3.24}/agno/tools/zoom.py +0 -0
  540. {agno-2.3.22 → agno-2.3.24}/agno/tracing/__init__.py +0 -0
  541. {agno-2.3.22 → agno-2.3.24}/agno/tracing/exporter.py +0 -0
  542. {agno-2.3.22 → agno-2.3.24}/agno/tracing/schemas.py +0 -0
  543. {agno-2.3.22 → agno-2.3.24}/agno/tracing/setup.py +0 -0
  544. {agno-2.3.22 → agno-2.3.24}/agno/utils/__init__.py +0 -0
  545. {agno-2.3.22 → agno-2.3.24}/agno/utils/agent.py +0 -0
  546. {agno-2.3.22 → agno-2.3.24}/agno/utils/audio.py +0 -0
  547. {agno-2.3.22 → agno-2.3.24}/agno/utils/certs.py +0 -0
  548. {agno-2.3.22 → agno-2.3.24}/agno/utils/code_execution.py +0 -0
  549. {agno-2.3.22 → agno-2.3.24}/agno/utils/common.py +0 -0
  550. {agno-2.3.22 → agno-2.3.24}/agno/utils/cryptography.py +0 -0
  551. {agno-2.3.22 → agno-2.3.24}/agno/utils/dttm.py +0 -0
  552. {agno-2.3.22 → agno-2.3.24}/agno/utils/enum.py +0 -0
  553. {agno-2.3.22 → agno-2.3.24}/agno/utils/env.py +0 -0
  554. {agno-2.3.22 → agno-2.3.24}/agno/utils/events.py +0 -0
  555. {agno-2.3.22 → agno-2.3.24}/agno/utils/format_str.py +0 -0
  556. {agno-2.3.22 → agno-2.3.24}/agno/utils/functions.py +0 -0
  557. {agno-2.3.22 → agno-2.3.24}/agno/utils/gemini.py +0 -0
  558. {agno-2.3.22 → agno-2.3.24}/agno/utils/hooks.py +0 -0
  559. {agno-2.3.22 → agno-2.3.24}/agno/utils/http.py +0 -0
  560. {agno-2.3.22 → agno-2.3.24}/agno/utils/json_schema.py +0 -0
  561. {agno-2.3.22 → agno-2.3.24}/agno/utils/knowledge.py +0 -0
  562. {agno-2.3.22 → agno-2.3.24}/agno/utils/location.py +0 -0
  563. {agno-2.3.22 → agno-2.3.24}/agno/utils/log.py +0 -0
  564. {agno-2.3.22 → agno-2.3.24}/agno/utils/mcp.py +0 -0
  565. {agno-2.3.22 → agno-2.3.24}/agno/utils/media.py +0 -0
  566. {agno-2.3.22 → agno-2.3.24}/agno/utils/merge_dict.py +0 -0
  567. {agno-2.3.22 → agno-2.3.24}/agno/utils/message.py +0 -0
  568. {agno-2.3.22 → agno-2.3.24}/agno/utils/models/__init__.py +0 -0
  569. {agno-2.3.22 → agno-2.3.24}/agno/utils/models/ai_foundry.py +0 -0
  570. {agno-2.3.22 → agno-2.3.24}/agno/utils/models/claude.py +0 -0
  571. {agno-2.3.22 → agno-2.3.24}/agno/utils/models/cohere.py +0 -0
  572. {agno-2.3.22 → agno-2.3.24}/agno/utils/models/llama.py +0 -0
  573. {agno-2.3.22 → agno-2.3.24}/agno/utils/models/mistral.py +0 -0
  574. {agno-2.3.22 → agno-2.3.24}/agno/utils/models/openai_responses.py +0 -0
  575. {agno-2.3.22 → agno-2.3.24}/agno/utils/models/schema_utils.py +0 -0
  576. {agno-2.3.22 → agno-2.3.24}/agno/utils/models/watsonx.py +0 -0
  577. {agno-2.3.22 → agno-2.3.24}/agno/utils/openai.py +0 -0
  578. {agno-2.3.22 → agno-2.3.24}/agno/utils/os.py +0 -0
  579. {agno-2.3.22 → agno-2.3.24}/agno/utils/pickle.py +0 -0
  580. {agno-2.3.22 → agno-2.3.24}/agno/utils/pprint.py +0 -0
  581. {agno-2.3.22 → agno-2.3.24}/agno/utils/print_response/__init__.py +0 -0
  582. {agno-2.3.22 → agno-2.3.24}/agno/utils/print_response/agent.py +0 -0
  583. {agno-2.3.22 → agno-2.3.24}/agno/utils/print_response/team.py +0 -0
  584. {agno-2.3.22 → agno-2.3.24}/agno/utils/print_response/workflow.py +0 -0
  585. {agno-2.3.22 → agno-2.3.24}/agno/utils/prompts.py +0 -0
  586. {agno-2.3.22 → agno-2.3.24}/agno/utils/reasoning.py +0 -0
  587. {agno-2.3.22 → agno-2.3.24}/agno/utils/remote.py +0 -0
  588. {agno-2.3.22 → agno-2.3.24}/agno/utils/response.py +0 -0
  589. {agno-2.3.22 → agno-2.3.24}/agno/utils/response_iterator.py +0 -0
  590. {agno-2.3.22 → agno-2.3.24}/agno/utils/safe_formatter.py +0 -0
  591. {agno-2.3.22 → agno-2.3.24}/agno/utils/serialize.py +0 -0
  592. {agno-2.3.22 → agno-2.3.24}/agno/utils/shell.py +0 -0
  593. {agno-2.3.22 → agno-2.3.24}/agno/utils/streamlit.py +0 -0
  594. {agno-2.3.22 → agno-2.3.24}/agno/utils/string.py +0 -0
  595. {agno-2.3.22 → agno-2.3.24}/agno/utils/team.py +0 -0
  596. {agno-2.3.22 → agno-2.3.24}/agno/utils/timer.py +0 -0
  597. {agno-2.3.22 → agno-2.3.24}/agno/utils/tokens.py +0 -0
  598. {agno-2.3.22 → agno-2.3.24}/agno/utils/tools.py +0 -0
  599. {agno-2.3.22 → agno-2.3.24}/agno/utils/web.py +0 -0
  600. {agno-2.3.22 → agno-2.3.24}/agno/utils/whatsapp.py +0 -0
  601. {agno-2.3.22 → agno-2.3.24}/agno/utils/yaml_io.py +0 -0
  602. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/__init__.py +0 -0
  603. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/base.py +0 -0
  604. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/cassandra/__init__.py +0 -0
  605. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  606. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/cassandra/index.py +0 -0
  607. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/chroma/__init__.py +0 -0
  608. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/clickhouse/__init__.py +0 -0
  609. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/clickhouse/index.py +0 -0
  610. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/couchbase/__init__.py +0 -0
  611. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/distance.py +0 -0
  612. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/lancedb/__init__.py +0 -0
  613. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/lancedb/lance_db.py +0 -0
  614. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/langchaindb/__init__.py +0 -0
  615. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  616. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/lightrag/__init__.py +0 -0
  617. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/lightrag/lightrag.py +0 -0
  618. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/llamaindex/__init__.py +0 -0
  619. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  620. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/milvus/__init__.py +0 -0
  621. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/mongodb/__init__.py +0 -0
  622. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/pgvector/__init__.py +0 -0
  623. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/pgvector/index.py +0 -0
  624. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/pineconedb/__init__.py +0 -0
  625. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/qdrant/__init__.py +0 -0
  626. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/redis/__init__.py +0 -0
  627. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/search.py +0 -0
  628. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/singlestore/__init__.py +0 -0
  629. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/singlestore/index.py +0 -0
  630. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/surrealdb/__init__.py +0 -0
  631. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/upstashdb/__init__.py +0 -0
  632. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  633. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/weaviate/__init__.py +0 -0
  634. {agno-2.3.22 → agno-2.3.24}/agno/vectordb/weaviate/index.py +0 -0
  635. {agno-2.3.22 → agno-2.3.24}/agno/workflow/__init__.py +0 -0
  636. {agno-2.3.22 → agno-2.3.24}/agno/workflow/agent.py +0 -0
  637. {agno-2.3.22 → agno-2.3.24}/agno/workflow/condition.py +0 -0
  638. {agno-2.3.22 → agno-2.3.24}/agno/workflow/loop.py +0 -0
  639. {agno-2.3.22 → agno-2.3.24}/agno/workflow/parallel.py +0 -0
  640. {agno-2.3.22 → agno-2.3.24}/agno/workflow/router.py +0 -0
  641. {agno-2.3.22 → agno-2.3.24}/agno/workflow/step.py +0 -0
  642. {agno-2.3.22 → agno-2.3.24}/agno/workflow/steps.py +0 -0
  643. {agno-2.3.22 → agno-2.3.24}/agno/workflow/types.py +0 -0
  644. {agno-2.3.22 → agno-2.3.24}/agno.egg-info/SOURCES.txt +0 -0
  645. {agno-2.3.22 → agno-2.3.24}/agno.egg-info/dependency_links.txt +0 -0
  646. {agno-2.3.22 → agno-2.3.24}/agno.egg-info/requires.txt +0 -0
  647. {agno-2.3.22 → agno-2.3.24}/agno.egg-info/top_level.txt +0 -0
  648. {agno-2.3.22 → agno-2.3.24}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.3.22
3
+ Version: 2.3.24
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
@@ -61,6 +61,9 @@ from agno.run.agent import (
61
61
  RunOutput,
62
62
  RunOutputEvent,
63
63
  )
64
+ from agno.run.cancel import (
65
+ acancel_run as acancel_run_global,
66
+ )
64
67
  from agno.run.cancel import (
65
68
  acleanup_run,
66
69
  araise_if_cancelled,
@@ -2030,6 +2033,7 @@ class Agent:
2030
2033
  run_response=run_response,
2031
2034
  run_context=run_context,
2032
2035
  session=agent_session,
2036
+ async_mode=True,
2033
2037
  )
2034
2038
 
2035
2039
  # 6. Prepare run messages
@@ -2377,6 +2381,7 @@ class Agent:
2377
2381
  run_response=run_response,
2378
2382
  run_context=run_context,
2379
2383
  session=agent_session,
2384
+ async_mode=True,
2380
2385
  )
2381
2386
 
2382
2387
  # 6. Prepare run messages
@@ -3297,6 +3302,9 @@ class Agent:
3297
3302
  tools=tools,
3298
3303
  tool_choice=self.tool_choice,
3299
3304
  tool_call_limit=self.tool_call_limit,
3305
+ run_response=run_response,
3306
+ send_media_to_model=self.send_media_to_model,
3307
+ compression_manager=self.compression_manager if self.compress_tool_results else None,
3300
3308
  )
3301
3309
 
3302
3310
  # Check for cancellation after model processing
@@ -3987,6 +3995,7 @@ class Agent:
3987
3995
  run_response=run_response,
3988
3996
  run_context=run_context,
3989
3997
  session=agent_session,
3998
+ async_mode=True,
3990
3999
  )
3991
4000
 
3992
4001
  # 6. Prepare run messages
@@ -4009,6 +4018,9 @@ class Agent:
4009
4018
  tools=_tools,
4010
4019
  tool_choice=self.tool_choice,
4011
4020
  tool_call_limit=self.tool_call_limit,
4021
+ run_response=run_response,
4022
+ send_media_to_model=self.send_media_to_model,
4023
+ compression_manager=self.compression_manager if self.compress_tool_results else None,
4012
4024
  )
4013
4025
  # Check for cancellation after model call
4014
4026
  await araise_if_cancelled(run_response.run_id) # type: ignore
@@ -4293,6 +4305,7 @@ class Agent:
4293
4305
  run_response=run_response,
4294
4306
  run_context=run_context,
4295
4307
  session=agent_session,
4308
+ async_mode=True,
4296
4309
  )
4297
4310
 
4298
4311
  # 6. Prepare run messages
@@ -6514,6 +6527,7 @@ class Agent:
6514
6527
  run_response: RunOutput,
6515
6528
  run_context: RunContext,
6516
6529
  session: AgentSession,
6530
+ async_mode: bool = False,
6517
6531
  ) -> List[Union[Function, dict]]:
6518
6532
  _function_names = []
6519
6533
  _functions: List[Union[Function, dict]] = []
@@ -6544,7 +6558,8 @@ class Agent:
6544
6558
 
6545
6559
  elif isinstance(tool, Toolkit):
6546
6560
  # For each function in the toolkit and process entrypoint
6547
- for name, _func in tool.functions.items():
6561
+ toolkit_functions = tool.get_async_functions() if async_mode else tool.get_functions()
6562
+ for name, _func in toolkit_functions.items():
6548
6563
  if name in _function_names:
6549
6564
  continue
6550
6565
  _function_names.append(name)
@@ -6774,6 +6789,18 @@ class Agent:
6774
6789
  """
6775
6790
  return cancel_run_global(run_id)
6776
6791
 
6792
+ @staticmethod
6793
+ async def acancel_run(run_id: str) -> bool:
6794
+ """Cancel a running agent execution (async version).
6795
+
6796
+ Args:
6797
+ run_id (str): The run_id to cancel.
6798
+
6799
+ Returns:
6800
+ bool: True if the run was found and marked for cancellation, False otherwise.
6801
+ """
6802
+ return await acancel_run_global(run_id)
6803
+
6777
6804
  # -*- Session Database Functions
6778
6805
  def _read_session(
6779
6806
  self, session_id: str, session_type: SessionType = SessionType.AGENT
@@ -488,7 +488,7 @@ class RemoteAgent(BaseRemote):
488
488
  else:
489
489
  raise ValueError("No client available")
490
490
 
491
- async def cancel_run(self, run_id: str, auth_token: Optional[str] = None) -> bool:
491
+ async def acancel_run(self, run_id: str, auth_token: Optional[str] = None) -> bool:
492
492
  """Cancel a running agent execution.
493
493
 
494
494
  Args:
@@ -1,5 +1,6 @@
1
1
  import time
2
2
  from datetime import date, datetime, timedelta, timezone
3
+ from importlib import metadata
3
4
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
4
5
  from uuid import uuid4
5
6
 
@@ -31,10 +32,13 @@ try:
31
32
  from pymongo import MongoClient, ReturnDocument
32
33
  from pymongo.collection import Collection
33
34
  from pymongo.database import Database
35
+ from pymongo.driver_info import DriverInfo
34
36
  from pymongo.errors import OperationFailure
35
37
  except ImportError:
36
38
  raise ImportError("`pymongo` not installed. Please install it using `pip install pymongo`")
37
39
 
40
+ DRIVER_METADATA = DriverInfo(name="Agno", version=metadata.version("agno"))
41
+
38
42
 
39
43
  class MongoDb(BaseDb):
40
44
  def __init__(
@@ -92,10 +96,14 @@ class MongoDb(BaseDb):
92
96
 
93
97
  _client: Optional[MongoClient] = db_client
94
98
  if _client is None and db_url is not None:
95
- _client = MongoClient(db_url)
99
+ _client = MongoClient(db_url, driver=DRIVER_METADATA)
96
100
  if _client is None:
97
101
  raise ValueError("One of db_url or db_client must be provided")
98
102
 
103
+ # append_metadata was added in PyMongo 4.14.0, but is a valid database name on earlier versions
104
+ if callable(_client.append_metadata):
105
+ _client.append_metadata(DRIVER_METADATA)
106
+
99
107
  self.db_url: Optional[str] = db_url
100
108
  self.db_client: MongoClient = _client
101
109
 
@@ -158,7 +158,10 @@ class AsyncMySQLDb(AsyncBaseDb):
158
158
  Table: SQLAlchemy Table object
159
159
  """
160
160
  try:
161
- table_schema = get_table_schema_definition(table_type).copy()
161
+ # Pass traces_table_name and db_schema for spans table foreign key resolution
162
+ table_schema = get_table_schema_definition(
163
+ table_type, traces_table_name=self.trace_table_name, db_schema=self.db_schema
164
+ ).copy()
162
165
 
163
166
  log_debug(f"Creating table {self.db_schema}.{table_name} with schema: {table_schema}")
164
167
 
@@ -183,12 +186,7 @@ class AsyncMySQLDb(AsyncBaseDb):
183
186
 
184
187
  # Handle foreign key constraint
185
188
  if "foreign_key" in col_config:
186
- fk_ref = col_config["foreign_key"]
187
- # For spans table, dynamically replace the traces table reference
188
- # with the actual trace table name configured for this db instance
189
- if table_type == "spans" and "trace_id" in fk_ref:
190
- fk_ref = f"{self.db_schema}.{self.trace_table_name}.trace_id"
191
- column_args.append(ForeignKey(fk_ref))
189
+ column_args.append(ForeignKey(col_config["foreign_key"]))
192
190
 
193
191
  columns.append(Column(*column_args, **column_kwargs)) # type: ignore
194
192
 
@@ -155,7 +155,10 @@ class MySQLDb(BaseDb):
155
155
  Table: SQLAlchemy Table object
156
156
  """
157
157
  try:
158
- table_schema = get_table_schema_definition(table_type).copy()
158
+ # Pass traces_table_name and db_schema for spans table foreign key resolution
159
+ table_schema = get_table_schema_definition(
160
+ table_type, traces_table_name=self.trace_table_name, db_schema=self.db_schema
161
+ ).copy()
159
162
 
160
163
  columns: List[Column] = []
161
164
  indexes: List[str] = []
@@ -178,12 +181,7 @@ class MySQLDb(BaseDb):
178
181
 
179
182
  # Handle foreign key constraint
180
183
  if "foreign_key" in col_config:
181
- fk_ref = col_config["foreign_key"]
182
- # For spans table, dynamically replace the traces table reference
183
- # with the actual trace table name configured for this db instance
184
- if table_type == "spans" and "trace_id" in fk_ref:
185
- fk_ref = f"{self.db_schema}.{self.trace_table_name}.trace_id"
186
- column_args.append(ForeignKey(fk_ref))
184
+ column_args.append(ForeignKey(col_config["foreign_key"]))
187
185
 
188
186
  columns.append(Column(*column_args, **column_kwargs)) # type: ignore
189
187
 
@@ -136,37 +136,56 @@ TRACE_TABLE_SCHEMA = {
136
136
  "created_at": {"type": lambda: String(128), "nullable": False, "index": True}, # ISO 8601 datetime string
137
137
  }
138
138
 
139
- SPAN_TABLE_SCHEMA = {
140
- "span_id": {"type": lambda: String(128), "primary_key": True, "nullable": False},
141
- "trace_id": {
142
- "type": lambda: String(128),
143
- "nullable": False,
144
- "index": True,
145
- "foreign_key": "agno_traces.trace_id", # Foreign key to traces table
146
- },
147
- "parent_span_id": {"type": lambda: String(128), "nullable": True, "index": True},
148
- "name": {"type": lambda: String(255), "nullable": False},
149
- "span_kind": {"type": lambda: String(50), "nullable": False},
150
- "status_code": {"type": lambda: String(50), "nullable": False},
151
- "status_message": {"type": Text, "nullable": True},
152
- "start_time": {"type": lambda: String(128), "nullable": False, "index": True}, # ISO 8601 datetime string
153
- "end_time": {"type": lambda: String(128), "nullable": False}, # ISO 8601 datetime string
154
- "duration_ms": {"type": BigInteger, "nullable": False},
155
- "attributes": {"type": JSON, "nullable": True},
156
- "created_at": {"type": lambda: String(128), "nullable": False, "index": True}, # ISO 8601 datetime string
157
- }
158
139
 
140
+ def _get_span_table_schema(traces_table_name: str = "agno_traces", db_schema: str = "agno") -> dict[str, Any]:
141
+ """Get the span table schema with the correct foreign key reference.
142
+
143
+ Args:
144
+ traces_table_name: The name of the traces table to reference in the foreign key.
145
+ db_schema: The database schema name.
146
+
147
+ Returns:
148
+ The span table schema dictionary.
149
+ """
150
+ return {
151
+ "span_id": {"type": lambda: String(128), "primary_key": True, "nullable": False},
152
+ "trace_id": {
153
+ "type": lambda: String(128),
154
+ "nullable": False,
155
+ "index": True,
156
+ "foreign_key": f"{db_schema}.{traces_table_name}.trace_id",
157
+ },
158
+ "parent_span_id": {"type": lambda: String(128), "nullable": True, "index": True},
159
+ "name": {"type": lambda: String(255), "nullable": False},
160
+ "span_kind": {"type": lambda: String(50), "nullable": False},
161
+ "status_code": {"type": lambda: String(50), "nullable": False},
162
+ "status_message": {"type": Text, "nullable": True},
163
+ "start_time": {"type": lambda: String(128), "nullable": False, "index": True}, # ISO 8601 datetime string
164
+ "end_time": {"type": lambda: String(128), "nullable": False}, # ISO 8601 datetime string
165
+ "duration_ms": {"type": BigInteger, "nullable": False},
166
+ "attributes": {"type": JSON, "nullable": True},
167
+ "created_at": {"type": lambda: String(128), "nullable": False, "index": True}, # ISO 8601 datetime string
168
+ }
159
169
 
160
- def get_table_schema_definition(table_type: str) -> dict[str, Any]:
170
+
171
+ def get_table_schema_definition(
172
+ table_type: str, traces_table_name: str = "agno_traces", db_schema: str = "agno"
173
+ ) -> dict[str, Any]:
161
174
  """
162
175
  Get the expected schema definition for the given table.
163
176
 
164
177
  Args:
165
178
  table_type (str): The type of table to get the schema for.
179
+ traces_table_name (str): The name of the traces table (used for spans foreign key).
180
+ db_schema (str): The database schema name (used for spans foreign key).
166
181
 
167
182
  Returns:
168
183
  Dict[str, Any]: Dictionary containing column definitions for the table
169
184
  """
185
+ # Handle spans table specially to resolve the foreign key reference
186
+ if table_type == "spans":
187
+ return _get_span_table_schema(traces_table_name, db_schema)
188
+
170
189
  schemas = {
171
190
  "sessions": SESSION_TABLE_SCHEMA,
172
191
  "evals": EVAL_TABLE_SCHEMA,
@@ -176,7 +195,6 @@ def get_table_schema_definition(table_type: str) -> dict[str, Any]:
176
195
  "culture": CULTURAL_KNOWLEDGE_TABLE_SCHEMA,
177
196
  "versions": VERSIONS_TABLE_SCHEMA,
178
197
  "traces": TRACE_TABLE_SCHEMA,
179
- "spans": SPAN_TABLE_SCHEMA,
180
198
  }
181
199
 
182
200
  schema = schemas.get(table_type, {})
@@ -31,7 +31,7 @@ from agno.utils.log import log_debug, log_error, log_info, log_warning
31
31
  from agno.utils.string import sanitize_postgres_string, sanitize_postgres_strings
32
32
 
33
33
  try:
34
- from sqlalchemy import Index, String, Table, UniqueConstraint, and_, case, func, or_, update
34
+ from sqlalchemy import ForeignKey, Index, String, Table, UniqueConstraint, and_, case, func, or_, update
35
35
  from sqlalchemy.dialects import postgresql
36
36
  from sqlalchemy.dialects.postgresql import TIMESTAMP
37
37
  from sqlalchemy.exc import ProgrammingError
@@ -192,7 +192,10 @@ class AsyncPostgresDb(AsyncBaseDb):
192
192
  Table: SQLAlchemy Table object
193
193
  """
194
194
  try:
195
- table_schema = get_table_schema_definition(table_type).copy()
195
+ # Pass traces_table_name and db_schema for spans table foreign key resolution
196
+ table_schema = get_table_schema_definition(
197
+ table_type, traces_table_name=self.trace_table_name, db_schema=self.db_schema
198
+ ).copy()
196
199
 
197
200
  columns: List[Column] = []
198
201
  indexes: List[str] = []
@@ -212,6 +215,11 @@ class AsyncPostgresDb(AsyncBaseDb):
212
215
  if col_config.get("unique", False):
213
216
  column_kwargs["unique"] = True
214
217
  unique_constraints.append(col_name)
218
+
219
+ # Handle foreign key constraint
220
+ if "foreign_key" in col_config:
221
+ column_args.append(ForeignKey(col_config["foreign_key"]))
222
+
215
223
  columns.append(Column(*column_args, **column_kwargs)) # type: ignore
216
224
 
217
225
  # Create the table object
@@ -176,7 +176,10 @@ class PostgresDb(BaseDb):
176
176
  Table: SQLAlchemy Table object
177
177
  """
178
178
  try:
179
- table_schema = get_table_schema_definition(table_type).copy()
179
+ # Pass traces_table_name and db_schema for spans table foreign key resolution
180
+ table_schema = get_table_schema_definition(
181
+ table_type, traces_table_name=self.trace_table_name, db_schema=self.db_schema
182
+ ).copy()
180
183
 
181
184
  columns: List[Column] = []
182
185
  indexes: List[str] = []
@@ -199,12 +202,7 @@ class PostgresDb(BaseDb):
199
202
 
200
203
  # Handle foreign key constraint
201
204
  if "foreign_key" in col_config:
202
- fk_ref = col_config["foreign_key"]
203
- # For spans table, dynamically replace the traces table reference
204
- # with the actual trace table name configured for this db instance
205
- if table_type == "spans" and "trace_id" in fk_ref:
206
- fk_ref = f"{self.db_schema}.{self.trace_table_name}.trace_id"
207
- column_args.append(ForeignKey(fk_ref))
205
+ column_args.append(ForeignKey(col_config["foreign_key"]))
208
206
 
209
207
  columns.append(Column(*column_args, **column_kwargs)) # type: ignore
210
208
 
@@ -137,37 +137,56 @@ TRACE_TABLE_SCHEMA = {
137
137
  "created_at": {"type": String, "nullable": False, "index": True}, # ISO 8601 datetime string
138
138
  }
139
139
 
140
- SPAN_TABLE_SCHEMA = {
141
- "span_id": {"type": String, "primary_key": True, "nullable": False},
142
- "trace_id": {
143
- "type": String,
144
- "nullable": False,
145
- "index": True,
146
- "foreign_key": "agno_traces.trace_id", # Foreign key to traces table
147
- },
148
- "parent_span_id": {"type": String, "nullable": True, "index": True},
149
- "name": {"type": String, "nullable": False},
150
- "span_kind": {"type": String, "nullable": False},
151
- "status_code": {"type": String, "nullable": False},
152
- "status_message": {"type": Text, "nullable": True},
153
- "start_time": {"type": String, "nullable": False, "index": True}, # ISO 8601 datetime string
154
- "end_time": {"type": String, "nullable": False}, # ISO 8601 datetime string
155
- "duration_ms": {"type": BigInteger, "nullable": False},
156
- "attributes": {"type": JSONB, "nullable": True},
157
- "created_at": {"type": String, "nullable": False, "index": True}, # ISO 8601 datetime string
158
- }
159
140
 
141
+ def _get_span_table_schema(traces_table_name: str = "agno_traces", db_schema: str = "agno") -> dict[str, Any]:
142
+ """Get the span table schema with the correct foreign key reference.
143
+
144
+ Args:
145
+ traces_table_name: The name of the traces table to reference in the foreign key.
146
+ db_schema: The database schema name.
147
+
148
+ Returns:
149
+ The span table schema dictionary.
150
+ """
151
+ return {
152
+ "span_id": {"type": String, "primary_key": True, "nullable": False},
153
+ "trace_id": {
154
+ "type": String,
155
+ "nullable": False,
156
+ "index": True,
157
+ "foreign_key": f"{db_schema}.{traces_table_name}.trace_id",
158
+ },
159
+ "parent_span_id": {"type": String, "nullable": True, "index": True},
160
+ "name": {"type": String, "nullable": False},
161
+ "span_kind": {"type": String, "nullable": False},
162
+ "status_code": {"type": String, "nullable": False},
163
+ "status_message": {"type": Text, "nullable": True},
164
+ "start_time": {"type": String, "nullable": False, "index": True}, # ISO 8601 datetime string
165
+ "end_time": {"type": String, "nullable": False}, # ISO 8601 datetime string
166
+ "duration_ms": {"type": BigInteger, "nullable": False},
167
+ "attributes": {"type": JSONB, "nullable": True},
168
+ "created_at": {"type": String, "nullable": False, "index": True}, # ISO 8601 datetime string
169
+ }
160
170
 
161
- def get_table_schema_definition(table_type: str) -> dict[str, Any]:
171
+
172
+ def get_table_schema_definition(
173
+ table_type: str, traces_table_name: str = "agno_traces", db_schema: str = "agno"
174
+ ) -> dict[str, Any]:
162
175
  """
163
176
  Get the expected schema definition for the given table.
164
177
 
165
178
  Args:
166
179
  table_type (str): The type of table to get the schema for.
180
+ traces_table_name (str): The name of the traces table (used for spans foreign key).
181
+ db_schema (str): The database schema name (used for spans foreign key).
167
182
 
168
183
  Returns:
169
184
  Dict[str, Any]: Dictionary containing column definitions for the table
170
185
  """
186
+ # Handle spans table specially to resolve the foreign key reference
187
+ if table_type == "spans":
188
+ return _get_span_table_schema(traces_table_name, db_schema)
189
+
171
190
  schemas = {
172
191
  "sessions": SESSION_TABLE_SCHEMA,
173
192
  "evals": EVAL_TABLE_SCHEMA,
@@ -177,7 +196,6 @@ def get_table_schema_definition(table_type: str) -> dict[str, Any]:
177
196
  "culture": CULTURAL_KNOWLEDGE_TABLE_SCHEMA,
178
197
  "versions": VERSIONS_TABLE_SCHEMA,
179
198
  "traces": TRACE_TABLE_SCHEMA,
180
- "spans": SPAN_TABLE_SCHEMA,
181
199
  }
182
200
 
183
201
  schema = schemas.get(table_type, {})
@@ -131,35 +131,56 @@ TRACE_TABLE_SCHEMA = {
131
131
  "created_at": {"type": lambda: String(64), "nullable": False, "index": True}, # ISO 8601 datetime string
132
132
  }
133
133
 
134
- SPAN_TABLE_SCHEMA = {
135
- "span_id": {"type": lambda: String(128), "primary_key": True, "nullable": False},
136
- "trace_id": {
137
- "type": lambda: String(128),
138
- "nullable": False,
139
- "index": True,
140
- "foreign_key": "agno_traces.trace_id", # Foreign key to traces table
141
- },
142
- "parent_span_id": {"type": lambda: String(128), "nullable": True, "index": True},
143
- "name": {"type": lambda: String(512), "nullable": False},
144
- "span_kind": {"type": lambda: String(50), "nullable": False},
145
- "status_code": {"type": lambda: String(20), "nullable": False},
146
- "status_message": {"type": Text, "nullable": True},
147
- "start_time": {"type": lambda: String(64), "nullable": False, "index": True}, # ISO 8601 datetime string
148
- "end_time": {"type": lambda: String(64), "nullable": False}, # ISO 8601 datetime string
149
- "duration_ms": {"type": BigInteger, "nullable": False},
150
- "attributes": {"type": JSON, "nullable": True},
151
- "created_at": {"type": lambda: String(64), "nullable": False, "index": True}, # ISO 8601 datetime string
152
- }
153
134
 
135
+ def _get_span_table_schema(traces_table_name: str = "agno_traces", db_schema: str = "agno") -> dict[str, Any]:
136
+ """Get the span table schema with the correct foreign key reference.
137
+
138
+ Args:
139
+ traces_table_name: The name of the traces table to reference in the foreign key.
140
+ db_schema: The database schema name.
141
+
142
+ Returns:
143
+ The span table schema dictionary.
144
+ """
145
+ return {
146
+ "span_id": {"type": lambda: String(128), "primary_key": True, "nullable": False},
147
+ "trace_id": {
148
+ "type": lambda: String(128),
149
+ "nullable": False,
150
+ "index": True,
151
+ "foreign_key": f"{db_schema}.{traces_table_name}.trace_id",
152
+ },
153
+ "parent_span_id": {"type": lambda: String(128), "nullable": True, "index": True},
154
+ "name": {"type": lambda: String(512), "nullable": False},
155
+ "span_kind": {"type": lambda: String(50), "nullable": False},
156
+ "status_code": {"type": lambda: String(20), "nullable": False},
157
+ "status_message": {"type": Text, "nullable": True},
158
+ "start_time": {"type": lambda: String(64), "nullable": False, "index": True}, # ISO 8601 datetime string
159
+ "end_time": {"type": lambda: String(64), "nullable": False}, # ISO 8601 datetime string
160
+ "duration_ms": {"type": BigInteger, "nullable": False},
161
+ "attributes": {"type": JSON, "nullable": True},
162
+ "created_at": {"type": lambda: String(64), "nullable": False, "index": True}, # ISO 8601 datetime string
163
+ }
154
164
 
155
- def get_table_schema_definition(table_type: str) -> dict[str, Any]:
165
+
166
+ def get_table_schema_definition(
167
+ table_type: str, traces_table_name: str = "agno_traces", db_schema: str = "agno"
168
+ ) -> dict[str, Any]:
156
169
  """
157
170
  Get the expected schema definition for the given table.
171
+
158
172
  Args:
159
173
  table_type (str): The type of table to get the schema for.
174
+ traces_table_name (str): The name of the traces table (used for spans foreign key).
175
+ db_schema (str): The database schema name (used for spans foreign key).
176
+
160
177
  Returns:
161
178
  Dict[str, Any]: Dictionary containing column definitions for the table
162
179
  """
180
+ # Handle spans table specially to resolve the foreign key reference
181
+ if table_type == "spans":
182
+ return _get_span_table_schema(traces_table_name, db_schema)
183
+
163
184
  schemas = {
164
185
  "sessions": SESSION_TABLE_SCHEMA,
165
186
  "evals": EVAL_TABLE_SCHEMA,
@@ -169,7 +190,6 @@ def get_table_schema_definition(table_type: str) -> dict[str, Any]:
169
190
  "culture": CULTURAL_KNOWLEDGE_TABLE_SCHEMA,
170
191
  "versions": VERSIONS_TABLE_SCHEMA,
171
192
  "traces": TRACE_TABLE_SCHEMA,
172
- "spans": SPAN_TABLE_SCHEMA,
173
193
  }
174
194
  schema = schemas.get(table_type, {})
175
195
 
@@ -31,7 +31,7 @@ from agno.utils.log import log_debug, log_error, log_info, log_warning
31
31
  from agno.utils.string import generate_id
32
32
 
33
33
  try:
34
- from sqlalchemy import Index, UniqueConstraint, and_, func, select, update
34
+ from sqlalchemy import ForeignKey, Index, UniqueConstraint, and_, func, select, update
35
35
  from sqlalchemy.dialects import mysql
36
36
  from sqlalchemy.engine import Engine, create_engine
37
37
  from sqlalchemy.orm import scoped_session, sessionmaker
@@ -151,7 +151,10 @@ class SingleStoreDb(BaseDb):
151
151
  Table: SQLAlchemy Table object with column definitions
152
152
  """
153
153
  try:
154
- table_schema = get_table_schema_definition(table_type)
154
+ # Pass traces_table_name and db_schema for spans table foreign key resolution
155
+ table_schema = get_table_schema_definition(
156
+ table_type, traces_table_name=self.trace_table_name, db_schema=self.db_schema or "agno"
157
+ )
155
158
 
156
159
  columns: List[Column] = []
157
160
  # Get the columns from the table schema
@@ -207,7 +210,10 @@ class SingleStoreDb(BaseDb):
207
210
  """
208
211
  table_ref = f"{self.db_schema}.{table_name}" if self.db_schema else table_name
209
212
  try:
210
- table_schema = get_table_schema_definition(table_type)
213
+ # Pass traces_table_name and db_schema for spans table foreign key resolution
214
+ table_schema = get_table_schema_definition(
215
+ table_type, traces_table_name=self.trace_table_name, db_schema=self.db_schema or "agno"
216
+ ).copy()
211
217
 
212
218
  columns: List[Column] = []
213
219
  indexes: List[str] = []
@@ -227,6 +233,11 @@ class SingleStoreDb(BaseDb):
227
233
  if col_config.get("unique", False):
228
234
  column_kwargs["unique"] = True
229
235
  unique_constraints.append(col_name)
236
+
237
+ # Handle foreign key constraint
238
+ if "foreign_key" in col_config:
239
+ column_args.append(ForeignKey(col_config["foreign_key"]))
240
+
230
241
  columns.append(Column(*column_args, **column_kwargs))
231
242
 
232
243
  # Create the table object
@@ -31,7 +31,7 @@ from agno.utils.log import log_debug, log_error, log_info, log_warning
31
31
  from agno.utils.string import generate_id
32
32
 
33
33
  try:
34
- from sqlalchemy import Column, MetaData, String, Table, func, select, text
34
+ from sqlalchemy import Column, ForeignKey, MetaData, String, Table, func, select, text
35
35
  from sqlalchemy.dialects import sqlite
36
36
  from sqlalchemy.ext.asyncio import AsyncEngine, async_sessionmaker, create_async_engine
37
37
  from sqlalchemy.schema import Index, UniqueConstraint
@@ -174,7 +174,8 @@ class AsyncSqliteDb(AsyncBaseDb):
174
174
  Table: SQLAlchemy Table object
175
175
  """
176
176
  try:
177
- table_schema = get_table_schema_definition(table_type)
177
+ # Pass traces_table_name for spans table foreign key resolution
178
+ table_schema = get_table_schema_definition(table_type, traces_table_name=self.trace_table_name).copy()
178
179
 
179
180
  columns: List[Column] = []
180
181
  indexes: List[str] = []
@@ -196,6 +197,10 @@ class AsyncSqliteDb(AsyncBaseDb):
196
197
  column_kwargs["unique"] = True
197
198
  unique_constraints.append(col_name)
198
199
 
200
+ # Handle foreign key constraint
201
+ if "foreign_key" in col_config:
202
+ column_args.append(ForeignKey(col_config["foreign_key"]))
203
+
199
204
  columns.append(Column(*column_args, **column_kwargs)) # type: ignore
200
205
 
201
206
  # Create the table object