agno 2.0.5__tar.gz → 2.0.7__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 (530) hide show
  1. {agno-2.0.5 → agno-2.0.7}/PKG-INFO +4 -1
  2. {agno-2.0.5 → agno-2.0.7}/agno/agent/agent.py +67 -17
  3. {agno-2.0.5 → agno-2.0.7}/agno/db/dynamo/dynamo.py +7 -5
  4. {agno-2.0.5 → agno-2.0.7}/agno/db/firestore/firestore.py +4 -2
  5. {agno-2.0.5 → agno-2.0.7}/agno/db/gcs_json/gcs_json_db.py +4 -2
  6. {agno-2.0.5 → agno-2.0.7}/agno/db/json/json_db.py +8 -4
  7. {agno-2.0.5 → agno-2.0.7}/agno/db/mongo/mongo.py +6 -4
  8. {agno-2.0.5 → agno-2.0.7}/agno/db/mysql/mysql.py +2 -1
  9. {agno-2.0.5 → agno-2.0.7}/agno/db/postgres/postgres.py +2 -1
  10. {agno-2.0.5 → agno-2.0.7}/agno/db/redis/redis.py +1 -1
  11. {agno-2.0.5 → agno-2.0.7}/agno/db/singlestore/singlestore.py +2 -2
  12. {agno-2.0.5 → agno-2.0.7}/agno/db/sqlite/sqlite.py +1 -1
  13. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/semantic.py +33 -6
  14. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/openai.py +19 -11
  15. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/knowledge.py +4 -3
  16. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/website_reader.py +33 -16
  17. {agno-2.0.5 → agno-2.0.7}/agno/media.py +72 -0
  18. {agno-2.0.5 → agno-2.0.7}/agno/models/aimlapi/aimlapi.py +2 -2
  19. {agno-2.0.5 → agno-2.0.7}/agno/models/base.py +68 -12
  20. {agno-2.0.5 → agno-2.0.7}/agno/models/cerebras/cerebras_openai.py +2 -2
  21. {agno-2.0.5 → agno-2.0.7}/agno/models/deepinfra/deepinfra.py +2 -2
  22. {agno-2.0.5 → agno-2.0.7}/agno/models/deepseek/deepseek.py +2 -2
  23. {agno-2.0.5 → agno-2.0.7}/agno/models/fireworks/fireworks.py +2 -2
  24. {agno-2.0.5 → agno-2.0.7}/agno/models/internlm/internlm.py +2 -2
  25. {agno-2.0.5 → agno-2.0.7}/agno/models/langdb/langdb.py +4 -4
  26. {agno-2.0.5 → agno-2.0.7}/agno/models/litellm/litellm_openai.py +2 -2
  27. agno-2.0.7/agno/models/llama_cpp/__init__.py +5 -0
  28. agno-2.0.7/agno/models/llama_cpp/llama_cpp.py +22 -0
  29. {agno-2.0.5 → agno-2.0.7}/agno/models/message.py +26 -0
  30. {agno-2.0.5 → agno-2.0.7}/agno/models/meta/llama_openai.py +2 -2
  31. {agno-2.0.5 → agno-2.0.7}/agno/models/nebius/nebius.py +2 -2
  32. agno-2.0.7/agno/models/nexus/__init__.py +3 -0
  33. agno-2.0.7/agno/models/nexus/nexus.py +22 -0
  34. {agno-2.0.5 → agno-2.0.7}/agno/models/nvidia/nvidia.py +2 -2
  35. {agno-2.0.5 → agno-2.0.7}/agno/models/openrouter/openrouter.py +2 -2
  36. {agno-2.0.5 → agno-2.0.7}/agno/models/perplexity/perplexity.py +2 -2
  37. {agno-2.0.5 → agno-2.0.7}/agno/models/portkey/portkey.py +3 -3
  38. {agno-2.0.5 → agno-2.0.7}/agno/models/response.py +2 -1
  39. {agno-2.0.5 → agno-2.0.7}/agno/models/sambanova/sambanova.py +2 -2
  40. {agno-2.0.5 → agno-2.0.7}/agno/models/together/together.py +2 -2
  41. {agno-2.0.5 → agno-2.0.7}/agno/models/vercel/v0.py +2 -2
  42. {agno-2.0.5 → agno-2.0.7}/agno/models/xai/xai.py +2 -2
  43. {agno-2.0.5 → agno-2.0.7}/agno/os/app.py +4 -10
  44. {agno-2.0.5 → agno-2.0.7}/agno/os/router.py +3 -2
  45. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/evals/evals.py +1 -1
  46. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/memory/memory.py +1 -1
  47. {agno-2.0.5 → agno-2.0.7}/agno/os/schema.py +3 -4
  48. {agno-2.0.5 → agno-2.0.7}/agno/os/utils.py +47 -12
  49. {agno-2.0.5 → agno-2.0.7}/agno/run/agent.py +20 -0
  50. {agno-2.0.5 → agno-2.0.7}/agno/run/team.py +18 -1
  51. {agno-2.0.5 → agno-2.0.7}/agno/run/workflow.py +10 -0
  52. {agno-2.0.5 → agno-2.0.7}/agno/team/team.py +58 -18
  53. {agno-2.0.5 → agno-2.0.7}/agno/tools/decorator.py +4 -2
  54. {agno-2.0.5 → agno-2.0.7}/agno/tools/e2b.py +14 -7
  55. agno-2.0.7/agno/tools/file_generation.py +350 -0
  56. {agno-2.0.5 → agno-2.0.7}/agno/tools/function.py +2 -0
  57. {agno-2.0.5 → agno-2.0.7}/agno/tools/mcp.py +1 -1
  58. {agno-2.0.5 → agno-2.0.7}/agno/tools/memori.py +1 -53
  59. {agno-2.0.5 → agno-2.0.7}/agno/utils/events.py +7 -1
  60. {agno-2.0.5 → agno-2.0.7}/agno/utils/gemini.py +24 -4
  61. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/chroma/chromadb.py +66 -25
  62. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/lancedb/lance_db.py +15 -4
  63. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/milvus/milvus.py +6 -0
  64. {agno-2.0.5 → agno-2.0.7}/agno/workflow/workflow.py +32 -0
  65. {agno-2.0.5 → agno-2.0.7}/agno.egg-info/PKG-INFO +4 -1
  66. {agno-2.0.5 → agno-2.0.7}/agno.egg-info/SOURCES.txt +5 -0
  67. {agno-2.0.5 → agno-2.0.7}/agno.egg-info/requires.txt +4 -0
  68. {agno-2.0.5 → agno-2.0.7}/pyproject.toml +4 -1
  69. {agno-2.0.5 → agno-2.0.7}/LICENSE +0 -0
  70. {agno-2.0.5 → agno-2.0.7}/README.md +0 -0
  71. {agno-2.0.5 → agno-2.0.7}/agno/__init__.py +0 -0
  72. {agno-2.0.5 → agno-2.0.7}/agno/agent/__init__.py +0 -0
  73. {agno-2.0.5 → agno-2.0.7}/agno/api/__init__.py +0 -0
  74. {agno-2.0.5 → agno-2.0.7}/agno/api/agent.py +0 -0
  75. {agno-2.0.5 → agno-2.0.7}/agno/api/api.py +0 -0
  76. {agno-2.0.5 → agno-2.0.7}/agno/api/evals.py +0 -0
  77. {agno-2.0.5 → agno-2.0.7}/agno/api/os.py +0 -0
  78. {agno-2.0.5 → agno-2.0.7}/agno/api/routes.py +0 -0
  79. {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/__init__.py +0 -0
  80. {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/agent.py +0 -0
  81. {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/evals.py +0 -0
  82. {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/os.py +0 -0
  83. {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/response.py +0 -0
  84. {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/team.py +0 -0
  85. {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/utils.py +0 -0
  86. {agno-2.0.5 → agno-2.0.7}/agno/api/schemas/workflows.py +0 -0
  87. {agno-2.0.5 → agno-2.0.7}/agno/api/settings.py +0 -0
  88. {agno-2.0.5 → agno-2.0.7}/agno/api/team.py +0 -0
  89. {agno-2.0.5 → agno-2.0.7}/agno/api/workflow.py +0 -0
  90. {agno-2.0.5 → agno-2.0.7}/agno/cloud/aws/base.py +0 -0
  91. {agno-2.0.5 → agno-2.0.7}/agno/cloud/aws/s3/__init__.py +0 -0
  92. {agno-2.0.5 → agno-2.0.7}/agno/cloud/aws/s3/api_client.py +0 -0
  93. {agno-2.0.5 → agno-2.0.7}/agno/cloud/aws/s3/bucket.py +0 -0
  94. {agno-2.0.5 → agno-2.0.7}/agno/cloud/aws/s3/object.py +0 -0
  95. {agno-2.0.5 → agno-2.0.7}/agno/db/__init__.py +0 -0
  96. {agno-2.0.5 → agno-2.0.7}/agno/db/base.py +0 -0
  97. {agno-2.0.5 → agno-2.0.7}/agno/db/dynamo/__init__.py +0 -0
  98. {agno-2.0.5 → agno-2.0.7}/agno/db/dynamo/schemas.py +0 -0
  99. {agno-2.0.5 → agno-2.0.7}/agno/db/dynamo/utils.py +0 -0
  100. {agno-2.0.5 → agno-2.0.7}/agno/db/firestore/__init__.py +0 -0
  101. {agno-2.0.5 → agno-2.0.7}/agno/db/firestore/schemas.py +0 -0
  102. {agno-2.0.5 → agno-2.0.7}/agno/db/firestore/utils.py +0 -0
  103. {agno-2.0.5 → agno-2.0.7}/agno/db/gcs_json/__init__.py +0 -0
  104. {agno-2.0.5 → agno-2.0.7}/agno/db/gcs_json/utils.py +0 -0
  105. {agno-2.0.5 → agno-2.0.7}/agno/db/in_memory/__init__.py +0 -0
  106. {agno-2.0.5 → agno-2.0.7}/agno/db/in_memory/in_memory_db.py +0 -0
  107. {agno-2.0.5 → agno-2.0.7}/agno/db/in_memory/utils.py +0 -0
  108. {agno-2.0.5 → agno-2.0.7}/agno/db/json/__init__.py +0 -0
  109. {agno-2.0.5 → agno-2.0.7}/agno/db/json/utils.py +0 -0
  110. {agno-2.0.5 → agno-2.0.7}/agno/db/migrations/__init__.py +0 -0
  111. {agno-2.0.5 → agno-2.0.7}/agno/db/migrations/v1_to_v2.py +0 -0
  112. {agno-2.0.5 → agno-2.0.7}/agno/db/mongo/__init__.py +0 -0
  113. {agno-2.0.5 → agno-2.0.7}/agno/db/mongo/schemas.py +0 -0
  114. {agno-2.0.5 → agno-2.0.7}/agno/db/mongo/utils.py +0 -0
  115. {agno-2.0.5 → agno-2.0.7}/agno/db/mysql/__init__.py +0 -0
  116. {agno-2.0.5 → agno-2.0.7}/agno/db/mysql/schemas.py +0 -0
  117. {agno-2.0.5 → agno-2.0.7}/agno/db/mysql/utils.py +0 -0
  118. {agno-2.0.5 → agno-2.0.7}/agno/db/postgres/__init__.py +0 -0
  119. {agno-2.0.5 → agno-2.0.7}/agno/db/postgres/schemas.py +0 -0
  120. {agno-2.0.5 → agno-2.0.7}/agno/db/postgres/utils.py +0 -0
  121. {agno-2.0.5 → agno-2.0.7}/agno/db/redis/__init__.py +0 -0
  122. {agno-2.0.5 → agno-2.0.7}/agno/db/redis/schemas.py +0 -0
  123. {agno-2.0.5 → agno-2.0.7}/agno/db/redis/utils.py +0 -0
  124. {agno-2.0.5 → agno-2.0.7}/agno/db/schemas/__init__.py +0 -0
  125. {agno-2.0.5 → agno-2.0.7}/agno/db/schemas/evals.py +0 -0
  126. {agno-2.0.5 → agno-2.0.7}/agno/db/schemas/knowledge.py +0 -0
  127. {agno-2.0.5 → agno-2.0.7}/agno/db/schemas/memory.py +0 -0
  128. {agno-2.0.5 → agno-2.0.7}/agno/db/schemas/metrics.py +0 -0
  129. {agno-2.0.5 → agno-2.0.7}/agno/db/singlestore/__init__.py +0 -0
  130. {agno-2.0.5 → agno-2.0.7}/agno/db/singlestore/schemas.py +0 -0
  131. {agno-2.0.5 → agno-2.0.7}/agno/db/singlestore/utils.py +0 -0
  132. {agno-2.0.5 → agno-2.0.7}/agno/db/sqlite/__init__.py +0 -0
  133. {agno-2.0.5 → agno-2.0.7}/agno/db/sqlite/schemas.py +0 -0
  134. {agno-2.0.5 → agno-2.0.7}/agno/db/sqlite/utils.py +0 -0
  135. {agno-2.0.5 → agno-2.0.7}/agno/db/utils.py +0 -0
  136. {agno-2.0.5 → agno-2.0.7}/agno/debug.py +0 -0
  137. {agno-2.0.5 → agno-2.0.7}/agno/eval/__init__.py +0 -0
  138. {agno-2.0.5 → agno-2.0.7}/agno/eval/accuracy.py +0 -0
  139. {agno-2.0.5 → agno-2.0.7}/agno/eval/performance.py +0 -0
  140. {agno-2.0.5 → agno-2.0.7}/agno/eval/reliability.py +0 -0
  141. {agno-2.0.5 → agno-2.0.7}/agno/eval/utils.py +0 -0
  142. {agno-2.0.5 → agno-2.0.7}/agno/exceptions.py +0 -0
  143. {agno-2.0.5 → agno-2.0.7}/agno/integrations/__init__.py +0 -0
  144. {agno-2.0.5 → agno-2.0.7}/agno/integrations/discord/__init__.py +0 -0
  145. {agno-2.0.5 → agno-2.0.7}/agno/integrations/discord/client.py +0 -0
  146. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/__init__.py +0 -0
  147. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/__init__.py +0 -0
  148. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/agentic.py +0 -0
  149. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/document.py +0 -0
  150. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/fixed.py +0 -0
  151. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/markdown.py +0 -0
  152. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/recursive.py +0 -0
  153. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/row.py +0 -0
  154. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/chunking/strategy.py +0 -0
  155. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/content.py +0 -0
  156. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/document/__init__.py +0 -0
  157. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/document/base.py +0 -0
  158. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/__init__.py +0 -0
  159. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  160. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/azure_openai.py +0 -0
  161. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/base.py +0 -0
  162. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/cohere.py +0 -0
  163. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/fastembed.py +0 -0
  164. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/fireworks.py +0 -0
  165. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/google.py +0 -0
  166. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/huggingface.py +0 -0
  167. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/jina.py +0 -0
  168. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/langdb.py +0 -0
  169. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/mistral.py +0 -0
  170. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/nebius.py +0 -0
  171. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/ollama.py +0 -0
  172. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  173. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/together.py +0 -0
  174. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/embedder/voyageai.py +0 -0
  175. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/__init__.py +0 -0
  176. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/arxiv_reader.py +0 -0
  177. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/base.py +0 -0
  178. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/csv_reader.py +0 -0
  179. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/docx_reader.py +0 -0
  180. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  181. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/json_reader.py +0 -0
  182. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/markdown_reader.py +0 -0
  183. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/pdf_reader.py +0 -0
  184. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/reader_factory.py +0 -0
  185. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/s3_reader.py +0 -0
  186. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/text_reader.py +0 -0
  187. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/web_search_reader.py +0 -0
  188. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  189. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reader/youtube_reader.py +0 -0
  190. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/remote_content/__init__.py +0 -0
  191. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/remote_content/remote_content.py +0 -0
  192. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reranker/__init__.py +0 -0
  193. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reranker/base.py +0 -0
  194. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reranker/cohere.py +0 -0
  195. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reranker/infinity.py +0 -0
  196. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  197. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/types.py +0 -0
  198. {agno-2.0.5 → agno-2.0.7}/agno/knowledge/utils.py +0 -0
  199. {agno-2.0.5 → agno-2.0.7}/agno/memory/__init__.py +0 -0
  200. {agno-2.0.5 → agno-2.0.7}/agno/memory/manager.py +0 -0
  201. {agno-2.0.5 → agno-2.0.7}/agno/models/__init__.py +0 -0
  202. {agno-2.0.5 → agno-2.0.7}/agno/models/aimlapi/__init__.py +0 -0
  203. {agno-2.0.5 → agno-2.0.7}/agno/models/anthropic/__init__.py +0 -0
  204. {agno-2.0.5 → agno-2.0.7}/agno/models/anthropic/claude.py +0 -0
  205. {agno-2.0.5 → agno-2.0.7}/agno/models/aws/__init__.py +0 -0
  206. {agno-2.0.5 → agno-2.0.7}/agno/models/aws/bedrock.py +0 -0
  207. {agno-2.0.5 → agno-2.0.7}/agno/models/aws/claude.py +0 -0
  208. {agno-2.0.5 → agno-2.0.7}/agno/models/azure/__init__.py +0 -0
  209. {agno-2.0.5 → agno-2.0.7}/agno/models/azure/ai_foundry.py +0 -0
  210. {agno-2.0.5 → agno-2.0.7}/agno/models/azure/openai_chat.py +0 -0
  211. {agno-2.0.5 → agno-2.0.7}/agno/models/cerebras/__init__.py +0 -0
  212. {agno-2.0.5 → agno-2.0.7}/agno/models/cerebras/cerebras.py +0 -0
  213. {agno-2.0.5 → agno-2.0.7}/agno/models/cohere/__init__.py +0 -0
  214. {agno-2.0.5 → agno-2.0.7}/agno/models/cohere/chat.py +0 -0
  215. {agno-2.0.5 → agno-2.0.7}/agno/models/dashscope/__init__.py +0 -0
  216. {agno-2.0.5 → agno-2.0.7}/agno/models/dashscope/dashscope.py +0 -0
  217. {agno-2.0.5 → agno-2.0.7}/agno/models/deepinfra/__init__.py +0 -0
  218. {agno-2.0.5 → agno-2.0.7}/agno/models/deepseek/__init__.py +0 -0
  219. {agno-2.0.5 → agno-2.0.7}/agno/models/defaults.py +0 -0
  220. {agno-2.0.5 → agno-2.0.7}/agno/models/fireworks/__init__.py +0 -0
  221. {agno-2.0.5 → agno-2.0.7}/agno/models/google/__init__.py +0 -0
  222. {agno-2.0.5 → agno-2.0.7}/agno/models/google/gemini.py +0 -0
  223. {agno-2.0.5 → agno-2.0.7}/agno/models/groq/__init__.py +0 -0
  224. {agno-2.0.5 → agno-2.0.7}/agno/models/groq/groq.py +0 -0
  225. {agno-2.0.5 → agno-2.0.7}/agno/models/huggingface/__init__.py +0 -0
  226. {agno-2.0.5 → agno-2.0.7}/agno/models/huggingface/huggingface.py +0 -0
  227. {agno-2.0.5 → agno-2.0.7}/agno/models/ibm/__init__.py +0 -0
  228. {agno-2.0.5 → agno-2.0.7}/agno/models/ibm/watsonx.py +0 -0
  229. {agno-2.0.5 → agno-2.0.7}/agno/models/internlm/__init__.py +0 -0
  230. {agno-2.0.5 → agno-2.0.7}/agno/models/langdb/__init__.py +0 -0
  231. {agno-2.0.5 → agno-2.0.7}/agno/models/litellm/__init__.py +0 -0
  232. {agno-2.0.5 → agno-2.0.7}/agno/models/litellm/chat.py +0 -0
  233. {agno-2.0.5 → agno-2.0.7}/agno/models/lmstudio/__init__.py +0 -0
  234. {agno-2.0.5 → agno-2.0.7}/agno/models/lmstudio/lmstudio.py +0 -0
  235. {agno-2.0.5 → agno-2.0.7}/agno/models/meta/__init__.py +0 -0
  236. {agno-2.0.5 → agno-2.0.7}/agno/models/meta/llama.py +0 -0
  237. {agno-2.0.5 → agno-2.0.7}/agno/models/metrics.py +0 -0
  238. {agno-2.0.5 → agno-2.0.7}/agno/models/mistral/__init__.py +0 -0
  239. {agno-2.0.5 → agno-2.0.7}/agno/models/mistral/mistral.py +0 -0
  240. {agno-2.0.5 → agno-2.0.7}/agno/models/nebius/__init__.py +0 -0
  241. {agno-2.0.5 → agno-2.0.7}/agno/models/nvidia/__init__.py +0 -0
  242. {agno-2.0.5 → agno-2.0.7}/agno/models/ollama/__init__.py +0 -0
  243. {agno-2.0.5 → agno-2.0.7}/agno/models/ollama/chat.py +0 -0
  244. {agno-2.0.5 → agno-2.0.7}/agno/models/openai/__init__.py +0 -0
  245. {agno-2.0.5 → agno-2.0.7}/agno/models/openai/chat.py +0 -0
  246. {agno-2.0.5 → agno-2.0.7}/agno/models/openai/like.py +0 -0
  247. {agno-2.0.5 → agno-2.0.7}/agno/models/openai/responses.py +0 -0
  248. {agno-2.0.5 → agno-2.0.7}/agno/models/openrouter/__init__.py +0 -0
  249. {agno-2.0.5 → agno-2.0.7}/agno/models/perplexity/__init__.py +0 -0
  250. {agno-2.0.5 → agno-2.0.7}/agno/models/portkey/__init__.py +0 -0
  251. {agno-2.0.5 → agno-2.0.7}/agno/models/sambanova/__init__.py +0 -0
  252. {agno-2.0.5 → agno-2.0.7}/agno/models/siliconflow/__init__.py +0 -0
  253. {agno-2.0.5 → agno-2.0.7}/agno/models/siliconflow/siliconflow.py +0 -0
  254. {agno-2.0.5 → agno-2.0.7}/agno/models/together/__init__.py +0 -0
  255. {agno-2.0.5 → agno-2.0.7}/agno/models/utils.py +0 -0
  256. {agno-2.0.5 → agno-2.0.7}/agno/models/vercel/__init__.py +0 -0
  257. {agno-2.0.5 → agno-2.0.7}/agno/models/vllm/__init__.py +0 -0
  258. {agno-2.0.5 → agno-2.0.7}/agno/models/vllm/vllm.py +0 -0
  259. {agno-2.0.5 → agno-2.0.7}/agno/models/xai/__init__.py +0 -0
  260. {agno-2.0.5 → agno-2.0.7}/agno/os/__init__.py +0 -0
  261. {agno-2.0.5 → agno-2.0.7}/agno/os/auth.py +0 -0
  262. {agno-2.0.5 → agno-2.0.7}/agno/os/config.py +0 -0
  263. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/__init__.py +0 -0
  264. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/agui/__init__.py +0 -0
  265. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/agui/agui.py +0 -0
  266. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/agui/router.py +0 -0
  267. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/agui/utils.py +0 -0
  268. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/base.py +0 -0
  269. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/slack/__init__.py +0 -0
  270. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/slack/router.py +0 -0
  271. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/slack/security.py +0 -0
  272. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/slack/slack.py +0 -0
  273. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  274. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/whatsapp/router.py +0 -0
  275. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/whatsapp/security.py +0 -0
  276. {agno-2.0.5 → agno-2.0.7}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  277. {agno-2.0.5 → agno-2.0.7}/agno/os/mcp.py +0 -0
  278. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/__init__.py +0 -0
  279. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/evals/__init__.py +0 -0
  280. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/evals/schemas.py +0 -0
  281. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/evals/utils.py +0 -0
  282. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/health.py +0 -0
  283. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/home.py +0 -0
  284. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/knowledge/__init__.py +0 -0
  285. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/knowledge/knowledge.py +0 -0
  286. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/knowledge/schemas.py +0 -0
  287. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/memory/__init__.py +0 -0
  288. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/memory/schemas.py +0 -0
  289. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/metrics/__init__.py +0 -0
  290. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/metrics/metrics.py +0 -0
  291. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/metrics/schemas.py +0 -0
  292. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/session/__init__.py +0 -0
  293. {agno-2.0.5 → agno-2.0.7}/agno/os/routers/session/session.py +0 -0
  294. {agno-2.0.5 → agno-2.0.7}/agno/os/settings.py +0 -0
  295. {agno-2.0.5 → agno-2.0.7}/agno/py.typed +0 -0
  296. {agno-2.0.5 → agno-2.0.7}/agno/reasoning/__init__.py +0 -0
  297. {agno-2.0.5 → agno-2.0.7}/agno/reasoning/azure_ai_foundry.py +0 -0
  298. {agno-2.0.5 → agno-2.0.7}/agno/reasoning/deepseek.py +0 -0
  299. {agno-2.0.5 → agno-2.0.7}/agno/reasoning/default.py +0 -0
  300. {agno-2.0.5 → agno-2.0.7}/agno/reasoning/groq.py +0 -0
  301. {agno-2.0.5 → agno-2.0.7}/agno/reasoning/helpers.py +0 -0
  302. {agno-2.0.5 → agno-2.0.7}/agno/reasoning/ollama.py +0 -0
  303. {agno-2.0.5 → agno-2.0.7}/agno/reasoning/openai.py +0 -0
  304. {agno-2.0.5 → agno-2.0.7}/agno/reasoning/step.py +0 -0
  305. {agno-2.0.5 → agno-2.0.7}/agno/run/__init__.py +0 -0
  306. {agno-2.0.5 → agno-2.0.7}/agno/run/base.py +0 -0
  307. {agno-2.0.5 → agno-2.0.7}/agno/run/cancel.py +0 -0
  308. {agno-2.0.5 → agno-2.0.7}/agno/run/messages.py +0 -0
  309. {agno-2.0.5 → agno-2.0.7}/agno/session/__init__.py +0 -0
  310. {agno-2.0.5 → agno-2.0.7}/agno/session/agent.py +0 -0
  311. {agno-2.0.5 → agno-2.0.7}/agno/session/summary.py +0 -0
  312. {agno-2.0.5 → agno-2.0.7}/agno/session/team.py +0 -0
  313. {agno-2.0.5 → agno-2.0.7}/agno/session/workflow.py +0 -0
  314. {agno-2.0.5 → agno-2.0.7}/agno/team/__init__.py +0 -0
  315. {agno-2.0.5 → agno-2.0.7}/agno/tools/__init__.py +0 -0
  316. {agno-2.0.5 → agno-2.0.7}/agno/tools/agentql.py +0 -0
  317. {agno-2.0.5 → agno-2.0.7}/agno/tools/airflow.py +0 -0
  318. {agno-2.0.5 → agno-2.0.7}/agno/tools/api.py +0 -0
  319. {agno-2.0.5 → agno-2.0.7}/agno/tools/apify.py +0 -0
  320. {agno-2.0.5 → agno-2.0.7}/agno/tools/arxiv.py +0 -0
  321. {agno-2.0.5 → agno-2.0.7}/agno/tools/aws_lambda.py +0 -0
  322. {agno-2.0.5 → agno-2.0.7}/agno/tools/aws_ses.py +0 -0
  323. {agno-2.0.5 → agno-2.0.7}/agno/tools/baidusearch.py +0 -0
  324. {agno-2.0.5 → agno-2.0.7}/agno/tools/bitbucket.py +0 -0
  325. {agno-2.0.5 → agno-2.0.7}/agno/tools/brandfetch.py +0 -0
  326. {agno-2.0.5 → agno-2.0.7}/agno/tools/bravesearch.py +0 -0
  327. {agno-2.0.5 → agno-2.0.7}/agno/tools/brightdata.py +0 -0
  328. {agno-2.0.5 → agno-2.0.7}/agno/tools/browserbase.py +0 -0
  329. {agno-2.0.5 → agno-2.0.7}/agno/tools/calcom.py +0 -0
  330. {agno-2.0.5 → agno-2.0.7}/agno/tools/calculator.py +0 -0
  331. {agno-2.0.5 → agno-2.0.7}/agno/tools/cartesia.py +0 -0
  332. {agno-2.0.5 → agno-2.0.7}/agno/tools/clickup.py +0 -0
  333. {agno-2.0.5 → agno-2.0.7}/agno/tools/confluence.py +0 -0
  334. {agno-2.0.5 → agno-2.0.7}/agno/tools/crawl4ai.py +0 -0
  335. {agno-2.0.5 → agno-2.0.7}/agno/tools/csv_toolkit.py +0 -0
  336. {agno-2.0.5 → agno-2.0.7}/agno/tools/dalle.py +0 -0
  337. {agno-2.0.5 → agno-2.0.7}/agno/tools/daytona.py +0 -0
  338. {agno-2.0.5 → agno-2.0.7}/agno/tools/desi_vocal.py +0 -0
  339. {agno-2.0.5 → agno-2.0.7}/agno/tools/discord.py +0 -0
  340. {agno-2.0.5 → agno-2.0.7}/agno/tools/docker.py +0 -0
  341. {agno-2.0.5 → agno-2.0.7}/agno/tools/duckdb.py +0 -0
  342. {agno-2.0.5 → agno-2.0.7}/agno/tools/duckduckgo.py +0 -0
  343. {agno-2.0.5 → agno-2.0.7}/agno/tools/eleven_labs.py +0 -0
  344. {agno-2.0.5 → agno-2.0.7}/agno/tools/email.py +0 -0
  345. {agno-2.0.5 → agno-2.0.7}/agno/tools/evm.py +0 -0
  346. {agno-2.0.5 → agno-2.0.7}/agno/tools/exa.py +0 -0
  347. {agno-2.0.5 → agno-2.0.7}/agno/tools/fal.py +0 -0
  348. {agno-2.0.5 → agno-2.0.7}/agno/tools/file.py +0 -0
  349. {agno-2.0.5 → agno-2.0.7}/agno/tools/financial_datasets.py +0 -0
  350. {agno-2.0.5 → agno-2.0.7}/agno/tools/firecrawl.py +0 -0
  351. {agno-2.0.5 → agno-2.0.7}/agno/tools/giphy.py +0 -0
  352. {agno-2.0.5 → agno-2.0.7}/agno/tools/github.py +0 -0
  353. {agno-2.0.5 → agno-2.0.7}/agno/tools/gmail.py +0 -0
  354. {agno-2.0.5 → agno-2.0.7}/agno/tools/google_bigquery.py +0 -0
  355. {agno-2.0.5 → agno-2.0.7}/agno/tools/google_maps.py +0 -0
  356. {agno-2.0.5 → agno-2.0.7}/agno/tools/googlecalendar.py +0 -0
  357. {agno-2.0.5 → agno-2.0.7}/agno/tools/googlesearch.py +0 -0
  358. {agno-2.0.5 → agno-2.0.7}/agno/tools/googlesheets.py +0 -0
  359. {agno-2.0.5 → agno-2.0.7}/agno/tools/hackernews.py +0 -0
  360. {agno-2.0.5 → agno-2.0.7}/agno/tools/jina.py +0 -0
  361. {agno-2.0.5 → agno-2.0.7}/agno/tools/jira.py +0 -0
  362. {agno-2.0.5 → agno-2.0.7}/agno/tools/knowledge.py +0 -0
  363. {agno-2.0.5 → agno-2.0.7}/agno/tools/linear.py +0 -0
  364. {agno-2.0.5 → agno-2.0.7}/agno/tools/linkup.py +0 -0
  365. {agno-2.0.5 → agno-2.0.7}/agno/tools/local_file_system.py +0 -0
  366. {agno-2.0.5 → agno-2.0.7}/agno/tools/lumalab.py +0 -0
  367. {agno-2.0.5 → agno-2.0.7}/agno/tools/mem0.py +0 -0
  368. {agno-2.0.5 → agno-2.0.7}/agno/tools/memory.py +0 -0
  369. {agno-2.0.5 → agno-2.0.7}/agno/tools/mlx_transcribe.py +0 -0
  370. {agno-2.0.5 → agno-2.0.7}/agno/tools/models/__init__.py +0 -0
  371. {agno-2.0.5 → agno-2.0.7}/agno/tools/models/azure_openai.py +0 -0
  372. {agno-2.0.5 → agno-2.0.7}/agno/tools/models/gemini.py +0 -0
  373. {agno-2.0.5 → agno-2.0.7}/agno/tools/models/groq.py +0 -0
  374. {agno-2.0.5 → agno-2.0.7}/agno/tools/models/morph.py +0 -0
  375. {agno-2.0.5 → agno-2.0.7}/agno/tools/models/nebius.py +0 -0
  376. {agno-2.0.5 → agno-2.0.7}/agno/tools/models_labs.py +0 -0
  377. {agno-2.0.5 → agno-2.0.7}/agno/tools/moviepy_video.py +0 -0
  378. {agno-2.0.5 → agno-2.0.7}/agno/tools/neo4j.py +0 -0
  379. {agno-2.0.5 → agno-2.0.7}/agno/tools/newspaper.py +0 -0
  380. {agno-2.0.5 → agno-2.0.7}/agno/tools/newspaper4k.py +0 -0
  381. {agno-2.0.5 → agno-2.0.7}/agno/tools/openai.py +0 -0
  382. {agno-2.0.5 → agno-2.0.7}/agno/tools/openbb.py +0 -0
  383. {agno-2.0.5 → agno-2.0.7}/agno/tools/opencv.py +0 -0
  384. {agno-2.0.5 → agno-2.0.7}/agno/tools/openweather.py +0 -0
  385. {agno-2.0.5 → agno-2.0.7}/agno/tools/oxylabs.py +0 -0
  386. {agno-2.0.5 → agno-2.0.7}/agno/tools/pandas.py +0 -0
  387. {agno-2.0.5 → agno-2.0.7}/agno/tools/postgres.py +0 -0
  388. {agno-2.0.5 → agno-2.0.7}/agno/tools/pubmed.py +0 -0
  389. {agno-2.0.5 → agno-2.0.7}/agno/tools/python.py +0 -0
  390. {agno-2.0.5 → agno-2.0.7}/agno/tools/reasoning.py +0 -0
  391. {agno-2.0.5 → agno-2.0.7}/agno/tools/reddit.py +0 -0
  392. {agno-2.0.5 → agno-2.0.7}/agno/tools/replicate.py +0 -0
  393. {agno-2.0.5 → agno-2.0.7}/agno/tools/resend.py +0 -0
  394. {agno-2.0.5 → agno-2.0.7}/agno/tools/scrapegraph.py +0 -0
  395. {agno-2.0.5 → agno-2.0.7}/agno/tools/searxng.py +0 -0
  396. {agno-2.0.5 → agno-2.0.7}/agno/tools/serpapi.py +0 -0
  397. {agno-2.0.5 → agno-2.0.7}/agno/tools/serper.py +0 -0
  398. {agno-2.0.5 → agno-2.0.7}/agno/tools/shell.py +0 -0
  399. {agno-2.0.5 → agno-2.0.7}/agno/tools/slack.py +0 -0
  400. {agno-2.0.5 → agno-2.0.7}/agno/tools/sleep.py +0 -0
  401. {agno-2.0.5 → agno-2.0.7}/agno/tools/spider.py +0 -0
  402. {agno-2.0.5 → agno-2.0.7}/agno/tools/sql.py +0 -0
  403. {agno-2.0.5 → agno-2.0.7}/agno/tools/streamlit/__init__.py +0 -0
  404. {agno-2.0.5 → agno-2.0.7}/agno/tools/streamlit/components.py +0 -0
  405. {agno-2.0.5 → agno-2.0.7}/agno/tools/tavily.py +0 -0
  406. {agno-2.0.5 → agno-2.0.7}/agno/tools/telegram.py +0 -0
  407. {agno-2.0.5 → agno-2.0.7}/agno/tools/todoist.py +0 -0
  408. {agno-2.0.5 → agno-2.0.7}/agno/tools/tool_registry.py +0 -0
  409. {agno-2.0.5 → agno-2.0.7}/agno/tools/toolkit.py +0 -0
  410. {agno-2.0.5 → agno-2.0.7}/agno/tools/trafilatura.py +0 -0
  411. {agno-2.0.5 → agno-2.0.7}/agno/tools/trello.py +0 -0
  412. {agno-2.0.5 → agno-2.0.7}/agno/tools/twilio.py +0 -0
  413. {agno-2.0.5 → agno-2.0.7}/agno/tools/user_control_flow.py +0 -0
  414. {agno-2.0.5 → agno-2.0.7}/agno/tools/valyu.py +0 -0
  415. {agno-2.0.5 → agno-2.0.7}/agno/tools/visualization.py +0 -0
  416. {agno-2.0.5 → agno-2.0.7}/agno/tools/webbrowser.py +0 -0
  417. {agno-2.0.5 → agno-2.0.7}/agno/tools/webex.py +0 -0
  418. {agno-2.0.5 → agno-2.0.7}/agno/tools/website.py +0 -0
  419. {agno-2.0.5 → agno-2.0.7}/agno/tools/webtools.py +0 -0
  420. {agno-2.0.5 → agno-2.0.7}/agno/tools/whatsapp.py +0 -0
  421. {agno-2.0.5 → agno-2.0.7}/agno/tools/wikipedia.py +0 -0
  422. {agno-2.0.5 → agno-2.0.7}/agno/tools/workflow.py +0 -0
  423. {agno-2.0.5 → agno-2.0.7}/agno/tools/x.py +0 -0
  424. {agno-2.0.5 → agno-2.0.7}/agno/tools/yfinance.py +0 -0
  425. {agno-2.0.5 → agno-2.0.7}/agno/tools/youtube.py +0 -0
  426. {agno-2.0.5 → agno-2.0.7}/agno/tools/zendesk.py +0 -0
  427. {agno-2.0.5 → agno-2.0.7}/agno/tools/zep.py +0 -0
  428. {agno-2.0.5 → agno-2.0.7}/agno/tools/zoom.py +0 -0
  429. {agno-2.0.5 → agno-2.0.7}/agno/utils/__init__.py +0 -0
  430. {agno-2.0.5 → agno-2.0.7}/agno/utils/audio.py +0 -0
  431. {agno-2.0.5 → agno-2.0.7}/agno/utils/certs.py +0 -0
  432. {agno-2.0.5 → agno-2.0.7}/agno/utils/code_execution.py +0 -0
  433. {agno-2.0.5 → agno-2.0.7}/agno/utils/common.py +0 -0
  434. {agno-2.0.5 → agno-2.0.7}/agno/utils/dttm.py +0 -0
  435. {agno-2.0.5 → agno-2.0.7}/agno/utils/enum.py +0 -0
  436. {agno-2.0.5 → agno-2.0.7}/agno/utils/env.py +0 -0
  437. {agno-2.0.5 → agno-2.0.7}/agno/utils/format_str.py +0 -0
  438. {agno-2.0.5 → agno-2.0.7}/agno/utils/functions.py +0 -0
  439. {agno-2.0.5 → agno-2.0.7}/agno/utils/http.py +0 -0
  440. {agno-2.0.5 → agno-2.0.7}/agno/utils/json_schema.py +0 -0
  441. {agno-2.0.5 → agno-2.0.7}/agno/utils/knowledge.py +0 -0
  442. {agno-2.0.5 → agno-2.0.7}/agno/utils/location.py +0 -0
  443. {agno-2.0.5 → agno-2.0.7}/agno/utils/log.py +0 -0
  444. {agno-2.0.5 → agno-2.0.7}/agno/utils/mcp.py +0 -0
  445. {agno-2.0.5 → agno-2.0.7}/agno/utils/media.py +0 -0
  446. {agno-2.0.5 → agno-2.0.7}/agno/utils/merge_dict.py +0 -0
  447. {agno-2.0.5 → agno-2.0.7}/agno/utils/message.py +0 -0
  448. {agno-2.0.5 → agno-2.0.7}/agno/utils/models/__init__.py +0 -0
  449. {agno-2.0.5 → agno-2.0.7}/agno/utils/models/ai_foundry.py +0 -0
  450. {agno-2.0.5 → agno-2.0.7}/agno/utils/models/aws_claude.py +0 -0
  451. {agno-2.0.5 → agno-2.0.7}/agno/utils/models/claude.py +0 -0
  452. {agno-2.0.5 → agno-2.0.7}/agno/utils/models/cohere.py +0 -0
  453. {agno-2.0.5 → agno-2.0.7}/agno/utils/models/llama.py +0 -0
  454. {agno-2.0.5 → agno-2.0.7}/agno/utils/models/mistral.py +0 -0
  455. {agno-2.0.5 → agno-2.0.7}/agno/utils/models/openai_responses.py +0 -0
  456. {agno-2.0.5 → agno-2.0.7}/agno/utils/models/schema_utils.py +0 -0
  457. {agno-2.0.5 → agno-2.0.7}/agno/utils/models/watsonx.py +0 -0
  458. {agno-2.0.5 → agno-2.0.7}/agno/utils/openai.py +0 -0
  459. {agno-2.0.5 → agno-2.0.7}/agno/utils/pickle.py +0 -0
  460. {agno-2.0.5 → agno-2.0.7}/agno/utils/pprint.py +0 -0
  461. {agno-2.0.5 → agno-2.0.7}/agno/utils/print_response/__init__.py +0 -0
  462. {agno-2.0.5 → agno-2.0.7}/agno/utils/print_response/agent.py +0 -0
  463. {agno-2.0.5 → agno-2.0.7}/agno/utils/print_response/team.py +0 -0
  464. {agno-2.0.5 → agno-2.0.7}/agno/utils/print_response/workflow.py +0 -0
  465. {agno-2.0.5 → agno-2.0.7}/agno/utils/prompts.py +0 -0
  466. {agno-2.0.5 → agno-2.0.7}/agno/utils/reasoning.py +0 -0
  467. {agno-2.0.5 → agno-2.0.7}/agno/utils/response.py +0 -0
  468. {agno-2.0.5 → agno-2.0.7}/agno/utils/response_iterator.py +0 -0
  469. {agno-2.0.5 → agno-2.0.7}/agno/utils/safe_formatter.py +0 -0
  470. {agno-2.0.5 → agno-2.0.7}/agno/utils/shell.py +0 -0
  471. {agno-2.0.5 → agno-2.0.7}/agno/utils/streamlit.py +0 -0
  472. {agno-2.0.5 → agno-2.0.7}/agno/utils/string.py +0 -0
  473. {agno-2.0.5 → agno-2.0.7}/agno/utils/team.py +0 -0
  474. {agno-2.0.5 → agno-2.0.7}/agno/utils/timer.py +0 -0
  475. {agno-2.0.5 → agno-2.0.7}/agno/utils/tools.py +0 -0
  476. {agno-2.0.5 → agno-2.0.7}/agno/utils/web.py +0 -0
  477. {agno-2.0.5 → agno-2.0.7}/agno/utils/whatsapp.py +0 -0
  478. {agno-2.0.5 → agno-2.0.7}/agno/utils/yaml_io.py +0 -0
  479. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/__init__.py +0 -0
  480. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/base.py +0 -0
  481. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/cassandra/__init__.py +0 -0
  482. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/cassandra/cassandra.py +0 -0
  483. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  484. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/cassandra/index.py +0 -0
  485. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/chroma/__init__.py +0 -0
  486. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/clickhouse/__init__.py +0 -0
  487. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  488. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/clickhouse/index.py +0 -0
  489. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/couchbase/__init__.py +0 -0
  490. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/couchbase/couchbase.py +0 -0
  491. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/distance.py +0 -0
  492. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/lancedb/__init__.py +0 -0
  493. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/langchaindb/__init__.py +0 -0
  494. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  495. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/lightrag/__init__.py +0 -0
  496. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/lightrag/lightrag.py +0 -0
  497. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/llamaindex/__init__.py +0 -0
  498. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  499. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/milvus/__init__.py +0 -0
  500. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/mongodb/__init__.py +0 -0
  501. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/mongodb/mongodb.py +0 -0
  502. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/pgvector/__init__.py +0 -0
  503. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/pgvector/index.py +0 -0
  504. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/pgvector/pgvector.py +0 -0
  505. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/pineconedb/__init__.py +0 -0
  506. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  507. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/qdrant/__init__.py +0 -0
  508. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/qdrant/qdrant.py +0 -0
  509. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/search.py +0 -0
  510. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/singlestore/__init__.py +0 -0
  511. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/singlestore/index.py +0 -0
  512. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/singlestore/singlestore.py +0 -0
  513. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/surrealdb/__init__.py +0 -0
  514. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  515. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/upstashdb/__init__.py +0 -0
  516. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  517. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/weaviate/__init__.py +0 -0
  518. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/weaviate/index.py +0 -0
  519. {agno-2.0.5 → agno-2.0.7}/agno/vectordb/weaviate/weaviate.py +0 -0
  520. {agno-2.0.5 → agno-2.0.7}/agno/workflow/__init__.py +0 -0
  521. {agno-2.0.5 → agno-2.0.7}/agno/workflow/condition.py +0 -0
  522. {agno-2.0.5 → agno-2.0.7}/agno/workflow/loop.py +0 -0
  523. {agno-2.0.5 → agno-2.0.7}/agno/workflow/parallel.py +0 -0
  524. {agno-2.0.5 → agno-2.0.7}/agno/workflow/router.py +0 -0
  525. {agno-2.0.5 → agno-2.0.7}/agno/workflow/step.py +0 -0
  526. {agno-2.0.5 → agno-2.0.7}/agno/workflow/steps.py +0 -0
  527. {agno-2.0.5 → agno-2.0.7}/agno/workflow/types.py +0 -0
  528. {agno-2.0.5 → agno-2.0.7}/agno.egg-info/dependency_links.txt +0 -0
  529. {agno-2.0.5 → agno-2.0.7}/agno.egg-info/top_level.txt +0 -0
  530. {agno-2.0.5 → agno-2.0.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.0.5
3
+ Version: 2.0.7
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
@@ -161,6 +161,8 @@ Requires-Dist: opencv-python; extra == "opencv"
161
161
  Provides-Extra: psycopg
162
162
  Requires-Dist: psycopg-binary; extra == "psycopg"
163
163
  Requires-Dist: psycopg; extra == "psycopg"
164
+ Provides-Extra: reportlab
165
+ Requires-Dist: reportlab; extra == "reportlab"
164
166
  Provides-Extra: todoist
165
167
  Requires-Dist: todoist-api-python; extra == "todoist"
166
168
  Provides-Extra: valyu
@@ -306,6 +308,7 @@ Requires-Dist: agno[mem0]; extra == "tools"
306
308
  Requires-Dist: agno[memori]; extra == "tools"
307
309
  Requires-Dist: agno[google_bigquery]; extra == "tools"
308
310
  Requires-Dist: agno[psycopg]; extra == "tools"
311
+ Requires-Dist: agno[reportlab]; extra == "tools"
309
312
  Requires-Dist: agno[trafilatura]; extra == "tools"
310
313
  Requires-Dist: agno[neo4j]; extra == "tools"
311
314
  Provides-Extra: storage
@@ -371,7 +371,7 @@ class Agent:
371
371
  knowledge_retriever: Optional[Callable[..., Optional[List[Union[Dict, str]]]]] = None,
372
372
  references_format: Literal["json", "yaml"] = "json",
373
373
  metadata: Optional[Dict[str, Any]] = None,
374
- tools: Optional[List[Union[Toolkit, Callable, Function, Dict]]] = None,
374
+ tools: Optional[Sequence[Union[Toolkit, Callable, Function, Dict]]] = None,
375
375
  tool_call_limit: Optional[int] = None,
376
376
  tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
377
377
  tool_hooks: Optional[List[Callable]] = None,
@@ -466,7 +466,7 @@ class Agent:
466
466
 
467
467
  self.metadata = metadata
468
468
 
469
- self.tools = tools
469
+ self.tools = list(tools) if tools else []
470
470
  self.tool_call_limit = tool_call_limit
471
471
  self.tool_choice = tool_choice
472
472
  self.tool_hooks = tool_hooks
@@ -681,8 +681,8 @@ class Agent:
681
681
  self.tools.append(tool)
682
682
  self._rebuild_tools = True
683
683
 
684
- def set_tools(self, tools: List[Union[Toolkit, Callable, Function, Dict]]):
685
- self.tools = tools
684
+ def set_tools(self, tools: Sequence[Union[Toolkit, Callable, Function, Dict]]):
685
+ self.tools = list(tools) if tools else []
686
686
  self._rebuild_tools = True
687
687
 
688
688
  def _initialize_session(
@@ -762,6 +762,7 @@ class Agent:
762
762
  tool_call_limit=self.tool_call_limit,
763
763
  response_format=response_format,
764
764
  run_response=run_response,
765
+ send_media_to_model=self.send_media_to_model,
765
766
  )
766
767
 
767
768
  # Check for cancellation after model call
@@ -1080,13 +1081,17 @@ class Agent:
1080
1081
  # Initialize the Agent
1081
1082
  self.initialize_agent(debug_mode=debug_mode)
1082
1083
 
1083
- image_artifacts, video_artifacts, audio_artifacts = self._validate_media_object_id(
1084
- images=images, videos=videos, audios=audio
1084
+ image_artifacts, video_artifacts, audio_artifacts, file_artifacts = self._validate_media_object_id(
1085
+ images=images, videos=videos, audios=audio, files=files
1085
1086
  )
1086
1087
 
1087
1088
  # Create RunInput to capture the original user input
1088
1089
  run_input = RunInput(
1089
- input_content=input, images=image_artifacts, videos=video_artifacts, audios=audio_artifacts, files=files
1090
+ input_content=input,
1091
+ images=image_artifacts,
1092
+ videos=video_artifacts,
1093
+ audios=audio_artifacts,
1094
+ files=file_artifacts,
1090
1095
  )
1091
1096
 
1092
1097
  # Read existing session from database
@@ -1355,6 +1360,7 @@ class Agent:
1355
1360
  tool_choice=self.tool_choice,
1356
1361
  tool_call_limit=self.tool_call_limit,
1357
1362
  response_format=response_format,
1363
+ send_media_to_model=self.send_media_to_model,
1358
1364
  )
1359
1365
 
1360
1366
  # Check for cancellation after model call
@@ -1713,13 +1719,17 @@ class Agent:
1713
1719
  # Initialize the Agent
1714
1720
  self.initialize_agent(debug_mode=debug_mode)
1715
1721
 
1716
- image_artifacts, video_artifacts, audio_artifacts = self._validate_media_object_id(
1717
- images=images, videos=videos, audios=audio
1722
+ image_artifacts, video_artifacts, audio_artifacts, file_artifacts = self._validate_media_object_id(
1723
+ images=images, videos=videos, audios=audio, files=files
1718
1724
  )
1719
1725
 
1720
1726
  # Create RunInput to capture the original user input
1721
1727
  run_input = RunInput(
1722
- input_content=input, images=image_artifacts, videos=video_artifacts, audios=audio_artifacts, files=files
1728
+ input_content=input,
1729
+ images=image_artifacts,
1730
+ videos=video_artifacts,
1731
+ audios=audio_artifacts,
1732
+ files=file_artifacts,
1723
1733
  )
1724
1734
 
1725
1735
  # Read existing session from storage
@@ -3063,6 +3073,10 @@ class Agent:
3063
3073
  for audio in model_response.audios:
3064
3074
  self._add_audio(audio, run_response) # Generated audio go to run_response.audio
3065
3075
 
3076
+ if model_response.files is not None:
3077
+ for file in model_response.files:
3078
+ self._add_file(file, run_response) # Generated files go to run_response.files
3079
+
3066
3080
  def _update_run_response(self, model_response: ModelResponse, run_response: RunOutput, run_messages: RunMessages):
3067
3081
  # Handle structured outputs
3068
3082
  if self.output_schema is not None and model_response.parsed is not None:
@@ -3088,6 +3102,8 @@ class Agent:
3088
3102
  # Update the run_response citations with the model response citations
3089
3103
  if model_response.citations is not None:
3090
3104
  run_response.citations = model_response.citations
3105
+ if model_response.provider_data is not None:
3106
+ run_response.model_provider_data = model_response.provider_data
3091
3107
 
3092
3108
  # Update the run_response tools with the model response tool_executions
3093
3109
  if model_response.tool_executions is not None:
@@ -3125,7 +3141,8 @@ class Agent:
3125
3141
  """Calculate session metrics"""
3126
3142
  session_metrics = self._get_session_metrics(session=session)
3127
3143
  # Add the metrics for the current run to the session metrics
3128
- session_metrics += run_response.metrics
3144
+ if run_response.metrics is not None:
3145
+ session_metrics += run_response.metrics
3129
3146
  session_metrics.time_to_first_token = None
3130
3147
  if session.session_data is not None:
3131
3148
  session.session_data["session_metrics"] = session_metrics
@@ -3161,6 +3178,7 @@ class Agent:
3161
3178
  tool_call_limit=self.tool_call_limit,
3162
3179
  stream_model_response=stream_model_response,
3163
3180
  run_response=run_response,
3181
+ send_media_to_model=self.send_media_to_model,
3164
3182
  ):
3165
3183
  yield from self._handle_model_response_chunk(
3166
3184
  session=session,
@@ -3237,6 +3255,7 @@ class Agent:
3237
3255
  tool_call_limit=self.tool_call_limit,
3238
3256
  stream_model_response=stream_model_response,
3239
3257
  run_response=run_response,
3258
+ send_media_to_model=self.send_media_to_model,
3240
3259
  ) # type: ignore
3241
3260
 
3242
3261
  async for model_response_event in model_response_stream: # type: ignore
@@ -3339,6 +3358,10 @@ class Agent:
3339
3358
  model_response.reasoning_content += model_response_event.redacted_reasoning_content
3340
3359
  run_response.reasoning_content = model_response.reasoning_content
3341
3360
 
3361
+ if model_response_event.provider_data is not None:
3362
+ # We get citations in one chunk
3363
+ run_response.model_provider_data = model_response.provider_data
3364
+
3342
3365
  if model_response_event.citations is not None:
3343
3366
  # We get citations in one chunk
3344
3367
  run_response.citations = model_response_event.citations
@@ -3359,6 +3382,7 @@ class Agent:
3359
3382
  or model_response_event.reasoning_content is not None
3360
3383
  or model_response_event.redacted_reasoning_content is not None
3361
3384
  or model_response_event.citations is not None
3385
+ or model_response_event.provider_data is not None
3362
3386
  ):
3363
3387
  yield self._handle_event(
3364
3388
  create_run_output_content_event(
@@ -3367,6 +3391,7 @@ class Agent:
3367
3391
  reasoning_content=model_response_event.reasoning_content,
3368
3392
  redacted_reasoning_content=model_response_event.redacted_reasoning_content,
3369
3393
  citations=model_response_event.citations,
3394
+ model_provider_data=model_response_event.provider_data,
3370
3395
  ),
3371
3396
  run_response,
3372
3397
  workflow_context=workflow_context,
@@ -3800,7 +3825,9 @@ class Agent:
3800
3825
  self._rebuild_tools = True
3801
3826
  if self.search_session_history:
3802
3827
  agent_tools.append(
3803
- self._get_previous_sessions_messages_function(num_history_sessions=self.num_history_sessions)
3828
+ self._get_previous_sessions_messages_function(
3829
+ num_history_sessions=self.num_history_sessions, user_id=user_id
3830
+ )
3804
3831
  )
3805
3832
  self._rebuild_tools = True
3806
3833
 
@@ -4948,7 +4975,7 @@ class Agent:
4948
4975
  # 1. If build_user_context is False or message is a list, return the message as is.
4949
4976
  if not self.build_user_context:
4950
4977
  return Message(
4951
- role=self.user_message_role,
4978
+ role=self.user_message_role or "user",
4952
4979
  content=input,
4953
4980
  images=None if not self.send_media_to_model else images,
4954
4981
  audio=None if not self.send_media_to_model else audio,
@@ -4961,7 +4988,7 @@ class Agent:
4961
4988
  # If we have any media, return a message with empty content
4962
4989
  if images is not None or audio is not None or videos is not None or files is not None:
4963
4990
  return Message(
4964
- role=self.user_message_role,
4991
+ role=self.user_message_role or "user",
4965
4992
  content="",
4966
4993
  images=None if not self.send_media_to_model else images,
4967
4994
  audio=None if not self.send_media_to_model else audio,
@@ -5716,6 +5743,13 @@ class Agent:
5716
5743
  run_response.audio = []
5717
5744
  run_response.audio.append(audio)
5718
5745
 
5746
+ def _add_file(self, file: File, run_response: RunOutput) -> None:
5747
+ """Add file to both the agent's stateful storage and the current run response"""
5748
+ # Add to run response
5749
+ if run_response.files is None:
5750
+ run_response.files = []
5751
+ run_response.files.append(file)
5752
+
5719
5753
  ###########################################################################
5720
5754
  # Reasoning
5721
5755
  ###########################################################################
@@ -6779,11 +6813,14 @@ class Agent:
6779
6813
  )
6780
6814
  return "Successfully added to knowledge base"
6781
6815
 
6782
- def _get_previous_sessions_messages_function(self, num_history_sessions: Optional[int] = 2) -> Callable:
6816
+ def _get_previous_sessions_messages_function(
6817
+ self, num_history_sessions: Optional[int] = 2, user_id: Optional[str] = None
6818
+ ) -> Callable:
6783
6819
  """Factory function to create a get_previous_session_messages function.
6784
6820
 
6785
6821
  Args:
6786
6822
  num_history_sessions: The last n sessions to be taken from db
6823
+ user_id: The user ID to filter sessions by
6787
6824
 
6788
6825
  Returns:
6789
6826
  Callable: A function that retrieves messages from previous sessions
@@ -6802,7 +6839,9 @@ class Agent:
6802
6839
  if self.db is None:
6803
6840
  return "Previous session messages not available"
6804
6841
 
6805
- selected_sessions = self.db.get_sessions(session_type=SessionType.AGENT, limit=num_history_sessions)
6842
+ selected_sessions = self.db.get_sessions(
6843
+ session_type=SessionType.AGENT, limit=num_history_sessions, user_id=user_id
6844
+ )
6806
6845
 
6807
6846
  all_messages = []
6808
6847
  seen_message_pairs = set()
@@ -7199,6 +7238,7 @@ class Agent:
7199
7238
  images: Optional[Sequence[Image]] = None,
7200
7239
  videos: Optional[Sequence[Video]] = None,
7201
7240
  audios: Optional[Sequence[Audio]] = None,
7241
+ files: Optional[Sequence[File]] = None,
7202
7242
  ) -> tuple:
7203
7243
  """Convert raw Image/Video/Audio objects - now unified, so just return as-is."""
7204
7244
  # With unified classes, no conversion needed - just ensure IDs are set
@@ -7233,7 +7273,17 @@ class Agent:
7233
7273
  aud.id = str(uuid4())
7234
7274
  audio_list.append(aud)
7235
7275
 
7236
- return image_list, video_list, audio_list
7276
+ file_list = None
7277
+ if files:
7278
+ file_list = []
7279
+ for file in files:
7280
+ if not file.id:
7281
+ from uuid import uuid4
7282
+
7283
+ file.id = str(uuid4())
7284
+ file_list.append(file)
7285
+
7286
+ return image_list, video_list, audio_list, file_list
7237
7287
 
7238
7288
  def cli_app(
7239
7289
  self,
@@ -181,7 +181,7 @@ class DynamoDb(BaseDb):
181
181
 
182
182
  # --- Sessions ---
183
183
 
184
- def delete_session(self, session_id: Optional[str] = None, session_type: Optional[SessionType] = None) -> bool:
184
+ def delete_session(self, session_id: Optional[str] = None) -> bool:
185
185
  """
186
186
  Delete a session from the database.
187
187
 
@@ -236,7 +236,7 @@ class DynamoDb(BaseDb):
236
236
  def get_session(
237
237
  self,
238
238
  session_id: str,
239
- session_type: Optional[SessionType] = None,
239
+ session_type: SessionType,
240
240
  user_id: Optional[str] = None,
241
241
  deserialize: Optional[bool] = True,
242
242
  ) -> Optional[Union[Session, Dict[str, Any]]]:
@@ -245,7 +245,7 @@ class DynamoDb(BaseDb):
245
245
 
246
246
  Args:
247
247
  session_id (str): The ID of the session to get.
248
- session_type (Optional[SessionType]): The type of session to get.
248
+ session_type (SessionType): The type of session to get.
249
249
  user_id (Optional[str]): The ID of the user to get the session for.
250
250
  deserialize (Optional[bool]): Whether to deserialize the session.
251
251
 
@@ -268,7 +268,7 @@ class DynamoDb(BaseDb):
268
268
 
269
269
  session = deserialize_from_dynamodb_item(item)
270
270
 
271
- if session_type and session.get("session_type") != session_type.value:
271
+ if session.get("session_type") != session_type.value:
272
272
  return None
273
273
  if user_id and session.get("user_id") != user_id:
274
274
  return None
@@ -283,8 +283,10 @@ class DynamoDb(BaseDb):
283
283
  return AgentSession.from_dict(session)
284
284
  elif session_type == SessionType.TEAM:
285
285
  return TeamSession.from_dict(session)
286
- else:
286
+ elif session_type == SessionType.WORKFLOW:
287
287
  return WorkflowSession.from_dict(session)
288
+ else:
289
+ raise ValueError(f"Invalid session type: {session_type}")
288
290
 
289
291
  except Exception as e:
290
292
  log_error(f"Failed to get session {session_id}: {e}")
@@ -242,8 +242,8 @@ class FirestoreDb(BaseDb):
242
242
 
243
243
  Args:
244
244
  session_id (str): The ID of the session to get.
245
+ session_type (SessionType): The type of session to get.
245
246
  user_id (Optional[str]): The ID of the user to get the session for.
246
- session_type (Optional[SessionType]): The type of session to get.
247
247
  deserialize (Optional[bool]): Whether to serialize the session. Defaults to True.
248
248
 
249
249
  Returns:
@@ -281,8 +281,10 @@ class FirestoreDb(BaseDb):
281
281
  return AgentSession.from_dict(session)
282
282
  elif session_type == SessionType.TEAM:
283
283
  return TeamSession.from_dict(session)
284
- else:
284
+ elif session_type == SessionType.WORKFLOW:
285
285
  return WorkflowSession.from_dict(session)
286
+ else:
287
+ raise ValueError(f"Invalid session type: {session_type}")
286
288
 
287
289
  except Exception as e:
288
290
  log_error(f"Exception reading session: {e}")
@@ -185,7 +185,7 @@ class GcsJsonDb(BaseDb):
185
185
  def get_session(
186
186
  self,
187
187
  session_id: str,
188
- session_type: Optional[SessionType] = None,
188
+ session_type: SessionType,
189
189
  user_id: Optional[str] = None,
190
190
  deserialize: Optional[bool] = True,
191
191
  ) -> Optional[Union[AgentSession, TeamSession, WorkflowSession, Dict[str, Any]]]:
@@ -193,7 +193,7 @@ class GcsJsonDb(BaseDb):
193
193
 
194
194
  Args:
195
195
  session_id (str): The ID of the session to read.
196
- session_type (Optional[SessionType]): The type of the session to read.
196
+ session_type (SessionType): The type of the session to read.
197
197
  user_id (Optional[str]): The ID of the user to read the session for.
198
198
  deserialize (Optional[bool]): Whether to deserialize the session.
199
199
 
@@ -226,6 +226,8 @@ class GcsJsonDb(BaseDb):
226
226
  return TeamSession.from_dict(session_data)
227
227
  elif session_type == SessionType.WORKFLOW:
228
228
  return WorkflowSession.from_dict(session_data)
229
+ else:
230
+ raise ValueError(f"Invalid session type: {session_type}")
229
231
 
230
232
  return None
231
233
 
@@ -168,7 +168,7 @@ class JsonDb(BaseDb):
168
168
  def get_session(
169
169
  self,
170
170
  session_id: str,
171
- session_type: Optional[SessionType] = None,
171
+ session_type: SessionType,
172
172
  user_id: Optional[str] = None,
173
173
  deserialize: Optional[bool] = True,
174
174
  ) -> Optional[Union[AgentSession, TeamSession, WorkflowSession, Dict[str, Any]]]:
@@ -176,7 +176,7 @@ class JsonDb(BaseDb):
176
176
 
177
177
  Args:
178
178
  session_id (str): The ID of the session to read.
179
- session_type (Optional[SessionType]): The type of the session to read.
179
+ session_type (SessionType): The type of the session to read.
180
180
  user_id (Optional[str]): The ID of the user to read the session for.
181
181
  deserialize (Optional[bool]): Whether to deserialize the session.
182
182
 
@@ -208,8 +208,10 @@ class JsonDb(BaseDb):
208
208
  return AgentSession.from_dict(session)
209
209
  elif session_type == SessionType.TEAM:
210
210
  return TeamSession.from_dict(session)
211
- else:
211
+ elif session_type == SessionType.WORKFLOW:
212
212
  return WorkflowSession.from_dict(session)
213
+ else:
214
+ raise ValueError(f"Invalid session type: {session_type}")
213
215
 
214
216
  return None
215
217
 
@@ -338,8 +340,10 @@ class JsonDb(BaseDb):
338
340
  return AgentSession.from_dict(session)
339
341
  elif session_type == SessionType.TEAM:
340
342
  return TeamSession.from_dict(session)
341
- else:
343
+ elif session_type == SessionType.WORKFLOW:
342
344
  return WorkflowSession.from_dict(session)
345
+ else:
346
+ raise ValueError(f"Invalid session type: {session_type}")
343
347
 
344
348
  return None
345
349
 
@@ -253,8 +253,8 @@ class MongoDb(BaseDb):
253
253
 
254
254
  Args:
255
255
  session_id (str): The ID of the session to get.
256
+ session_type (SessionType): The type of session to get.
256
257
  user_id (Optional[str]): The ID of the user to get the session for.
257
- session_type (Optional[SessionType]): The type of session to get.
258
258
  deserialize (Optional[bool]): Whether to serialize the session. Defaults to True.
259
259
 
260
260
  Returns:
@@ -285,12 +285,14 @@ class MongoDb(BaseDb):
285
285
  if not deserialize:
286
286
  return session
287
287
 
288
- if session_type == SessionType.AGENT.value:
288
+ if session_type == SessionType.AGENT:
289
289
  return AgentSession.from_dict(session)
290
- elif session_type == SessionType.TEAM.value:
290
+ elif session_type == SessionType.TEAM:
291
291
  return TeamSession.from_dict(session)
292
- else:
292
+ elif session_type == SessionType.WORKFLOW:
293
293
  return WorkflowSession.from_dict(session)
294
+ else:
295
+ raise ValueError(f"Invalid session type: {session_type}")
294
296
 
295
297
  except Exception as e:
296
298
  log_error(f"Exception reading session: {e}")
@@ -350,8 +350,8 @@ class MySQLDb(BaseDb):
350
350
 
351
351
  Args:
352
352
  session_id (str): ID of the session to read.
353
+ session_type (SessionType): Type of session to get.
353
354
  user_id (Optional[str]): User ID to filter by. Defaults to None.
354
- session_type (Optional[SessionType]): Type of session to read. Defaults to None.
355
355
  deserialize (Optional[bool]): Whether to serialize the session. Defaults to True.
356
356
 
357
357
  Returns:
@@ -415,6 +415,7 @@ class MySQLDb(BaseDb):
415
415
  Get all sessions in the given table. Can filter by user_id and entity_id.
416
416
 
417
417
  Args:
418
+ session_type (Optional[SessionType]): The type of sessions to get.
418
419
  user_id (Optional[str]): The ID of the user to filter by.
419
420
  entity_id (Optional[str]): The ID of the agent / workflow to filter by.
420
421
  start_timestamp (Optional[int]): The start timestamp to filter by.
@@ -345,8 +345,8 @@ class PostgresDb(BaseDb):
345
345
 
346
346
  Args:
347
347
  session_id (str): ID of the session to read.
348
+ session_type (SessionType): Type of session to get.
348
349
  user_id (Optional[str]): User ID to filter by. Defaults to None.
349
- session_type (Optional[SessionType]): Type of session to read. Defaults to None.
350
350
  deserialize (Optional[bool]): Whether to serialize the session. Defaults to True.
351
351
 
352
352
  Returns:
@@ -410,6 +410,7 @@ class PostgresDb(BaseDb):
410
410
  Get all sessions in the given table. Can filter by user_id and entity_id.
411
411
 
412
412
  Args:
413
+ session_type (Optional[SessionType]): The type of session to get.
413
414
  user_id (Optional[str]): The ID of the user to filter by.
414
415
  entity_id (Optional[str]): The ID of the agent / workflow to filter by.
415
416
  start_timestamp (Optional[int]): The start timestamp to filter by.
@@ -300,8 +300,8 @@ class RedisDb(BaseDb):
300
300
 
301
301
  Args:
302
302
  session_id (str): The ID of the session to get.
303
+ session_type (SessionType): The type of session to get.
303
304
  user_id (Optional[str]): The ID of the user to filter by.
304
- session_type (Optional[SessionType]): The type of session to filter by.
305
305
 
306
306
  Returns:
307
307
  Optional[Union[AgentSession, TeamSession, WorkflowSession]]: The session if found, None otherwise.
@@ -431,8 +431,8 @@ class SingleStoreDb(BaseDb):
431
431
 
432
432
  Args:
433
433
  session_id (str): ID of the session to read.
434
+ session_type (SessionType): Type of session to get.
434
435
  user_id (Optional[str]): User ID to filter by. Defaults to None.
435
- session_type (Optional[SessionType]): Type of session to read. Defaults to None.
436
436
  deserialize (Optional[bool]): Whether to serialize the session. Defaults to True.
437
437
 
438
438
  Returns:
@@ -496,7 +496,7 @@ class SingleStoreDb(BaseDb):
496
496
  Get all sessions in the given table. Can filter by user_id and entity_id.
497
497
 
498
498
  Args:
499
- session_type (Optional[SessionType]): The type of session to filter by. Defaults to None.
499
+ session_type (Optional[SessionType]): The type of session to filter by.
500
500
  user_id (Optional[str]): The ID of the user to filter by.
501
501
  component_id (Optional[str]): The ID of the agent / workflow to filter by.
502
502
  session_name (Optional[str]): The name of the session to filter by.
@@ -333,8 +333,8 @@ class SqliteDb(BaseDb):
333
333
 
334
334
  Args:
335
335
  session_id (str): ID of the session to read.
336
+ session_type (SessionType): Type of session to get.
336
337
  user_id (Optional[str]): User ID to filter by. Defaults to None.
337
- session_type (Optional[SessionType]): Type of session to read. Defaults to None.
338
338
  deserialize (Optional[bool]): Whether to serialize the session. Defaults to True.
339
339
 
340
340
  Returns:
@@ -1,4 +1,5 @@
1
- from typing import List, Optional
1
+ import inspect
2
+ from typing import Any, Dict, List, Optional
2
3
 
3
4
  from agno.knowledge.chunking.strategy import ChunkingStrategy
4
5
  from agno.knowledge.document.base import Document
@@ -26,11 +27,37 @@ class SemanticChunking(ChunkingStrategy):
26
27
  "Please install it using `pip install chonkie` to use SemanticChunking."
27
28
  )
28
29
 
29
- self.chunker = SemanticChunker(
30
- embedding_model=self.embedder.id, # type: ignore
31
- chunk_size=self.chunk_size,
32
- threshold=self.similarity_threshold,
33
- )
30
+ # Build arguments dynamically based on chonkie's supported signature
31
+ params: Dict[str, Any] = {
32
+ "chunk_size": self.chunk_size,
33
+ "threshold": self.similarity_threshold,
34
+ }
35
+
36
+ try:
37
+ sig = inspect.signature(SemanticChunker)
38
+ param_names = set(sig.parameters.keys())
39
+
40
+ # Prefer passing a callable to avoid Chonkie initializing its own client
41
+ if "embedding_fn" in param_names:
42
+ params["embedding_fn"] = self.embedder.get_embedding # type: ignore[attr-defined]
43
+ # If chonkie allows specifying dimensions, provide them
44
+ if "embedding_dimensions" in param_names and getattr(self.embedder, "dimensions", None):
45
+ params["embedding_dimensions"] = self.embedder.dimensions # type: ignore[attr-defined]
46
+ elif "embedder" in param_names:
47
+ # Some versions may accept an embedder object directly
48
+ params["embedder"] = self.embedder
49
+ else:
50
+ # Fallback to model id
51
+ params["embedding_model"] = getattr(self.embedder, "id", None) or "text-embedding-3-small"
52
+
53
+ self.chunker = SemanticChunker(**params)
54
+ except Exception:
55
+ # As a final fallback, use the original behavior
56
+ self.chunker = SemanticChunker(
57
+ embedding_model=getattr(self.embedder, "id", None) or "text-embedding-3-small",
58
+ chunk_size=self.chunk_size,
59
+ threshold=self.similarity_threshold,
60
+ )
34
61
 
35
62
  def chunk(self, document: Document) -> List[Document]:
36
63
  """Split document into semantic chunks using chonkie"""
@@ -78,21 +78,25 @@ class OpenAIEmbedder(Embedder):
78
78
  return self.client.embeddings.create(**_request_params)
79
79
 
80
80
  def get_embedding(self, text: str) -> List[float]:
81
- response: CreateEmbeddingResponse = self.response(text=text)
82
81
  try:
82
+ response: CreateEmbeddingResponse = self.response(text=text)
83
83
  return response.data[0].embedding
84
84
  except Exception as e:
85
85
  logger.warning(e)
86
86
  return []
87
87
 
88
88
  def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict]]:
89
- response: CreateEmbeddingResponse = self.response(text=text)
89
+ try:
90
+ response: CreateEmbeddingResponse = self.response(text=text)
90
91
 
91
- embedding = response.data[0].embedding
92
- usage = response.usage
93
- if usage:
94
- return embedding, usage.model_dump()
95
- return embedding, None
92
+ embedding = response.data[0].embedding
93
+ usage = response.usage
94
+ if usage:
95
+ return embedding, usage.model_dump()
96
+ return embedding, None
97
+ except Exception as e:
98
+ logger.warning(e)
99
+ return [], None
96
100
 
97
101
  async def async_get_embedding(self, text: str) -> List[float]:
98
102
  req: Dict[str, Any] = {
@@ -127,10 +131,14 @@ class OpenAIEmbedder(Embedder):
127
131
  if self.request_params:
128
132
  req.update(self.request_params)
129
133
 
130
- response = await self.aclient.embeddings.create(**req)
131
- embedding = response.data[0].embedding
132
- usage = response.usage
133
- return embedding, usage.model_dump() if usage else None
134
+ try:
135
+ response = await self.aclient.embeddings.create(**req)
136
+ embedding = response.data[0].embedding
137
+ usage = response.usage
138
+ return embedding, usage.model_dump() if usage else None
139
+ except Exception as e:
140
+ logger.warning(e)
141
+ return [], None
134
142
 
135
143
  def get_embeddings_batch(self, texts: List[str], batch_size: int = 100) -> List[List[float]]:
136
144
  """
@@ -74,6 +74,8 @@ class Knowledge:
74
74
  async def add_contents_async(self, *args, **kwargs) -> None:
75
75
  if args and isinstance(args[0], list):
76
76
  arguments = args[0]
77
+ upsert = kwargs.get("upsert", False)
78
+ skip_if_exists = kwargs.get("skip_if_exists", False)
77
79
  for argument in arguments:
78
80
  await self.add_content_async(
79
81
  name=argument.get("name"),
@@ -85,8 +87,8 @@ class Knowledge:
85
87
  reader=argument.get("reader"),
86
88
  include=argument.get("include"),
87
89
  exclude=argument.get("exclude"),
88
- upsert=argument.get("upsert", False),
89
- skip_if_exists=argument.get("skip_if_exists", False),
90
+ upsert=argument.get("upsert", upsert),
91
+ skip_if_exists=argument.get("skip_if_exists", skip_if_exists),
90
92
  remote_content=argument.get("remote_content", None),
91
93
  )
92
94
 
@@ -102,7 +104,6 @@ class Knowledge:
102
104
  upsert = kwargs.get("upsert", False)
103
105
  skip_if_exists = kwargs.get("skip_if_exists", False)
104
106
  remote_content = kwargs.get("remote_content", None)
105
-
106
107
  for path in paths:
107
108
  await self.add_content_async(
108
109
  name=name,