agno 1.8.1__tar.gz → 1.8.2__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 (572) hide show
  1. {agno-1.8.1 → agno-1.8.2}/PKG-INFO +1 -1
  2. agno-1.8.2/agno/__init__.py +8 -0
  3. {agno-1.8.1 → agno-1.8.2}/agno/agent/agent.py +2 -2
  4. {agno-1.8.1 → agno-1.8.2}/agno/agent/metrics.py +4 -1
  5. {agno-1.8.1 → agno-1.8.2}/agno/app/agui/utils.py +16 -9
  6. {agno-1.8.1 → agno-1.8.2}/agno/app/discord/client.py +5 -1
  7. {agno-1.8.1 → agno-1.8.2}/agno/app/playground/async_router.py +3 -0
  8. {agno-1.8.1 → agno-1.8.2}/agno/app/playground/schemas.py +3 -0
  9. {agno-1.8.1 → agno-1.8.2}/agno/app/playground/sync_router.py +3 -0
  10. {agno-1.8.1 → agno-1.8.2}/agno/models/anthropic/claude.py +3 -59
  11. {agno-1.8.1 → agno-1.8.2}/agno/models/aws/bedrock.py +3 -7
  12. {agno-1.8.1 → agno-1.8.2}/agno/tools/firecrawl.py +5 -4
  13. {agno-1.8.1 → agno-1.8.2}/agno/tools/linear.py +1 -1
  14. {agno-1.8.1 → agno-1.8.2}/agno/utils/gemini.py +31 -1
  15. {agno-1.8.1 → agno-1.8.2}/agno/utils/models/claude.py +49 -0
  16. {agno-1.8.1 → agno-1.8.2}/agno/workflow/v2/workflow.py +2 -1
  17. {agno-1.8.1 → agno-1.8.2}/agno.egg-info/PKG-INFO +1 -1
  18. {agno-1.8.1 → agno-1.8.2}/pyproject.toml +1 -1
  19. agno-1.8.1/agno/workspace/__init__.py +0 -0
  20. {agno-1.8.1 → agno-1.8.2}/LICENSE +0 -0
  21. {agno-1.8.1 → agno-1.8.2}/README.md +0 -0
  22. {agno-1.8.1 → agno-1.8.2}/agno/agent/__init__.py +0 -0
  23. {agno-1.8.1/agno → agno-1.8.2/agno/api}/__init__.py +0 -0
  24. {agno-1.8.1 → agno-1.8.2}/agno/api/agent.py +0 -0
  25. {agno-1.8.1 → agno-1.8.2}/agno/api/api.py +0 -0
  26. {agno-1.8.1 → agno-1.8.2}/agno/api/app.py +0 -0
  27. {agno-1.8.1 → agno-1.8.2}/agno/api/evals.py +0 -0
  28. {agno-1.8.1 → agno-1.8.2}/agno/api/playground.py +0 -0
  29. {agno-1.8.1 → agno-1.8.2}/agno/api/routes.py +0 -0
  30. {agno-1.8.1/agno/api → agno-1.8.2/agno/api/schemas}/__init__.py +0 -0
  31. {agno-1.8.1 → agno-1.8.2}/agno/api/schemas/agent.py +0 -0
  32. {agno-1.8.1 → agno-1.8.2}/agno/api/schemas/app.py +0 -0
  33. {agno-1.8.1 → agno-1.8.2}/agno/api/schemas/evals.py +0 -0
  34. {agno-1.8.1 → agno-1.8.2}/agno/api/schemas/playground.py +0 -0
  35. {agno-1.8.1 → agno-1.8.2}/agno/api/schemas/response.py +0 -0
  36. {agno-1.8.1 → agno-1.8.2}/agno/api/schemas/team.py +0 -0
  37. {agno-1.8.1 → agno-1.8.2}/agno/api/schemas/user.py +0 -0
  38. {agno-1.8.1 → agno-1.8.2}/agno/api/schemas/workflows.py +0 -0
  39. {agno-1.8.1 → agno-1.8.2}/agno/api/schemas/workspace.py +0 -0
  40. {agno-1.8.1 → agno-1.8.2}/agno/api/team.py +0 -0
  41. {agno-1.8.1 → agno-1.8.2}/agno/api/user.py +0 -0
  42. {agno-1.8.1 → agno-1.8.2}/agno/api/workflows.py +0 -0
  43. {agno-1.8.1 → agno-1.8.2}/agno/api/workspace.py +0 -0
  44. {agno-1.8.1/agno/api/schemas → agno-1.8.2/agno/app}/__init__.py +0 -0
  45. {agno-1.8.1 → agno-1.8.2}/agno/app/agui/__init__.py +0 -0
  46. {agno-1.8.1 → agno-1.8.2}/agno/app/agui/app.py +0 -0
  47. {agno-1.8.1 → agno-1.8.2}/agno/app/agui/async_router.py +0 -0
  48. {agno-1.8.1 → agno-1.8.2}/agno/app/agui/sync_router.py +0 -0
  49. {agno-1.8.1 → agno-1.8.2}/agno/app/base.py +0 -0
  50. {agno-1.8.1 → agno-1.8.2}/agno/app/discord/__init__.py +0 -0
  51. {agno-1.8.1 → agno-1.8.2}/agno/app/fastapi/__init__.py +0 -0
  52. {agno-1.8.1 → agno-1.8.2}/agno/app/fastapi/app.py +0 -0
  53. {agno-1.8.1 → agno-1.8.2}/agno/app/fastapi/async_router.py +0 -0
  54. {agno-1.8.1 → agno-1.8.2}/agno/app/fastapi/sync_router.py +0 -0
  55. {agno-1.8.1/agno/app → agno-1.8.2/agno/app/playground}/__init__.py +0 -0
  56. {agno-1.8.1 → agno-1.8.2}/agno/app/playground/app.py +0 -0
  57. {agno-1.8.1 → agno-1.8.2}/agno/app/playground/deploy.py +0 -0
  58. {agno-1.8.1 → agno-1.8.2}/agno/app/playground/operator.py +0 -0
  59. {agno-1.8.1 → agno-1.8.2}/agno/app/playground/serve.py +0 -0
  60. {agno-1.8.1 → agno-1.8.2}/agno/app/playground/settings.py +0 -0
  61. {agno-1.8.1 → agno-1.8.2}/agno/app/playground/utils.py +0 -0
  62. {agno-1.8.1 → agno-1.8.2}/agno/app/settings.py +0 -0
  63. {agno-1.8.1 → agno-1.8.2}/agno/app/slack/__init__.py +0 -0
  64. {agno-1.8.1 → agno-1.8.2}/agno/app/slack/app.py +0 -0
  65. {agno-1.8.1 → agno-1.8.2}/agno/app/slack/async_router.py +0 -0
  66. {agno-1.8.1 → agno-1.8.2}/agno/app/slack/security.py +0 -0
  67. {agno-1.8.1 → agno-1.8.2}/agno/app/slack/sync_router.py +0 -0
  68. {agno-1.8.1 → agno-1.8.2}/agno/app/utils.py +0 -0
  69. {agno-1.8.1 → agno-1.8.2}/agno/app/whatsapp/__init__.py +0 -0
  70. {agno-1.8.1 → agno-1.8.2}/agno/app/whatsapp/app.py +0 -0
  71. {agno-1.8.1 → agno-1.8.2}/agno/app/whatsapp/async_router.py +0 -0
  72. {agno-1.8.1 → agno-1.8.2}/agno/app/whatsapp/security.py +0 -0
  73. {agno-1.8.1 → agno-1.8.2}/agno/app/whatsapp/sync_router.py +0 -0
  74. {agno-1.8.1/agno/app/playground → agno-1.8.2/agno/cli}/__init__.py +0 -0
  75. {agno-1.8.1 → agno-1.8.2}/agno/cli/auth_server.py +0 -0
  76. {agno-1.8.1 → agno-1.8.2}/agno/cli/config.py +0 -0
  77. {agno-1.8.1 → agno-1.8.2}/agno/cli/console.py +0 -0
  78. {agno-1.8.1 → agno-1.8.2}/agno/cli/credentials.py +0 -0
  79. {agno-1.8.1 → agno-1.8.2}/agno/cli/entrypoint.py +0 -0
  80. {agno-1.8.1 → agno-1.8.2}/agno/cli/operator.py +0 -0
  81. {agno-1.8.1 → agno-1.8.2}/agno/cli/settings.py +0 -0
  82. {agno-1.8.1/agno/cli → agno-1.8.2/agno/cli/ws}/__init__.py +0 -0
  83. {agno-1.8.1 → agno-1.8.2}/agno/cli/ws/ws_cli.py +0 -0
  84. {agno-1.8.1 → agno-1.8.2}/agno/constants.py +0 -0
  85. {agno-1.8.1 → agno-1.8.2}/agno/debug.py +0 -0
  86. {agno-1.8.1 → agno-1.8.2}/agno/document/__init__.py +0 -0
  87. {agno-1.8.1 → agno-1.8.2}/agno/document/base.py +0 -0
  88. {agno-1.8.1/agno/cli/ws → agno-1.8.2/agno/document/chunking}/__init__.py +0 -0
  89. {agno-1.8.1 → agno-1.8.2}/agno/document/chunking/agentic.py +0 -0
  90. {agno-1.8.1 → agno-1.8.2}/agno/document/chunking/document.py +0 -0
  91. {agno-1.8.1 → agno-1.8.2}/agno/document/chunking/fixed.py +0 -0
  92. {agno-1.8.1 → agno-1.8.2}/agno/document/chunking/markdown.py +0 -0
  93. {agno-1.8.1 → agno-1.8.2}/agno/document/chunking/recursive.py +0 -0
  94. {agno-1.8.1 → agno-1.8.2}/agno/document/chunking/row.py +0 -0
  95. {agno-1.8.1 → agno-1.8.2}/agno/document/chunking/semantic.py +0 -0
  96. {agno-1.8.1 → agno-1.8.2}/agno/document/chunking/strategy.py +0 -0
  97. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/__init__.py +0 -0
  98. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/arxiv_reader.py +0 -0
  99. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/base.py +0 -0
  100. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/csv_reader.py +0 -0
  101. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/docx_reader.py +0 -0
  102. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/firecrawl_reader.py +0 -0
  103. {agno-1.8.1/agno/document/chunking → agno-1.8.2/agno/document/reader/gcs}/__init__.py +0 -0
  104. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/gcs/pdf_reader.py +0 -0
  105. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/json_reader.py +0 -0
  106. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/markdown_reader.py +0 -0
  107. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/pdf_reader.py +0 -0
  108. {agno-1.8.1/agno/document/reader/gcs → agno-1.8.2/agno/document/reader/s3}/__init__.py +0 -0
  109. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/s3/pdf_reader.py +0 -0
  110. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/s3/text_reader.py +0 -0
  111. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/text_reader.py +0 -0
  112. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/url_reader.py +0 -0
  113. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/website_reader.py +0 -0
  114. {agno-1.8.1 → agno-1.8.2}/agno/document/reader/youtube_reader.py +0 -0
  115. {agno-1.8.1 → agno-1.8.2}/agno/embedder/__init__.py +0 -0
  116. {agno-1.8.1 → agno-1.8.2}/agno/embedder/aws_bedrock.py +0 -0
  117. {agno-1.8.1 → agno-1.8.2}/agno/embedder/azure_openai.py +0 -0
  118. {agno-1.8.1 → agno-1.8.2}/agno/embedder/base.py +0 -0
  119. {agno-1.8.1 → agno-1.8.2}/agno/embedder/cohere.py +0 -0
  120. {agno-1.8.1 → agno-1.8.2}/agno/embedder/fastembed.py +0 -0
  121. {agno-1.8.1 → agno-1.8.2}/agno/embedder/fireworks.py +0 -0
  122. {agno-1.8.1 → agno-1.8.2}/agno/embedder/google.py +0 -0
  123. {agno-1.8.1 → agno-1.8.2}/agno/embedder/huggingface.py +0 -0
  124. {agno-1.8.1 → agno-1.8.2}/agno/embedder/jina.py +0 -0
  125. {agno-1.8.1 → agno-1.8.2}/agno/embedder/langdb.py +0 -0
  126. {agno-1.8.1 → agno-1.8.2}/agno/embedder/mistral.py +0 -0
  127. {agno-1.8.1 → agno-1.8.2}/agno/embedder/nebius.py +0 -0
  128. {agno-1.8.1 → agno-1.8.2}/agno/embedder/ollama.py +0 -0
  129. {agno-1.8.1 → agno-1.8.2}/agno/embedder/openai.py +0 -0
  130. {agno-1.8.1 → agno-1.8.2}/agno/embedder/sentence_transformer.py +0 -0
  131. {agno-1.8.1 → agno-1.8.2}/agno/embedder/together.py +0 -0
  132. {agno-1.8.1 → agno-1.8.2}/agno/embedder/voyageai.py +0 -0
  133. {agno-1.8.1/agno/document/reader/s3 → agno-1.8.2/agno/eval}/__init__.py +0 -0
  134. {agno-1.8.1 → agno-1.8.2}/agno/eval/accuracy.py +0 -0
  135. {agno-1.8.1 → agno-1.8.2}/agno/eval/performance.py +0 -0
  136. {agno-1.8.1 → agno-1.8.2}/agno/eval/reliability.py +0 -0
  137. {agno-1.8.1 → agno-1.8.2}/agno/eval/utils.py +0 -0
  138. {agno-1.8.1 → agno-1.8.2}/agno/exceptions.py +0 -0
  139. {agno-1.8.1 → agno-1.8.2}/agno/file/__init__.py +0 -0
  140. {agno-1.8.1 → agno-1.8.2}/agno/file/file.py +0 -0
  141. {agno-1.8.1/agno/eval → agno-1.8.2/agno/file/local}/__init__.py +0 -0
  142. {agno-1.8.1 → agno-1.8.2}/agno/file/local/csv.py +0 -0
  143. {agno-1.8.1 → agno-1.8.2}/agno/file/local/txt.py +0 -0
  144. {agno-1.8.1/agno/file/local → agno-1.8.2/agno/infra}/__init__.py +0 -0
  145. {agno-1.8.1 → agno-1.8.2}/agno/infra/app.py +0 -0
  146. {agno-1.8.1 → agno-1.8.2}/agno/infra/base.py +0 -0
  147. {agno-1.8.1 → agno-1.8.2}/agno/infra/context.py +0 -0
  148. {agno-1.8.1 → agno-1.8.2}/agno/infra/db_app.py +0 -0
  149. {agno-1.8.1 → agno-1.8.2}/agno/infra/resource.py +0 -0
  150. {agno-1.8.1 → agno-1.8.2}/agno/infra/resources.py +0 -0
  151. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/__init__.py +0 -0
  152. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/agent.py +0 -0
  153. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/arxiv.py +0 -0
  154. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/combined.py +0 -0
  155. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/csv.py +0 -0
  156. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/csv_url.py +0 -0
  157. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/document.py +0 -0
  158. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/docx.py +0 -0
  159. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/firecrawl.py +0 -0
  160. {agno-1.8.1/agno/infra → agno-1.8.2/agno/knowledge/gcs}/__init__.py +0 -0
  161. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/gcs/base.py +0 -0
  162. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/gcs/pdf.py +0 -0
  163. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/json.py +0 -0
  164. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/langchain.py +0 -0
  165. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/light_rag.py +0 -0
  166. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/llamaindex.py +0 -0
  167. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/markdown.py +0 -0
  168. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/pdf.py +0 -0
  169. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/pdf_bytes.py +0 -0
  170. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/pdf_url.py +0 -0
  171. {agno-1.8.1/agno/knowledge/gcs → agno-1.8.2/agno/knowledge/s3}/__init__.py +0 -0
  172. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/s3/base.py +0 -0
  173. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/s3/pdf.py +0 -0
  174. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/s3/text.py +0 -0
  175. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/text.py +0 -0
  176. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/url.py +0 -0
  177. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/website.py +0 -0
  178. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/wikipedia.py +0 -0
  179. {agno-1.8.1 → agno-1.8.2}/agno/knowledge/youtube.py +0 -0
  180. {agno-1.8.1 → agno-1.8.2}/agno/media.py +0 -0
  181. {agno-1.8.1 → agno-1.8.2}/agno/memory/__init__.py +0 -0
  182. {agno-1.8.1 → agno-1.8.2}/agno/memory/agent.py +0 -0
  183. {agno-1.8.1 → agno-1.8.2}/agno/memory/classifier.py +0 -0
  184. {agno-1.8.1 → agno-1.8.2}/agno/memory/db/__init__.py +0 -0
  185. {agno-1.8.1 → agno-1.8.2}/agno/memory/db/base.py +0 -0
  186. {agno-1.8.1 → agno-1.8.2}/agno/memory/db/mongodb.py +0 -0
  187. {agno-1.8.1 → agno-1.8.2}/agno/memory/db/postgres.py +0 -0
  188. {agno-1.8.1 → agno-1.8.2}/agno/memory/db/sqlite.py +0 -0
  189. {agno-1.8.1 → agno-1.8.2}/agno/memory/manager.py +0 -0
  190. {agno-1.8.1 → agno-1.8.2}/agno/memory/memory.py +0 -0
  191. {agno-1.8.1 → agno-1.8.2}/agno/memory/row.py +0 -0
  192. {agno-1.8.1 → agno-1.8.2}/agno/memory/summarizer.py +0 -0
  193. {agno-1.8.1 → agno-1.8.2}/agno/memory/summary.py +0 -0
  194. {agno-1.8.1 → agno-1.8.2}/agno/memory/team.py +0 -0
  195. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/__init__.py +0 -0
  196. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/db/__init__.py +0 -0
  197. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/db/base.py +0 -0
  198. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/db/firestore.py +0 -0
  199. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/db/mongodb.py +0 -0
  200. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/db/postgres.py +0 -0
  201. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/db/redis.py +0 -0
  202. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/db/schema.py +0 -0
  203. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/db/sqlite.py +0 -0
  204. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/manager.py +0 -0
  205. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/memory.py +0 -0
  206. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/schema.py +0 -0
  207. {agno-1.8.1 → agno-1.8.2}/agno/memory/v2/summarizer.py +0 -0
  208. {agno-1.8.1 → agno-1.8.2}/agno/memory/workflow.py +0 -0
  209. {agno-1.8.1/agno/knowledge/s3 → agno-1.8.2/agno/models}/__init__.py +0 -0
  210. {agno-1.8.1 → agno-1.8.2}/agno/models/aimlapi/__init__.py +0 -0
  211. {agno-1.8.1 → agno-1.8.2}/agno/models/aimlapi/aimlapi.py +0 -0
  212. {agno-1.8.1 → agno-1.8.2}/agno/models/anthropic/__init__.py +0 -0
  213. {agno-1.8.1 → agno-1.8.2}/agno/models/aws/__init__.py +0 -0
  214. {agno-1.8.1 → agno-1.8.2}/agno/models/aws/claude.py +0 -0
  215. {agno-1.8.1 → agno-1.8.2}/agno/models/azure/__init__.py +0 -0
  216. {agno-1.8.1 → agno-1.8.2}/agno/models/azure/ai_foundry.py +0 -0
  217. {agno-1.8.1 → agno-1.8.2}/agno/models/azure/openai_chat.py +0 -0
  218. {agno-1.8.1 → agno-1.8.2}/agno/models/base.py +0 -0
  219. {agno-1.8.1 → agno-1.8.2}/agno/models/cerebras/__init__.py +0 -0
  220. {agno-1.8.1 → agno-1.8.2}/agno/models/cerebras/cerebras.py +0 -0
  221. {agno-1.8.1 → agno-1.8.2}/agno/models/cerebras/cerebras_openai.py +0 -0
  222. {agno-1.8.1 → agno-1.8.2}/agno/models/cohere/__init__.py +0 -0
  223. {agno-1.8.1 → agno-1.8.2}/agno/models/cohere/chat.py +0 -0
  224. {agno-1.8.1 → agno-1.8.2}/agno/models/dashscope/__init__.py +0 -0
  225. {agno-1.8.1 → agno-1.8.2}/agno/models/dashscope/dashscope.py +0 -0
  226. {agno-1.8.1 → agno-1.8.2}/agno/models/deepinfra/__init__.py +0 -0
  227. {agno-1.8.1 → agno-1.8.2}/agno/models/deepinfra/deepinfra.py +0 -0
  228. {agno-1.8.1 → agno-1.8.2}/agno/models/deepseek/__init__.py +0 -0
  229. {agno-1.8.1 → agno-1.8.2}/agno/models/deepseek/deepseek.py +0 -0
  230. {agno-1.8.1 → agno-1.8.2}/agno/models/defaults.py +0 -0
  231. {agno-1.8.1 → agno-1.8.2}/agno/models/fireworks/__init__.py +0 -0
  232. {agno-1.8.1 → agno-1.8.2}/agno/models/fireworks/fireworks.py +0 -0
  233. {agno-1.8.1 → agno-1.8.2}/agno/models/google/__init__.py +0 -0
  234. {agno-1.8.1 → agno-1.8.2}/agno/models/google/gemini.py +0 -0
  235. {agno-1.8.1 → agno-1.8.2}/agno/models/groq/__init__.py +0 -0
  236. {agno-1.8.1 → agno-1.8.2}/agno/models/groq/groq.py +0 -0
  237. {agno-1.8.1 → agno-1.8.2}/agno/models/huggingface/__init__.py +0 -0
  238. {agno-1.8.1 → agno-1.8.2}/agno/models/huggingface/huggingface.py +0 -0
  239. {agno-1.8.1 → agno-1.8.2}/agno/models/ibm/__init__.py +0 -0
  240. {agno-1.8.1 → agno-1.8.2}/agno/models/ibm/watsonx.py +0 -0
  241. {agno-1.8.1 → agno-1.8.2}/agno/models/internlm/__init__.py +0 -0
  242. {agno-1.8.1 → agno-1.8.2}/agno/models/internlm/internlm.py +0 -0
  243. {agno-1.8.1 → agno-1.8.2}/agno/models/langdb/__init__.py +0 -0
  244. {agno-1.8.1 → agno-1.8.2}/agno/models/langdb/langdb.py +0 -0
  245. {agno-1.8.1 → agno-1.8.2}/agno/models/litellm/__init__.py +0 -0
  246. {agno-1.8.1 → agno-1.8.2}/agno/models/litellm/chat.py +0 -0
  247. {agno-1.8.1 → agno-1.8.2}/agno/models/litellm/litellm_openai.py +0 -0
  248. {agno-1.8.1 → agno-1.8.2}/agno/models/lmstudio/__init__.py +0 -0
  249. {agno-1.8.1 → agno-1.8.2}/agno/models/lmstudio/lmstudio.py +0 -0
  250. {agno-1.8.1 → agno-1.8.2}/agno/models/message.py +0 -0
  251. {agno-1.8.1 → agno-1.8.2}/agno/models/meta/__init__.py +0 -0
  252. {agno-1.8.1 → agno-1.8.2}/agno/models/meta/llama.py +0 -0
  253. {agno-1.8.1 → agno-1.8.2}/agno/models/meta/llama_openai.py +0 -0
  254. {agno-1.8.1 → agno-1.8.2}/agno/models/mistral/__init__.py +0 -0
  255. {agno-1.8.1 → agno-1.8.2}/agno/models/mistral/mistral.py +0 -0
  256. {agno-1.8.1 → agno-1.8.2}/agno/models/nebius/__init__.py +0 -0
  257. {agno-1.8.1 → agno-1.8.2}/agno/models/nebius/nebius.py +0 -0
  258. {agno-1.8.1 → agno-1.8.2}/agno/models/nvidia/__init__.py +0 -0
  259. {agno-1.8.1 → agno-1.8.2}/agno/models/nvidia/nvidia.py +0 -0
  260. {agno-1.8.1 → agno-1.8.2}/agno/models/ollama/__init__.py +0 -0
  261. {agno-1.8.1 → agno-1.8.2}/agno/models/ollama/chat.py +0 -0
  262. {agno-1.8.1 → agno-1.8.2}/agno/models/ollama/tools.py +0 -0
  263. {agno-1.8.1 → agno-1.8.2}/agno/models/openai/__init__.py +0 -0
  264. {agno-1.8.1 → agno-1.8.2}/agno/models/openai/chat.py +0 -0
  265. {agno-1.8.1 → agno-1.8.2}/agno/models/openai/like.py +0 -0
  266. {agno-1.8.1 → agno-1.8.2}/agno/models/openai/responses.py +0 -0
  267. {agno-1.8.1 → agno-1.8.2}/agno/models/openrouter/__init__.py +0 -0
  268. {agno-1.8.1 → agno-1.8.2}/agno/models/openrouter/openrouter.py +0 -0
  269. {agno-1.8.1 → agno-1.8.2}/agno/models/perplexity/__init__.py +0 -0
  270. {agno-1.8.1 → agno-1.8.2}/agno/models/perplexity/perplexity.py +0 -0
  271. {agno-1.8.1 → agno-1.8.2}/agno/models/portkey/__init__.py +0 -0
  272. {agno-1.8.1 → agno-1.8.2}/agno/models/portkey/portkey.py +0 -0
  273. {agno-1.8.1 → agno-1.8.2}/agno/models/qwen/__init__.py +0 -0
  274. {agno-1.8.1 → agno-1.8.2}/agno/models/response.py +0 -0
  275. {agno-1.8.1 → agno-1.8.2}/agno/models/sambanova/__init__.py +0 -0
  276. {agno-1.8.1 → agno-1.8.2}/agno/models/sambanova/sambanova.py +0 -0
  277. {agno-1.8.1 → agno-1.8.2}/agno/models/together/__init__.py +0 -0
  278. {agno-1.8.1 → agno-1.8.2}/agno/models/together/together.py +0 -0
  279. {agno-1.8.1 → agno-1.8.2}/agno/models/vercel/__init__.py +0 -0
  280. {agno-1.8.1 → agno-1.8.2}/agno/models/vercel/v0.py +0 -0
  281. {agno-1.8.1 → agno-1.8.2}/agno/models/vllm/__init__.py +0 -0
  282. {agno-1.8.1 → agno-1.8.2}/agno/models/vllm/vllm.py +0 -0
  283. {agno-1.8.1 → agno-1.8.2}/agno/models/xai/__init__.py +0 -0
  284. {agno-1.8.1 → agno-1.8.2}/agno/models/xai/xai.py +0 -0
  285. {agno-1.8.1 → agno-1.8.2}/agno/playground/__init__.py +0 -0
  286. {agno-1.8.1 → agno-1.8.2}/agno/playground/deploy.py +0 -0
  287. {agno-1.8.1 → agno-1.8.2}/agno/playground/playground.py +0 -0
  288. {agno-1.8.1 → agno-1.8.2}/agno/playground/serve.py +0 -0
  289. {agno-1.8.1 → agno-1.8.2}/agno/playground/settings.py +0 -0
  290. {agno-1.8.1 → agno-1.8.2}/agno/py.typed +0 -0
  291. {agno-1.8.1/agno/models → agno-1.8.2/agno/reasoning}/__init__.py +0 -0
  292. {agno-1.8.1 → agno-1.8.2}/agno/reasoning/azure_ai_foundry.py +0 -0
  293. {agno-1.8.1 → agno-1.8.2}/agno/reasoning/deepseek.py +0 -0
  294. {agno-1.8.1 → agno-1.8.2}/agno/reasoning/default.py +0 -0
  295. {agno-1.8.1 → agno-1.8.2}/agno/reasoning/groq.py +0 -0
  296. {agno-1.8.1 → agno-1.8.2}/agno/reasoning/helpers.py +0 -0
  297. {agno-1.8.1 → agno-1.8.2}/agno/reasoning/ollama.py +0 -0
  298. {agno-1.8.1 → agno-1.8.2}/agno/reasoning/openai.py +0 -0
  299. {agno-1.8.1 → agno-1.8.2}/agno/reasoning/step.py +0 -0
  300. {agno-1.8.1/agno/reasoning → agno-1.8.2/agno/reranker}/__init__.py +0 -0
  301. {agno-1.8.1 → agno-1.8.2}/agno/reranker/base.py +0 -0
  302. {agno-1.8.1 → agno-1.8.2}/agno/reranker/cohere.py +0 -0
  303. {agno-1.8.1 → agno-1.8.2}/agno/reranker/infinity.py +0 -0
  304. {agno-1.8.1 → agno-1.8.2}/agno/reranker/sentence_transformer.py +0 -0
  305. {agno-1.8.1/agno/reranker → agno-1.8.2/agno/run}/__init__.py +0 -0
  306. {agno-1.8.1 → agno-1.8.2}/agno/run/base.py +0 -0
  307. {agno-1.8.1 → agno-1.8.2}/agno/run/messages.py +0 -0
  308. {agno-1.8.1 → agno-1.8.2}/agno/run/response.py +0 -0
  309. {agno-1.8.1 → agno-1.8.2}/agno/run/team.py +0 -0
  310. {agno-1.8.1/agno/run → agno-1.8.2/agno/run/v2}/__init__.py +0 -0
  311. {agno-1.8.1 → agno-1.8.2}/agno/run/v2/workflow.py +0 -0
  312. {agno-1.8.1 → agno-1.8.2}/agno/run/workflow.py +0 -0
  313. {agno-1.8.1/agno/run/v2 → agno-1.8.2/agno/storage}/__init__.py +0 -0
  314. {agno-1.8.1/agno/storage → agno-1.8.2/agno/storage/agent}/__init__.py +0 -0
  315. {agno-1.8.1 → agno-1.8.2}/agno/storage/agent/dynamodb.py +0 -0
  316. {agno-1.8.1 → agno-1.8.2}/agno/storage/agent/json.py +0 -0
  317. {agno-1.8.1 → agno-1.8.2}/agno/storage/agent/mongodb.py +0 -0
  318. {agno-1.8.1 → agno-1.8.2}/agno/storage/agent/postgres.py +0 -0
  319. {agno-1.8.1 → agno-1.8.2}/agno/storage/agent/singlestore.py +0 -0
  320. {agno-1.8.1 → agno-1.8.2}/agno/storage/agent/sqlite.py +0 -0
  321. {agno-1.8.1 → agno-1.8.2}/agno/storage/agent/yaml.py +0 -0
  322. {agno-1.8.1 → agno-1.8.2}/agno/storage/base.py +0 -0
  323. {agno-1.8.1 → agno-1.8.2}/agno/storage/dynamodb.py +0 -0
  324. {agno-1.8.1 → agno-1.8.2}/agno/storage/firestore.py +0 -0
  325. {agno-1.8.1 → agno-1.8.2}/agno/storage/gcs_json.py +0 -0
  326. {agno-1.8.1 → agno-1.8.2}/agno/storage/in_memory.py +0 -0
  327. {agno-1.8.1 → agno-1.8.2}/agno/storage/json.py +0 -0
  328. {agno-1.8.1 → agno-1.8.2}/agno/storage/mongodb.py +0 -0
  329. {agno-1.8.1 → agno-1.8.2}/agno/storage/mysql.py +0 -0
  330. {agno-1.8.1 → agno-1.8.2}/agno/storage/postgres.py +0 -0
  331. {agno-1.8.1 → agno-1.8.2}/agno/storage/redis.py +0 -0
  332. {agno-1.8.1 → agno-1.8.2}/agno/storage/session/__init__.py +0 -0
  333. {agno-1.8.1 → agno-1.8.2}/agno/storage/session/agent.py +0 -0
  334. {agno-1.8.1 → agno-1.8.2}/agno/storage/session/team.py +0 -0
  335. {agno-1.8.1 → agno-1.8.2}/agno/storage/session/v2/__init__.py +0 -0
  336. {agno-1.8.1 → agno-1.8.2}/agno/storage/session/v2/workflow.py +0 -0
  337. {agno-1.8.1 → agno-1.8.2}/agno/storage/session/workflow.py +0 -0
  338. {agno-1.8.1 → agno-1.8.2}/agno/storage/singlestore.py +0 -0
  339. {agno-1.8.1 → agno-1.8.2}/agno/storage/sqlite.py +0 -0
  340. {agno-1.8.1/agno/storage/agent → agno-1.8.2/agno/storage/workflow}/__init__.py +0 -0
  341. {agno-1.8.1 → agno-1.8.2}/agno/storage/workflow/mongodb.py +0 -0
  342. {agno-1.8.1 → agno-1.8.2}/agno/storage/workflow/postgres.py +0 -0
  343. {agno-1.8.1 → agno-1.8.2}/agno/storage/workflow/sqlite.py +0 -0
  344. {agno-1.8.1 → agno-1.8.2}/agno/storage/yaml.py +0 -0
  345. {agno-1.8.1 → agno-1.8.2}/agno/team/__init__.py +0 -0
  346. {agno-1.8.1 → agno-1.8.2}/agno/team/team.py +0 -0
  347. {agno-1.8.1 → agno-1.8.2}/agno/tools/__init__.py +0 -0
  348. {agno-1.8.1 → agno-1.8.2}/agno/tools/agentql.py +0 -0
  349. {agno-1.8.1 → agno-1.8.2}/agno/tools/airflow.py +0 -0
  350. {agno-1.8.1 → agno-1.8.2}/agno/tools/api.py +0 -0
  351. {agno-1.8.1 → agno-1.8.2}/agno/tools/apify.py +0 -0
  352. {agno-1.8.1 → agno-1.8.2}/agno/tools/arxiv.py +0 -0
  353. {agno-1.8.1 → agno-1.8.2}/agno/tools/aws_lambda.py +0 -0
  354. {agno-1.8.1 → agno-1.8.2}/agno/tools/aws_ses.py +0 -0
  355. {agno-1.8.1 → agno-1.8.2}/agno/tools/baidusearch.py +0 -0
  356. {agno-1.8.1 → agno-1.8.2}/agno/tools/bitbucket.py +0 -0
  357. {agno-1.8.1 → agno-1.8.2}/agno/tools/brandfetch.py +0 -0
  358. {agno-1.8.1 → agno-1.8.2}/agno/tools/bravesearch.py +0 -0
  359. {agno-1.8.1 → agno-1.8.2}/agno/tools/brightdata.py +0 -0
  360. {agno-1.8.1 → agno-1.8.2}/agno/tools/browserbase.py +0 -0
  361. {agno-1.8.1 → agno-1.8.2}/agno/tools/calcom.py +0 -0
  362. {agno-1.8.1 → agno-1.8.2}/agno/tools/calculator.py +0 -0
  363. {agno-1.8.1 → agno-1.8.2}/agno/tools/cartesia.py +0 -0
  364. {agno-1.8.1 → agno-1.8.2}/agno/tools/clickup_tool.py +0 -0
  365. {agno-1.8.1 → agno-1.8.2}/agno/tools/confluence.py +0 -0
  366. {agno-1.8.1 → agno-1.8.2}/agno/tools/crawl4ai.py +0 -0
  367. {agno-1.8.1 → agno-1.8.2}/agno/tools/csv_toolkit.py +0 -0
  368. {agno-1.8.1 → agno-1.8.2}/agno/tools/dalle.py +0 -0
  369. {agno-1.8.1 → agno-1.8.2}/agno/tools/daytona.py +0 -0
  370. {agno-1.8.1 → agno-1.8.2}/agno/tools/decorator.py +0 -0
  371. {agno-1.8.1 → agno-1.8.2}/agno/tools/desi_vocal.py +0 -0
  372. {agno-1.8.1 → agno-1.8.2}/agno/tools/discord.py +0 -0
  373. {agno-1.8.1 → agno-1.8.2}/agno/tools/docker.py +0 -0
  374. {agno-1.8.1 → agno-1.8.2}/agno/tools/duckdb.py +0 -0
  375. {agno-1.8.1 → agno-1.8.2}/agno/tools/duckduckgo.py +0 -0
  376. {agno-1.8.1 → agno-1.8.2}/agno/tools/e2b.py +0 -0
  377. {agno-1.8.1 → agno-1.8.2}/agno/tools/eleven_labs.py +0 -0
  378. {agno-1.8.1 → agno-1.8.2}/agno/tools/email.py +0 -0
  379. {agno-1.8.1 → agno-1.8.2}/agno/tools/evm.py +0 -0
  380. {agno-1.8.1 → agno-1.8.2}/agno/tools/exa.py +0 -0
  381. {agno-1.8.1 → agno-1.8.2}/agno/tools/fal.py +0 -0
  382. {agno-1.8.1 → agno-1.8.2}/agno/tools/file.py +0 -0
  383. {agno-1.8.1 → agno-1.8.2}/agno/tools/financial_datasets.py +0 -0
  384. {agno-1.8.1 → agno-1.8.2}/agno/tools/function.py +0 -0
  385. {agno-1.8.1 → agno-1.8.2}/agno/tools/giphy.py +0 -0
  386. {agno-1.8.1 → agno-1.8.2}/agno/tools/github.py +0 -0
  387. {agno-1.8.1 → agno-1.8.2}/agno/tools/gmail.py +0 -0
  388. {agno-1.8.1 → agno-1.8.2}/agno/tools/google_bigquery.py +0 -0
  389. {agno-1.8.1 → agno-1.8.2}/agno/tools/google_maps.py +0 -0
  390. {agno-1.8.1 → agno-1.8.2}/agno/tools/googlecalendar.py +0 -0
  391. {agno-1.8.1 → agno-1.8.2}/agno/tools/googlesearch.py +0 -0
  392. {agno-1.8.1 → agno-1.8.2}/agno/tools/googlesheets.py +0 -0
  393. {agno-1.8.1 → agno-1.8.2}/agno/tools/hackernews.py +0 -0
  394. {agno-1.8.1 → agno-1.8.2}/agno/tools/jina.py +0 -0
  395. {agno-1.8.1 → agno-1.8.2}/agno/tools/jira.py +0 -0
  396. {agno-1.8.1 → agno-1.8.2}/agno/tools/knowledge.py +0 -0
  397. {agno-1.8.1 → agno-1.8.2}/agno/tools/linkup.py +0 -0
  398. {agno-1.8.1 → agno-1.8.2}/agno/tools/local_file_system.py +0 -0
  399. {agno-1.8.1 → agno-1.8.2}/agno/tools/lumalab.py +0 -0
  400. {agno-1.8.1 → agno-1.8.2}/agno/tools/mcp.py +0 -0
  401. {agno-1.8.1 → agno-1.8.2}/agno/tools/mem0.py +0 -0
  402. {agno-1.8.1 → agno-1.8.2}/agno/tools/memori.py +0 -0
  403. {agno-1.8.1 → agno-1.8.2}/agno/tools/mlx_transcribe.py +0 -0
  404. {agno-1.8.1/agno/storage/workflow → agno-1.8.2/agno/tools/models}/__init__.py +0 -0
  405. {agno-1.8.1 → agno-1.8.2}/agno/tools/models/azure_openai.py +0 -0
  406. {agno-1.8.1 → agno-1.8.2}/agno/tools/models/gemini.py +0 -0
  407. {agno-1.8.1 → agno-1.8.2}/agno/tools/models/groq.py +0 -0
  408. {agno-1.8.1 → agno-1.8.2}/agno/tools/models/morph.py +0 -0
  409. {agno-1.8.1 → agno-1.8.2}/agno/tools/models/nebius.py +0 -0
  410. {agno-1.8.1 → agno-1.8.2}/agno/tools/models_labs.py +0 -0
  411. {agno-1.8.1 → agno-1.8.2}/agno/tools/moviepy_video.py +0 -0
  412. {agno-1.8.1 → agno-1.8.2}/agno/tools/neo4j.py +0 -0
  413. {agno-1.8.1 → agno-1.8.2}/agno/tools/newspaper.py +0 -0
  414. {agno-1.8.1 → agno-1.8.2}/agno/tools/newspaper4k.py +0 -0
  415. {agno-1.8.1 → agno-1.8.2}/agno/tools/openai.py +0 -0
  416. {agno-1.8.1 → agno-1.8.2}/agno/tools/openbb.py +0 -0
  417. {agno-1.8.1 → agno-1.8.2}/agno/tools/opencv.py +0 -0
  418. {agno-1.8.1 → agno-1.8.2}/agno/tools/openweather.py +0 -0
  419. {agno-1.8.1 → agno-1.8.2}/agno/tools/oxylabs.py +0 -0
  420. {agno-1.8.1 → agno-1.8.2}/agno/tools/pandas.py +0 -0
  421. {agno-1.8.1 → agno-1.8.2}/agno/tools/postgres.py +0 -0
  422. {agno-1.8.1 → agno-1.8.2}/agno/tools/pubmed.py +0 -0
  423. {agno-1.8.1 → agno-1.8.2}/agno/tools/python.py +0 -0
  424. {agno-1.8.1 → agno-1.8.2}/agno/tools/reasoning.py +0 -0
  425. {agno-1.8.1 → agno-1.8.2}/agno/tools/reddit.py +0 -0
  426. {agno-1.8.1 → agno-1.8.2}/agno/tools/replicate.py +0 -0
  427. {agno-1.8.1 → agno-1.8.2}/agno/tools/resend.py +0 -0
  428. {agno-1.8.1 → agno-1.8.2}/agno/tools/scrapegraph.py +0 -0
  429. {agno-1.8.1 → agno-1.8.2}/agno/tools/searxng.py +0 -0
  430. {agno-1.8.1 → agno-1.8.2}/agno/tools/serpapi.py +0 -0
  431. {agno-1.8.1 → agno-1.8.2}/agno/tools/serper.py +0 -0
  432. {agno-1.8.1 → agno-1.8.2}/agno/tools/shell.py +0 -0
  433. {agno-1.8.1 → agno-1.8.2}/agno/tools/slack.py +0 -0
  434. {agno-1.8.1 → agno-1.8.2}/agno/tools/sleep.py +0 -0
  435. {agno-1.8.1 → agno-1.8.2}/agno/tools/spider.py +0 -0
  436. {agno-1.8.1 → agno-1.8.2}/agno/tools/sql.py +0 -0
  437. {agno-1.8.1/agno/tools/models → agno-1.8.2/agno/tools/streamlit}/__init__.py +0 -0
  438. {agno-1.8.1 → agno-1.8.2}/agno/tools/streamlit/components.py +0 -0
  439. {agno-1.8.1 → agno-1.8.2}/agno/tools/tavily.py +0 -0
  440. {agno-1.8.1 → agno-1.8.2}/agno/tools/telegram.py +0 -0
  441. {agno-1.8.1 → agno-1.8.2}/agno/tools/thinking.py +0 -0
  442. {agno-1.8.1 → agno-1.8.2}/agno/tools/todoist.py +0 -0
  443. {agno-1.8.1 → agno-1.8.2}/agno/tools/tool_registry.py +0 -0
  444. {agno-1.8.1 → agno-1.8.2}/agno/tools/toolkit.py +0 -0
  445. {agno-1.8.1 → agno-1.8.2}/agno/tools/trafilatura.py +0 -0
  446. {agno-1.8.1 → agno-1.8.2}/agno/tools/trello.py +0 -0
  447. {agno-1.8.1 → agno-1.8.2}/agno/tools/twilio.py +0 -0
  448. {agno-1.8.1 → agno-1.8.2}/agno/tools/user_control_flow.py +0 -0
  449. {agno-1.8.1 → agno-1.8.2}/agno/tools/valyu.py +0 -0
  450. {agno-1.8.1 → agno-1.8.2}/agno/tools/visualization.py +0 -0
  451. {agno-1.8.1 → agno-1.8.2}/agno/tools/webbrowser.py +0 -0
  452. {agno-1.8.1 → agno-1.8.2}/agno/tools/webex.py +0 -0
  453. {agno-1.8.1 → agno-1.8.2}/agno/tools/website.py +0 -0
  454. {agno-1.8.1 → agno-1.8.2}/agno/tools/webtools.py +0 -0
  455. {agno-1.8.1 → agno-1.8.2}/agno/tools/whatsapp.py +0 -0
  456. {agno-1.8.1 → agno-1.8.2}/agno/tools/wikipedia.py +0 -0
  457. {agno-1.8.1 → agno-1.8.2}/agno/tools/x.py +0 -0
  458. {agno-1.8.1 → agno-1.8.2}/agno/tools/yfinance.py +0 -0
  459. {agno-1.8.1 → agno-1.8.2}/agno/tools/youtube.py +0 -0
  460. {agno-1.8.1 → agno-1.8.2}/agno/tools/zendesk.py +0 -0
  461. {agno-1.8.1 → agno-1.8.2}/agno/tools/zep.py +0 -0
  462. {agno-1.8.1 → agno-1.8.2}/agno/tools/zoom.py +0 -0
  463. {agno-1.8.1/agno/tools/streamlit → agno-1.8.2/agno/utils}/__init__.py +0 -0
  464. {agno-1.8.1 → agno-1.8.2}/agno/utils/audio.py +0 -0
  465. {agno-1.8.1 → agno-1.8.2}/agno/utils/certs.py +0 -0
  466. {agno-1.8.1 → agno-1.8.2}/agno/utils/code_execution.py +0 -0
  467. {agno-1.8.1 → agno-1.8.2}/agno/utils/common.py +0 -0
  468. {agno-1.8.1 → agno-1.8.2}/agno/utils/defaults.py +0 -0
  469. {agno-1.8.1 → agno-1.8.2}/agno/utils/dttm.py +0 -0
  470. {agno-1.8.1 → agno-1.8.2}/agno/utils/enum.py +0 -0
  471. {agno-1.8.1 → agno-1.8.2}/agno/utils/env.py +0 -0
  472. {agno-1.8.1 → agno-1.8.2}/agno/utils/events.py +0 -0
  473. {agno-1.8.1 → agno-1.8.2}/agno/utils/filesystem.py +0 -0
  474. {agno-1.8.1 → agno-1.8.2}/agno/utils/format_str.py +0 -0
  475. {agno-1.8.1 → agno-1.8.2}/agno/utils/functions.py +0 -0
  476. {agno-1.8.1 → agno-1.8.2}/agno/utils/git.py +0 -0
  477. {agno-1.8.1 → agno-1.8.2}/agno/utils/http.py +0 -0
  478. {agno-1.8.1 → agno-1.8.2}/agno/utils/json_io.py +0 -0
  479. {agno-1.8.1 → agno-1.8.2}/agno/utils/json_schema.py +0 -0
  480. {agno-1.8.1 → agno-1.8.2}/agno/utils/load_env.py +0 -0
  481. {agno-1.8.1 → agno-1.8.2}/agno/utils/location.py +0 -0
  482. {agno-1.8.1 → agno-1.8.2}/agno/utils/log.py +0 -0
  483. {agno-1.8.1 → agno-1.8.2}/agno/utils/mcp.py +0 -0
  484. {agno-1.8.1 → agno-1.8.2}/agno/utils/media.py +0 -0
  485. {agno-1.8.1 → agno-1.8.2}/agno/utils/merge_dict.py +0 -0
  486. {agno-1.8.1 → agno-1.8.2}/agno/utils/message.py +0 -0
  487. {agno-1.8.1/agno/utils → agno-1.8.2/agno/utils/models}/__init__.py +0 -0
  488. {agno-1.8.1 → agno-1.8.2}/agno/utils/models/ai_foundry.py +0 -0
  489. {agno-1.8.1 → agno-1.8.2}/agno/utils/models/aws_claude.py +0 -0
  490. {agno-1.8.1 → agno-1.8.2}/agno/utils/models/cohere.py +0 -0
  491. {agno-1.8.1 → agno-1.8.2}/agno/utils/models/llama.py +0 -0
  492. {agno-1.8.1 → agno-1.8.2}/agno/utils/models/mistral.py +0 -0
  493. {agno-1.8.1 → agno-1.8.2}/agno/utils/models/openai_responses.py +0 -0
  494. {agno-1.8.1 → agno-1.8.2}/agno/utils/models/schema_utils.py +0 -0
  495. {agno-1.8.1 → agno-1.8.2}/agno/utils/models/watsonx.py +0 -0
  496. {agno-1.8.1 → agno-1.8.2}/agno/utils/openai.py +0 -0
  497. {agno-1.8.1 → agno-1.8.2}/agno/utils/pickle.py +0 -0
  498. {agno-1.8.1 → agno-1.8.2}/agno/utils/pprint.py +0 -0
  499. {agno-1.8.1 → agno-1.8.2}/agno/utils/prompts.py +0 -0
  500. {agno-1.8.1 → agno-1.8.2}/agno/utils/py_io.py +0 -0
  501. {agno-1.8.1 → agno-1.8.2}/agno/utils/pyproject.py +0 -0
  502. {agno-1.8.1 → agno-1.8.2}/agno/utils/resource_filter.py +0 -0
  503. {agno-1.8.1 → agno-1.8.2}/agno/utils/response.py +0 -0
  504. {agno-1.8.1 → agno-1.8.2}/agno/utils/response_iterator.py +0 -0
  505. {agno-1.8.1 → agno-1.8.2}/agno/utils/safe_formatter.py +0 -0
  506. {agno-1.8.1 → agno-1.8.2}/agno/utils/shell.py +0 -0
  507. {agno-1.8.1 → agno-1.8.2}/agno/utils/string.py +0 -0
  508. {agno-1.8.1 → agno-1.8.2}/agno/utils/timer.py +0 -0
  509. {agno-1.8.1 → agno-1.8.2}/agno/utils/tools.py +0 -0
  510. {agno-1.8.1 → agno-1.8.2}/agno/utils/web.py +0 -0
  511. {agno-1.8.1 → agno-1.8.2}/agno/utils/whatsapp.py +0 -0
  512. {agno-1.8.1 → agno-1.8.2}/agno/utils/yaml_io.py +0 -0
  513. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/__init__.py +0 -0
  514. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/base.py +0 -0
  515. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/cassandra/__init__.py +0 -0
  516. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/cassandra/cassandra.py +0 -0
  517. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  518. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/cassandra/index.py +0 -0
  519. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/chroma/__init__.py +0 -0
  520. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/chroma/chromadb.py +0 -0
  521. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/clickhouse/__init__.py +0 -0
  522. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  523. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/clickhouse/index.py +0 -0
  524. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/couchbase/__init__.py +0 -0
  525. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/couchbase/couchbase.py +0 -0
  526. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/distance.py +0 -0
  527. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/lancedb/__init__.py +0 -0
  528. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/lancedb/lance_db.py +0 -0
  529. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/milvus/__init__.py +0 -0
  530. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/milvus/milvus.py +0 -0
  531. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/mongodb/__init__.py +0 -0
  532. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/mongodb/mongodb.py +0 -0
  533. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/pgvector/__init__.py +0 -0
  534. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/pgvector/index.py +0 -0
  535. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/pgvector/pgvector.py +0 -0
  536. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/pineconedb/__init__.py +0 -0
  537. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  538. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/qdrant/__init__.py +0 -0
  539. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/qdrant/qdrant.py +0 -0
  540. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/search.py +0 -0
  541. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/singlestore/__init__.py +0 -0
  542. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/singlestore/index.py +0 -0
  543. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/singlestore/singlestore.py +0 -0
  544. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/surrealdb/__init__.py +0 -0
  545. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  546. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/upstashdb/__init__.py +0 -0
  547. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  548. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/weaviate/__init__.py +0 -0
  549. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/weaviate/index.py +0 -0
  550. {agno-1.8.1 → agno-1.8.2}/agno/vectordb/weaviate/weaviate.py +0 -0
  551. {agno-1.8.1 → agno-1.8.2}/agno/workflow/__init__.py +0 -0
  552. {agno-1.8.1 → agno-1.8.2}/agno/workflow/v2/__init__.py +0 -0
  553. {agno-1.8.1 → agno-1.8.2}/agno/workflow/v2/condition.py +0 -0
  554. {agno-1.8.1 → agno-1.8.2}/agno/workflow/v2/loop.py +0 -0
  555. {agno-1.8.1 → agno-1.8.2}/agno/workflow/v2/parallel.py +0 -0
  556. {agno-1.8.1 → agno-1.8.2}/agno/workflow/v2/router.py +0 -0
  557. {agno-1.8.1 → agno-1.8.2}/agno/workflow/v2/step.py +0 -0
  558. {agno-1.8.1 → agno-1.8.2}/agno/workflow/v2/steps.py +0 -0
  559. {agno-1.8.1 → agno-1.8.2}/agno/workflow/v2/types.py +0 -0
  560. {agno-1.8.1 → agno-1.8.2}/agno/workflow/workflow.py +0 -0
  561. {agno-1.8.1/agno/utils/models → agno-1.8.2/agno/workspace}/__init__.py +0 -0
  562. {agno-1.8.1 → agno-1.8.2}/agno/workspace/config.py +0 -0
  563. {agno-1.8.1 → agno-1.8.2}/agno/workspace/enums.py +0 -0
  564. {agno-1.8.1 → agno-1.8.2}/agno/workspace/helpers.py +0 -0
  565. {agno-1.8.1 → agno-1.8.2}/agno/workspace/operator.py +0 -0
  566. {agno-1.8.1 → agno-1.8.2}/agno/workspace/settings.py +0 -0
  567. {agno-1.8.1 → agno-1.8.2}/agno.egg-info/SOURCES.txt +0 -0
  568. {agno-1.8.1 → agno-1.8.2}/agno.egg-info/dependency_links.txt +0 -0
  569. {agno-1.8.1 → agno-1.8.2}/agno.egg-info/entry_points.txt +0 -0
  570. {agno-1.8.1 → agno-1.8.2}/agno.egg-info/requires.txt +0 -0
  571. {agno-1.8.1 → agno-1.8.2}/agno.egg-info/top_level.txt +0 -0
  572. {agno-1.8.1 → agno-1.8.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 1.8.1
3
+ Version: 1.8.2
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.
@@ -0,0 +1,8 @@
1
+ from importlib.metadata import PackageNotFoundError, version
2
+
3
+ try:
4
+ __version__ = version("agno")
5
+ except PackageNotFoundError:
6
+ __version__ = "0.0.0"
7
+
8
+ __all__ = ["__version__"]
@@ -1476,7 +1476,7 @@ class Agent:
1476
1476
 
1477
1477
  # Read existing session from storage
1478
1478
  if self.context is not None:
1479
- self.resolve_run_context()
1479
+ await self.aresolve_run_context()
1480
1480
 
1481
1481
  # Prepare arguments for the model
1482
1482
  self.set_default_model()
@@ -2152,7 +2152,7 @@ class Agent:
2152
2152
 
2153
2153
  # Read existing session from storage
2154
2154
  if self.context is not None:
2155
- self.resolve_run_context()
2155
+ await self.aresolve_run_context()
2156
2156
 
2157
2157
  # Prepare arguments for the model
2158
2158
  self.set_default_model()
@@ -69,7 +69,10 @@ class SessionMetrics:
69
69
  # Add values from other
70
70
  if other.prompt_tokens_details:
71
71
  for key, value in other.prompt_tokens_details.items():
72
- result.prompt_tokens_details[key] = result.prompt_tokens_details.get(key, 0) + value
72
+ existing_value = result.prompt_tokens_details.get(key, 0)
73
+ if not isinstance(existing_value, int):
74
+ continue
75
+ result.prompt_tokens_details[key] = existing_value + value
73
76
 
74
77
  # Handle completion_tokens_details similarly
75
78
  if self.completion_tokens_details or other.completion_tokens_details:
@@ -27,6 +27,7 @@ from agno.models.message import Message
27
27
  from agno.run.response import RunEvent, RunResponseContentEvent, RunResponseEvent, RunResponsePausedEvent
28
28
  from agno.run.team import RunResponseContentEvent as TeamRunResponseContentEvent
29
29
  from agno.run.team import TeamRunEvent, TeamRunResponseEvent
30
+ from agno.utils.message import get_text_from_message
30
31
 
31
32
 
32
33
  @dataclass
@@ -106,17 +107,23 @@ def extract_team_response_chunk_content(response: TeamRunResponseContentEvent) -
106
107
  members_content.append(f"Team member: {member_content}")
107
108
  members_response = "\n".join(members_content) if members_content else ""
108
109
 
109
- return str(response.content) + members_response
110
+ # Handle structured outputs
111
+ main_content = get_text_from_message(response.content) if response.content is not None else ""
112
+
113
+ return main_content + members_response
110
114
 
111
115
 
112
116
  def extract_response_chunk_content(response: RunResponseContentEvent) -> str:
113
117
  """Given a response stream chunk, find and extract the content."""
118
+
114
119
  if hasattr(response, "messages") and response.messages: # type: ignore
115
120
  for msg in reversed(response.messages): # type: ignore
116
121
  if hasattr(msg, "role") and msg.role == "assistant" and hasattr(msg, "content") and msg.content:
117
- return str(msg.content)
122
+ # Handle structured outputs from messages
123
+ return get_text_from_message(msg.content)
118
124
 
119
- return str(response.content) if response.content else ""
125
+ # Handle structured outputs
126
+ return get_text_from_message(response.content) if response.content is not None else ""
120
127
 
121
128
 
122
129
  def _create_events_from_chunk(
@@ -202,11 +209,11 @@ def _create_events_from_chunk(
202
209
 
203
210
  # Handle reasoning
204
211
  elif chunk.event == RunEvent.reasoning_started:
205
- step_event = StepStartedEvent(type=EventType.STEP_STARTED, step_name="reasoning")
206
- events_to_emit.append(step_event)
212
+ step_started_event = StepStartedEvent(type=EventType.STEP_STARTED, step_name="reasoning")
213
+ events_to_emit.append(step_started_event)
207
214
  elif chunk.event == RunEvent.reasoning_completed:
208
- step_event = StepFinishedEvent(type=EventType.STEP_FINISHED, step_name="reasoning")
209
- events_to_emit.append(step_event)
215
+ step_finished_event = StepFinishedEvent(type=EventType.STEP_FINISHED, step_name="reasoning")
216
+ events_to_emit.append(step_finished_event)
210
217
 
211
218
  return events_to_emit, message_started
212
219
 
@@ -220,7 +227,7 @@ def _create_completion_events(
220
227
  run_id: str,
221
228
  ) -> List[BaseEvent]:
222
229
  """Create events for run completion."""
223
- events_to_emit = []
230
+ events_to_emit: List[BaseEvent] = []
224
231
 
225
232
  # End remaining active tool calls if needed
226
233
  for tool_call_id in list(event_buffer.active_tool_call_ids):
@@ -271,7 +278,7 @@ def _create_completion_events(
271
278
 
272
279
  def _emit_event_logic(event: BaseEvent, event_buffer: EventBuffer) -> List[BaseEvent]:
273
280
  """Process an event through the buffer and return events to actually emit."""
274
- events_to_emit = []
281
+ events_to_emit: List[BaseEvent] = []
275
282
 
276
283
  if event_buffer.is_blocked():
277
284
  # Handle events related to the current blocking tool call
@@ -8,6 +8,7 @@ from agno.agent.agent import Agent, RunResponse
8
8
  from agno.media import Audio, File, Image, Video
9
9
  from agno.team.team import Team, TeamRunResponse
10
10
  from agno.utils.log import log_info, log_warning
11
+ from agno.utils.message import get_text_from_message
11
12
 
12
13
  try:
13
14
  import discord
@@ -167,7 +168,10 @@ class DiscordClient:
167
168
  thread=thread, message=f"Reasoning: \n{response.reasoning_content}", italics=True
168
169
  )
169
170
 
170
- await self._send_discord_messages(thread=thread, message=str(response.content))
171
+ # Handle structured outputs properly
172
+ content_message = get_text_from_message(response.content) if response.content is not None else ""
173
+
174
+ await self._send_discord_messages(thread=thread, message=content_message)
171
175
 
172
176
  async def _send_discord_messages(self, thread: discord.channel, message: str, italics: bool = False): # type: ignore
173
177
  if len(message) < 1500:
@@ -528,6 +528,7 @@ def get_async_playground_router(
528
528
  session_id=session.session_id,
529
529
  session_name=session.session_data.get("session_name") if session.session_data else None,
530
530
  created_at=session.created_at,
531
+ updated_at=session.updated_at,
531
532
  )
532
533
  )
533
534
  return agent_sessions
@@ -751,6 +752,7 @@ def get_async_playground_router(
751
752
  "session_id": session.session_id,
752
753
  "session_name": session.session_data.get("session_name") if session.session_data else None,
753
754
  "created_at": session.created_at,
755
+ "updated_at": session.updated_at,
754
756
  } # type: ignore
755
757
  )
756
758
  return workflow_sessions
@@ -945,6 +947,7 @@ def get_async_playground_router(
945
947
  session_id=session.session_id,
946
948
  session_name=session.session_data.get("session_name") if session.session_data else None,
947
949
  created_at=session.created_at,
950
+ updated_at=session.updated_at,
948
951
  )
949
952
  )
950
953
  return team_sessions
@@ -91,6 +91,7 @@ class AgentSessionsResponse(BaseModel):
91
91
  session_id: Optional[str] = None
92
92
  session_name: Optional[str] = None
93
93
  created_at: Optional[int] = None
94
+ updated_at: Optional[int] = None
94
95
 
95
96
 
96
97
  class MemoryResponse(BaseModel):
@@ -115,6 +116,7 @@ class WorkflowSessionResponse(BaseModel):
115
116
  session_id: Optional[str] = None
116
117
  session_name: Optional[str] = None
117
118
  created_at: Optional[int] = None
119
+ updated_at: Optional[int] = None
118
120
 
119
121
 
120
122
  class WorkflowGetResponse(BaseModel):
@@ -213,6 +215,7 @@ class TeamSessionResponse(BaseModel):
213
215
  session_id: Optional[str] = None
214
216
  session_name: Optional[str] = None
215
217
  created_at: Optional[int] = None
218
+ updated_at: Optional[int] = None
216
219
 
217
220
 
218
221
  class TeamRenameRequest(BaseModel):
@@ -528,6 +528,7 @@ def get_sync_playground_router(
528
528
  session_id=session.session_id,
529
529
  session_name=session.session_data.get("session_name") if session.session_data else None,
530
530
  created_at=session.created_at,
531
+ updated_at=session.updated_at,
531
532
  )
532
533
  )
533
534
  return agent_sessions
@@ -743,6 +744,7 @@ def get_sync_playground_router(
743
744
  "session_id": session.session_id,
744
745
  "session_name": session.session_data.get("session_name") if session.session_data else None,
745
746
  "created_at": session.created_at,
747
+ "updated_at": session.updated_at,
746
748
  } # type: ignore
747
749
  )
748
750
  return workflow_sessions
@@ -940,6 +942,7 @@ def get_sync_playground_router(
940
942
  session_id=session.session_id,
941
943
  session_name=session.session_data.get("session_name") if session.session_data else None,
942
944
  created_at=session.created_at,
945
+ updated_at=session.updated_at,
943
946
  )
944
947
  )
945
948
  return team_sessions
@@ -11,7 +11,7 @@ from agno.models.base import Model
11
11
  from agno.models.message import Citations, DocumentCitation, Message, UrlCitation
12
12
  from agno.models.response import ModelResponse
13
13
  from agno.utils.log import log_debug, log_error, log_warning
14
- from agno.utils.models.claude import MCPServerConfiguration, format_messages
14
+ from agno.utils.models.claude import MCPServerConfiguration, format_messages, format_tools_for_model
15
15
 
16
16
  try:
17
17
  from anthropic import (
@@ -176,59 +176,12 @@ class Claude(Model):
176
176
  request_kwargs["system"] = [{"text": system_message, "type": "text"}]
177
177
 
178
178
  if tools:
179
- request_kwargs["tools"] = self._format_tools_for_model(tools)
179
+ request_kwargs["tools"] = format_tools_for_model(tools)
180
180
 
181
181
  if request_kwargs:
182
182
  log_debug(f"Calling {self.provider} with request parameters: {request_kwargs}", log_level=2)
183
183
  return request_kwargs
184
184
 
185
- def _format_tools_for_model(self, tools: Optional[List[Dict[str, Any]]] = None) -> Optional[List[Dict[str, Any]]]:
186
- """
187
- Transforms function definitions into a format accepted by the Anthropic API.
188
- """
189
- if not tools:
190
- return None
191
-
192
- parsed_tools: List[Dict[str, Any]] = []
193
- for tool_def in tools:
194
- if tool_def.get("type", "") != "function":
195
- parsed_tools.append(tool_def)
196
- continue
197
-
198
- func_def = tool_def.get("function", {})
199
- parameters: Dict[str, Any] = func_def.get("parameters", {})
200
- properties: Dict[str, Any] = parameters.get("properties", {})
201
- required_params: List[str] = []
202
-
203
- for param_name, param_info in properties.items():
204
- param_type = param_info.get("type", "")
205
- param_type_list: List[str] = [param_type] if isinstance(param_type, str) else param_type or []
206
-
207
- if "null" not in param_type_list:
208
- required_params.append(param_name)
209
-
210
- input_properties: Dict[str, Dict[str, Union[str, List[str]]]] = {}
211
- for param_name, param_info in properties.items():
212
- input_properties[param_name] = {
213
- "description": param_info.get("description", ""),
214
- }
215
- if "type" not in param_info and "anyOf" in param_info:
216
- input_properties[param_name]["anyOf"] = param_info["anyOf"]
217
- else:
218
- input_properties[param_name]["type"] = param_info.get("type", "")
219
-
220
- tool = {
221
- "name": func_def.get("name") or "",
222
- "description": func_def.get("description") or "",
223
- "input_schema": {
224
- "type": parameters.get("type", "object"),
225
- "properties": input_properties,
226
- "required": required_params,
227
- },
228
- }
229
- parsed_tools.append(tool)
230
- return parsed_tools
231
-
232
185
  def invoke(
233
186
  self,
234
187
  messages: List[Message],
@@ -570,16 +523,7 @@ class Claude(Model):
570
523
  }
571
524
 
572
525
  elif isinstance(response, ContentBlockStopEvent):
573
- # Handle completed thinking content
574
- if response.content_block.type == "thinking": # type: ignore
575
- model_response.thinking = response.content_block.thinking # type: ignore
576
- # Store signature if available
577
- if hasattr(response.content_block, "signature"): # type: ignore
578
- model_response.provider_data = {
579
- "signature": response.content_block.signature, # type: ignore
580
- }
581
- # Handle tool calls
582
- elif response.content_block.type == "tool_use": # type: ignore
526
+ if response.content_block.type == "tool_use": # type: ignore
583
527
  tool_use = response.content_block # type: ignore
584
528
  tool_name = tool_use.name
585
529
  tool_input = tool_use.input
@@ -179,14 +179,10 @@ class AwsBedrock(Model):
179
179
  required = []
180
180
 
181
181
  for param_name, param_info in func_def.get("parameters", {}).get("properties", {}).items():
182
- param_type = param_info.get("type")
183
- if isinstance(param_type, list):
184
- param_type = [t for t in param_type if t != "null"][0]
182
+ properties[param_name] = param_info.copy()
185
183
 
186
- properties[param_name] = {
187
- "type": param_type or "string",
188
- "description": param_info.get("description") or "",
189
- }
184
+ if "description" not in properties[param_name]:
185
+ properties[param_name]["description"] = ""
190
186
 
191
187
  if "null" not in (
192
188
  param_info.get("type") if isinstance(param_info.get("type"), list) else [param_info.get("type")]
@@ -6,7 +6,8 @@ from agno.tools import Toolkit
6
6
  from agno.utils.log import logger
7
7
 
8
8
  try:
9
- from firecrawl import FirecrawlApp, ScrapeOptions # type: ignore[attr-defined]
9
+ from firecrawl import FirecrawlApp # type: ignore[attr-defined]
10
+ from firecrawl.types import ScrapeOptions
10
11
  except ImportError:
11
12
  raise ImportError("`firecrawl-py` not installed. Please install using `pip install firecrawl-py`")
12
13
 
@@ -87,7 +88,7 @@ class FirecrawlTools(Toolkit):
87
88
  if self.formats:
88
89
  params["formats"] = self.formats
89
90
 
90
- scrape_result = self.app.scrape_url(url, **params)
91
+ scrape_result = self.app.scrape(url, **params)
91
92
  return json.dumps(scrape_result.model_dump(), cls=CustomJSONEncoder)
92
93
 
93
94
  def crawl_website(self, url: str, limit: Optional[int] = None) -> str:
@@ -108,7 +109,7 @@ class FirecrawlTools(Toolkit):
108
109
 
109
110
  params["poll_interval"] = self.poll_interval
110
111
 
111
- crawl_result = self.app.crawl_url(url, **params)
112
+ crawl_result = self.app.crawl(url, **params)
112
113
  return json.dumps(crawl_result.model_dump(), cls=CustomJSONEncoder)
113
114
 
114
115
  def map_website(self, url: str) -> str:
@@ -118,7 +119,7 @@ class FirecrawlTools(Toolkit):
118
119
  url (str): The URL to map.
119
120
 
120
121
  """
121
- map_result = self.app.map_url(url)
122
+ map_result = self.app.map(url)
122
123
  return json.dumps(map_result.model_dump(), cls=CustomJSONEncoder)
123
124
 
124
125
  def search(self, query: str, limit: Optional[int] = None):
@@ -217,7 +217,7 @@ class LinearTools(Toolkit):
217
217
  """
218
218
 
219
219
  query = """
220
- mutation IssueCreate ($title: String!, $description: String!, $teamId: String!, $projectId: String!, $assigneeId: String!){
220
+ mutation IssueCreate ($title: String!, $description: String!, $teamId: String!, $projectId: String, $assigneeId: String){
221
221
  issueCreate(
222
222
  input: { title: $title, description: $description, teamId: $teamId, projectId: $projectId, assigneeId: $assigneeId}
223
223
  ) {
@@ -175,7 +175,37 @@ def convert_schema(schema_dict: Dict[str, Any], root_schema: Optional[Dict[str,
175
175
 
176
176
  elif schema_type == "array" and "items" in schema_dict:
177
177
  items = convert_schema(schema_dict["items"], root_schema)
178
- return Schema(type=Type.ARRAY, description=description, items=items)
178
+ min_items = schema_dict.get("minItems")
179
+ max_items = schema_dict.get("maxItems")
180
+ return Schema(
181
+ type=Type.ARRAY,
182
+ description=description,
183
+ items=items,
184
+ min_items=min_items,
185
+ max_items=max_items,
186
+ )
187
+
188
+ elif schema_type == "string":
189
+ schema_kwargs = {
190
+ "type": Type.STRING,
191
+ "description": description,
192
+ "default": default,
193
+ }
194
+ if "format" in schema_dict:
195
+ schema_kwargs["format"] = schema_dict["format"]
196
+ return Schema(**schema_kwargs)
197
+
198
+ elif schema_type in ("integer", "number"):
199
+ schema_kwargs = {
200
+ "type": schema_type.upper(),
201
+ "description": description,
202
+ "default": default,
203
+ }
204
+ if "maximum" in schema_dict:
205
+ schema_kwargs["maximum"] = schema_dict["maximum"]
206
+ if "minimum" in schema_dict:
207
+ schema_kwargs["minimum"] = schema_dict["minimum"]
208
+ return Schema(**schema_kwargs)
179
209
 
180
210
  elif schema_type == "" and "anyOf" in schema_dict:
181
211
  any_of = []
@@ -284,3 +284,52 @@ def format_messages(messages: List[Message]) -> Tuple[List[Dict[str, str]], str]
284
284
 
285
285
  chat_messages.append({"role": ROLE_MAP[message.role], "content": content}) # type: ignore
286
286
  return chat_messages, " ".join(system_messages)
287
+
288
+
289
+ def format_tools_for_model(tools: Optional[List[Dict[str, Any]]] = None) -> Optional[List[Dict[str, Any]]]:
290
+ """
291
+ Transforms function definitions into a format accepted by the Anthropic API.
292
+ """
293
+ if not tools:
294
+ return None
295
+
296
+ parsed_tools: List[Dict[str, Any]] = []
297
+ for tool_def in tools:
298
+ if tool_def.get("type", "") != "function":
299
+ parsed_tools.append(tool_def)
300
+ continue
301
+
302
+ func_def = tool_def.get("function", {})
303
+ parameters: Dict[str, Any] = func_def.get("parameters", {})
304
+ properties: Dict[str, Any] = parameters.get("properties", {})
305
+ required: List[str] = parameters.get("required", [])
306
+ required_params: List[str] = required
307
+
308
+ if not required_params:
309
+ for param_name, param_info in properties.items():
310
+ param_type = param_info.get("type", "")
311
+ param_type_list: List[str] = [param_type] if isinstance(param_type, str) else param_type or []
312
+
313
+ if "null" not in param_type_list:
314
+ required_params.append(param_name)
315
+
316
+ input_properties: Dict[str, Any] = {}
317
+ for param_name, param_info in properties.items():
318
+ # Preserve the complete schema structure for complex types
319
+ input_properties[param_name] = param_info.copy()
320
+
321
+ # Ensure description is present (default to empty if missing)
322
+ if "description" not in input_properties[param_name]:
323
+ input_properties[param_name]["description"] = ""
324
+
325
+ tool = {
326
+ "name": func_def.get("name") or "",
327
+ "description": func_def.get("description") or "",
328
+ "input_schema": {
329
+ "type": parameters.get("type", "object"),
330
+ "properties": input_properties,
331
+ "required": required_params,
332
+ },
333
+ }
334
+ parsed_tools.append(tool)
335
+ return parsed_tools
@@ -3273,7 +3273,8 @@ class Workflow:
3273
3273
  """Update executor with workflow_session_state"""
3274
3274
  if self.workflow_session_state is not None:
3275
3275
  # Update session_state with workflow_session_state
3276
- executor.workflow_session_state = self.workflow_session_state
3276
+ if hasattr(executor, "workflow_session_state"):
3277
+ executor.workflow_session_state = self.workflow_session_state
3277
3278
 
3278
3279
  def _save_run_to_storage(self, workflow_run_response: WorkflowRunResponse) -> None:
3279
3280
  """Helper method to save workflow run response to storage"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 1.8.1
3
+ Version: 1.8.2
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.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agno"
3
- version = "1.8.1"
3
+ version = "1.8.2"
4
4
  description = "Agno: a lightweight library for building Multi-Agent Systems"
5
5
  requires-python = ">=3.7,<4"
6
6
  readme = "README.md"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes