agno 1.7.10__tar.gz → 1.7.11__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 (569) hide show
  1. {agno-1.7.10 → agno-1.7.11}/PKG-INFO +4 -1
  2. {agno-1.7.10 → agno-1.7.11}/agno/app/fastapi/app.py +3 -1
  3. {agno-1.7.10 → agno-1.7.11}/agno/app/fastapi/async_router.py +1 -1
  4. {agno-1.7.10 → agno-1.7.11}/agno/app/playground/app.py +1 -0
  5. {agno-1.7.10 → agno-1.7.11}/agno/document/chunking/semantic.py +1 -3
  6. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/markdown_reader.py +2 -7
  7. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/text_reader.py +2 -2
  8. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/agent.py +4 -5
  9. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/markdown.py +15 -2
  10. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/website.py +4 -1
  11. {agno-1.7.10 → agno-1.7.11}/agno/media.py +2 -0
  12. {agno-1.7.10 → agno-1.7.11}/agno/models/aws/bedrock.py +51 -21
  13. agno-1.7.11/agno/models/dashscope/__init__.py +5 -0
  14. agno-1.7.11/agno/models/dashscope/dashscope.py +81 -0
  15. {agno-1.7.10 → agno-1.7.11}/agno/models/openai/chat.py +3 -0
  16. {agno-1.7.10 → agno-1.7.11}/agno/models/openai/responses.py +31 -14
  17. agno-1.7.11/agno/models/qwen/__init__.py +5 -0
  18. {agno-1.7.10 → agno-1.7.11}/agno/run/response.py +4 -0
  19. {agno-1.7.10 → agno-1.7.11}/agno/run/team.py +4 -0
  20. agno-1.7.11/agno/storage/in_memory.py +234 -0
  21. {agno-1.7.10 → agno-1.7.11}/agno/team/team.py +10 -2
  22. agno-1.7.11/agno/tools/brandfetch.py +210 -0
  23. {agno-1.7.10 → agno-1.7.11}/agno/tools/github.py +10 -18
  24. agno-1.7.11/agno/tools/trafilatura.py +372 -0
  25. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/clickhouse/clickhousedb.py +1 -1
  26. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/milvus/milvus.py +89 -1
  27. {agno-1.7.10 → agno-1.7.11}/agno/workflow/workflow.py +3 -0
  28. {agno-1.7.10 → agno-1.7.11}/agno.egg-info/PKG-INFO +4 -1
  29. {agno-1.7.10 → agno-1.7.11}/agno.egg-info/SOURCES.txt +6 -0
  30. {agno-1.7.10 → agno-1.7.11}/agno.egg-info/requires.txt +4 -0
  31. {agno-1.7.10 → agno-1.7.11}/pyproject.toml +5 -2
  32. {agno-1.7.10 → agno-1.7.11}/LICENSE +0 -0
  33. {agno-1.7.10 → agno-1.7.11}/README.md +0 -0
  34. {agno-1.7.10 → agno-1.7.11}/agno/__init__.py +0 -0
  35. {agno-1.7.10 → agno-1.7.11}/agno/agent/__init__.py +0 -0
  36. {agno-1.7.10 → agno-1.7.11}/agno/agent/agent.py +0 -0
  37. {agno-1.7.10 → agno-1.7.11}/agno/agent/metrics.py +0 -0
  38. {agno-1.7.10 → agno-1.7.11}/agno/api/__init__.py +0 -0
  39. {agno-1.7.10 → agno-1.7.11}/agno/api/agent.py +0 -0
  40. {agno-1.7.10 → agno-1.7.11}/agno/api/api.py +0 -0
  41. {agno-1.7.10 → agno-1.7.11}/agno/api/app.py +0 -0
  42. {agno-1.7.10 → agno-1.7.11}/agno/api/evals.py +0 -0
  43. {agno-1.7.10 → agno-1.7.11}/agno/api/playground.py +0 -0
  44. {agno-1.7.10 → agno-1.7.11}/agno/api/routes.py +0 -0
  45. {agno-1.7.10 → agno-1.7.11}/agno/api/schemas/__init__.py +0 -0
  46. {agno-1.7.10 → agno-1.7.11}/agno/api/schemas/agent.py +0 -0
  47. {agno-1.7.10 → agno-1.7.11}/agno/api/schemas/app.py +0 -0
  48. {agno-1.7.10 → agno-1.7.11}/agno/api/schemas/evals.py +0 -0
  49. {agno-1.7.10 → agno-1.7.11}/agno/api/schemas/playground.py +0 -0
  50. {agno-1.7.10 → agno-1.7.11}/agno/api/schemas/response.py +0 -0
  51. {agno-1.7.10 → agno-1.7.11}/agno/api/schemas/team.py +0 -0
  52. {agno-1.7.10 → agno-1.7.11}/agno/api/schemas/user.py +0 -0
  53. {agno-1.7.10 → agno-1.7.11}/agno/api/schemas/workflows.py +0 -0
  54. {agno-1.7.10 → agno-1.7.11}/agno/api/schemas/workspace.py +0 -0
  55. {agno-1.7.10 → agno-1.7.11}/agno/api/team.py +0 -0
  56. {agno-1.7.10 → agno-1.7.11}/agno/api/user.py +0 -0
  57. {agno-1.7.10 → agno-1.7.11}/agno/api/workflows.py +0 -0
  58. {agno-1.7.10 → agno-1.7.11}/agno/api/workspace.py +0 -0
  59. {agno-1.7.10 → agno-1.7.11}/agno/app/__init__.py +0 -0
  60. {agno-1.7.10 → agno-1.7.11}/agno/app/agui/__init__.py +0 -0
  61. {agno-1.7.10 → agno-1.7.11}/agno/app/agui/app.py +0 -0
  62. {agno-1.7.10 → agno-1.7.11}/agno/app/agui/async_router.py +0 -0
  63. {agno-1.7.10 → agno-1.7.11}/agno/app/agui/sync_router.py +0 -0
  64. {agno-1.7.10 → agno-1.7.11}/agno/app/agui/utils.py +0 -0
  65. {agno-1.7.10 → agno-1.7.11}/agno/app/base.py +0 -0
  66. {agno-1.7.10 → agno-1.7.11}/agno/app/discord/__init__.py +0 -0
  67. {agno-1.7.10 → agno-1.7.11}/agno/app/discord/client.py +0 -0
  68. {agno-1.7.10 → agno-1.7.11}/agno/app/fastapi/__init__.py +0 -0
  69. {agno-1.7.10 → agno-1.7.11}/agno/app/fastapi/sync_router.py +0 -0
  70. {agno-1.7.10 → agno-1.7.11}/agno/app/playground/__init__.py +0 -0
  71. {agno-1.7.10 → agno-1.7.11}/agno/app/playground/async_router.py +0 -0
  72. {agno-1.7.10 → agno-1.7.11}/agno/app/playground/deploy.py +0 -0
  73. {agno-1.7.10 → agno-1.7.11}/agno/app/playground/operator.py +0 -0
  74. {agno-1.7.10 → agno-1.7.11}/agno/app/playground/schemas.py +0 -0
  75. {agno-1.7.10 → agno-1.7.11}/agno/app/playground/serve.py +0 -0
  76. {agno-1.7.10 → agno-1.7.11}/agno/app/playground/settings.py +0 -0
  77. {agno-1.7.10 → agno-1.7.11}/agno/app/playground/sync_router.py +0 -0
  78. {agno-1.7.10 → agno-1.7.11}/agno/app/playground/utils.py +0 -0
  79. {agno-1.7.10 → agno-1.7.11}/agno/app/settings.py +0 -0
  80. {agno-1.7.10 → agno-1.7.11}/agno/app/slack/__init__.py +0 -0
  81. {agno-1.7.10 → agno-1.7.11}/agno/app/slack/app.py +0 -0
  82. {agno-1.7.10 → agno-1.7.11}/agno/app/slack/async_router.py +0 -0
  83. {agno-1.7.10 → agno-1.7.11}/agno/app/slack/security.py +0 -0
  84. {agno-1.7.10 → agno-1.7.11}/agno/app/slack/sync_router.py +0 -0
  85. {agno-1.7.10 → agno-1.7.11}/agno/app/utils.py +0 -0
  86. {agno-1.7.10 → agno-1.7.11}/agno/app/whatsapp/__init__.py +0 -0
  87. {agno-1.7.10 → agno-1.7.11}/agno/app/whatsapp/app.py +0 -0
  88. {agno-1.7.10 → agno-1.7.11}/agno/app/whatsapp/async_router.py +0 -0
  89. {agno-1.7.10 → agno-1.7.11}/agno/app/whatsapp/security.py +0 -0
  90. {agno-1.7.10 → agno-1.7.11}/agno/app/whatsapp/sync_router.py +0 -0
  91. {agno-1.7.10 → agno-1.7.11}/agno/cli/__init__.py +0 -0
  92. {agno-1.7.10 → agno-1.7.11}/agno/cli/auth_server.py +0 -0
  93. {agno-1.7.10 → agno-1.7.11}/agno/cli/config.py +0 -0
  94. {agno-1.7.10 → agno-1.7.11}/agno/cli/console.py +0 -0
  95. {agno-1.7.10 → agno-1.7.11}/agno/cli/credentials.py +0 -0
  96. {agno-1.7.10 → agno-1.7.11}/agno/cli/entrypoint.py +0 -0
  97. {agno-1.7.10 → agno-1.7.11}/agno/cli/operator.py +0 -0
  98. {agno-1.7.10 → agno-1.7.11}/agno/cli/settings.py +0 -0
  99. {agno-1.7.10 → agno-1.7.11}/agno/cli/ws/__init__.py +0 -0
  100. {agno-1.7.10 → agno-1.7.11}/agno/cli/ws/ws_cli.py +0 -0
  101. {agno-1.7.10 → agno-1.7.11}/agno/constants.py +0 -0
  102. {agno-1.7.10 → agno-1.7.11}/agno/debug.py +0 -0
  103. {agno-1.7.10 → agno-1.7.11}/agno/document/__init__.py +0 -0
  104. {agno-1.7.10 → agno-1.7.11}/agno/document/base.py +0 -0
  105. {agno-1.7.10 → agno-1.7.11}/agno/document/chunking/__init__.py +0 -0
  106. {agno-1.7.10 → agno-1.7.11}/agno/document/chunking/agentic.py +0 -0
  107. {agno-1.7.10 → agno-1.7.11}/agno/document/chunking/document.py +0 -0
  108. {agno-1.7.10 → agno-1.7.11}/agno/document/chunking/fixed.py +0 -0
  109. {agno-1.7.10 → agno-1.7.11}/agno/document/chunking/markdown.py +0 -0
  110. {agno-1.7.10 → agno-1.7.11}/agno/document/chunking/recursive.py +0 -0
  111. {agno-1.7.10 → agno-1.7.11}/agno/document/chunking/row.py +0 -0
  112. {agno-1.7.10 → agno-1.7.11}/agno/document/chunking/strategy.py +0 -0
  113. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/__init__.py +0 -0
  114. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/arxiv_reader.py +0 -0
  115. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/base.py +0 -0
  116. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/csv_reader.py +0 -0
  117. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/docx_reader.py +0 -0
  118. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/firecrawl_reader.py +0 -0
  119. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/gcs/__init__.py +0 -0
  120. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/gcs/pdf_reader.py +0 -0
  121. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/json_reader.py +0 -0
  122. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/pdf_reader.py +0 -0
  123. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/s3/__init__.py +0 -0
  124. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/s3/pdf_reader.py +0 -0
  125. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/s3/text_reader.py +0 -0
  126. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/url_reader.py +0 -0
  127. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/website_reader.py +0 -0
  128. {agno-1.7.10 → agno-1.7.11}/agno/document/reader/youtube_reader.py +0 -0
  129. {agno-1.7.10 → agno-1.7.11}/agno/embedder/__init__.py +0 -0
  130. {agno-1.7.10 → agno-1.7.11}/agno/embedder/aws_bedrock.py +0 -0
  131. {agno-1.7.10 → agno-1.7.11}/agno/embedder/azure_openai.py +0 -0
  132. {agno-1.7.10 → agno-1.7.11}/agno/embedder/base.py +0 -0
  133. {agno-1.7.10 → agno-1.7.11}/agno/embedder/cohere.py +0 -0
  134. {agno-1.7.10 → agno-1.7.11}/agno/embedder/fastembed.py +0 -0
  135. {agno-1.7.10 → agno-1.7.11}/agno/embedder/fireworks.py +0 -0
  136. {agno-1.7.10 → agno-1.7.11}/agno/embedder/google.py +0 -0
  137. {agno-1.7.10 → agno-1.7.11}/agno/embedder/huggingface.py +0 -0
  138. {agno-1.7.10 → agno-1.7.11}/agno/embedder/jina.py +0 -0
  139. {agno-1.7.10 → agno-1.7.11}/agno/embedder/langdb.py +0 -0
  140. {agno-1.7.10 → agno-1.7.11}/agno/embedder/mistral.py +0 -0
  141. {agno-1.7.10 → agno-1.7.11}/agno/embedder/nebius.py +0 -0
  142. {agno-1.7.10 → agno-1.7.11}/agno/embedder/ollama.py +0 -0
  143. {agno-1.7.10 → agno-1.7.11}/agno/embedder/openai.py +0 -0
  144. {agno-1.7.10 → agno-1.7.11}/agno/embedder/sentence_transformer.py +0 -0
  145. {agno-1.7.10 → agno-1.7.11}/agno/embedder/together.py +0 -0
  146. {agno-1.7.10 → agno-1.7.11}/agno/embedder/voyageai.py +0 -0
  147. {agno-1.7.10 → agno-1.7.11}/agno/eval/__init__.py +0 -0
  148. {agno-1.7.10 → agno-1.7.11}/agno/eval/accuracy.py +0 -0
  149. {agno-1.7.10 → agno-1.7.11}/agno/eval/performance.py +0 -0
  150. {agno-1.7.10 → agno-1.7.11}/agno/eval/reliability.py +0 -0
  151. {agno-1.7.10 → agno-1.7.11}/agno/eval/utils.py +0 -0
  152. {agno-1.7.10 → agno-1.7.11}/agno/exceptions.py +0 -0
  153. {agno-1.7.10 → agno-1.7.11}/agno/file/__init__.py +0 -0
  154. {agno-1.7.10 → agno-1.7.11}/agno/file/file.py +0 -0
  155. {agno-1.7.10 → agno-1.7.11}/agno/file/local/__init__.py +0 -0
  156. {agno-1.7.10 → agno-1.7.11}/agno/file/local/csv.py +0 -0
  157. {agno-1.7.10 → agno-1.7.11}/agno/file/local/txt.py +0 -0
  158. {agno-1.7.10 → agno-1.7.11}/agno/infra/__init__.py +0 -0
  159. {agno-1.7.10 → agno-1.7.11}/agno/infra/app.py +0 -0
  160. {agno-1.7.10 → agno-1.7.11}/agno/infra/base.py +0 -0
  161. {agno-1.7.10 → agno-1.7.11}/agno/infra/context.py +0 -0
  162. {agno-1.7.10 → agno-1.7.11}/agno/infra/db_app.py +0 -0
  163. {agno-1.7.10 → agno-1.7.11}/agno/infra/resource.py +0 -0
  164. {agno-1.7.10 → agno-1.7.11}/agno/infra/resources.py +0 -0
  165. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/__init__.py +0 -0
  166. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/arxiv.py +0 -0
  167. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/combined.py +0 -0
  168. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/csv.py +0 -0
  169. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/csv_url.py +0 -0
  170. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/document.py +0 -0
  171. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/docx.py +0 -0
  172. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/firecrawl.py +0 -0
  173. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/gcs/__init__.py +0 -0
  174. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/gcs/base.py +0 -0
  175. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/gcs/pdf.py +0 -0
  176. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/json.py +0 -0
  177. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/langchain.py +0 -0
  178. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/light_rag.py +0 -0
  179. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/llamaindex.py +0 -0
  180. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/pdf.py +0 -0
  181. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/pdf_bytes.py +0 -0
  182. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/pdf_url.py +0 -0
  183. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/s3/__init__.py +0 -0
  184. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/s3/base.py +0 -0
  185. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/s3/pdf.py +0 -0
  186. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/s3/text.py +0 -0
  187. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/text.py +0 -0
  188. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/url.py +0 -0
  189. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/wikipedia.py +0 -0
  190. {agno-1.7.10 → agno-1.7.11}/agno/knowledge/youtube.py +0 -0
  191. {agno-1.7.10 → agno-1.7.11}/agno/memory/__init__.py +0 -0
  192. {agno-1.7.10 → agno-1.7.11}/agno/memory/agent.py +0 -0
  193. {agno-1.7.10 → agno-1.7.11}/agno/memory/classifier.py +0 -0
  194. {agno-1.7.10 → agno-1.7.11}/agno/memory/db/__init__.py +0 -0
  195. {agno-1.7.10 → agno-1.7.11}/agno/memory/db/base.py +0 -0
  196. {agno-1.7.10 → agno-1.7.11}/agno/memory/db/mongodb.py +0 -0
  197. {agno-1.7.10 → agno-1.7.11}/agno/memory/db/postgres.py +0 -0
  198. {agno-1.7.10 → agno-1.7.11}/agno/memory/db/sqlite.py +0 -0
  199. {agno-1.7.10 → agno-1.7.11}/agno/memory/manager.py +0 -0
  200. {agno-1.7.10 → agno-1.7.11}/agno/memory/memory.py +0 -0
  201. {agno-1.7.10 → agno-1.7.11}/agno/memory/row.py +0 -0
  202. {agno-1.7.10 → agno-1.7.11}/agno/memory/summarizer.py +0 -0
  203. {agno-1.7.10 → agno-1.7.11}/agno/memory/summary.py +0 -0
  204. {agno-1.7.10 → agno-1.7.11}/agno/memory/team.py +0 -0
  205. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/__init__.py +0 -0
  206. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/db/__init__.py +0 -0
  207. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/db/base.py +0 -0
  208. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/db/firestore.py +0 -0
  209. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/db/mongodb.py +0 -0
  210. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/db/postgres.py +0 -0
  211. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/db/redis.py +0 -0
  212. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/db/schema.py +0 -0
  213. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/db/sqlite.py +0 -0
  214. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/manager.py +0 -0
  215. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/memory.py +0 -0
  216. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/schema.py +0 -0
  217. {agno-1.7.10 → agno-1.7.11}/agno/memory/v2/summarizer.py +0 -0
  218. {agno-1.7.10 → agno-1.7.11}/agno/memory/workflow.py +0 -0
  219. {agno-1.7.10 → agno-1.7.11}/agno/models/__init__.py +0 -0
  220. {agno-1.7.10 → agno-1.7.11}/agno/models/aimlapi/__init__.py +0 -0
  221. {agno-1.7.10 → agno-1.7.11}/agno/models/aimlapi/aimlapi.py +0 -0
  222. {agno-1.7.10 → agno-1.7.11}/agno/models/anthropic/__init__.py +0 -0
  223. {agno-1.7.10 → agno-1.7.11}/agno/models/anthropic/claude.py +0 -0
  224. {agno-1.7.10 → agno-1.7.11}/agno/models/aws/__init__.py +0 -0
  225. {agno-1.7.10 → agno-1.7.11}/agno/models/aws/claude.py +0 -0
  226. {agno-1.7.10 → agno-1.7.11}/agno/models/azure/__init__.py +0 -0
  227. {agno-1.7.10 → agno-1.7.11}/agno/models/azure/ai_foundry.py +0 -0
  228. {agno-1.7.10 → agno-1.7.11}/agno/models/azure/openai_chat.py +0 -0
  229. {agno-1.7.10 → agno-1.7.11}/agno/models/base.py +0 -0
  230. {agno-1.7.10 → agno-1.7.11}/agno/models/cerebras/__init__.py +0 -0
  231. {agno-1.7.10 → agno-1.7.11}/agno/models/cerebras/cerebras.py +0 -0
  232. {agno-1.7.10 → agno-1.7.11}/agno/models/cerebras/cerebras_openai.py +0 -0
  233. {agno-1.7.10 → agno-1.7.11}/agno/models/cohere/__init__.py +0 -0
  234. {agno-1.7.10 → agno-1.7.11}/agno/models/cohere/chat.py +0 -0
  235. {agno-1.7.10 → agno-1.7.11}/agno/models/deepinfra/__init__.py +0 -0
  236. {agno-1.7.10 → agno-1.7.11}/agno/models/deepinfra/deepinfra.py +0 -0
  237. {agno-1.7.10 → agno-1.7.11}/agno/models/deepseek/__init__.py +0 -0
  238. {agno-1.7.10 → agno-1.7.11}/agno/models/deepseek/deepseek.py +0 -0
  239. {agno-1.7.10 → agno-1.7.11}/agno/models/defaults.py +0 -0
  240. {agno-1.7.10 → agno-1.7.11}/agno/models/fireworks/__init__.py +0 -0
  241. {agno-1.7.10 → agno-1.7.11}/agno/models/fireworks/fireworks.py +0 -0
  242. {agno-1.7.10 → agno-1.7.11}/agno/models/google/__init__.py +0 -0
  243. {agno-1.7.10 → agno-1.7.11}/agno/models/google/gemini.py +0 -0
  244. {agno-1.7.10 → agno-1.7.11}/agno/models/groq/__init__.py +0 -0
  245. {agno-1.7.10 → agno-1.7.11}/agno/models/groq/groq.py +0 -0
  246. {agno-1.7.10 → agno-1.7.11}/agno/models/huggingface/__init__.py +0 -0
  247. {agno-1.7.10 → agno-1.7.11}/agno/models/huggingface/huggingface.py +0 -0
  248. {agno-1.7.10 → agno-1.7.11}/agno/models/ibm/__init__.py +0 -0
  249. {agno-1.7.10 → agno-1.7.11}/agno/models/ibm/watsonx.py +0 -0
  250. {agno-1.7.10 → agno-1.7.11}/agno/models/internlm/__init__.py +0 -0
  251. {agno-1.7.10 → agno-1.7.11}/agno/models/internlm/internlm.py +0 -0
  252. {agno-1.7.10 → agno-1.7.11}/agno/models/langdb/__init__.py +0 -0
  253. {agno-1.7.10 → agno-1.7.11}/agno/models/langdb/langdb.py +0 -0
  254. {agno-1.7.10 → agno-1.7.11}/agno/models/litellm/__init__.py +0 -0
  255. {agno-1.7.10 → agno-1.7.11}/agno/models/litellm/chat.py +0 -0
  256. {agno-1.7.10 → agno-1.7.11}/agno/models/litellm/litellm_openai.py +0 -0
  257. {agno-1.7.10 → agno-1.7.11}/agno/models/lmstudio/__init__.py +0 -0
  258. {agno-1.7.10 → agno-1.7.11}/agno/models/lmstudio/lmstudio.py +0 -0
  259. {agno-1.7.10 → agno-1.7.11}/agno/models/message.py +0 -0
  260. {agno-1.7.10 → agno-1.7.11}/agno/models/meta/__init__.py +0 -0
  261. {agno-1.7.10 → agno-1.7.11}/agno/models/meta/llama.py +0 -0
  262. {agno-1.7.10 → agno-1.7.11}/agno/models/meta/llama_openai.py +0 -0
  263. {agno-1.7.10 → agno-1.7.11}/agno/models/mistral/__init__.py +0 -0
  264. {agno-1.7.10 → agno-1.7.11}/agno/models/mistral/mistral.py +0 -0
  265. {agno-1.7.10 → agno-1.7.11}/agno/models/nebius/__init__.py +0 -0
  266. {agno-1.7.10 → agno-1.7.11}/agno/models/nebius/nebius.py +0 -0
  267. {agno-1.7.10 → agno-1.7.11}/agno/models/nvidia/__init__.py +0 -0
  268. {agno-1.7.10 → agno-1.7.11}/agno/models/nvidia/nvidia.py +0 -0
  269. {agno-1.7.10 → agno-1.7.11}/agno/models/ollama/__init__.py +0 -0
  270. {agno-1.7.10 → agno-1.7.11}/agno/models/ollama/chat.py +0 -0
  271. {agno-1.7.10 → agno-1.7.11}/agno/models/ollama/tools.py +0 -0
  272. {agno-1.7.10 → agno-1.7.11}/agno/models/openai/__init__.py +0 -0
  273. {agno-1.7.10 → agno-1.7.11}/agno/models/openai/like.py +0 -0
  274. {agno-1.7.10 → agno-1.7.11}/agno/models/openrouter/__init__.py +0 -0
  275. {agno-1.7.10 → agno-1.7.11}/agno/models/openrouter/openrouter.py +0 -0
  276. {agno-1.7.10 → agno-1.7.11}/agno/models/perplexity/__init__.py +0 -0
  277. {agno-1.7.10 → agno-1.7.11}/agno/models/perplexity/perplexity.py +0 -0
  278. {agno-1.7.10 → agno-1.7.11}/agno/models/portkey/__init__.py +0 -0
  279. {agno-1.7.10 → agno-1.7.11}/agno/models/portkey/portkey.py +0 -0
  280. {agno-1.7.10 → agno-1.7.11}/agno/models/response.py +0 -0
  281. {agno-1.7.10 → agno-1.7.11}/agno/models/sambanova/__init__.py +0 -0
  282. {agno-1.7.10 → agno-1.7.11}/agno/models/sambanova/sambanova.py +0 -0
  283. {agno-1.7.10 → agno-1.7.11}/agno/models/together/__init__.py +0 -0
  284. {agno-1.7.10 → agno-1.7.11}/agno/models/together/together.py +0 -0
  285. {agno-1.7.10 → agno-1.7.11}/agno/models/vercel/__init__.py +0 -0
  286. {agno-1.7.10 → agno-1.7.11}/agno/models/vercel/v0.py +0 -0
  287. {agno-1.7.10 → agno-1.7.11}/agno/models/vllm/__init__.py +0 -0
  288. {agno-1.7.10 → agno-1.7.11}/agno/models/vllm/vllm.py +0 -0
  289. {agno-1.7.10 → agno-1.7.11}/agno/models/xai/__init__.py +0 -0
  290. {agno-1.7.10 → agno-1.7.11}/agno/models/xai/xai.py +0 -0
  291. {agno-1.7.10 → agno-1.7.11}/agno/playground/__init__.py +0 -0
  292. {agno-1.7.10 → agno-1.7.11}/agno/playground/deploy.py +0 -0
  293. {agno-1.7.10 → agno-1.7.11}/agno/playground/playground.py +0 -0
  294. {agno-1.7.10 → agno-1.7.11}/agno/playground/serve.py +0 -0
  295. {agno-1.7.10 → agno-1.7.11}/agno/playground/settings.py +0 -0
  296. {agno-1.7.10 → agno-1.7.11}/agno/py.typed +0 -0
  297. {agno-1.7.10 → agno-1.7.11}/agno/reasoning/__init__.py +0 -0
  298. {agno-1.7.10 → agno-1.7.11}/agno/reasoning/azure_ai_foundry.py +0 -0
  299. {agno-1.7.10 → agno-1.7.11}/agno/reasoning/deepseek.py +0 -0
  300. {agno-1.7.10 → agno-1.7.11}/agno/reasoning/default.py +0 -0
  301. {agno-1.7.10 → agno-1.7.11}/agno/reasoning/groq.py +0 -0
  302. {agno-1.7.10 → agno-1.7.11}/agno/reasoning/helpers.py +0 -0
  303. {agno-1.7.10 → agno-1.7.11}/agno/reasoning/ollama.py +0 -0
  304. {agno-1.7.10 → agno-1.7.11}/agno/reasoning/openai.py +0 -0
  305. {agno-1.7.10 → agno-1.7.11}/agno/reasoning/step.py +0 -0
  306. {agno-1.7.10 → agno-1.7.11}/agno/reranker/__init__.py +0 -0
  307. {agno-1.7.10 → agno-1.7.11}/agno/reranker/base.py +0 -0
  308. {agno-1.7.10 → agno-1.7.11}/agno/reranker/cohere.py +0 -0
  309. {agno-1.7.10 → agno-1.7.11}/agno/reranker/infinity.py +0 -0
  310. {agno-1.7.10 → agno-1.7.11}/agno/reranker/sentence_transformer.py +0 -0
  311. {agno-1.7.10 → agno-1.7.11}/agno/run/__init__.py +0 -0
  312. {agno-1.7.10 → agno-1.7.11}/agno/run/base.py +0 -0
  313. {agno-1.7.10 → agno-1.7.11}/agno/run/messages.py +0 -0
  314. {agno-1.7.10 → agno-1.7.11}/agno/run/v2/__init__.py +0 -0
  315. {agno-1.7.10 → agno-1.7.11}/agno/run/v2/workflow.py +0 -0
  316. {agno-1.7.10 → agno-1.7.11}/agno/run/workflow.py +0 -0
  317. {agno-1.7.10 → agno-1.7.11}/agno/storage/__init__.py +0 -0
  318. {agno-1.7.10 → agno-1.7.11}/agno/storage/agent/__init__.py +0 -0
  319. {agno-1.7.10 → agno-1.7.11}/agno/storage/agent/dynamodb.py +0 -0
  320. {agno-1.7.10 → agno-1.7.11}/agno/storage/agent/json.py +0 -0
  321. {agno-1.7.10 → agno-1.7.11}/agno/storage/agent/mongodb.py +0 -0
  322. {agno-1.7.10 → agno-1.7.11}/agno/storage/agent/postgres.py +0 -0
  323. {agno-1.7.10 → agno-1.7.11}/agno/storage/agent/singlestore.py +0 -0
  324. {agno-1.7.10 → agno-1.7.11}/agno/storage/agent/sqlite.py +0 -0
  325. {agno-1.7.10 → agno-1.7.11}/agno/storage/agent/yaml.py +0 -0
  326. {agno-1.7.10 → agno-1.7.11}/agno/storage/base.py +0 -0
  327. {agno-1.7.10 → agno-1.7.11}/agno/storage/dynamodb.py +0 -0
  328. {agno-1.7.10 → agno-1.7.11}/agno/storage/firestore.py +0 -0
  329. {agno-1.7.10 → agno-1.7.11}/agno/storage/gcs_json.py +0 -0
  330. {agno-1.7.10 → agno-1.7.11}/agno/storage/json.py +0 -0
  331. {agno-1.7.10 → agno-1.7.11}/agno/storage/mongodb.py +0 -0
  332. {agno-1.7.10 → agno-1.7.11}/agno/storage/mysql.py +0 -0
  333. {agno-1.7.10 → agno-1.7.11}/agno/storage/postgres.py +0 -0
  334. {agno-1.7.10 → agno-1.7.11}/agno/storage/redis.py +0 -0
  335. {agno-1.7.10 → agno-1.7.11}/agno/storage/session/__init__.py +0 -0
  336. {agno-1.7.10 → agno-1.7.11}/agno/storage/session/agent.py +0 -0
  337. {agno-1.7.10 → agno-1.7.11}/agno/storage/session/team.py +0 -0
  338. {agno-1.7.10 → agno-1.7.11}/agno/storage/session/v2/__init__.py +0 -0
  339. {agno-1.7.10 → agno-1.7.11}/agno/storage/session/v2/workflow.py +0 -0
  340. {agno-1.7.10 → agno-1.7.11}/agno/storage/session/workflow.py +0 -0
  341. {agno-1.7.10 → agno-1.7.11}/agno/storage/singlestore.py +0 -0
  342. {agno-1.7.10 → agno-1.7.11}/agno/storage/sqlite.py +0 -0
  343. {agno-1.7.10 → agno-1.7.11}/agno/storage/workflow/__init__.py +0 -0
  344. {agno-1.7.10 → agno-1.7.11}/agno/storage/workflow/mongodb.py +0 -0
  345. {agno-1.7.10 → agno-1.7.11}/agno/storage/workflow/postgres.py +0 -0
  346. {agno-1.7.10 → agno-1.7.11}/agno/storage/workflow/sqlite.py +0 -0
  347. {agno-1.7.10 → agno-1.7.11}/agno/storage/yaml.py +0 -0
  348. {agno-1.7.10 → agno-1.7.11}/agno/team/__init__.py +0 -0
  349. {agno-1.7.10 → agno-1.7.11}/agno/tools/__init__.py +0 -0
  350. {agno-1.7.10 → agno-1.7.11}/agno/tools/agentql.py +0 -0
  351. {agno-1.7.10 → agno-1.7.11}/agno/tools/airflow.py +0 -0
  352. {agno-1.7.10 → agno-1.7.11}/agno/tools/api.py +0 -0
  353. {agno-1.7.10 → agno-1.7.11}/agno/tools/apify.py +0 -0
  354. {agno-1.7.10 → agno-1.7.11}/agno/tools/arxiv.py +0 -0
  355. {agno-1.7.10 → agno-1.7.11}/agno/tools/aws_lambda.py +0 -0
  356. {agno-1.7.10 → agno-1.7.11}/agno/tools/aws_ses.py +0 -0
  357. {agno-1.7.10 → agno-1.7.11}/agno/tools/baidusearch.py +0 -0
  358. {agno-1.7.10 → agno-1.7.11}/agno/tools/bitbucket.py +0 -0
  359. {agno-1.7.10 → agno-1.7.11}/agno/tools/bravesearch.py +0 -0
  360. {agno-1.7.10 → agno-1.7.11}/agno/tools/brightdata.py +0 -0
  361. {agno-1.7.10 → agno-1.7.11}/agno/tools/browserbase.py +0 -0
  362. {agno-1.7.10 → agno-1.7.11}/agno/tools/calcom.py +0 -0
  363. {agno-1.7.10 → agno-1.7.11}/agno/tools/calculator.py +0 -0
  364. {agno-1.7.10 → agno-1.7.11}/agno/tools/cartesia.py +0 -0
  365. {agno-1.7.10 → agno-1.7.11}/agno/tools/clickup_tool.py +0 -0
  366. {agno-1.7.10 → agno-1.7.11}/agno/tools/confluence.py +0 -0
  367. {agno-1.7.10 → agno-1.7.11}/agno/tools/crawl4ai.py +0 -0
  368. {agno-1.7.10 → agno-1.7.11}/agno/tools/csv_toolkit.py +0 -0
  369. {agno-1.7.10 → agno-1.7.11}/agno/tools/dalle.py +0 -0
  370. {agno-1.7.10 → agno-1.7.11}/agno/tools/daytona.py +0 -0
  371. {agno-1.7.10 → agno-1.7.11}/agno/tools/decorator.py +0 -0
  372. {agno-1.7.10 → agno-1.7.11}/agno/tools/desi_vocal.py +0 -0
  373. {agno-1.7.10 → agno-1.7.11}/agno/tools/discord.py +0 -0
  374. {agno-1.7.10 → agno-1.7.11}/agno/tools/docker.py +0 -0
  375. {agno-1.7.10 → agno-1.7.11}/agno/tools/duckdb.py +0 -0
  376. {agno-1.7.10 → agno-1.7.11}/agno/tools/duckduckgo.py +0 -0
  377. {agno-1.7.10 → agno-1.7.11}/agno/tools/e2b.py +0 -0
  378. {agno-1.7.10 → agno-1.7.11}/agno/tools/eleven_labs.py +0 -0
  379. {agno-1.7.10 → agno-1.7.11}/agno/tools/email.py +0 -0
  380. {agno-1.7.10 → agno-1.7.11}/agno/tools/evm.py +0 -0
  381. {agno-1.7.10 → agno-1.7.11}/agno/tools/exa.py +0 -0
  382. {agno-1.7.10 → agno-1.7.11}/agno/tools/fal.py +0 -0
  383. {agno-1.7.10 → agno-1.7.11}/agno/tools/file.py +0 -0
  384. {agno-1.7.10 → agno-1.7.11}/agno/tools/financial_datasets.py +0 -0
  385. {agno-1.7.10 → agno-1.7.11}/agno/tools/firecrawl.py +0 -0
  386. {agno-1.7.10 → agno-1.7.11}/agno/tools/function.py +0 -0
  387. {agno-1.7.10 → agno-1.7.11}/agno/tools/giphy.py +0 -0
  388. {agno-1.7.10 → agno-1.7.11}/agno/tools/gmail.py +0 -0
  389. {agno-1.7.10 → agno-1.7.11}/agno/tools/google_bigquery.py +0 -0
  390. {agno-1.7.10 → agno-1.7.11}/agno/tools/google_maps.py +0 -0
  391. {agno-1.7.10 → agno-1.7.11}/agno/tools/googlecalendar.py +0 -0
  392. {agno-1.7.10 → agno-1.7.11}/agno/tools/googlesearch.py +0 -0
  393. {agno-1.7.10 → agno-1.7.11}/agno/tools/googlesheets.py +0 -0
  394. {agno-1.7.10 → agno-1.7.11}/agno/tools/hackernews.py +0 -0
  395. {agno-1.7.10 → agno-1.7.11}/agno/tools/jina.py +0 -0
  396. {agno-1.7.10 → agno-1.7.11}/agno/tools/jira.py +0 -0
  397. {agno-1.7.10 → agno-1.7.11}/agno/tools/knowledge.py +0 -0
  398. {agno-1.7.10 → agno-1.7.11}/agno/tools/linear.py +0 -0
  399. {agno-1.7.10 → agno-1.7.11}/agno/tools/linkup.py +0 -0
  400. {agno-1.7.10 → agno-1.7.11}/agno/tools/local_file_system.py +0 -0
  401. {agno-1.7.10 → agno-1.7.11}/agno/tools/lumalab.py +0 -0
  402. {agno-1.7.10 → agno-1.7.11}/agno/tools/mcp.py +0 -0
  403. {agno-1.7.10 → agno-1.7.11}/agno/tools/mem0.py +0 -0
  404. {agno-1.7.10 → agno-1.7.11}/agno/tools/mlx_transcribe.py +0 -0
  405. {agno-1.7.10 → agno-1.7.11}/agno/tools/models/__init__.py +0 -0
  406. {agno-1.7.10 → agno-1.7.11}/agno/tools/models/azure_openai.py +0 -0
  407. {agno-1.7.10 → agno-1.7.11}/agno/tools/models/gemini.py +0 -0
  408. {agno-1.7.10 → agno-1.7.11}/agno/tools/models/groq.py +0 -0
  409. {agno-1.7.10 → agno-1.7.11}/agno/tools/models/morph.py +0 -0
  410. {agno-1.7.10 → agno-1.7.11}/agno/tools/models/nebius.py +0 -0
  411. {agno-1.7.10 → agno-1.7.11}/agno/tools/models_labs.py +0 -0
  412. {agno-1.7.10 → agno-1.7.11}/agno/tools/moviepy_video.py +0 -0
  413. {agno-1.7.10 → agno-1.7.11}/agno/tools/newspaper.py +0 -0
  414. {agno-1.7.10 → agno-1.7.11}/agno/tools/newspaper4k.py +0 -0
  415. {agno-1.7.10 → agno-1.7.11}/agno/tools/openai.py +0 -0
  416. {agno-1.7.10 → agno-1.7.11}/agno/tools/openbb.py +0 -0
  417. {agno-1.7.10 → agno-1.7.11}/agno/tools/opencv.py +0 -0
  418. {agno-1.7.10 → agno-1.7.11}/agno/tools/openweather.py +0 -0
  419. {agno-1.7.10 → agno-1.7.11}/agno/tools/oxylabs.py +0 -0
  420. {agno-1.7.10 → agno-1.7.11}/agno/tools/pandas.py +0 -0
  421. {agno-1.7.10 → agno-1.7.11}/agno/tools/postgres.py +0 -0
  422. {agno-1.7.10 → agno-1.7.11}/agno/tools/pubmed.py +0 -0
  423. {agno-1.7.10 → agno-1.7.11}/agno/tools/python.py +0 -0
  424. {agno-1.7.10 → agno-1.7.11}/agno/tools/reasoning.py +0 -0
  425. {agno-1.7.10 → agno-1.7.11}/agno/tools/reddit.py +0 -0
  426. {agno-1.7.10 → agno-1.7.11}/agno/tools/replicate.py +0 -0
  427. {agno-1.7.10 → agno-1.7.11}/agno/tools/resend.py +0 -0
  428. {agno-1.7.10 → agno-1.7.11}/agno/tools/scrapegraph.py +0 -0
  429. {agno-1.7.10 → agno-1.7.11}/agno/tools/searxng.py +0 -0
  430. {agno-1.7.10 → agno-1.7.11}/agno/tools/serpapi.py +0 -0
  431. {agno-1.7.10 → agno-1.7.11}/agno/tools/serper.py +0 -0
  432. {agno-1.7.10 → agno-1.7.11}/agno/tools/shell.py +0 -0
  433. {agno-1.7.10 → agno-1.7.11}/agno/tools/slack.py +0 -0
  434. {agno-1.7.10 → agno-1.7.11}/agno/tools/sleep.py +0 -0
  435. {agno-1.7.10 → agno-1.7.11}/agno/tools/spider.py +0 -0
  436. {agno-1.7.10 → agno-1.7.11}/agno/tools/sql.py +0 -0
  437. {agno-1.7.10 → agno-1.7.11}/agno/tools/streamlit/__init__.py +0 -0
  438. {agno-1.7.10 → agno-1.7.11}/agno/tools/streamlit/components.py +0 -0
  439. {agno-1.7.10 → agno-1.7.11}/agno/tools/tavily.py +0 -0
  440. {agno-1.7.10 → agno-1.7.11}/agno/tools/telegram.py +0 -0
  441. {agno-1.7.10 → agno-1.7.11}/agno/tools/thinking.py +0 -0
  442. {agno-1.7.10 → agno-1.7.11}/agno/tools/todoist.py +0 -0
  443. {agno-1.7.10 → agno-1.7.11}/agno/tools/tool_registry.py +0 -0
  444. {agno-1.7.10 → agno-1.7.11}/agno/tools/toolkit.py +0 -0
  445. {agno-1.7.10 → agno-1.7.11}/agno/tools/trello.py +0 -0
  446. {agno-1.7.10 → agno-1.7.11}/agno/tools/twilio.py +0 -0
  447. {agno-1.7.10 → agno-1.7.11}/agno/tools/user_control_flow.py +0 -0
  448. {agno-1.7.10 → agno-1.7.11}/agno/tools/valyu.py +0 -0
  449. {agno-1.7.10 → agno-1.7.11}/agno/tools/visualization.py +0 -0
  450. {agno-1.7.10 → agno-1.7.11}/agno/tools/webbrowser.py +0 -0
  451. {agno-1.7.10 → agno-1.7.11}/agno/tools/webex.py +0 -0
  452. {agno-1.7.10 → agno-1.7.11}/agno/tools/website.py +0 -0
  453. {agno-1.7.10 → agno-1.7.11}/agno/tools/webtools.py +0 -0
  454. {agno-1.7.10 → agno-1.7.11}/agno/tools/whatsapp.py +0 -0
  455. {agno-1.7.10 → agno-1.7.11}/agno/tools/wikipedia.py +0 -0
  456. {agno-1.7.10 → agno-1.7.11}/agno/tools/x.py +0 -0
  457. {agno-1.7.10 → agno-1.7.11}/agno/tools/yfinance.py +0 -0
  458. {agno-1.7.10 → agno-1.7.11}/agno/tools/youtube.py +0 -0
  459. {agno-1.7.10 → agno-1.7.11}/agno/tools/zendesk.py +0 -0
  460. {agno-1.7.10 → agno-1.7.11}/agno/tools/zep.py +0 -0
  461. {agno-1.7.10 → agno-1.7.11}/agno/tools/zoom.py +0 -0
  462. {agno-1.7.10 → agno-1.7.11}/agno/utils/__init__.py +0 -0
  463. {agno-1.7.10 → agno-1.7.11}/agno/utils/audio.py +0 -0
  464. {agno-1.7.10 → agno-1.7.11}/agno/utils/certs.py +0 -0
  465. {agno-1.7.10 → agno-1.7.11}/agno/utils/code_execution.py +0 -0
  466. {agno-1.7.10 → agno-1.7.11}/agno/utils/common.py +0 -0
  467. {agno-1.7.10 → agno-1.7.11}/agno/utils/defaults.py +0 -0
  468. {agno-1.7.10 → agno-1.7.11}/agno/utils/dttm.py +0 -0
  469. {agno-1.7.10 → agno-1.7.11}/agno/utils/enum.py +0 -0
  470. {agno-1.7.10 → agno-1.7.11}/agno/utils/env.py +0 -0
  471. {agno-1.7.10 → agno-1.7.11}/agno/utils/events.py +0 -0
  472. {agno-1.7.10 → agno-1.7.11}/agno/utils/filesystem.py +0 -0
  473. {agno-1.7.10 → agno-1.7.11}/agno/utils/format_str.py +0 -0
  474. {agno-1.7.10 → agno-1.7.11}/agno/utils/functions.py +0 -0
  475. {agno-1.7.10 → agno-1.7.11}/agno/utils/gemini.py +0 -0
  476. {agno-1.7.10 → agno-1.7.11}/agno/utils/git.py +0 -0
  477. {agno-1.7.10 → agno-1.7.11}/agno/utils/http.py +0 -0
  478. {agno-1.7.10 → agno-1.7.11}/agno/utils/json_io.py +0 -0
  479. {agno-1.7.10 → agno-1.7.11}/agno/utils/json_schema.py +0 -0
  480. {agno-1.7.10 → agno-1.7.11}/agno/utils/load_env.py +0 -0
  481. {agno-1.7.10 → agno-1.7.11}/agno/utils/location.py +0 -0
  482. {agno-1.7.10 → agno-1.7.11}/agno/utils/log.py +0 -0
  483. {agno-1.7.10 → agno-1.7.11}/agno/utils/mcp.py +0 -0
  484. {agno-1.7.10 → agno-1.7.11}/agno/utils/media.py +0 -0
  485. {agno-1.7.10 → agno-1.7.11}/agno/utils/merge_dict.py +0 -0
  486. {agno-1.7.10 → agno-1.7.11}/agno/utils/message.py +0 -0
  487. {agno-1.7.10 → agno-1.7.11}/agno/utils/models/__init__.py +0 -0
  488. {agno-1.7.10 → agno-1.7.11}/agno/utils/models/ai_foundry.py +0 -0
  489. {agno-1.7.10 → agno-1.7.11}/agno/utils/models/aws_claude.py +0 -0
  490. {agno-1.7.10 → agno-1.7.11}/agno/utils/models/claude.py +0 -0
  491. {agno-1.7.10 → agno-1.7.11}/agno/utils/models/cohere.py +0 -0
  492. {agno-1.7.10 → agno-1.7.11}/agno/utils/models/llama.py +0 -0
  493. {agno-1.7.10 → agno-1.7.11}/agno/utils/models/mistral.py +0 -0
  494. {agno-1.7.10 → agno-1.7.11}/agno/utils/models/openai_responses.py +0 -0
  495. {agno-1.7.10 → agno-1.7.11}/agno/utils/models/schema_utils.py +0 -0
  496. {agno-1.7.10 → agno-1.7.11}/agno/utils/models/watsonx.py +0 -0
  497. {agno-1.7.10 → agno-1.7.11}/agno/utils/openai.py +0 -0
  498. {agno-1.7.10 → agno-1.7.11}/agno/utils/pickle.py +0 -0
  499. {agno-1.7.10 → agno-1.7.11}/agno/utils/pprint.py +0 -0
  500. {agno-1.7.10 → agno-1.7.11}/agno/utils/prompts.py +0 -0
  501. {agno-1.7.10 → agno-1.7.11}/agno/utils/py_io.py +0 -0
  502. {agno-1.7.10 → agno-1.7.11}/agno/utils/pyproject.py +0 -0
  503. {agno-1.7.10 → agno-1.7.11}/agno/utils/resource_filter.py +0 -0
  504. {agno-1.7.10 → agno-1.7.11}/agno/utils/response.py +0 -0
  505. {agno-1.7.10 → agno-1.7.11}/agno/utils/response_iterator.py +0 -0
  506. {agno-1.7.10 → agno-1.7.11}/agno/utils/safe_formatter.py +0 -0
  507. {agno-1.7.10 → agno-1.7.11}/agno/utils/shell.py +0 -0
  508. {agno-1.7.10 → agno-1.7.11}/agno/utils/string.py +0 -0
  509. {agno-1.7.10 → agno-1.7.11}/agno/utils/timer.py +0 -0
  510. {agno-1.7.10 → agno-1.7.11}/agno/utils/tools.py +0 -0
  511. {agno-1.7.10 → agno-1.7.11}/agno/utils/web.py +0 -0
  512. {agno-1.7.10 → agno-1.7.11}/agno/utils/whatsapp.py +0 -0
  513. {agno-1.7.10 → agno-1.7.11}/agno/utils/yaml_io.py +0 -0
  514. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/__init__.py +0 -0
  515. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/base.py +0 -0
  516. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/cassandra/__init__.py +0 -0
  517. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/cassandra/cassandra.py +0 -0
  518. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  519. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/cassandra/index.py +0 -0
  520. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/chroma/__init__.py +0 -0
  521. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/chroma/chromadb.py +0 -0
  522. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/clickhouse/__init__.py +0 -0
  523. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/clickhouse/index.py +0 -0
  524. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/couchbase/__init__.py +0 -0
  525. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/couchbase/couchbase.py +0 -0
  526. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/distance.py +0 -0
  527. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/lancedb/__init__.py +0 -0
  528. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/lancedb/lance_db.py +0 -0
  529. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/milvus/__init__.py +0 -0
  530. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/mongodb/__init__.py +0 -0
  531. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/mongodb/mongodb.py +0 -0
  532. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/pgvector/__init__.py +0 -0
  533. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/pgvector/index.py +0 -0
  534. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/pgvector/pgvector.py +0 -0
  535. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/pineconedb/__init__.py +0 -0
  536. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  537. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/qdrant/__init__.py +0 -0
  538. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/qdrant/qdrant.py +0 -0
  539. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/search.py +0 -0
  540. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/singlestore/__init__.py +0 -0
  541. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/singlestore/index.py +0 -0
  542. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/singlestore/singlestore.py +0 -0
  543. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/surrealdb/__init__.py +0 -0
  544. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  545. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/upstashdb/__init__.py +0 -0
  546. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  547. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/weaviate/__init__.py +0 -0
  548. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/weaviate/index.py +0 -0
  549. {agno-1.7.10 → agno-1.7.11}/agno/vectordb/weaviate/weaviate.py +0 -0
  550. {agno-1.7.10 → agno-1.7.11}/agno/workflow/__init__.py +0 -0
  551. {agno-1.7.10 → agno-1.7.11}/agno/workflow/v2/__init__.py +0 -0
  552. {agno-1.7.10 → agno-1.7.11}/agno/workflow/v2/condition.py +0 -0
  553. {agno-1.7.10 → agno-1.7.11}/agno/workflow/v2/loop.py +0 -0
  554. {agno-1.7.10 → agno-1.7.11}/agno/workflow/v2/parallel.py +0 -0
  555. {agno-1.7.10 → agno-1.7.11}/agno/workflow/v2/router.py +0 -0
  556. {agno-1.7.10 → agno-1.7.11}/agno/workflow/v2/step.py +0 -0
  557. {agno-1.7.10 → agno-1.7.11}/agno/workflow/v2/steps.py +0 -0
  558. {agno-1.7.10 → agno-1.7.11}/agno/workflow/v2/types.py +0 -0
  559. {agno-1.7.10 → agno-1.7.11}/agno/workflow/v2/workflow.py +0 -0
  560. {agno-1.7.10 → agno-1.7.11}/agno/workspace/__init__.py +0 -0
  561. {agno-1.7.10 → agno-1.7.11}/agno/workspace/config.py +0 -0
  562. {agno-1.7.10 → agno-1.7.11}/agno/workspace/enums.py +0 -0
  563. {agno-1.7.10 → agno-1.7.11}/agno/workspace/helpers.py +0 -0
  564. {agno-1.7.10 → agno-1.7.11}/agno/workspace/operator.py +0 -0
  565. {agno-1.7.10 → agno-1.7.11}/agno/workspace/settings.py +0 -0
  566. {agno-1.7.10 → agno-1.7.11}/agno.egg-info/dependency_links.txt +0 -0
  567. {agno-1.7.10 → agno-1.7.11}/agno.egg-info/entry_points.txt +0 -0
  568. {agno-1.7.10 → agno-1.7.11}/agno.egg-info/top_level.txt +0 -0
  569. {agno-1.7.10 → agno-1.7.11}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 1.7.10
3
+ Version: 1.7.11
4
4
  Summary: Agno: a lightweight library for building Multi-Agent Systems
5
5
  Author-email: Ashpreet Bedi <ashpreet@agno.com>
6
6
  License: Copyright (c) Agno, Inc.
@@ -549,6 +549,8 @@ Provides-Extra: daytona
549
549
  Requires-Dist: daytona; extra == "daytona"
550
550
  Provides-Extra: oxylabs
551
551
  Requires-Dist: oxylabs; extra == "oxylabs"
552
+ Provides-Extra: trafilatura
553
+ Requires-Dist: trafilatura; extra == "trafilatura"
552
554
  Provides-Extra: sql
553
555
  Requires-Dist: sqlalchemy; extra == "sql"
554
556
  Provides-Extra: postgres
@@ -664,6 +666,7 @@ Requires-Dist: agno[zep]; extra == "tools"
664
666
  Requires-Dist: agno[mem0]; extra == "tools"
665
667
  Requires-Dist: agno[google_bigquery]; extra == "tools"
666
668
  Requires-Dist: agno[psycopg]; extra == "tools"
669
+ Requires-Dist: agno[trafilatura]; extra == "tools"
667
670
  Provides-Extra: storage
668
671
  Requires-Dist: agno[sql]; extra == "storage"
669
672
  Requires-Dist: agno[postgres]; extra == "storage"
@@ -81,6 +81,7 @@ class FastAPIApp(BaseAPIApp):
81
81
  workflow.app_id = self.app_id
82
82
  if not workflow.workflow_id:
83
83
  workflow.workflow_id = generate_id(workflow.name)
84
+ workflow.initialize_workflow()
84
85
 
85
86
  def get_router(self) -> APIRouter:
86
87
  return get_sync_router(agents=self.agents, teams=self.teams, workflows=self.workflows)
@@ -95,6 +96,7 @@ class FastAPIApp(BaseAPIApp):
95
96
  host: str = "localhost",
96
97
  port: int = 7777,
97
98
  reload: bool = False,
99
+ workers: Optional[int] = None,
98
100
  **kwargs,
99
101
  ):
100
102
  self.set_app_id()
@@ -102,4 +104,4 @@ class FastAPIApp(BaseAPIApp):
102
104
 
103
105
  log_info(f"Starting API on {host}:{port}")
104
106
 
105
- uvicorn.run(app=app, host=host, port=port, reload=reload, **kwargs)
107
+ uvicorn.run(app=app, host=host, port=port, reload=reload, workers=workers, **kwargs)
@@ -231,7 +231,7 @@ def get_async_router(
231
231
 
232
232
  return base64_images, base64_audios, base64_videos
233
233
 
234
- def team_process_file(
234
+ async def team_process_file(
235
235
  files: List[UploadFile],
236
236
  ):
237
237
  base64_images: List[Image] = []
@@ -87,6 +87,7 @@ class Playground:
87
87
  workflow.app_id = self.app_id
88
88
  if not workflow.workflow_id:
89
89
  workflow.workflow_id = generate_id(workflow.name)
90
+ workflow.initialize_workflow()
90
91
 
91
92
  def set_app_id(self) -> str:
92
93
  # If app_id is already set, keep it instead of overriding with UUID
@@ -14,9 +14,7 @@ except ImportError:
14
14
  class SemanticChunking(ChunkingStrategy):
15
15
  """Chunking strategy that splits text into semantic chunks using chonkie"""
16
16
 
17
- def __init__(
18
- self, embedder: Optional[Embedder] = None, chunk_size: int = 5000, similarity_threshold: Optional[float] = 0.5
19
- ):
17
+ def __init__(self, embedder: Optional[Embedder] = None, chunk_size: int = 5000, similarity_threshold: float = 0.5):
20
18
  self.embedder = embedder or OpenAIEmbedder(id="text-embedding-3-small") # type: ignore
21
19
  self.chunk_size = chunk_size
22
20
  self.similarity_threshold = similarity_threshold
@@ -1,11 +1,9 @@
1
1
  import asyncio
2
2
  import uuid
3
3
  from pathlib import Path
4
- from typing import IO, Any, List, Optional, Union
4
+ from typing import IO, Any, List, Union
5
5
 
6
6
  from agno.document.base import Document
7
- from agno.document.chunking.markdown import MarkdownChunking
8
- from agno.document.chunking.strategy import ChunkingStrategy
9
7
  from agno.document.reader.base import Reader
10
8
  from agno.utils.log import log_info, logger
11
9
 
@@ -13,9 +11,6 @@ from agno.utils.log import log_info, logger
13
11
  class MarkdownReader(Reader):
14
12
  """Reader for Markdown files"""
15
13
 
16
- def __init__(self, chunking_strategy: Optional[ChunkingStrategy] = MarkdownChunking()) -> None:
17
- super().__init__(chunking_strategy=chunking_strategy)
18
-
19
14
  def read(self, file: Union[Path, IO[Any]]) -> List[Document]:
20
15
  try:
21
16
  if isinstance(file, Path):
@@ -30,7 +25,7 @@ class MarkdownReader(Reader):
30
25
  file.seek(0)
31
26
  file_contents = file.read().decode("utf-8")
32
27
 
33
- documents = [Document(name=file_name, id=str({uuid.uuid4()}), content=file_contents)]
28
+ documents = [Document(name=file_name, id=str(uuid.uuid4()), content=file_contents)]
34
29
  if self.chunk:
35
30
  chunked_documents = []
36
31
  for document in documents:
@@ -28,7 +28,7 @@ class TextReader(Reader):
28
28
  documents = [
29
29
  Document(
30
30
  name=file_name,
31
- id=str({uuid.uuid4()}),
31
+ id=str(uuid.uuid4()),
32
32
  content=file_contents,
33
33
  )
34
34
  ]
@@ -67,7 +67,7 @@ class TextReader(Reader):
67
67
 
68
68
  document = Document(
69
69
  name=file_name,
70
- id=str({uuid.uuid4()}),
70
+ id=str(uuid.uuid4()),
71
71
  content=file_contents,
72
72
  )
73
73
 
@@ -2,7 +2,7 @@ import asyncio
2
2
  from pathlib import Path
3
3
  from typing import Any, AsyncIterator, Dict, Iterator, List, Optional, Set, Tuple
4
4
 
5
- from pydantic import BaseModel, ConfigDict, Field, model_validator
5
+ from pydantic import BaseModel, ConfigDict, model_validator
6
6
 
7
7
  from agno.document import Document
8
8
  from agno.document.chunking.fixed import FixedSizeChunking
@@ -24,8 +24,7 @@ class AgentKnowledge(BaseModel):
24
24
  # Number of documents to optimize the vector db on
25
25
  optimize_on: Optional[int] = 1000
26
26
 
27
- chunking_strategy: ChunkingStrategy = Field(default_factory=FixedSizeChunking)
28
-
27
+ chunking_strategy: Optional[ChunkingStrategy] = None
29
28
  model_config = ConfigDict(arbitrary_types_allowed=True)
30
29
 
31
30
  valid_metadata_filters: Set[str] = None # type: ignore
@@ -33,7 +32,7 @@ class AgentKnowledge(BaseModel):
33
32
  @model_validator(mode="after")
34
33
  def update_reader(self) -> "AgentKnowledge":
35
34
  if self.reader is not None and self.reader.chunking_strategy is None:
36
- self.reader.chunking_strategy = self.chunking_strategy
35
+ self.reader.chunking_strategy = self.chunking_strategy or FixedSizeChunking()
37
36
  return self
38
37
 
39
38
  @property
@@ -237,7 +236,7 @@ class AgentKnowledge(BaseModel):
237
236
  self._load_init(recreate=False, upsert=upsert)
238
237
  if self.vector_db is None:
239
238
  return
240
-
239
+
241
240
  log_info("Loading knowledge base")
242
241
  # Upsert documents if upsert is True
243
242
  if upsert and self.vector_db.upsert_available():
@@ -1,7 +1,10 @@
1
1
  from pathlib import Path
2
- from typing import Any, AsyncIterator, Dict, Iterator, List, Optional, Union
2
+ from typing import Any, AsyncIterator, Dict, Iterator, List, Optional, Union, cast
3
+
4
+ from pydantic import model_validator
3
5
 
4
6
  from agno.document import Document
7
+ from agno.document.chunking.markdown import MarkdownChunking
5
8
  from agno.document.reader.markdown_reader import MarkdownReader
6
9
  from agno.knowledge.agent import AgentKnowledge
7
10
  from agno.utils.log import log_info, logger
@@ -10,11 +13,18 @@ from agno.utils.log import log_info, logger
10
13
  class MarkdownKnowledgeBase(AgentKnowledge):
11
14
  path: Optional[Union[str, Path, List[Dict[str, Union[str, Dict[str, Any]]]]]] = None
12
15
  formats: List[str] = [".md"]
13
- reader: MarkdownReader = MarkdownReader()
16
+ reader: Optional[MarkdownReader] = None
17
+
18
+ @model_validator(mode="after")
19
+ def set_reader(self) -> "MarkdownKnowledgeBase":
20
+ if self.reader is None:
21
+ self.reader = MarkdownReader(chunking_strategy=self.chunking_strategy or MarkdownChunking())
22
+ return self
14
23
 
15
24
  @property
16
25
  def document_lists(self) -> Iterator[List[Document]]:
17
26
  """Iterate over text files and yield lists of documents."""
27
+ self.reader = cast(MarkdownReader, self.reader)
18
28
  if self.path is None:
19
29
  raise ValueError("Path is not set")
20
30
 
@@ -49,6 +59,7 @@ class MarkdownKnowledgeBase(AgentKnowledge):
49
59
  @property
50
60
  async def async_document_lists(self) -> AsyncIterator[List[Document]]:
51
61
  """Iterate over text files and yield lists of documents asynchronously."""
62
+ self.reader = cast(MarkdownReader, self.reader)
52
63
  if self.path is None:
53
64
  raise ValueError("Path is not set")
54
65
 
@@ -85,6 +96,7 @@ class MarkdownKnowledgeBase(AgentKnowledge):
85
96
  skip_existing: bool = True,
86
97
  ) -> None:
87
98
  """Load documents from a single text file with specific metadata into the vector DB."""
99
+ self.reader = cast(MarkdownReader, self.reader)
88
100
 
89
101
  _file_path = Path(path) if isinstance(path, str) else path
90
102
 
@@ -117,6 +129,7 @@ class MarkdownKnowledgeBase(AgentKnowledge):
117
129
  skip_existing: bool = True,
118
130
  ) -> None:
119
131
  """Load documents from a single text file with specific metadata into the vector DB."""
132
+ self.reader = cast(MarkdownReader, self.reader)
120
133
 
121
134
  _file_path = Path(path) if isinstance(path, str) else path
122
135
 
@@ -4,6 +4,7 @@ from typing import Any, AsyncIterator, Dict, Iterator, List, Optional
4
4
  from pydantic import model_validator
5
5
 
6
6
  from agno.document import Document
7
+ from agno.document.chunking.fixed import FixedSizeChunking
7
8
  from agno.document.reader.website_reader import WebsiteReader
8
9
  from agno.knowledge.agent import AgentKnowledge
9
10
  from agno.utils.log import log_debug, log_info, logger
@@ -21,7 +22,9 @@ class WebsiteKnowledgeBase(AgentKnowledge):
21
22
  def set_reader(self) -> "WebsiteKnowledgeBase":
22
23
  if self.reader is None:
23
24
  self.reader = WebsiteReader(
24
- max_depth=self.max_depth, max_links=self.max_links, chunking_strategy=self.chunking_strategy
25
+ max_depth=self.max_depth,
26
+ max_links=self.max_links,
27
+ chunking_strategy=self.chunking_strategy or FixedSizeChunking(),
25
28
  )
26
29
  return self
27
30
 
@@ -319,6 +319,8 @@ class File(BaseModel):
319
319
  mime_type: Optional[str] = None
320
320
  # External file object (e.g. GeminiFile, must be a valid object as expected by the model you are using)
321
321
  external: Optional[Any] = None
322
+ format: Optional[str] = None # E.g. `pdf`, `txt`, `csv`, `xml`, etc.
323
+ name: Optional[str] = None # Name of the file, mandatory for AWS Bedrock document input
322
324
 
323
325
  @model_validator(mode="before")
324
326
  @classmethod
@@ -27,6 +27,11 @@ except ImportError:
27
27
  AIOBOTO3_AVAILABLE = False
28
28
 
29
29
 
30
+ BEDROCK_SUPPORTED_IMAGE_FORMATS = ["png", "jpeg", "webp", "gif"]
31
+ BEDROCK_SUPPORTED_VIDEO_FORMATS = ["mp4", "mov", "mkv", "webm", "flv", "mpeg", "mpg", "wmv", "three_gp"]
32
+ BEDROCK_SUPPORTED_FILE_FORMATS = ["pdf", "csv", "doc", "docx", "xls", "xlsx", "html", "txt", "md"]
33
+
34
+
30
35
  @dataclass
31
36
  class AwsBedrock(Model):
32
37
  """
@@ -262,11 +267,16 @@ class AwsBedrock(Model):
262
267
 
263
268
  if message.images:
264
269
  for image in message.images:
265
- if not image.content or not image.format:
266
- raise ValueError("Image content and format are required.")
270
+ if not image.content:
271
+ raise ValueError("Image content is required for AWS Bedrock.")
272
+ if not image.format:
273
+ raise ValueError("Image format is required for AWS Bedrock.")
267
274
 
268
- if image.format not in ["png", "jpeg", "webp", "gif"]:
269
- raise ValueError(f"Unsupported image format: {image.format}")
275
+ if image.format not in BEDROCK_SUPPORTED_IMAGE_FORMATS:
276
+ raise ValueError(
277
+ f"Unsupported image format: {image.format}. "
278
+ f"Supported formats: {BEDROCK_SUPPORTED_IMAGE_FORMATS}"
279
+ )
270
280
 
271
281
  formatted_message["content"].append(
272
282
  {
@@ -283,21 +293,16 @@ class AwsBedrock(Model):
283
293
 
284
294
  if message.videos:
285
295
  for video in message.videos:
286
- if not video.content or not video.format:
287
- raise ValueError("Video content and format are required.")
288
-
289
- if video.format not in [
290
- "mp4",
291
- "mov",
292
- "mkv",
293
- "webm",
294
- "flv",
295
- "mpeg",
296
- "mpg",
297
- "wmv",
298
- "three_gp",
299
- ]:
300
- raise ValueError(f"Unsupported video format: {video.format}")
296
+ if not video.content:
297
+ raise ValueError("Video content is required for AWS Bedrock.")
298
+ if not video.format:
299
+ raise ValueError("Video format is required for AWS Bedrock.")
300
+
301
+ if video.format not in BEDROCK_SUPPORTED_VIDEO_FORMATS:
302
+ raise ValueError(
303
+ f"Unsupported video format: {video.format}. "
304
+ f"Supported formats: {BEDROCK_SUPPORTED_VIDEO_FORMATS}"
305
+ )
301
306
 
302
307
  formatted_message["content"].append(
303
308
  {
@@ -309,8 +314,33 @@ class AwsBedrock(Model):
309
314
  }
310
315
  }
311
316
  )
312
- if message.files is not None and len(message.files) > 0:
313
- log_warning("File input is currently unsupported.")
317
+
318
+ if message.files:
319
+ for file in message.files:
320
+ if not file.content:
321
+ raise ValueError("File content is required for AWS Bedrock document input.")
322
+ if not file.format:
323
+ raise ValueError("File format is required for AWS Bedrock document input.")
324
+ if not file.name:
325
+ raise ValueError("File name is required for AWS Bedrock document input.")
326
+
327
+ if file.format not in BEDROCK_SUPPORTED_FILE_FORMATS:
328
+ raise ValueError(
329
+ f"Unsupported file format: {file.format}. "
330
+ f"Supported formats: {BEDROCK_SUPPORTED_FILE_FORMATS}"
331
+ )
332
+
333
+ formatted_message["content"].append(
334
+ {
335
+ "document": {
336
+ "format": file.format,
337
+ "name": file.name,
338
+ "source": {
339
+ "bytes": file.content,
340
+ },
341
+ }
342
+ }
343
+ )
314
344
 
315
345
  formatted_messages.append(formatted_message)
316
346
  # TODO: Add caching: https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-call.html
@@ -0,0 +1,5 @@
1
+ from agno.models.dashscope.dashscope import DashScope
2
+
3
+ __all__ = [
4
+ "DashScope",
5
+ ]
@@ -0,0 +1,81 @@
1
+ from dataclasses import dataclass
2
+ from os import getenv
3
+ from typing import Any, Dict, List, Optional, Type, Union
4
+
5
+ from pydantic import BaseModel
6
+
7
+ from agno.exceptions import ModelProviderError
8
+ from agno.models.openai.like import OpenAILike
9
+
10
+
11
+ @dataclass
12
+ class DashScope(OpenAILike):
13
+ """
14
+ A class for interacting with Qwen models via DashScope API.
15
+
16
+ Attributes:
17
+ id (str): The model id. Defaults to "qwen-plus".
18
+ name (str): The model name. Defaults to "Qwen".
19
+ provider (str): The provider name. Defaults to "Qwen".
20
+ api_key (Optional[str]): The DashScope API key.
21
+ base_url (str): The base URL. Defaults to "https://dashscope-intl.aliyuncs.com/compatible-mode/v1".
22
+ enable_thinking (Optional[bool]): Enable thinking process (DashScope native parameter). Defaults to None.
23
+ include_thoughts (Optional[bool]): Include thinking process in response (alternative parameter). Defaults to None.
24
+ """
25
+
26
+ id: str = "qwen-plus"
27
+ name: str = "Qwen"
28
+ provider: str = "Dashscope"
29
+
30
+ api_key: Optional[str] = getenv("DASHSCOPE_API_KEY") or getenv("QWEN_API_KEY")
31
+ base_url: str = "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
32
+
33
+ # Thinking parameters
34
+ enable_thinking: Optional[bool] = None
35
+ include_thoughts: Optional[bool] = None
36
+
37
+ # DashScope supports structured outputs
38
+ supports_native_structured_outputs: bool = True
39
+ supports_json_schema_outputs: bool = True
40
+
41
+ def _get_client_params(self) -> Dict[str, Any]:
42
+ if not self.api_key:
43
+ self.api_key = getenv("DASHSCOPE_API_KEY")
44
+ if not self.api_key:
45
+ raise ModelProviderError(
46
+ message="DASHSCOPE_API_KEY not set. Please set the DASHSCOPE_API_KEY environment variable.",
47
+ model_name=self.name,
48
+ model_id=self.id,
49
+ )
50
+
51
+ # Define base client params
52
+ base_params = {
53
+ "api_key": self.api_key,
54
+ "organization": self.organization,
55
+ "base_url": self.base_url,
56
+ "timeout": self.timeout,
57
+ "max_retries": self.max_retries,
58
+ "default_headers": self.default_headers,
59
+ "default_query": self.default_query,
60
+ }
61
+
62
+ # Create client_params dict with non-None values
63
+ client_params = {k: v for k, v in base_params.items() if v is not None}
64
+
65
+ # Add additional client params if provided
66
+ if self.client_params:
67
+ client_params.update(self.client_params)
68
+ return client_params
69
+
70
+ def get_request_params(
71
+ self,
72
+ response_format: Optional[Union[Dict, Type[BaseModel]]] = None,
73
+ tools: Optional[List[Dict[str, Any]]] = None,
74
+ tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
75
+ ) -> Dict[str, Any]:
76
+ params = super().get_request_params(response_format=response_format, tools=tools, tool_choice=tool_choice)
77
+
78
+ should_include_thoughts = self.enable_thinking or self.include_thoughts
79
+ if should_include_thoughts:
80
+ params["extra_body"] = {"enable_thinking": True}
81
+ return params
@@ -694,6 +694,9 @@ class OpenAIChat(Model):
694
694
  if choice_delta.tool_calls is not None:
695
695
  model_response.tool_calls = choice_delta.tool_calls # type: ignore
696
696
 
697
+ if hasattr(choice_delta, "reasoning_content") and choice_delta.reasoning_content is not None:
698
+ model_response.reasoning_content = choice_delta.reasoning_content
699
+
697
700
  # Add audio if present
698
701
  if hasattr(choice_delta, "audio") and choice_delta.audio is not None:
699
702
  try:
@@ -372,6 +372,17 @@ class OpenAIResponses(Model):
372
372
  previous_response_id = msg.provider_data["response_id"]
373
373
  break
374
374
 
375
+ # Build a mapping from function_call id (fc_*) → call_id (call_*) from prior assistant tool_calls
376
+ fc_id_to_call_id: Dict[str, str] = {}
377
+ for msg in messages:
378
+ tool_calls = getattr(msg, "tool_calls", None)
379
+ if tool_calls:
380
+ for tc in tool_calls:
381
+ fc_id = tc.get("id")
382
+ call_id = tc.get("call_id") or fc_id
383
+ if isinstance(fc_id, str) and isinstance(call_id, str):
384
+ fc_id_to_call_id[fc_id] = call_id
385
+
375
386
  for message in messages:
376
387
  if message.role in ["user", "system"]:
377
388
  message_dict: Dict[str, Any] = {
@@ -398,27 +409,32 @@ class OpenAIResponses(Model):
398
409
 
399
410
  formatted_messages.append(message_dict)
400
411
 
412
+ # Tool call result
401
413
  elif message.role == "tool":
402
414
  if message.tool_call_id and message.content is not None:
415
+ function_call_id = message.tool_call_id
416
+ # Normalize: if a fc_* id was provided, translate to its corresponding call_* id
417
+ if isinstance(function_call_id, str) and function_call_id in fc_id_to_call_id:
418
+ call_id_value = fc_id_to_call_id[function_call_id]
419
+ else:
420
+ call_id_value = function_call_id
403
421
  formatted_messages.append(
404
- {"type": "function_call_output", "call_id": message.tool_call_id, "output": message.content}
422
+ {"type": "function_call_output", "call_id": call_id_value, "output": message.content}
405
423
  )
424
+ # Tool Calls
406
425
  elif message.tool_calls is not None and len(message.tool_calls) > 0:
407
- if self._using_reasoning_model():
408
- # Only include prior function_call items when we are NOT using
409
- # previous_response_id. When previous_response_id is present, the
410
- # Responses API already knows about earlier output items (including
411
- # reasoning/function_call), and re-sending them can trigger validation
412
- # errors (e.g., missing required reasoning item).
413
- if previous_response_id is not None:
414
- continue
426
+ # Only skip re-sending prior function_call items when we have a previous_response_id
427
+ # (reasoning models). For non-reasoning models, we must include the prior function_call
428
+ # so the API can associate the subsequent function_call_output by call_id.
429
+ if self._using_reasoning_model() and previous_response_id is not None:
430
+ continue
415
431
 
416
432
  for tool_call in message.tool_calls:
417
433
  formatted_messages.append(
418
434
  {
419
435
  "type": "function_call",
420
- "id": tool_call["id"],
421
- "call_id": tool_call["call_id"],
436
+ "id": tool_call.get("id"),
437
+ "call_id": tool_call.get("call_id", tool_call.get("id")),
422
438
  "name": tool_call["function"]["name"],
423
439
  "arguments": tool_call["function"]["arguments"],
424
440
  "status": "completed",
@@ -719,7 +735,8 @@ class OpenAIResponses(Model):
719
735
  model_response.tool_calls.append(
720
736
  {
721
737
  "id": output.id,
722
- "call_id": output.call_id,
738
+ # Store additional call_id from OpenAI responses
739
+ "call_id": output.call_id or output.id,
723
740
  "type": "function",
724
741
  "function": {
725
742
  "name": output.name,
@@ -809,8 +826,8 @@ class OpenAIResponses(Model):
809
826
  item = stream_event.item
810
827
  if item.type == "function_call":
811
828
  tool_use = {
812
- "id": item.id,
813
- "call_id": item.call_id,
829
+ "id": getattr(item, "id", None),
830
+ "call_id": getattr(item, "call_id", None) or getattr(item, "id", None),
814
831
  "type": "function",
815
832
  "function": {
816
833
  "name": item.name,
@@ -0,0 +1,5 @@
1
+ from agno.models.dashscope.dashscope import DashScope as Qwen
2
+
3
+ __all__ = [
4
+ "Qwen",
5
+ ]
@@ -420,6 +420,9 @@ class RunResponse:
420
420
  messages = data.pop("messages", None)
421
421
  messages = [Message.model_validate(message) for message in messages] if messages else None
422
422
 
423
+ citations = data.pop("citations", None)
424
+ citations = Citations.model_validate(citations) if citations else None
425
+
423
426
  tools = data.pop("tools", [])
424
427
  tools = [ToolExecution.from_dict(tool) for tool in tools] if tools else None
425
428
 
@@ -441,6 +444,7 @@ class RunResponse:
441
444
 
442
445
  return cls(
443
446
  messages=messages,
447
+ citations=citations,
444
448
  tools=tools,
445
449
  images=images,
446
450
  audio=audio,
@@ -416,6 +416,9 @@ class TeamRunResponse:
416
416
  response_audio = data.pop("response_audio", None)
417
417
  response_audio = AudioResponse.model_validate(response_audio) if response_audio else None
418
418
 
419
+ citations = data.pop("citations", None)
420
+ citations = Citations.model_validate(citations) if citations else None
421
+
419
422
  # To make it backwards compatible
420
423
  if "event" in data:
421
424
  data.pop("event")
@@ -428,6 +431,7 @@ class TeamRunResponse:
428
431
  videos=videos,
429
432
  audio=audio,
430
433
  response_audio=response_audio,
434
+ citations=citations,
431
435
  tools=tools,
432
436
  events=events,
433
437
  **data,