agno 2.1.0__tar.gz → 2.1.1__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 (546) hide show
  1. {agno-2.1.0 → agno-2.1.1}/PKG-INFO +1 -1
  2. {agno-2.1.0 → agno-2.1.1}/agno/agent/agent.py +1 -1
  3. {agno-2.1.0 → agno-2.1.1}/agno/db/mongo/mongo.py +65 -66
  4. agno-2.1.1/agno/db/utils.py +116 -0
  5. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/knowledge.py +6 -0
  6. {agno-2.1.0 → agno-2.1.1}/agno/models/openai/responses.py +1 -1
  7. agno-2.1.1/agno/os/interfaces/__init__.py +1 -0
  8. agno-2.1.1/agno/os/interfaces/agui/agui.py +47 -0
  9. {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/base.py +4 -2
  10. {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/slack/slack.py +13 -8
  11. {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/whatsapp/whatsapp.py +12 -5
  12. {agno-2.1.0 → agno-2.1.1}/agno/os/mcp.py +1 -1
  13. {agno-2.1.0 → agno-2.1.1}/agno/os/router.py +1 -1
  14. {agno-2.1.0 → agno-2.1.1}/agno/run/base.py +2 -13
  15. {agno-2.1.0 → agno-2.1.1}/agno/team/team.py +1 -1
  16. agno-2.1.1/agno/utils/serialize.py +32 -0
  17. {agno-2.1.0 → agno-2.1.1}/agno/workflow/types.py +4 -6
  18. {agno-2.1.0 → agno-2.1.1}/agno.egg-info/PKG-INFO +1 -1
  19. {agno-2.1.0 → agno-2.1.1}/agno.egg-info/SOURCES.txt +1 -0
  20. {agno-2.1.0 → agno-2.1.1}/pyproject.toml +1 -1
  21. agno-2.1.0/agno/db/utils.py +0 -88
  22. agno-2.1.0/agno/os/interfaces/agui/agui.py +0 -31
  23. agno-2.1.0/agno/utils/print_response/__init__.py +0 -0
  24. {agno-2.1.0 → agno-2.1.1}/LICENSE +0 -0
  25. {agno-2.1.0 → agno-2.1.1}/README.md +0 -0
  26. {agno-2.1.0 → agno-2.1.1}/agno/__init__.py +0 -0
  27. {agno-2.1.0 → agno-2.1.1}/agno/agent/__init__.py +0 -0
  28. {agno-2.1.0 → agno-2.1.1}/agno/api/__init__.py +0 -0
  29. {agno-2.1.0 → agno-2.1.1}/agno/api/agent.py +0 -0
  30. {agno-2.1.0 → agno-2.1.1}/agno/api/api.py +0 -0
  31. {agno-2.1.0 → agno-2.1.1}/agno/api/evals.py +0 -0
  32. {agno-2.1.0 → agno-2.1.1}/agno/api/os.py +0 -0
  33. {agno-2.1.0 → agno-2.1.1}/agno/api/routes.py +0 -0
  34. {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/__init__.py +0 -0
  35. {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/agent.py +0 -0
  36. {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/evals.py +0 -0
  37. {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/os.py +0 -0
  38. {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/response.py +0 -0
  39. {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/team.py +0 -0
  40. {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/utils.py +0 -0
  41. {agno-2.1.0 → agno-2.1.1}/agno/api/schemas/workflows.py +0 -0
  42. {agno-2.1.0 → agno-2.1.1}/agno/api/settings.py +0 -0
  43. {agno-2.1.0 → agno-2.1.1}/agno/api/team.py +0 -0
  44. {agno-2.1.0 → agno-2.1.1}/agno/api/workflow.py +0 -0
  45. {agno-2.1.0 → agno-2.1.1}/agno/cloud/aws/base.py +0 -0
  46. {agno-2.1.0 → agno-2.1.1}/agno/cloud/aws/s3/__init__.py +0 -0
  47. {agno-2.1.0 → agno-2.1.1}/agno/cloud/aws/s3/api_client.py +0 -0
  48. {agno-2.1.0 → agno-2.1.1}/agno/cloud/aws/s3/bucket.py +0 -0
  49. {agno-2.1.0 → agno-2.1.1}/agno/cloud/aws/s3/object.py +0 -0
  50. {agno-2.1.0 → agno-2.1.1}/agno/db/__init__.py +0 -0
  51. {agno-2.1.0 → agno-2.1.1}/agno/db/base.py +0 -0
  52. {agno-2.1.0 → agno-2.1.1}/agno/db/dynamo/__init__.py +0 -0
  53. {agno-2.1.0 → agno-2.1.1}/agno/db/dynamo/dynamo.py +0 -0
  54. {agno-2.1.0 → agno-2.1.1}/agno/db/dynamo/schemas.py +0 -0
  55. {agno-2.1.0 → agno-2.1.1}/agno/db/dynamo/utils.py +0 -0
  56. {agno-2.1.0 → agno-2.1.1}/agno/db/firestore/__init__.py +0 -0
  57. {agno-2.1.0 → agno-2.1.1}/agno/db/firestore/firestore.py +0 -0
  58. {agno-2.1.0 → agno-2.1.1}/agno/db/firestore/schemas.py +0 -0
  59. {agno-2.1.0 → agno-2.1.1}/agno/db/firestore/utils.py +0 -0
  60. {agno-2.1.0 → agno-2.1.1}/agno/db/gcs_json/__init__.py +0 -0
  61. {agno-2.1.0 → agno-2.1.1}/agno/db/gcs_json/gcs_json_db.py +0 -0
  62. {agno-2.1.0 → agno-2.1.1}/agno/db/gcs_json/utils.py +0 -0
  63. {agno-2.1.0 → agno-2.1.1}/agno/db/in_memory/__init__.py +0 -0
  64. {agno-2.1.0 → agno-2.1.1}/agno/db/in_memory/in_memory_db.py +0 -0
  65. {agno-2.1.0 → agno-2.1.1}/agno/db/in_memory/utils.py +0 -0
  66. {agno-2.1.0 → agno-2.1.1}/agno/db/json/__init__.py +0 -0
  67. {agno-2.1.0 → agno-2.1.1}/agno/db/json/json_db.py +0 -0
  68. {agno-2.1.0 → agno-2.1.1}/agno/db/json/utils.py +0 -0
  69. {agno-2.1.0 → agno-2.1.1}/agno/db/migrations/__init__.py +0 -0
  70. {agno-2.1.0 → agno-2.1.1}/agno/db/migrations/v1_to_v2.py +0 -0
  71. {agno-2.1.0 → agno-2.1.1}/agno/db/mongo/__init__.py +0 -0
  72. {agno-2.1.0 → agno-2.1.1}/agno/db/mongo/schemas.py +0 -0
  73. {agno-2.1.0 → agno-2.1.1}/agno/db/mongo/utils.py +0 -0
  74. {agno-2.1.0 → agno-2.1.1}/agno/db/mysql/__init__.py +0 -0
  75. {agno-2.1.0 → agno-2.1.1}/agno/db/mysql/mysql.py +0 -0
  76. {agno-2.1.0 → agno-2.1.1}/agno/db/mysql/schemas.py +0 -0
  77. {agno-2.1.0 → agno-2.1.1}/agno/db/mysql/utils.py +0 -0
  78. {agno-2.1.0 → agno-2.1.1}/agno/db/postgres/__init__.py +0 -0
  79. {agno-2.1.0 → agno-2.1.1}/agno/db/postgres/postgres.py +0 -0
  80. {agno-2.1.0 → agno-2.1.1}/agno/db/postgres/schemas.py +0 -0
  81. {agno-2.1.0 → agno-2.1.1}/agno/db/postgres/utils.py +0 -0
  82. {agno-2.1.0 → agno-2.1.1}/agno/db/redis/__init__.py +0 -0
  83. {agno-2.1.0 → agno-2.1.1}/agno/db/redis/redis.py +0 -0
  84. {agno-2.1.0 → agno-2.1.1}/agno/db/redis/schemas.py +0 -0
  85. {agno-2.1.0 → agno-2.1.1}/agno/db/redis/utils.py +0 -0
  86. {agno-2.1.0 → agno-2.1.1}/agno/db/schemas/__init__.py +0 -0
  87. {agno-2.1.0 → agno-2.1.1}/agno/db/schemas/evals.py +0 -0
  88. {agno-2.1.0 → agno-2.1.1}/agno/db/schemas/knowledge.py +0 -0
  89. {agno-2.1.0 → agno-2.1.1}/agno/db/schemas/memory.py +0 -0
  90. {agno-2.1.0 → agno-2.1.1}/agno/db/schemas/metrics.py +0 -0
  91. {agno-2.1.0 → agno-2.1.1}/agno/db/singlestore/__init__.py +0 -0
  92. {agno-2.1.0 → agno-2.1.1}/agno/db/singlestore/schemas.py +0 -0
  93. {agno-2.1.0 → agno-2.1.1}/agno/db/singlestore/singlestore.py +0 -0
  94. {agno-2.1.0 → agno-2.1.1}/agno/db/singlestore/utils.py +0 -0
  95. {agno-2.1.0 → agno-2.1.1}/agno/db/sqlite/__init__.py +0 -0
  96. {agno-2.1.0 → agno-2.1.1}/agno/db/sqlite/schemas.py +0 -0
  97. {agno-2.1.0 → agno-2.1.1}/agno/db/sqlite/sqlite.py +0 -0
  98. {agno-2.1.0 → agno-2.1.1}/agno/db/sqlite/utils.py +0 -0
  99. {agno-2.1.0 → agno-2.1.1}/agno/debug.py +0 -0
  100. {agno-2.1.0 → agno-2.1.1}/agno/eval/__init__.py +0 -0
  101. {agno-2.1.0 → agno-2.1.1}/agno/eval/accuracy.py +0 -0
  102. {agno-2.1.0 → agno-2.1.1}/agno/eval/performance.py +0 -0
  103. {agno-2.1.0 → agno-2.1.1}/agno/eval/reliability.py +0 -0
  104. {agno-2.1.0 → agno-2.1.1}/agno/eval/utils.py +0 -0
  105. {agno-2.1.0 → agno-2.1.1}/agno/exceptions.py +0 -0
  106. {agno-2.1.0 → agno-2.1.1}/agno/guardrails/__init__.py +0 -0
  107. {agno-2.1.0 → agno-2.1.1}/agno/guardrails/base.py +0 -0
  108. {agno-2.1.0 → agno-2.1.1}/agno/guardrails/openai.py +0 -0
  109. {agno-2.1.0 → agno-2.1.1}/agno/guardrails/pii.py +0 -0
  110. {agno-2.1.0 → agno-2.1.1}/agno/guardrails/prompt_injection.py +0 -0
  111. {agno-2.1.0 → agno-2.1.1}/agno/integrations/__init__.py +0 -0
  112. {agno-2.1.0 → agno-2.1.1}/agno/integrations/discord/__init__.py +0 -0
  113. {agno-2.1.0 → agno-2.1.1}/agno/integrations/discord/client.py +0 -0
  114. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/__init__.py +0 -0
  115. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/__init__.py +0 -0
  116. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/agentic.py +0 -0
  117. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/document.py +0 -0
  118. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/fixed.py +0 -0
  119. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/markdown.py +0 -0
  120. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/recursive.py +0 -0
  121. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/row.py +0 -0
  122. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/semantic.py +0 -0
  123. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/chunking/strategy.py +0 -0
  124. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/content.py +0 -0
  125. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/document/__init__.py +0 -0
  126. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/document/base.py +0 -0
  127. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/__init__.py +0 -0
  128. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  129. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/azure_openai.py +0 -0
  130. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/base.py +0 -0
  131. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/cohere.py +0 -0
  132. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/fastembed.py +0 -0
  133. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/fireworks.py +0 -0
  134. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/google.py +0 -0
  135. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/huggingface.py +0 -0
  136. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/jina.py +0 -0
  137. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/langdb.py +0 -0
  138. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/mistral.py +0 -0
  139. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/nebius.py +0 -0
  140. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/ollama.py +0 -0
  141. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/openai.py +0 -0
  142. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  143. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/together.py +0 -0
  144. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/embedder/voyageai.py +0 -0
  145. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/__init__.py +0 -0
  146. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/arxiv_reader.py +0 -0
  147. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/base.py +0 -0
  148. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/csv_reader.py +0 -0
  149. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/docx_reader.py +0 -0
  150. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  151. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/json_reader.py +0 -0
  152. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/markdown_reader.py +0 -0
  153. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/pdf_reader.py +0 -0
  154. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/reader_factory.py +0 -0
  155. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/s3_reader.py +0 -0
  156. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/text_reader.py +0 -0
  157. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/web_search_reader.py +0 -0
  158. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/website_reader.py +0 -0
  159. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  160. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reader/youtube_reader.py +0 -0
  161. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/remote_content/__init__.py +0 -0
  162. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/remote_content/remote_content.py +0 -0
  163. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reranker/__init__.py +0 -0
  164. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reranker/base.py +0 -0
  165. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reranker/cohere.py +0 -0
  166. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reranker/infinity.py +0 -0
  167. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  168. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/types.py +0 -0
  169. {agno-2.1.0 → agno-2.1.1}/agno/knowledge/utils.py +0 -0
  170. {agno-2.1.0 → agno-2.1.1}/agno/media.py +0 -0
  171. {agno-2.1.0 → agno-2.1.1}/agno/memory/__init__.py +0 -0
  172. {agno-2.1.0 → agno-2.1.1}/agno/memory/manager.py +0 -0
  173. {agno-2.1.0 → agno-2.1.1}/agno/models/__init__.py +0 -0
  174. {agno-2.1.0 → agno-2.1.1}/agno/models/aimlapi/__init__.py +0 -0
  175. {agno-2.1.0 → agno-2.1.1}/agno/models/aimlapi/aimlapi.py +0 -0
  176. {agno-2.1.0 → agno-2.1.1}/agno/models/anthropic/__init__.py +0 -0
  177. {agno-2.1.0 → agno-2.1.1}/agno/models/anthropic/claude.py +0 -0
  178. {agno-2.1.0 → agno-2.1.1}/agno/models/aws/__init__.py +0 -0
  179. {agno-2.1.0 → agno-2.1.1}/agno/models/aws/bedrock.py +0 -0
  180. {agno-2.1.0 → agno-2.1.1}/agno/models/aws/claude.py +0 -0
  181. {agno-2.1.0 → agno-2.1.1}/agno/models/azure/__init__.py +0 -0
  182. {agno-2.1.0 → agno-2.1.1}/agno/models/azure/ai_foundry.py +0 -0
  183. {agno-2.1.0 → agno-2.1.1}/agno/models/azure/openai_chat.py +0 -0
  184. {agno-2.1.0 → agno-2.1.1}/agno/models/base.py +0 -0
  185. {agno-2.1.0 → agno-2.1.1}/agno/models/cerebras/__init__.py +0 -0
  186. {agno-2.1.0 → agno-2.1.1}/agno/models/cerebras/cerebras.py +0 -0
  187. {agno-2.1.0 → agno-2.1.1}/agno/models/cerebras/cerebras_openai.py +0 -0
  188. {agno-2.1.0 → agno-2.1.1}/agno/models/cohere/__init__.py +0 -0
  189. {agno-2.1.0 → agno-2.1.1}/agno/models/cohere/chat.py +0 -0
  190. {agno-2.1.0 → agno-2.1.1}/agno/models/cometapi/__init__.py +0 -0
  191. {agno-2.1.0 → agno-2.1.1}/agno/models/cometapi/cometapi.py +0 -0
  192. {agno-2.1.0 → agno-2.1.1}/agno/models/dashscope/__init__.py +0 -0
  193. {agno-2.1.0 → agno-2.1.1}/agno/models/dashscope/dashscope.py +0 -0
  194. {agno-2.1.0 → agno-2.1.1}/agno/models/deepinfra/__init__.py +0 -0
  195. {agno-2.1.0 → agno-2.1.1}/agno/models/deepinfra/deepinfra.py +0 -0
  196. {agno-2.1.0 → agno-2.1.1}/agno/models/deepseek/__init__.py +0 -0
  197. {agno-2.1.0 → agno-2.1.1}/agno/models/deepseek/deepseek.py +0 -0
  198. {agno-2.1.0 → agno-2.1.1}/agno/models/defaults.py +0 -0
  199. {agno-2.1.0 → agno-2.1.1}/agno/models/fireworks/__init__.py +0 -0
  200. {agno-2.1.0 → agno-2.1.1}/agno/models/fireworks/fireworks.py +0 -0
  201. {agno-2.1.0 → agno-2.1.1}/agno/models/google/__init__.py +0 -0
  202. {agno-2.1.0 → agno-2.1.1}/agno/models/google/gemini.py +0 -0
  203. {agno-2.1.0 → agno-2.1.1}/agno/models/groq/__init__.py +0 -0
  204. {agno-2.1.0 → agno-2.1.1}/agno/models/groq/groq.py +0 -0
  205. {agno-2.1.0 → agno-2.1.1}/agno/models/huggingface/__init__.py +0 -0
  206. {agno-2.1.0 → agno-2.1.1}/agno/models/huggingface/huggingface.py +0 -0
  207. {agno-2.1.0 → agno-2.1.1}/agno/models/ibm/__init__.py +0 -0
  208. {agno-2.1.0 → agno-2.1.1}/agno/models/ibm/watsonx.py +0 -0
  209. {agno-2.1.0 → agno-2.1.1}/agno/models/internlm/__init__.py +0 -0
  210. {agno-2.1.0 → agno-2.1.1}/agno/models/internlm/internlm.py +0 -0
  211. {agno-2.1.0 → agno-2.1.1}/agno/models/langdb/__init__.py +0 -0
  212. {agno-2.1.0 → agno-2.1.1}/agno/models/langdb/langdb.py +0 -0
  213. {agno-2.1.0 → agno-2.1.1}/agno/models/litellm/__init__.py +0 -0
  214. {agno-2.1.0 → agno-2.1.1}/agno/models/litellm/chat.py +0 -0
  215. {agno-2.1.0 → agno-2.1.1}/agno/models/litellm/litellm_openai.py +0 -0
  216. {agno-2.1.0 → agno-2.1.1}/agno/models/llama_cpp/__init__.py +0 -0
  217. {agno-2.1.0 → agno-2.1.1}/agno/models/llama_cpp/llama_cpp.py +0 -0
  218. {agno-2.1.0 → agno-2.1.1}/agno/models/lmstudio/__init__.py +0 -0
  219. {agno-2.1.0 → agno-2.1.1}/agno/models/lmstudio/lmstudio.py +0 -0
  220. {agno-2.1.0 → agno-2.1.1}/agno/models/message.py +0 -0
  221. {agno-2.1.0 → agno-2.1.1}/agno/models/meta/__init__.py +0 -0
  222. {agno-2.1.0 → agno-2.1.1}/agno/models/meta/llama.py +0 -0
  223. {agno-2.1.0 → agno-2.1.1}/agno/models/meta/llama_openai.py +0 -0
  224. {agno-2.1.0 → agno-2.1.1}/agno/models/metrics.py +0 -0
  225. {agno-2.1.0 → agno-2.1.1}/agno/models/mistral/__init__.py +0 -0
  226. {agno-2.1.0 → agno-2.1.1}/agno/models/mistral/mistral.py +0 -0
  227. {agno-2.1.0 → agno-2.1.1}/agno/models/nebius/__init__.py +0 -0
  228. {agno-2.1.0 → agno-2.1.1}/agno/models/nebius/nebius.py +0 -0
  229. {agno-2.1.0 → agno-2.1.1}/agno/models/nexus/__init__.py +0 -0
  230. {agno-2.1.0 → agno-2.1.1}/agno/models/nexus/nexus.py +0 -0
  231. {agno-2.1.0 → agno-2.1.1}/agno/models/nvidia/__init__.py +0 -0
  232. {agno-2.1.0 → agno-2.1.1}/agno/models/nvidia/nvidia.py +0 -0
  233. {agno-2.1.0 → agno-2.1.1}/agno/models/ollama/__init__.py +0 -0
  234. {agno-2.1.0 → agno-2.1.1}/agno/models/ollama/chat.py +0 -0
  235. {agno-2.1.0 → agno-2.1.1}/agno/models/openai/__init__.py +0 -0
  236. {agno-2.1.0 → agno-2.1.1}/agno/models/openai/chat.py +0 -0
  237. {agno-2.1.0 → agno-2.1.1}/agno/models/openai/like.py +0 -0
  238. {agno-2.1.0 → agno-2.1.1}/agno/models/openrouter/__init__.py +0 -0
  239. {agno-2.1.0 → agno-2.1.1}/agno/models/openrouter/openrouter.py +0 -0
  240. {agno-2.1.0 → agno-2.1.1}/agno/models/perplexity/__init__.py +0 -0
  241. {agno-2.1.0 → agno-2.1.1}/agno/models/perplexity/perplexity.py +0 -0
  242. {agno-2.1.0 → agno-2.1.1}/agno/models/portkey/__init__.py +0 -0
  243. {agno-2.1.0 → agno-2.1.1}/agno/models/portkey/portkey.py +0 -0
  244. {agno-2.1.0 → agno-2.1.1}/agno/models/requesty/__init__.py +0 -0
  245. {agno-2.1.0 → agno-2.1.1}/agno/models/requesty/requesty.py +0 -0
  246. {agno-2.1.0 → agno-2.1.1}/agno/models/response.py +0 -0
  247. {agno-2.1.0 → agno-2.1.1}/agno/models/sambanova/__init__.py +0 -0
  248. {agno-2.1.0 → agno-2.1.1}/agno/models/sambanova/sambanova.py +0 -0
  249. {agno-2.1.0 → agno-2.1.1}/agno/models/siliconflow/__init__.py +0 -0
  250. {agno-2.1.0 → agno-2.1.1}/agno/models/siliconflow/siliconflow.py +0 -0
  251. {agno-2.1.0 → agno-2.1.1}/agno/models/together/__init__.py +0 -0
  252. {agno-2.1.0 → agno-2.1.1}/agno/models/together/together.py +0 -0
  253. {agno-2.1.0 → agno-2.1.1}/agno/models/utils.py +0 -0
  254. {agno-2.1.0 → agno-2.1.1}/agno/models/vercel/__init__.py +0 -0
  255. {agno-2.1.0 → agno-2.1.1}/agno/models/vercel/v0.py +0 -0
  256. {agno-2.1.0 → agno-2.1.1}/agno/models/vllm/__init__.py +0 -0
  257. {agno-2.1.0 → agno-2.1.1}/agno/models/vllm/vllm.py +0 -0
  258. {agno-2.1.0 → agno-2.1.1}/agno/models/xai/__init__.py +0 -0
  259. {agno-2.1.0 → agno-2.1.1}/agno/models/xai/xai.py +0 -0
  260. {agno-2.1.0 → agno-2.1.1}/agno/os/__init__.py +0 -0
  261. {agno-2.1.0 → agno-2.1.1}/agno/os/app.py +0 -0
  262. {agno-2.1.0 → agno-2.1.1}/agno/os/auth.py +0 -0
  263. {agno-2.1.0 → agno-2.1.1}/agno/os/config.py +0 -0
  264. {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/agui/__init__.py +0 -0
  265. {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/agui/router.py +0 -0
  266. {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/agui/utils.py +0 -0
  267. {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/slack/__init__.py +0 -0
  268. {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/slack/router.py +0 -0
  269. {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/slack/security.py +0 -0
  270. {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  271. {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/whatsapp/router.py +0 -0
  272. {agno-2.1.0 → agno-2.1.1}/agno/os/interfaces/whatsapp/security.py +0 -0
  273. {agno-2.1.0 → agno-2.1.1}/agno/os/middleware/__init__.py +0 -0
  274. {agno-2.1.0 → agno-2.1.1}/agno/os/middleware/jwt.py +0 -0
  275. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/__init__.py +0 -0
  276. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/evals/__init__.py +0 -0
  277. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/evals/evals.py +0 -0
  278. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/evals/schemas.py +0 -0
  279. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/evals/utils.py +0 -0
  280. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/health.py +0 -0
  281. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/home.py +0 -0
  282. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/knowledge/__init__.py +0 -0
  283. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/knowledge/knowledge.py +0 -0
  284. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/knowledge/schemas.py +0 -0
  285. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/memory/__init__.py +0 -0
  286. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/memory/memory.py +0 -0
  287. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/memory/schemas.py +0 -0
  288. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/metrics/__init__.py +0 -0
  289. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/metrics/metrics.py +0 -0
  290. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/metrics/schemas.py +0 -0
  291. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/session/__init__.py +0 -0
  292. {agno-2.1.0 → agno-2.1.1}/agno/os/routers/session/session.py +0 -0
  293. {agno-2.1.0 → agno-2.1.1}/agno/os/schema.py +0 -0
  294. {agno-2.1.0 → agno-2.1.1}/agno/os/settings.py +0 -0
  295. {agno-2.1.0 → agno-2.1.1}/agno/os/utils.py +0 -0
  296. {agno-2.1.0 → agno-2.1.1}/agno/py.typed +0 -0
  297. {agno-2.1.0/agno/os/interfaces → agno-2.1.1/agno/reasoning}/__init__.py +0 -0
  298. {agno-2.1.0 → agno-2.1.1}/agno/reasoning/azure_ai_foundry.py +0 -0
  299. {agno-2.1.0 → agno-2.1.1}/agno/reasoning/deepseek.py +0 -0
  300. {agno-2.1.0 → agno-2.1.1}/agno/reasoning/default.py +0 -0
  301. {agno-2.1.0 → agno-2.1.1}/agno/reasoning/groq.py +0 -0
  302. {agno-2.1.0 → agno-2.1.1}/agno/reasoning/helpers.py +0 -0
  303. {agno-2.1.0 → agno-2.1.1}/agno/reasoning/ollama.py +0 -0
  304. {agno-2.1.0 → agno-2.1.1}/agno/reasoning/openai.py +0 -0
  305. {agno-2.1.0 → agno-2.1.1}/agno/reasoning/step.py +0 -0
  306. {agno-2.1.0/agno/reasoning → agno-2.1.1/agno/run}/__init__.py +0 -0
  307. {agno-2.1.0 → agno-2.1.1}/agno/run/agent.py +0 -0
  308. {agno-2.1.0 → agno-2.1.1}/agno/run/cancel.py +0 -0
  309. {agno-2.1.0 → agno-2.1.1}/agno/run/messages.py +0 -0
  310. {agno-2.1.0 → agno-2.1.1}/agno/run/team.py +0 -0
  311. {agno-2.1.0 → agno-2.1.1}/agno/run/workflow.py +0 -0
  312. {agno-2.1.0 → agno-2.1.1}/agno/session/__init__.py +0 -0
  313. {agno-2.1.0 → agno-2.1.1}/agno/session/agent.py +0 -0
  314. {agno-2.1.0 → agno-2.1.1}/agno/session/summary.py +0 -0
  315. {agno-2.1.0 → agno-2.1.1}/agno/session/team.py +0 -0
  316. {agno-2.1.0 → agno-2.1.1}/agno/session/workflow.py +0 -0
  317. {agno-2.1.0 → agno-2.1.1}/agno/team/__init__.py +0 -0
  318. {agno-2.1.0 → agno-2.1.1}/agno/tools/__init__.py +0 -0
  319. {agno-2.1.0 → agno-2.1.1}/agno/tools/agentql.py +0 -0
  320. {agno-2.1.0 → agno-2.1.1}/agno/tools/airflow.py +0 -0
  321. {agno-2.1.0 → agno-2.1.1}/agno/tools/api.py +0 -0
  322. {agno-2.1.0 → agno-2.1.1}/agno/tools/apify.py +0 -0
  323. {agno-2.1.0 → agno-2.1.1}/agno/tools/arxiv.py +0 -0
  324. {agno-2.1.0 → agno-2.1.1}/agno/tools/aws_lambda.py +0 -0
  325. {agno-2.1.0 → agno-2.1.1}/agno/tools/aws_ses.py +0 -0
  326. {agno-2.1.0 → agno-2.1.1}/agno/tools/baidusearch.py +0 -0
  327. {agno-2.1.0 → agno-2.1.1}/agno/tools/bitbucket.py +0 -0
  328. {agno-2.1.0 → agno-2.1.1}/agno/tools/brandfetch.py +0 -0
  329. {agno-2.1.0 → agno-2.1.1}/agno/tools/bravesearch.py +0 -0
  330. {agno-2.1.0 → agno-2.1.1}/agno/tools/brightdata.py +0 -0
  331. {agno-2.1.0 → agno-2.1.1}/agno/tools/browserbase.py +0 -0
  332. {agno-2.1.0 → agno-2.1.1}/agno/tools/calcom.py +0 -0
  333. {agno-2.1.0 → agno-2.1.1}/agno/tools/calculator.py +0 -0
  334. {agno-2.1.0 → agno-2.1.1}/agno/tools/cartesia.py +0 -0
  335. {agno-2.1.0 → agno-2.1.1}/agno/tools/clickup.py +0 -0
  336. {agno-2.1.0 → agno-2.1.1}/agno/tools/confluence.py +0 -0
  337. {agno-2.1.0 → agno-2.1.1}/agno/tools/crawl4ai.py +0 -0
  338. {agno-2.1.0 → agno-2.1.1}/agno/tools/csv_toolkit.py +0 -0
  339. {agno-2.1.0 → agno-2.1.1}/agno/tools/dalle.py +0 -0
  340. {agno-2.1.0 → agno-2.1.1}/agno/tools/daytona.py +0 -0
  341. {agno-2.1.0 → agno-2.1.1}/agno/tools/decorator.py +0 -0
  342. {agno-2.1.0 → agno-2.1.1}/agno/tools/desi_vocal.py +0 -0
  343. {agno-2.1.0 → agno-2.1.1}/agno/tools/discord.py +0 -0
  344. {agno-2.1.0 → agno-2.1.1}/agno/tools/docker.py +0 -0
  345. {agno-2.1.0 → agno-2.1.1}/agno/tools/duckdb.py +0 -0
  346. {agno-2.1.0 → agno-2.1.1}/agno/tools/duckduckgo.py +0 -0
  347. {agno-2.1.0 → agno-2.1.1}/agno/tools/e2b.py +0 -0
  348. {agno-2.1.0 → agno-2.1.1}/agno/tools/eleven_labs.py +0 -0
  349. {agno-2.1.0 → agno-2.1.1}/agno/tools/email.py +0 -0
  350. {agno-2.1.0 → agno-2.1.1}/agno/tools/evm.py +0 -0
  351. {agno-2.1.0 → agno-2.1.1}/agno/tools/exa.py +0 -0
  352. {agno-2.1.0 → agno-2.1.1}/agno/tools/fal.py +0 -0
  353. {agno-2.1.0 → agno-2.1.1}/agno/tools/file.py +0 -0
  354. {agno-2.1.0 → agno-2.1.1}/agno/tools/file_generation.py +0 -0
  355. {agno-2.1.0 → agno-2.1.1}/agno/tools/financial_datasets.py +0 -0
  356. {agno-2.1.0 → agno-2.1.1}/agno/tools/firecrawl.py +0 -0
  357. {agno-2.1.0 → agno-2.1.1}/agno/tools/function.py +0 -0
  358. {agno-2.1.0 → agno-2.1.1}/agno/tools/giphy.py +0 -0
  359. {agno-2.1.0 → agno-2.1.1}/agno/tools/github.py +0 -0
  360. {agno-2.1.0 → agno-2.1.1}/agno/tools/gmail.py +0 -0
  361. {agno-2.1.0 → agno-2.1.1}/agno/tools/google_bigquery.py +0 -0
  362. {agno-2.1.0 → agno-2.1.1}/agno/tools/google_maps.py +0 -0
  363. {agno-2.1.0 → agno-2.1.1}/agno/tools/googlecalendar.py +0 -0
  364. {agno-2.1.0 → agno-2.1.1}/agno/tools/googlesearch.py +0 -0
  365. {agno-2.1.0 → agno-2.1.1}/agno/tools/googlesheets.py +0 -0
  366. {agno-2.1.0 → agno-2.1.1}/agno/tools/hackernews.py +0 -0
  367. {agno-2.1.0 → agno-2.1.1}/agno/tools/jina.py +0 -0
  368. {agno-2.1.0 → agno-2.1.1}/agno/tools/jira.py +0 -0
  369. {agno-2.1.0 → agno-2.1.1}/agno/tools/knowledge.py +0 -0
  370. {agno-2.1.0 → agno-2.1.1}/agno/tools/linear.py +0 -0
  371. {agno-2.1.0 → agno-2.1.1}/agno/tools/linkup.py +0 -0
  372. {agno-2.1.0 → agno-2.1.1}/agno/tools/local_file_system.py +0 -0
  373. {agno-2.1.0 → agno-2.1.1}/agno/tools/lumalab.py +0 -0
  374. {agno-2.1.0 → agno-2.1.1}/agno/tools/mcp.py +0 -0
  375. {agno-2.1.0 → agno-2.1.1}/agno/tools/mcp_toolbox.py +0 -0
  376. {agno-2.1.0 → agno-2.1.1}/agno/tools/mem0.py +0 -0
  377. {agno-2.1.0 → agno-2.1.1}/agno/tools/memori.py +0 -0
  378. {agno-2.1.0 → agno-2.1.1}/agno/tools/memory.py +0 -0
  379. {agno-2.1.0 → agno-2.1.1}/agno/tools/mlx_transcribe.py +0 -0
  380. {agno-2.1.0/agno/run → agno-2.1.1/agno/tools/models}/__init__.py +0 -0
  381. {agno-2.1.0 → agno-2.1.1}/agno/tools/models/azure_openai.py +0 -0
  382. {agno-2.1.0 → agno-2.1.1}/agno/tools/models/gemini.py +0 -0
  383. {agno-2.1.0 → agno-2.1.1}/agno/tools/models/groq.py +0 -0
  384. {agno-2.1.0 → agno-2.1.1}/agno/tools/models/morph.py +0 -0
  385. {agno-2.1.0 → agno-2.1.1}/agno/tools/models/nebius.py +0 -0
  386. {agno-2.1.0 → agno-2.1.1}/agno/tools/models_labs.py +0 -0
  387. {agno-2.1.0 → agno-2.1.1}/agno/tools/moviepy_video.py +0 -0
  388. {agno-2.1.0 → agno-2.1.1}/agno/tools/neo4j.py +0 -0
  389. {agno-2.1.0 → agno-2.1.1}/agno/tools/newspaper.py +0 -0
  390. {agno-2.1.0 → agno-2.1.1}/agno/tools/newspaper4k.py +0 -0
  391. {agno-2.1.0 → agno-2.1.1}/agno/tools/openai.py +0 -0
  392. {agno-2.1.0 → agno-2.1.1}/agno/tools/openbb.py +0 -0
  393. {agno-2.1.0 → agno-2.1.1}/agno/tools/opencv.py +0 -0
  394. {agno-2.1.0 → agno-2.1.1}/agno/tools/openweather.py +0 -0
  395. {agno-2.1.0 → agno-2.1.1}/agno/tools/oxylabs.py +0 -0
  396. {agno-2.1.0 → agno-2.1.1}/agno/tools/pandas.py +0 -0
  397. {agno-2.1.0 → agno-2.1.1}/agno/tools/postgres.py +0 -0
  398. {agno-2.1.0 → agno-2.1.1}/agno/tools/pubmed.py +0 -0
  399. {agno-2.1.0 → agno-2.1.1}/agno/tools/python.py +0 -0
  400. {agno-2.1.0 → agno-2.1.1}/agno/tools/reasoning.py +0 -0
  401. {agno-2.1.0 → agno-2.1.1}/agno/tools/reddit.py +0 -0
  402. {agno-2.1.0 → agno-2.1.1}/agno/tools/replicate.py +0 -0
  403. {agno-2.1.0 → agno-2.1.1}/agno/tools/resend.py +0 -0
  404. {agno-2.1.0 → agno-2.1.1}/agno/tools/scrapegraph.py +0 -0
  405. {agno-2.1.0 → agno-2.1.1}/agno/tools/searxng.py +0 -0
  406. {agno-2.1.0 → agno-2.1.1}/agno/tools/serpapi.py +0 -0
  407. {agno-2.1.0 → agno-2.1.1}/agno/tools/serper.py +0 -0
  408. {agno-2.1.0 → agno-2.1.1}/agno/tools/shell.py +0 -0
  409. {agno-2.1.0 → agno-2.1.1}/agno/tools/slack.py +0 -0
  410. {agno-2.1.0 → agno-2.1.1}/agno/tools/sleep.py +0 -0
  411. {agno-2.1.0 → agno-2.1.1}/agno/tools/spider.py +0 -0
  412. {agno-2.1.0 → agno-2.1.1}/agno/tools/sql.py +0 -0
  413. {agno-2.1.0/agno/tools/models → agno-2.1.1/agno/tools/streamlit}/__init__.py +0 -0
  414. {agno-2.1.0 → agno-2.1.1}/agno/tools/streamlit/components.py +0 -0
  415. {agno-2.1.0 → agno-2.1.1}/agno/tools/tavily.py +0 -0
  416. {agno-2.1.0 → agno-2.1.1}/agno/tools/telegram.py +0 -0
  417. {agno-2.1.0 → agno-2.1.1}/agno/tools/todoist.py +0 -0
  418. {agno-2.1.0 → agno-2.1.1}/agno/tools/tool_registry.py +0 -0
  419. {agno-2.1.0 → agno-2.1.1}/agno/tools/toolkit.py +0 -0
  420. {agno-2.1.0 → agno-2.1.1}/agno/tools/trafilatura.py +0 -0
  421. {agno-2.1.0 → agno-2.1.1}/agno/tools/trello.py +0 -0
  422. {agno-2.1.0 → agno-2.1.1}/agno/tools/twilio.py +0 -0
  423. {agno-2.1.0 → agno-2.1.1}/agno/tools/user_control_flow.py +0 -0
  424. {agno-2.1.0 → agno-2.1.1}/agno/tools/valyu.py +0 -0
  425. {agno-2.1.0 → agno-2.1.1}/agno/tools/visualization.py +0 -0
  426. {agno-2.1.0 → agno-2.1.1}/agno/tools/webbrowser.py +0 -0
  427. {agno-2.1.0 → agno-2.1.1}/agno/tools/webex.py +0 -0
  428. {agno-2.1.0 → agno-2.1.1}/agno/tools/website.py +0 -0
  429. {agno-2.1.0 → agno-2.1.1}/agno/tools/webtools.py +0 -0
  430. {agno-2.1.0 → agno-2.1.1}/agno/tools/whatsapp.py +0 -0
  431. {agno-2.1.0 → agno-2.1.1}/agno/tools/wikipedia.py +0 -0
  432. {agno-2.1.0 → agno-2.1.1}/agno/tools/workflow.py +0 -0
  433. {agno-2.1.0 → agno-2.1.1}/agno/tools/x.py +0 -0
  434. {agno-2.1.0 → agno-2.1.1}/agno/tools/yfinance.py +0 -0
  435. {agno-2.1.0 → agno-2.1.1}/agno/tools/youtube.py +0 -0
  436. {agno-2.1.0 → agno-2.1.1}/agno/tools/zendesk.py +0 -0
  437. {agno-2.1.0 → agno-2.1.1}/agno/tools/zep.py +0 -0
  438. {agno-2.1.0 → agno-2.1.1}/agno/tools/zoom.py +0 -0
  439. {agno-2.1.0/agno/tools/streamlit → agno-2.1.1/agno/utils}/__init__.py +0 -0
  440. {agno-2.1.0 → agno-2.1.1}/agno/utils/audio.py +0 -0
  441. {agno-2.1.0 → agno-2.1.1}/agno/utils/certs.py +0 -0
  442. {agno-2.1.0 → agno-2.1.1}/agno/utils/code_execution.py +0 -0
  443. {agno-2.1.0 → agno-2.1.1}/agno/utils/common.py +0 -0
  444. {agno-2.1.0 → agno-2.1.1}/agno/utils/dttm.py +0 -0
  445. {agno-2.1.0 → agno-2.1.1}/agno/utils/enum.py +0 -0
  446. {agno-2.1.0 → agno-2.1.1}/agno/utils/env.py +0 -0
  447. {agno-2.1.0 → agno-2.1.1}/agno/utils/events.py +0 -0
  448. {agno-2.1.0 → agno-2.1.1}/agno/utils/format_str.py +0 -0
  449. {agno-2.1.0 → agno-2.1.1}/agno/utils/functions.py +0 -0
  450. {agno-2.1.0 → agno-2.1.1}/agno/utils/gemini.py +0 -0
  451. {agno-2.1.0 → agno-2.1.1}/agno/utils/hooks.py +0 -0
  452. {agno-2.1.0 → agno-2.1.1}/agno/utils/http.py +0 -0
  453. {agno-2.1.0 → agno-2.1.1}/agno/utils/json_schema.py +0 -0
  454. {agno-2.1.0 → agno-2.1.1}/agno/utils/knowledge.py +0 -0
  455. {agno-2.1.0 → agno-2.1.1}/agno/utils/location.py +0 -0
  456. {agno-2.1.0 → agno-2.1.1}/agno/utils/log.py +0 -0
  457. {agno-2.1.0 → agno-2.1.1}/agno/utils/mcp.py +0 -0
  458. {agno-2.1.0 → agno-2.1.1}/agno/utils/media.py +0 -0
  459. {agno-2.1.0 → agno-2.1.1}/agno/utils/merge_dict.py +0 -0
  460. {agno-2.1.0 → agno-2.1.1}/agno/utils/message.py +0 -0
  461. {agno-2.1.0/agno/utils → agno-2.1.1/agno/utils/models}/__init__.py +0 -0
  462. {agno-2.1.0 → agno-2.1.1}/agno/utils/models/ai_foundry.py +0 -0
  463. {agno-2.1.0 → agno-2.1.1}/agno/utils/models/claude.py +0 -0
  464. {agno-2.1.0 → agno-2.1.1}/agno/utils/models/cohere.py +0 -0
  465. {agno-2.1.0 → agno-2.1.1}/agno/utils/models/llama.py +0 -0
  466. {agno-2.1.0 → agno-2.1.1}/agno/utils/models/mistral.py +0 -0
  467. {agno-2.1.0 → agno-2.1.1}/agno/utils/models/openai_responses.py +0 -0
  468. {agno-2.1.0 → agno-2.1.1}/agno/utils/models/schema_utils.py +0 -0
  469. {agno-2.1.0 → agno-2.1.1}/agno/utils/models/watsonx.py +0 -0
  470. {agno-2.1.0 → agno-2.1.1}/agno/utils/openai.py +0 -0
  471. {agno-2.1.0 → agno-2.1.1}/agno/utils/pickle.py +0 -0
  472. {agno-2.1.0 → agno-2.1.1}/agno/utils/pprint.py +0 -0
  473. {agno-2.1.0/agno/utils/models → agno-2.1.1/agno/utils/print_response}/__init__.py +0 -0
  474. {agno-2.1.0 → agno-2.1.1}/agno/utils/print_response/agent.py +0 -0
  475. {agno-2.1.0 → agno-2.1.1}/agno/utils/print_response/team.py +0 -0
  476. {agno-2.1.0 → agno-2.1.1}/agno/utils/print_response/workflow.py +0 -0
  477. {agno-2.1.0 → agno-2.1.1}/agno/utils/prompts.py +0 -0
  478. {agno-2.1.0 → agno-2.1.1}/agno/utils/reasoning.py +0 -0
  479. {agno-2.1.0 → agno-2.1.1}/agno/utils/response.py +0 -0
  480. {agno-2.1.0 → agno-2.1.1}/agno/utils/response_iterator.py +0 -0
  481. {agno-2.1.0 → agno-2.1.1}/agno/utils/safe_formatter.py +0 -0
  482. {agno-2.1.0 → agno-2.1.1}/agno/utils/shell.py +0 -0
  483. {agno-2.1.0 → agno-2.1.1}/agno/utils/streamlit.py +0 -0
  484. {agno-2.1.0 → agno-2.1.1}/agno/utils/string.py +0 -0
  485. {agno-2.1.0 → agno-2.1.1}/agno/utils/team.py +0 -0
  486. {agno-2.1.0 → agno-2.1.1}/agno/utils/timer.py +0 -0
  487. {agno-2.1.0 → agno-2.1.1}/agno/utils/tools.py +0 -0
  488. {agno-2.1.0 → agno-2.1.1}/agno/utils/web.py +0 -0
  489. {agno-2.1.0 → agno-2.1.1}/agno/utils/whatsapp.py +0 -0
  490. {agno-2.1.0 → agno-2.1.1}/agno/utils/yaml_io.py +0 -0
  491. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/__init__.py +0 -0
  492. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/base.py +0 -0
  493. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/cassandra/__init__.py +0 -0
  494. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/cassandra/cassandra.py +0 -0
  495. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  496. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/cassandra/index.py +0 -0
  497. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/chroma/__init__.py +0 -0
  498. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/chroma/chromadb.py +0 -0
  499. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/clickhouse/__init__.py +0 -0
  500. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  501. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/clickhouse/index.py +0 -0
  502. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/couchbase/__init__.py +0 -0
  503. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/couchbase/couchbase.py +0 -0
  504. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/distance.py +0 -0
  505. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/lancedb/__init__.py +0 -0
  506. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/lancedb/lance_db.py +0 -0
  507. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/langchaindb/__init__.py +0 -0
  508. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  509. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/lightrag/__init__.py +0 -0
  510. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/lightrag/lightrag.py +0 -0
  511. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/llamaindex/__init__.py +0 -0
  512. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  513. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/milvus/__init__.py +0 -0
  514. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/milvus/milvus.py +0 -0
  515. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/mongodb/__init__.py +0 -0
  516. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/mongodb/mongodb.py +0 -0
  517. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/pgvector/__init__.py +0 -0
  518. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/pgvector/index.py +0 -0
  519. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/pgvector/pgvector.py +0 -0
  520. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/pineconedb/__init__.py +0 -0
  521. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  522. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/qdrant/__init__.py +0 -0
  523. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/qdrant/qdrant.py +0 -0
  524. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/search.py +0 -0
  525. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/singlestore/__init__.py +0 -0
  526. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/singlestore/index.py +0 -0
  527. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/singlestore/singlestore.py +0 -0
  528. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/surrealdb/__init__.py +0 -0
  529. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  530. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/upstashdb/__init__.py +0 -0
  531. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  532. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/weaviate/__init__.py +0 -0
  533. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/weaviate/index.py +0 -0
  534. {agno-2.1.0 → agno-2.1.1}/agno/vectordb/weaviate/weaviate.py +0 -0
  535. {agno-2.1.0 → agno-2.1.1}/agno/workflow/__init__.py +0 -0
  536. {agno-2.1.0 → agno-2.1.1}/agno/workflow/condition.py +0 -0
  537. {agno-2.1.0 → agno-2.1.1}/agno/workflow/loop.py +0 -0
  538. {agno-2.1.0 → agno-2.1.1}/agno/workflow/parallel.py +0 -0
  539. {agno-2.1.0 → agno-2.1.1}/agno/workflow/router.py +0 -0
  540. {agno-2.1.0 → agno-2.1.1}/agno/workflow/step.py +0 -0
  541. {agno-2.1.0 → agno-2.1.1}/agno/workflow/steps.py +0 -0
  542. {agno-2.1.0 → agno-2.1.1}/agno/workflow/workflow.py +0 -0
  543. {agno-2.1.0 → agno-2.1.1}/agno.egg-info/dependency_links.txt +0 -0
  544. {agno-2.1.0 → agno-2.1.1}/agno.egg-info/requires.txt +0 -0
  545. {agno-2.1.0 → agno-2.1.1}/agno.egg-info/top_level.txt +0 -0
  546. {agno-2.1.0 → agno-2.1.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.1.0
3
+ Version: 2.1.1
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
@@ -5244,7 +5244,7 @@ class Agent:
5244
5244
 
5245
5245
  # 3.2.5 Add information about agentic filters if enabled
5246
5246
  if self.knowledge is not None and self.enable_agentic_knowledge_filters:
5247
- valid_filters = getattr(self.knowledge, "valid_metadata_filters", None)
5247
+ valid_filters = self.knowledge.get_valid_filters()
5248
5248
  if valid_filters:
5249
5249
  valid_filters_str = ", ".join(valid_filters)
5250
5250
  additional_information.append(
@@ -16,7 +16,7 @@ from agno.db.mongo.utils import (
16
16
  from agno.db.schemas.evals import EvalFilterType, EvalRunRecord, EvalType
17
17
  from agno.db.schemas.knowledge import KnowledgeRow
18
18
  from agno.db.schemas.memory import UserMemory
19
- from agno.db.utils import deserialize_session_json_fields, serialize_session_json_fields
19
+ from agno.db.utils import deserialize_session_json_fields
20
20
  from agno.session import AgentSession, Session, TeamSession, WorkflowSession
21
21
  from agno.utils.log import log_debug, log_error, log_info
22
22
  from agno.utils.string import generate_id
@@ -282,7 +282,6 @@ class MongoDb(BaseDb):
282
282
  return None
283
283
 
284
284
  session = deserialize_session_json_fields(result)
285
-
286
285
  if not deserialize:
287
286
  return session
288
287
 
@@ -385,7 +384,6 @@ class MongoDb(BaseDb):
385
384
  records = list(cursor)
386
385
  if records is None:
387
386
  return [] if deserialize else ([], 0)
388
-
389
387
  sessions_raw = [deserialize_session_json_fields(record) for record in records]
390
388
 
391
389
  if not deserialize:
@@ -489,25 +487,25 @@ class MongoDb(BaseDb):
489
487
  if collection is None:
490
488
  return None
491
489
 
492
- serialized_session_dict = serialize_session_json_fields(session.to_dict())
490
+ session_dict = session.to_dict()
493
491
 
494
492
  if isinstance(session, AgentSession):
495
493
  record = {
496
- "session_id": serialized_session_dict.get("session_id"),
494
+ "session_id": session_dict.get("session_id"),
497
495
  "session_type": SessionType.AGENT.value,
498
- "agent_id": serialized_session_dict.get("agent_id"),
499
- "user_id": serialized_session_dict.get("user_id"),
500
- "runs": serialized_session_dict.get("runs"),
501
- "agent_data": serialized_session_dict.get("agent_data"),
502
- "session_data": serialized_session_dict.get("session_data"),
503
- "summary": serialized_session_dict.get("summary"),
504
- "metadata": serialized_session_dict.get("metadata"),
505
- "created_at": serialized_session_dict.get("created_at"),
496
+ "agent_id": session_dict.get("agent_id"),
497
+ "user_id": session_dict.get("user_id"),
498
+ "runs": session_dict.get("runs"),
499
+ "agent_data": session_dict.get("agent_data"),
500
+ "session_data": session_dict.get("session_data"),
501
+ "summary": session_dict.get("summary"),
502
+ "metadata": session_dict.get("metadata"),
503
+ "created_at": session_dict.get("created_at"),
506
504
  "updated_at": int(time.time()),
507
505
  }
508
506
 
509
507
  result = collection.find_one_and_replace(
510
- filter={"session_id": serialized_session_dict.get("session_id")},
508
+ filter={"session_id": session_dict.get("session_id")},
511
509
  replacement=record,
512
510
  upsert=True,
513
511
  return_document=ReturnDocument.AFTER,
@@ -515,7 +513,7 @@ class MongoDb(BaseDb):
515
513
  if not result:
516
514
  return None
517
515
 
518
- session = deserialize_session_json_fields(result) # type: ignore
516
+ session = result # type: ignore
519
517
 
520
518
  if not deserialize:
521
519
  return session
@@ -524,21 +522,21 @@ class MongoDb(BaseDb):
524
522
 
525
523
  elif isinstance(session, TeamSession):
526
524
  record = {
527
- "session_id": serialized_session_dict.get("session_id"),
525
+ "session_id": session_dict.get("session_id"),
528
526
  "session_type": SessionType.TEAM.value,
529
- "team_id": serialized_session_dict.get("team_id"),
530
- "user_id": serialized_session_dict.get("user_id"),
531
- "runs": serialized_session_dict.get("runs"),
532
- "team_data": serialized_session_dict.get("team_data"),
533
- "session_data": serialized_session_dict.get("session_data"),
534
- "summary": serialized_session_dict.get("summary"),
535
- "metadata": serialized_session_dict.get("metadata"),
536
- "created_at": serialized_session_dict.get("created_at"),
527
+ "team_id": session_dict.get("team_id"),
528
+ "user_id": session_dict.get("user_id"),
529
+ "runs": session_dict.get("runs"),
530
+ "team_data": session_dict.get("team_data"),
531
+ "session_data": session_dict.get("session_data"),
532
+ "summary": session_dict.get("summary"),
533
+ "metadata": session_dict.get("metadata"),
534
+ "created_at": session_dict.get("created_at"),
537
535
  "updated_at": int(time.time()),
538
536
  }
539
537
 
540
538
  result = collection.find_one_and_replace(
541
- filter={"session_id": serialized_session_dict.get("session_id")},
539
+ filter={"session_id": session_dict.get("session_id")},
542
540
  replacement=record,
543
541
  upsert=True,
544
542
  return_document=ReturnDocument.AFTER,
@@ -546,7 +544,8 @@ class MongoDb(BaseDb):
546
544
  if not result:
547
545
  return None
548
546
 
549
- session = deserialize_session_json_fields(result) # type: ignore
547
+ # MongoDB stores native objects, no deserialization needed for document fields
548
+ session = result # type: ignore
550
549
 
551
550
  if not deserialize:
552
551
  return session
@@ -555,21 +554,21 @@ class MongoDb(BaseDb):
555
554
 
556
555
  else:
557
556
  record = {
558
- "session_id": serialized_session_dict.get("session_id"),
557
+ "session_id": session_dict.get("session_id"),
559
558
  "session_type": SessionType.WORKFLOW.value,
560
- "workflow_id": serialized_session_dict.get("workflow_id"),
561
- "user_id": serialized_session_dict.get("user_id"),
562
- "runs": serialized_session_dict.get("runs"),
563
- "workflow_data": serialized_session_dict.get("workflow_data"),
564
- "session_data": serialized_session_dict.get("session_data"),
565
- "summary": serialized_session_dict.get("summary"),
566
- "metadata": serialized_session_dict.get("metadata"),
567
- "created_at": serialized_session_dict.get("created_at"),
559
+ "workflow_id": session_dict.get("workflow_id"),
560
+ "user_id": session_dict.get("user_id"),
561
+ "runs": session_dict.get("runs"),
562
+ "workflow_data": session_dict.get("workflow_data"),
563
+ "session_data": session_dict.get("session_data"),
564
+ "summary": session_dict.get("summary"),
565
+ "metadata": session_dict.get("metadata"),
566
+ "created_at": session_dict.get("created_at"),
568
567
  "updated_at": int(time.time()),
569
568
  }
570
569
 
571
570
  result = collection.find_one_and_replace(
572
- filter={"session_id": serialized_session_dict.get("session_id")},
571
+ filter={"session_id": session_dict.get("session_id")},
573
572
  replacement=record,
574
573
  upsert=True,
575
574
  return_document=ReturnDocument.AFTER,
@@ -577,7 +576,7 @@ class MongoDb(BaseDb):
577
576
  if not result:
578
577
  return None
579
578
 
580
- session = deserialize_session_json_fields(result) # type: ignore
579
+ session = result # type: ignore
581
580
 
582
581
  if not deserialize:
583
582
  return session
@@ -628,48 +627,48 @@ class MongoDb(BaseDb):
628
627
  if session is None:
629
628
  continue
630
629
 
631
- serialized_session_dict = serialize_session_json_fields(session.to_dict())
630
+ session_dict = session.to_dict()
632
631
 
633
632
  if isinstance(session, AgentSession):
634
633
  record = {
635
- "session_id": serialized_session_dict.get("session_id"),
634
+ "session_id": session_dict.get("session_id"),
636
635
  "session_type": SessionType.AGENT.value,
637
- "agent_id": serialized_session_dict.get("agent_id"),
638
- "user_id": serialized_session_dict.get("user_id"),
639
- "runs": serialized_session_dict.get("runs"),
640
- "agent_data": serialized_session_dict.get("agent_data"),
641
- "session_data": serialized_session_dict.get("session_data"),
642
- "summary": serialized_session_dict.get("summary"),
643
- "metadata": serialized_session_dict.get("metadata"),
644
- "created_at": serialized_session_dict.get("created_at"),
636
+ "agent_id": session_dict.get("agent_id"),
637
+ "user_id": session_dict.get("user_id"),
638
+ "runs": session_dict.get("runs"),
639
+ "agent_data": session_dict.get("agent_data"),
640
+ "session_data": session_dict.get("session_data"),
641
+ "summary": session_dict.get("summary"),
642
+ "metadata": session_dict.get("metadata"),
643
+ "created_at": session_dict.get("created_at"),
645
644
  "updated_at": int(time.time()),
646
645
  }
647
646
  elif isinstance(session, TeamSession):
648
647
  record = {
649
- "session_id": serialized_session_dict.get("session_id"),
648
+ "session_id": session_dict.get("session_id"),
650
649
  "session_type": SessionType.TEAM.value,
651
- "team_id": serialized_session_dict.get("team_id"),
652
- "user_id": serialized_session_dict.get("user_id"),
653
- "runs": serialized_session_dict.get("runs"),
654
- "team_data": serialized_session_dict.get("team_data"),
655
- "session_data": serialized_session_dict.get("session_data"),
656
- "summary": serialized_session_dict.get("summary"),
657
- "metadata": serialized_session_dict.get("metadata"),
658
- "created_at": serialized_session_dict.get("created_at"),
650
+ "team_id": session_dict.get("team_id"),
651
+ "user_id": session_dict.get("user_id"),
652
+ "runs": session_dict.get("runs"),
653
+ "team_data": session_dict.get("team_data"),
654
+ "session_data": session_dict.get("session_data"),
655
+ "summary": session_dict.get("summary"),
656
+ "metadata": session_dict.get("metadata"),
657
+ "created_at": session_dict.get("created_at"),
659
658
  "updated_at": int(time.time()),
660
659
  }
661
660
  elif isinstance(session, WorkflowSession):
662
661
  record = {
663
- "session_id": serialized_session_dict.get("session_id"),
662
+ "session_id": session_dict.get("session_id"),
664
663
  "session_type": SessionType.WORKFLOW.value,
665
- "workflow_id": serialized_session_dict.get("workflow_id"),
666
- "user_id": serialized_session_dict.get("user_id"),
667
- "runs": serialized_session_dict.get("runs"),
668
- "workflow_data": serialized_session_dict.get("workflow_data"),
669
- "session_data": serialized_session_dict.get("session_data"),
670
- "summary": serialized_session_dict.get("summary"),
671
- "metadata": serialized_session_dict.get("metadata"),
672
- "created_at": serialized_session_dict.get("created_at"),
664
+ "workflow_id": session_dict.get("workflow_id"),
665
+ "user_id": session_dict.get("user_id"),
666
+ "runs": session_dict.get("runs"),
667
+ "workflow_data": session_dict.get("workflow_data"),
668
+ "session_data": session_dict.get("session_data"),
669
+ "summary": session_dict.get("summary"),
670
+ "metadata": session_dict.get("metadata"),
671
+ "created_at": session_dict.get("created_at"),
673
672
  "updated_at": int(time.time()),
674
673
  }
675
674
  else:
@@ -688,7 +687,7 @@ class MongoDb(BaseDb):
688
687
  cursor = collection.find({"session_id": {"$in": session_ids}})
689
688
 
690
689
  for doc in cursor:
691
- session_dict = deserialize_session_json_fields(doc)
690
+ session_dict = doc
692
691
 
693
692
  if deserialize:
694
693
  session_type = doc.get("session_type")
@@ -0,0 +1,116 @@
1
+ """Logic shared across different database implementations"""
2
+
3
+ import json
4
+ from datetime import date, datetime
5
+ from uuid import UUID
6
+
7
+ from agno.models.message import Message
8
+ from agno.models.metrics import Metrics
9
+
10
+
11
+ class CustomJSONEncoder(json.JSONEncoder):
12
+ """Custom encoder to handle non JSON serializable types."""
13
+
14
+ def default(self, obj):
15
+ if isinstance(obj, UUID):
16
+ return str(obj)
17
+ elif isinstance(obj, (date, datetime)):
18
+ return obj.isoformat()
19
+ elif isinstance(obj, Message):
20
+ return obj.to_dict()
21
+ elif isinstance(obj, Metrics):
22
+ return obj.to_dict()
23
+
24
+ return super().default(obj)
25
+
26
+
27
+ def serialize_session_json_fields(session: dict) -> dict:
28
+ """Serialize all JSON fields in the given Session dictionary.
29
+
30
+ Args:
31
+ data (dict): The dictionary to serialize JSON fields in.
32
+
33
+ Returns:
34
+ dict: The dictionary with JSON fields serialized.
35
+ """
36
+ if session.get("session_data") is not None:
37
+ session["session_data"] = json.dumps(session["session_data"])
38
+ if session.get("agent_data") is not None:
39
+ session["agent_data"] = json.dumps(session["agent_data"])
40
+ if session.get("team_data") is not None:
41
+ session["team_data"] = json.dumps(session["team_data"])
42
+ if session.get("workflow_data") is not None:
43
+ session["workflow_data"] = json.dumps(session["workflow_data"])
44
+ if session.get("metadata") is not None:
45
+ session["metadata"] = json.dumps(session["metadata"])
46
+ if session.get("chat_history") is not None:
47
+ session["chat_history"] = json.dumps(session["chat_history"])
48
+ if session.get("summary") is not None:
49
+ session["summary"] = json.dumps(session["summary"], cls=CustomJSONEncoder)
50
+ if session.get("runs") is not None:
51
+ session["runs"] = json.dumps(session["runs"], cls=CustomJSONEncoder)
52
+
53
+ return session
54
+
55
+
56
+ def deserialize_session_json_fields(session: dict) -> dict:
57
+ """Deserialize JSON fields in the given Session dictionary.
58
+
59
+ Args:
60
+ session (dict): The dictionary to deserialize.
61
+
62
+ Returns:
63
+ dict: The dictionary with JSON string fields deserialized to objects.
64
+ """
65
+ from agno.utils.log import log_warning
66
+
67
+ if session.get("agent_data") is not None and isinstance(session["agent_data"], str):
68
+ try:
69
+ session["agent_data"] = json.loads(session["agent_data"])
70
+ except (json.JSONDecodeError, TypeError) as e:
71
+ log_warning(f"Warning: Could not parse agent_data as JSON, keeping as string: {e}")
72
+
73
+ if session.get("team_data") is not None and isinstance(session["team_data"], str):
74
+ try:
75
+ session["team_data"] = json.loads(session["team_data"])
76
+ except (json.JSONDecodeError, TypeError) as e:
77
+ log_warning(f"Warning: Could not parse team_data as JSON, keeping as string: {e}")
78
+
79
+ if session.get("workflow_data") is not None and isinstance(session["workflow_data"], str):
80
+ try:
81
+ session["workflow_data"] = json.loads(session["workflow_data"])
82
+ except (json.JSONDecodeError, TypeError) as e:
83
+ log_warning(f"Warning: Could not parse workflow_data as JSON, keeping as string: {e}")
84
+
85
+ if session.get("metadata") is not None and isinstance(session["metadata"], str):
86
+ try:
87
+ session["metadata"] = json.loads(session["metadata"])
88
+ except (json.JSONDecodeError, TypeError) as e:
89
+ log_warning(f"Warning: Could not parse metadata as JSON, keeping as string: {e}")
90
+
91
+ if session.get("chat_history") is not None and isinstance(session["chat_history"], str):
92
+ try:
93
+ session["chat_history"] = json.loads(session["chat_history"])
94
+ except (json.JSONDecodeError, TypeError) as e:
95
+ log_warning(f"Warning: Could not parse chat_history as JSON, keeping as string: {e}")
96
+
97
+ if session.get("summary") is not None and isinstance(session["summary"], str):
98
+ try:
99
+ session["summary"] = json.loads(session["summary"])
100
+ except (json.JSONDecodeError, TypeError) as e:
101
+ log_warning(f"Warning: Could not parse summary as JSON, keeping as string: {e}")
102
+
103
+ if session.get("session_data") is not None and isinstance(session["session_data"], str):
104
+ try:
105
+ session["session_data"] = json.loads(session["session_data"])
106
+ except (json.JSONDecodeError, TypeError) as e:
107
+ log_warning(f"Warning: Could not parse session_data as JSON, keeping as string: {e}")
108
+
109
+ # Handle runs field with session type checking
110
+ if session.get("runs") is not None and isinstance(session["runs"], str):
111
+ try:
112
+ session["runs"] = json.loads(session["runs"])
113
+ except (json.JSONDecodeError, TypeError) as e:
114
+ log_warning(f"Warning: Could not parse runs as JSON, keeping as string: {e}")
115
+
116
+ return session
@@ -1357,6 +1357,12 @@ class Knowledge:
1357
1357
  log_error(f"Error searching for documents: {e}")
1358
1358
  return []
1359
1359
 
1360
+ def get_valid_filters(self) -> Set[str]:
1361
+ if self.valid_metadata_filters is None:
1362
+ self.valid_metadata_filters = set()
1363
+ self.valid_metadata_filters.update(self._get_filters_from_db)
1364
+ return self.valid_metadata_filters
1365
+
1360
1366
  def validate_filters(self, filters: Optional[Dict[str, Any]]) -> Tuple[Dict[str, Any], List[str]]:
1361
1367
  if self.valid_metadata_filters is None:
1362
1368
  self.valid_metadata_filters = set()
@@ -45,7 +45,7 @@ class OpenAIResponses(Model):
45
45
  parallel_tool_calls: Optional[bool] = None
46
46
  reasoning: Optional[Dict[str, Any]] = None
47
47
  verbosity: Optional[Literal["low", "medium", "high"]] = None
48
- reasoning_effort: Optional[Literal["minimal", "medium", "high"]] = None
48
+ reasoning_effort: Optional[Literal["minimal", "low", "medium", "high"]] = None
49
49
  reasoning_summary: Optional[Literal["auto", "concise", "detailed"]] = None
50
50
  store: Optional[bool] = None
51
51
  temperature: Optional[float] = None
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,47 @@
1
+ """Main class for the AG-UI app, used to expose an Agno Agent or Team in an AG-UI compatible format."""
2
+
3
+ from typing import List, Optional
4
+
5
+ from fastapi.routing import APIRouter
6
+
7
+ from agno.agent import Agent
8
+ from agno.os.interfaces.agui.router import attach_routes
9
+ from agno.os.interfaces.base import BaseInterface
10
+ from agno.team import Team
11
+
12
+
13
+ class AGUI(BaseInterface):
14
+ type = "agui"
15
+
16
+ router: APIRouter
17
+
18
+ def __init__(
19
+ self,
20
+ agent: Optional[Agent] = None,
21
+ team: Optional[Team] = None,
22
+ prefix: str = "",
23
+ tags: Optional[List[str]] = None,
24
+ ):
25
+ """
26
+ Initialize the AGUI interface.
27
+
28
+ Args:
29
+ agent: The agent to expose via AG-UI
30
+ team: The team to expose via AG-UI
31
+ prefix: Custom prefix for the router (e.g., "/agui/v1", "/chat/public")
32
+ tags: Custom tags for the router (e.g., ["AGUI", "Chat"], defaults to ["AGUI"])
33
+ """
34
+ self.agent = agent
35
+ self.team = team
36
+ self.prefix = prefix
37
+ self.tags = tags or ["AGUI"]
38
+
39
+ if not (self.agent or self.team):
40
+ raise ValueError("AGUI requires an agent or a team")
41
+
42
+ def get_router(self) -> APIRouter:
43
+ self.router = APIRouter(prefix=self.prefix, tags=self.tags) # type: ignore
44
+
45
+ self.router = attach_routes(router=self.router, agent=self.agent, team=self.team)
46
+
47
+ return self.router
@@ -1,5 +1,5 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import Optional
2
+ from typing import List, Optional
3
3
 
4
4
  from fastapi import APIRouter
5
5
 
@@ -11,11 +11,13 @@ from agno.workflow.workflow import Workflow
11
11
  class BaseInterface(ABC):
12
12
  type: str
13
13
  version: str = "1.0"
14
- router_prefix: str = ""
15
14
  agent: Optional[Agent] = None
16
15
  team: Optional[Team] = None
17
16
  workflow: Optional[Workflow] = None
18
17
 
18
+ prefix: str
19
+ tags: List[str]
20
+
19
21
  router: APIRouter
20
22
 
21
23
  @abstractmethod
@@ -1,5 +1,4 @@
1
- import logging
2
- from typing import Optional
1
+ from typing import List, Optional
3
2
 
4
3
  from fastapi.routing import APIRouter
5
4
 
@@ -9,25 +8,31 @@ from agno.os.interfaces.slack.router import attach_routes
9
8
  from agno.team.team import Team
10
9
  from agno.workflow.workflow import Workflow
11
10
 
12
- logger = logging.getLogger(__name__)
13
-
14
11
 
15
12
  class Slack(BaseInterface):
16
13
  type = "slack"
17
14
 
18
15
  router: APIRouter
19
16
 
20
- def __init__(self, agent: Optional[Agent] = None, team: Optional[Team] = None, workflow: Optional[Workflow] = None):
17
+ def __init__(
18
+ self,
19
+ agent: Optional[Agent] = None,
20
+ team: Optional[Team] = None,
21
+ workflow: Optional[Workflow] = None,
22
+ prefix: str = "/slack",
23
+ tags: Optional[List[str]] = None,
24
+ ):
21
25
  self.agent = agent
22
26
  self.team = team
23
27
  self.workflow = workflow
28
+ self.prefix = prefix
29
+ self.tags = tags or ["Slack"]
24
30
 
25
31
  if not (self.agent or self.team or self.workflow):
26
32
  raise ValueError("Slack requires an agent, team or workflow")
27
33
 
28
- def get_router(self, **kwargs) -> APIRouter:
29
- # Cannot be overridden
30
- self.router = APIRouter(prefix="/slack", tags=["Slack"])
34
+ def get_router(self) -> APIRouter:
35
+ self.router = APIRouter(prefix=self.prefix, tags=self.tags) # type: ignore
31
36
 
32
37
  self.router = attach_routes(router=self.router, agent=self.agent, team=self.team, workflow=self.workflow)
33
38
 
@@ -1,4 +1,4 @@
1
- from typing import Optional
1
+ from typing import List, Optional
2
2
 
3
3
  from fastapi.routing import APIRouter
4
4
 
@@ -13,16 +13,23 @@ class Whatsapp(BaseInterface):
13
13
 
14
14
  router: APIRouter
15
15
 
16
- def __init__(self, agent: Optional[Agent] = None, team: Optional[Team] = None):
16
+ def __init__(
17
+ self,
18
+ agent: Optional[Agent] = None,
19
+ team: Optional[Team] = None,
20
+ prefix: str = "/whatsapp",
21
+ tags: Optional[List[str]] = None,
22
+ ):
17
23
  self.agent = agent
18
24
  self.team = team
25
+ self.prefix = prefix
26
+ self.tags = tags or ["Whatsapp"]
19
27
 
20
28
  if not (self.agent or self.team):
21
29
  raise ValueError("Whatsapp requires an agent or a team")
22
30
 
23
- def get_router(self, **kwargs) -> APIRouter:
24
- # Cannot be overridden
25
- self.router = APIRouter(prefix="/whatsapp", tags=["Whatsapp"])
31
+ def get_router(self) -> APIRouter:
32
+ self.router = APIRouter(prefix=self.prefix, tags=self.tags) # type: ignore
26
33
 
27
34
  self.router = attach_routes(router=self.router, agent=self.agent, team=self.team)
28
35
 
@@ -68,7 +68,7 @@ def get_mcp_server(
68
68
  teams=[TeamSummaryResponse.from_team(team) for team in os.teams] if os.teams else [],
69
69
  workflows=[WorkflowSummaryResponse.from_workflow(w) for w in os.workflows] if os.workflows else [],
70
70
  interfaces=[
71
- InterfaceResponse(type=interface.type, version=interface.version, route=interface.router_prefix)
71
+ InterfaceResponse(type=interface.type, version=interface.version, route=interface.prefix)
72
72
  for interface in os.interfaces
73
73
  ],
74
74
  )
@@ -654,7 +654,7 @@ def get_base_router(
654
654
  teams=[TeamSummaryResponse.from_team(team) for team in os.teams] if os.teams else [],
655
655
  workflows=[WorkflowSummaryResponse.from_workflow(w) for w in os.workflows] if os.workflows else [],
656
656
  interfaces=[
657
- InterfaceResponse(type=interface.type, version=interface.version, route=interface.router_prefix)
657
+ InterfaceResponse(type=interface.type, version=interface.version, route=interface.prefix)
658
658
  for interface in os.interfaces
659
659
  ],
660
660
  )
@@ -117,19 +117,8 @@ class BaseRunOutputEvent:
117
117
 
118
118
  def to_json(self, separators=(", ", ": "), indent: Optional[int] = 2) -> str:
119
119
  import json
120
- from datetime import date, datetime, time
121
- from enum import Enum
122
-
123
- def json_serializer(obj):
124
- # Datetime like
125
- if isinstance(obj, (datetime, date, time)):
126
- return obj.isoformat()
127
- # Enums
128
- if isinstance(obj, Enum):
129
- v = obj.value
130
- return v if isinstance(v, (str, int, float, bool, type(None))) else obj.name
131
- # Fallback to string
132
- return str(obj)
120
+
121
+ from agno.utils.serialize import json_serializer
133
122
 
134
123
  try:
135
124
  _dict = self.to_dict()
@@ -4866,7 +4866,7 @@ class Team:
4866
4866
  additional_information.append(f"Your name is: {self.name}.")
4867
4867
 
4868
4868
  if self.knowledge is not None and self.enable_agentic_knowledge_filters:
4869
- valid_filters = getattr(self.knowledge, "valid_metadata_filters", None)
4869
+ valid_filters = self.knowledge.get_valid_filters()
4870
4870
  if valid_filters:
4871
4871
  valid_filters_str = ", ".join(valid_filters)
4872
4872
  additional_information.append(
@@ -0,0 +1,32 @@
1
+ """JSON serialization utilities for handling datetime and enum objects."""
2
+
3
+ from datetime import date, datetime, time
4
+ from enum import Enum
5
+ from typing import Any
6
+
7
+
8
+ def json_serializer(obj: Any) -> Any:
9
+ """Custom JSON serializer for objects not serializable by default json module.
10
+
11
+ Handles:
12
+ - datetime, date, time objects -> ISO format strings
13
+ - Enum objects -> their values (or names if values are not JSON-serializable)
14
+ - All other objects -> string representation
15
+
16
+ Args:
17
+ obj: Object to serialize
18
+
19
+ Returns:
20
+ JSON-serializable representation of the object
21
+ """
22
+ # Datetime like
23
+ if isinstance(obj, (datetime, date, time)):
24
+ return obj.isoformat()
25
+
26
+ # Enums
27
+ if isinstance(obj, Enum):
28
+ v = obj.value
29
+ return v if isinstance(v, (str, int, float, bool, type(None))) else obj.name
30
+
31
+ # Fallback to string
32
+ return str(obj)