agno 2.2.0__tar.gz → 2.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (569) hide show
  1. {agno-2.2.0 → agno-2.2.1}/PKG-INFO +4 -1
  2. {agno-2.2.0 → agno-2.2.1}/agno/agent/agent.py +16 -1
  3. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/knowledge.py +11 -0
  4. agno-2.2.1/agno/knowledge/reader/pptx_reader.py +101 -0
  5. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/reader_factory.py +14 -0
  6. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/types.py +1 -0
  7. {agno-2.2.0 → agno-2.2.1}/agno/models/base.py +4 -4
  8. {agno-2.2.0 → agno-2.2.1}/agno/run/agent.py +5 -0
  9. {agno-2.2.0 → agno-2.2.1}/agno/run/team.py +5 -0
  10. {agno-2.2.0 → agno-2.2.1}/agno/run/workflow.py +15 -5
  11. {agno-2.2.0 → agno-2.2.1}/agno/team/team.py +29 -9
  12. {agno-2.2.0 → agno-2.2.1}/agno/utils/message.py +60 -0
  13. {agno-2.2.0 → agno-2.2.1}/agno/workflow/workflow.py +86 -1
  14. {agno-2.2.0 → agno-2.2.1}/agno.egg-info/PKG-INFO +4 -1
  15. {agno-2.2.0 → agno-2.2.1}/agno.egg-info/SOURCES.txt +1 -0
  16. {agno-2.2.0 → agno-2.2.1}/agno.egg-info/requires.txt +4 -0
  17. {agno-2.2.0 → agno-2.2.1}/pyproject.toml +3 -1
  18. {agno-2.2.0 → agno-2.2.1}/LICENSE +0 -0
  19. {agno-2.2.0 → agno-2.2.1}/README.md +0 -0
  20. {agno-2.2.0 → agno-2.2.1}/agno/__init__.py +0 -0
  21. {agno-2.2.0 → agno-2.2.1}/agno/agent/__init__.py +0 -0
  22. {agno-2.2.0 → agno-2.2.1}/agno/api/__init__.py +0 -0
  23. {agno-2.2.0 → agno-2.2.1}/agno/api/agent.py +0 -0
  24. {agno-2.2.0 → agno-2.2.1}/agno/api/api.py +0 -0
  25. {agno-2.2.0 → agno-2.2.1}/agno/api/evals.py +0 -0
  26. {agno-2.2.0 → agno-2.2.1}/agno/api/os.py +0 -0
  27. {agno-2.2.0 → agno-2.2.1}/agno/api/routes.py +0 -0
  28. {agno-2.2.0 → agno-2.2.1}/agno/api/schemas/__init__.py +0 -0
  29. {agno-2.2.0 → agno-2.2.1}/agno/api/schemas/agent.py +0 -0
  30. {agno-2.2.0 → agno-2.2.1}/agno/api/schemas/evals.py +0 -0
  31. {agno-2.2.0 → agno-2.2.1}/agno/api/schemas/os.py +0 -0
  32. {agno-2.2.0 → agno-2.2.1}/agno/api/schemas/response.py +0 -0
  33. {agno-2.2.0 → agno-2.2.1}/agno/api/schemas/team.py +0 -0
  34. {agno-2.2.0 → agno-2.2.1}/agno/api/schemas/utils.py +0 -0
  35. {agno-2.2.0 → agno-2.2.1}/agno/api/schemas/workflows.py +0 -0
  36. {agno-2.2.0 → agno-2.2.1}/agno/api/settings.py +0 -0
  37. {agno-2.2.0 → agno-2.2.1}/agno/api/team.py +0 -0
  38. {agno-2.2.0 → agno-2.2.1}/agno/api/workflow.py +0 -0
  39. {agno-2.2.0 → agno-2.2.1}/agno/cloud/aws/base.py +0 -0
  40. {agno-2.2.0 → agno-2.2.1}/agno/cloud/aws/s3/__init__.py +0 -0
  41. {agno-2.2.0 → agno-2.2.1}/agno/cloud/aws/s3/api_client.py +0 -0
  42. {agno-2.2.0 → agno-2.2.1}/agno/cloud/aws/s3/bucket.py +0 -0
  43. {agno-2.2.0 → agno-2.2.1}/agno/cloud/aws/s3/object.py +0 -0
  44. {agno-2.2.0 → agno-2.2.1}/agno/culture/__init__.py +0 -0
  45. {agno-2.2.0 → agno-2.2.1}/agno/culture/manager.py +0 -0
  46. {agno-2.2.0 → agno-2.2.1}/agno/db/__init__.py +0 -0
  47. {agno-2.2.0 → agno-2.2.1}/agno/db/async_postgres/__init__.py +0 -0
  48. {agno-2.2.0 → agno-2.2.1}/agno/db/async_postgres/async_postgres.py +0 -0
  49. {agno-2.2.0 → agno-2.2.1}/agno/db/async_postgres/schemas.py +0 -0
  50. {agno-2.2.0 → agno-2.2.1}/agno/db/async_postgres/utils.py +0 -0
  51. {agno-2.2.0 → agno-2.2.1}/agno/db/base.py +0 -0
  52. {agno-2.2.0 → agno-2.2.1}/agno/db/dynamo/__init__.py +0 -0
  53. {agno-2.2.0 → agno-2.2.1}/agno/db/dynamo/dynamo.py +0 -0
  54. {agno-2.2.0 → agno-2.2.1}/agno/db/dynamo/schemas.py +0 -0
  55. {agno-2.2.0 → agno-2.2.1}/agno/db/dynamo/utils.py +0 -0
  56. {agno-2.2.0 → agno-2.2.1}/agno/db/firestore/__init__.py +0 -0
  57. {agno-2.2.0 → agno-2.2.1}/agno/db/firestore/firestore.py +0 -0
  58. {agno-2.2.0 → agno-2.2.1}/agno/db/firestore/schemas.py +0 -0
  59. {agno-2.2.0 → agno-2.2.1}/agno/db/firestore/utils.py +0 -0
  60. {agno-2.2.0 → agno-2.2.1}/agno/db/gcs_json/__init__.py +0 -0
  61. {agno-2.2.0 → agno-2.2.1}/agno/db/gcs_json/gcs_json_db.py +0 -0
  62. {agno-2.2.0 → agno-2.2.1}/agno/db/gcs_json/utils.py +0 -0
  63. {agno-2.2.0 → agno-2.2.1}/agno/db/in_memory/__init__.py +0 -0
  64. {agno-2.2.0 → agno-2.2.1}/agno/db/in_memory/in_memory_db.py +0 -0
  65. {agno-2.2.0 → agno-2.2.1}/agno/db/in_memory/utils.py +0 -0
  66. {agno-2.2.0 → agno-2.2.1}/agno/db/json/__init__.py +0 -0
  67. {agno-2.2.0 → agno-2.2.1}/agno/db/json/json_db.py +0 -0
  68. {agno-2.2.0 → agno-2.2.1}/agno/db/json/utils.py +0 -0
  69. {agno-2.2.0 → agno-2.2.1}/agno/db/migrations/__init__.py +0 -0
  70. {agno-2.2.0 → agno-2.2.1}/agno/db/migrations/v1_to_v2.py +0 -0
  71. {agno-2.2.0 → agno-2.2.1}/agno/db/mongo/__init__.py +0 -0
  72. {agno-2.2.0 → agno-2.2.1}/agno/db/mongo/mongo.py +0 -0
  73. {agno-2.2.0 → agno-2.2.1}/agno/db/mongo/schemas.py +0 -0
  74. {agno-2.2.0 → agno-2.2.1}/agno/db/mongo/utils.py +0 -0
  75. {agno-2.2.0 → agno-2.2.1}/agno/db/mysql/__init__.py +0 -0
  76. {agno-2.2.0 → agno-2.2.1}/agno/db/mysql/mysql.py +0 -0
  77. {agno-2.2.0 → agno-2.2.1}/agno/db/mysql/schemas.py +0 -0
  78. {agno-2.2.0 → agno-2.2.1}/agno/db/mysql/utils.py +0 -0
  79. {agno-2.2.0 → agno-2.2.1}/agno/db/postgres/__init__.py +0 -0
  80. {agno-2.2.0 → agno-2.2.1}/agno/db/postgres/postgres.py +0 -0
  81. {agno-2.2.0 → agno-2.2.1}/agno/db/postgres/schemas.py +0 -0
  82. {agno-2.2.0 → agno-2.2.1}/agno/db/postgres/utils.py +0 -0
  83. {agno-2.2.0 → agno-2.2.1}/agno/db/redis/__init__.py +0 -0
  84. {agno-2.2.0 → agno-2.2.1}/agno/db/redis/redis.py +0 -0
  85. {agno-2.2.0 → agno-2.2.1}/agno/db/redis/schemas.py +0 -0
  86. {agno-2.2.0 → agno-2.2.1}/agno/db/redis/utils.py +0 -0
  87. {agno-2.2.0 → agno-2.2.1}/agno/db/schemas/__init__.py +0 -0
  88. {agno-2.2.0 → agno-2.2.1}/agno/db/schemas/culture.py +0 -0
  89. {agno-2.2.0 → agno-2.2.1}/agno/db/schemas/evals.py +0 -0
  90. {agno-2.2.0 → agno-2.2.1}/agno/db/schemas/knowledge.py +0 -0
  91. {agno-2.2.0 → agno-2.2.1}/agno/db/schemas/memory.py +0 -0
  92. {agno-2.2.0 → agno-2.2.1}/agno/db/schemas/metrics.py +0 -0
  93. {agno-2.2.0 → agno-2.2.1}/agno/db/singlestore/__init__.py +0 -0
  94. {agno-2.2.0 → agno-2.2.1}/agno/db/singlestore/schemas.py +0 -0
  95. {agno-2.2.0 → agno-2.2.1}/agno/db/singlestore/singlestore.py +0 -0
  96. {agno-2.2.0 → agno-2.2.1}/agno/db/singlestore/utils.py +0 -0
  97. {agno-2.2.0 → agno-2.2.1}/agno/db/sqlite/__init__.py +0 -0
  98. {agno-2.2.0 → agno-2.2.1}/agno/db/sqlite/schemas.py +0 -0
  99. {agno-2.2.0 → agno-2.2.1}/agno/db/sqlite/sqlite.py +0 -0
  100. {agno-2.2.0 → agno-2.2.1}/agno/db/sqlite/utils.py +0 -0
  101. {agno-2.2.0 → agno-2.2.1}/agno/db/surrealdb/__init__.py +0 -0
  102. {agno-2.2.0 → agno-2.2.1}/agno/db/surrealdb/metrics.py +0 -0
  103. {agno-2.2.0 → agno-2.2.1}/agno/db/surrealdb/models.py +0 -0
  104. {agno-2.2.0 → agno-2.2.1}/agno/db/surrealdb/queries.py +0 -0
  105. {agno-2.2.0 → agno-2.2.1}/agno/db/surrealdb/surrealdb.py +0 -0
  106. {agno-2.2.0 → agno-2.2.1}/agno/db/surrealdb/utils.py +0 -0
  107. {agno-2.2.0 → agno-2.2.1}/agno/db/utils.py +0 -0
  108. {agno-2.2.0 → agno-2.2.1}/agno/debug.py +0 -0
  109. {agno-2.2.0 → agno-2.2.1}/agno/eval/__init__.py +0 -0
  110. {agno-2.2.0 → agno-2.2.1}/agno/eval/accuracy.py +0 -0
  111. {agno-2.2.0 → agno-2.2.1}/agno/eval/performance.py +0 -0
  112. {agno-2.2.0 → agno-2.2.1}/agno/eval/reliability.py +0 -0
  113. {agno-2.2.0 → agno-2.2.1}/agno/eval/utils.py +0 -0
  114. {agno-2.2.0 → agno-2.2.1}/agno/exceptions.py +0 -0
  115. {agno-2.2.0 → agno-2.2.1}/agno/guardrails/__init__.py +0 -0
  116. {agno-2.2.0 → agno-2.2.1}/agno/guardrails/base.py +0 -0
  117. {agno-2.2.0 → agno-2.2.1}/agno/guardrails/openai.py +0 -0
  118. {agno-2.2.0 → agno-2.2.1}/agno/guardrails/pii.py +0 -0
  119. {agno-2.2.0 → agno-2.2.1}/agno/guardrails/prompt_injection.py +0 -0
  120. {agno-2.2.0 → agno-2.2.1}/agno/integrations/__init__.py +0 -0
  121. {agno-2.2.0 → agno-2.2.1}/agno/integrations/discord/__init__.py +0 -0
  122. {agno-2.2.0 → agno-2.2.1}/agno/integrations/discord/client.py +0 -0
  123. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/__init__.py +0 -0
  124. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/chunking/__init__.py +0 -0
  125. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/chunking/agentic.py +0 -0
  126. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/chunking/document.py +0 -0
  127. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/chunking/fixed.py +0 -0
  128. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/chunking/markdown.py +0 -0
  129. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/chunking/recursive.py +0 -0
  130. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/chunking/row.py +0 -0
  131. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/chunking/semantic.py +0 -0
  132. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/chunking/strategy.py +0 -0
  133. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/content.py +0 -0
  134. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/document/__init__.py +0 -0
  135. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/document/base.py +0 -0
  136. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/__init__.py +0 -0
  137. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  138. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/azure_openai.py +0 -0
  139. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/base.py +0 -0
  140. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/cohere.py +0 -0
  141. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/fastembed.py +0 -0
  142. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/fireworks.py +0 -0
  143. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/google.py +0 -0
  144. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/huggingface.py +0 -0
  145. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/jina.py +0 -0
  146. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/langdb.py +0 -0
  147. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/mistral.py +0 -0
  148. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/nebius.py +0 -0
  149. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/ollama.py +0 -0
  150. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/openai.py +0 -0
  151. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  152. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/together.py +0 -0
  153. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/embedder/voyageai.py +0 -0
  154. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/__init__.py +0 -0
  155. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/arxiv_reader.py +0 -0
  156. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/base.py +0 -0
  157. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/csv_reader.py +0 -0
  158. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/docx_reader.py +0 -0
  159. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
  160. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  161. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/json_reader.py +0 -0
  162. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/markdown_reader.py +0 -0
  163. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/pdf_reader.py +0 -0
  164. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/s3_reader.py +0 -0
  165. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/text_reader.py +0 -0
  166. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/web_search_reader.py +0 -0
  167. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/website_reader.py +0 -0
  168. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  169. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reader/youtube_reader.py +0 -0
  170. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/remote_content/__init__.py +0 -0
  171. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/remote_content/remote_content.py +0 -0
  172. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reranker/__init__.py +0 -0
  173. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reranker/base.py +0 -0
  174. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reranker/cohere.py +0 -0
  175. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reranker/infinity.py +0 -0
  176. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  177. {agno-2.2.0 → agno-2.2.1}/agno/knowledge/utils.py +0 -0
  178. {agno-2.2.0 → agno-2.2.1}/agno/media.py +0 -0
  179. {agno-2.2.0 → agno-2.2.1}/agno/memory/__init__.py +0 -0
  180. {agno-2.2.0 → agno-2.2.1}/agno/memory/manager.py +0 -0
  181. {agno-2.2.0 → agno-2.2.1}/agno/models/__init__.py +0 -0
  182. {agno-2.2.0 → agno-2.2.1}/agno/models/aimlapi/__init__.py +0 -0
  183. {agno-2.2.0 → agno-2.2.1}/agno/models/aimlapi/aimlapi.py +0 -0
  184. {agno-2.2.0 → agno-2.2.1}/agno/models/anthropic/__init__.py +0 -0
  185. {agno-2.2.0 → agno-2.2.1}/agno/models/anthropic/claude.py +0 -0
  186. {agno-2.2.0 → agno-2.2.1}/agno/models/aws/__init__.py +0 -0
  187. {agno-2.2.0 → agno-2.2.1}/agno/models/aws/bedrock.py +0 -0
  188. {agno-2.2.0 → agno-2.2.1}/agno/models/aws/claude.py +0 -0
  189. {agno-2.2.0 → agno-2.2.1}/agno/models/azure/__init__.py +0 -0
  190. {agno-2.2.0 → agno-2.2.1}/agno/models/azure/ai_foundry.py +0 -0
  191. {agno-2.2.0 → agno-2.2.1}/agno/models/azure/openai_chat.py +0 -0
  192. {agno-2.2.0 → agno-2.2.1}/agno/models/cerebras/__init__.py +0 -0
  193. {agno-2.2.0 → agno-2.2.1}/agno/models/cerebras/cerebras.py +0 -0
  194. {agno-2.2.0 → agno-2.2.1}/agno/models/cerebras/cerebras_openai.py +0 -0
  195. {agno-2.2.0 → agno-2.2.1}/agno/models/cohere/__init__.py +0 -0
  196. {agno-2.2.0 → agno-2.2.1}/agno/models/cohere/chat.py +0 -0
  197. {agno-2.2.0 → agno-2.2.1}/agno/models/cometapi/__init__.py +0 -0
  198. {agno-2.2.0 → agno-2.2.1}/agno/models/cometapi/cometapi.py +0 -0
  199. {agno-2.2.0 → agno-2.2.1}/agno/models/dashscope/__init__.py +0 -0
  200. {agno-2.2.0 → agno-2.2.1}/agno/models/dashscope/dashscope.py +0 -0
  201. {agno-2.2.0 → agno-2.2.1}/agno/models/deepinfra/__init__.py +0 -0
  202. {agno-2.2.0 → agno-2.2.1}/agno/models/deepinfra/deepinfra.py +0 -0
  203. {agno-2.2.0 → agno-2.2.1}/agno/models/deepseek/__init__.py +0 -0
  204. {agno-2.2.0 → agno-2.2.1}/agno/models/deepseek/deepseek.py +0 -0
  205. {agno-2.2.0 → agno-2.2.1}/agno/models/defaults.py +0 -0
  206. {agno-2.2.0 → agno-2.2.1}/agno/models/fireworks/__init__.py +0 -0
  207. {agno-2.2.0 → agno-2.2.1}/agno/models/fireworks/fireworks.py +0 -0
  208. {agno-2.2.0 → agno-2.2.1}/agno/models/google/__init__.py +0 -0
  209. {agno-2.2.0 → agno-2.2.1}/agno/models/google/gemini.py +0 -0
  210. {agno-2.2.0 → agno-2.2.1}/agno/models/groq/__init__.py +0 -0
  211. {agno-2.2.0 → agno-2.2.1}/agno/models/groq/groq.py +0 -0
  212. {agno-2.2.0 → agno-2.2.1}/agno/models/huggingface/__init__.py +0 -0
  213. {agno-2.2.0 → agno-2.2.1}/agno/models/huggingface/huggingface.py +0 -0
  214. {agno-2.2.0 → agno-2.2.1}/agno/models/ibm/__init__.py +0 -0
  215. {agno-2.2.0 → agno-2.2.1}/agno/models/ibm/watsonx.py +0 -0
  216. {agno-2.2.0 → agno-2.2.1}/agno/models/internlm/__init__.py +0 -0
  217. {agno-2.2.0 → agno-2.2.1}/agno/models/internlm/internlm.py +0 -0
  218. {agno-2.2.0 → agno-2.2.1}/agno/models/langdb/__init__.py +0 -0
  219. {agno-2.2.0 → agno-2.2.1}/agno/models/langdb/langdb.py +0 -0
  220. {agno-2.2.0 → agno-2.2.1}/agno/models/litellm/__init__.py +0 -0
  221. {agno-2.2.0 → agno-2.2.1}/agno/models/litellm/chat.py +0 -0
  222. {agno-2.2.0 → agno-2.2.1}/agno/models/litellm/litellm_openai.py +0 -0
  223. {agno-2.2.0 → agno-2.2.1}/agno/models/llama_cpp/__init__.py +0 -0
  224. {agno-2.2.0 → agno-2.2.1}/agno/models/llama_cpp/llama_cpp.py +0 -0
  225. {agno-2.2.0 → agno-2.2.1}/agno/models/lmstudio/__init__.py +0 -0
  226. {agno-2.2.0 → agno-2.2.1}/agno/models/lmstudio/lmstudio.py +0 -0
  227. {agno-2.2.0 → agno-2.2.1}/agno/models/message.py +0 -0
  228. {agno-2.2.0 → agno-2.2.1}/agno/models/meta/__init__.py +0 -0
  229. {agno-2.2.0 → agno-2.2.1}/agno/models/meta/llama.py +0 -0
  230. {agno-2.2.0 → agno-2.2.1}/agno/models/meta/llama_openai.py +0 -0
  231. {agno-2.2.0 → agno-2.2.1}/agno/models/metrics.py +0 -0
  232. {agno-2.2.0 → agno-2.2.1}/agno/models/mistral/__init__.py +0 -0
  233. {agno-2.2.0 → agno-2.2.1}/agno/models/mistral/mistral.py +0 -0
  234. {agno-2.2.0 → agno-2.2.1}/agno/models/nebius/__init__.py +0 -0
  235. {agno-2.2.0 → agno-2.2.1}/agno/models/nebius/nebius.py +0 -0
  236. {agno-2.2.0 → agno-2.2.1}/agno/models/nexus/__init__.py +0 -0
  237. {agno-2.2.0 → agno-2.2.1}/agno/models/nexus/nexus.py +0 -0
  238. {agno-2.2.0 → agno-2.2.1}/agno/models/nvidia/__init__.py +0 -0
  239. {agno-2.2.0 → agno-2.2.1}/agno/models/nvidia/nvidia.py +0 -0
  240. {agno-2.2.0 → agno-2.2.1}/agno/models/ollama/__init__.py +0 -0
  241. {agno-2.2.0 → agno-2.2.1}/agno/models/ollama/chat.py +0 -0
  242. {agno-2.2.0 → agno-2.2.1}/agno/models/openai/__init__.py +0 -0
  243. {agno-2.2.0 → agno-2.2.1}/agno/models/openai/chat.py +0 -0
  244. {agno-2.2.0 → agno-2.2.1}/agno/models/openai/like.py +0 -0
  245. {agno-2.2.0 → agno-2.2.1}/agno/models/openai/responses.py +0 -0
  246. {agno-2.2.0 → agno-2.2.1}/agno/models/openrouter/__init__.py +0 -0
  247. {agno-2.2.0 → agno-2.2.1}/agno/models/openrouter/openrouter.py +0 -0
  248. {agno-2.2.0 → agno-2.2.1}/agno/models/perplexity/__init__.py +0 -0
  249. {agno-2.2.0 → agno-2.2.1}/agno/models/perplexity/perplexity.py +0 -0
  250. {agno-2.2.0 → agno-2.2.1}/agno/models/portkey/__init__.py +0 -0
  251. {agno-2.2.0 → agno-2.2.1}/agno/models/portkey/portkey.py +0 -0
  252. {agno-2.2.0 → agno-2.2.1}/agno/models/requesty/__init__.py +0 -0
  253. {agno-2.2.0 → agno-2.2.1}/agno/models/requesty/requesty.py +0 -0
  254. {agno-2.2.0 → agno-2.2.1}/agno/models/response.py +0 -0
  255. {agno-2.2.0 → agno-2.2.1}/agno/models/sambanova/__init__.py +0 -0
  256. {agno-2.2.0 → agno-2.2.1}/agno/models/sambanova/sambanova.py +0 -0
  257. {agno-2.2.0 → agno-2.2.1}/agno/models/siliconflow/__init__.py +0 -0
  258. {agno-2.2.0 → agno-2.2.1}/agno/models/siliconflow/siliconflow.py +0 -0
  259. {agno-2.2.0 → agno-2.2.1}/agno/models/together/__init__.py +0 -0
  260. {agno-2.2.0 → agno-2.2.1}/agno/models/together/together.py +0 -0
  261. {agno-2.2.0 → agno-2.2.1}/agno/models/utils.py +0 -0
  262. {agno-2.2.0 → agno-2.2.1}/agno/models/vercel/__init__.py +0 -0
  263. {agno-2.2.0 → agno-2.2.1}/agno/models/vercel/v0.py +0 -0
  264. {agno-2.2.0 → agno-2.2.1}/agno/models/vertexai/__init__.py +0 -0
  265. {agno-2.2.0 → agno-2.2.1}/agno/models/vertexai/claude.py +0 -0
  266. {agno-2.2.0 → agno-2.2.1}/agno/models/vllm/__init__.py +0 -0
  267. {agno-2.2.0 → agno-2.2.1}/agno/models/vllm/vllm.py +0 -0
  268. {agno-2.2.0 → agno-2.2.1}/agno/models/xai/__init__.py +0 -0
  269. {agno-2.2.0 → agno-2.2.1}/agno/models/xai/xai.py +0 -0
  270. {agno-2.2.0 → agno-2.2.1}/agno/os/__init__.py +0 -0
  271. {agno-2.2.0 → agno-2.2.1}/agno/os/app.py +0 -0
  272. {agno-2.2.0 → agno-2.2.1}/agno/os/auth.py +0 -0
  273. {agno-2.2.0 → agno-2.2.1}/agno/os/config.py +0 -0
  274. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/__init__.py +0 -0
  275. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/a2a/__init__.py +0 -0
  276. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/a2a/a2a.py +0 -0
  277. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/a2a/router.py +0 -0
  278. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/a2a/utils.py +0 -0
  279. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/agui/__init__.py +0 -0
  280. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/agui/agui.py +0 -0
  281. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/agui/router.py +0 -0
  282. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/agui/utils.py +0 -0
  283. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/base.py +0 -0
  284. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/slack/__init__.py +0 -0
  285. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/slack/router.py +0 -0
  286. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/slack/security.py +0 -0
  287. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/slack/slack.py +0 -0
  288. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  289. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/whatsapp/router.py +0 -0
  290. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/whatsapp/security.py +0 -0
  291. {agno-2.2.0 → agno-2.2.1}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  292. {agno-2.2.0 → agno-2.2.1}/agno/os/mcp.py +0 -0
  293. {agno-2.2.0 → agno-2.2.1}/agno/os/middleware/__init__.py +0 -0
  294. {agno-2.2.0 → agno-2.2.1}/agno/os/middleware/jwt.py +0 -0
  295. {agno-2.2.0 → agno-2.2.1}/agno/os/router.py +0 -0
  296. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/__init__.py +0 -0
  297. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/evals/__init__.py +0 -0
  298. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/evals/evals.py +0 -0
  299. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/evals/schemas.py +0 -0
  300. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/evals/utils.py +0 -0
  301. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/health.py +0 -0
  302. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/home.py +0 -0
  303. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/knowledge/__init__.py +0 -0
  304. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/knowledge/knowledge.py +0 -0
  305. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/knowledge/schemas.py +0 -0
  306. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/memory/__init__.py +0 -0
  307. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/memory/memory.py +0 -0
  308. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/memory/schemas.py +0 -0
  309. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/metrics/__init__.py +0 -0
  310. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/metrics/metrics.py +0 -0
  311. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/metrics/schemas.py +0 -0
  312. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/session/__init__.py +0 -0
  313. {agno-2.2.0 → agno-2.2.1}/agno/os/routers/session/session.py +0 -0
  314. {agno-2.2.0 → agno-2.2.1}/agno/os/schema.py +0 -0
  315. {agno-2.2.0 → agno-2.2.1}/agno/os/settings.py +0 -0
  316. {agno-2.2.0 → agno-2.2.1}/agno/os/utils.py +0 -0
  317. {agno-2.2.0 → agno-2.2.1}/agno/py.typed +0 -0
  318. {agno-2.2.0 → agno-2.2.1}/agno/reasoning/__init__.py +0 -0
  319. {agno-2.2.0 → agno-2.2.1}/agno/reasoning/anthropic.py +0 -0
  320. {agno-2.2.0 → agno-2.2.1}/agno/reasoning/azure_ai_foundry.py +0 -0
  321. {agno-2.2.0 → agno-2.2.1}/agno/reasoning/deepseek.py +0 -0
  322. {agno-2.2.0 → agno-2.2.1}/agno/reasoning/default.py +0 -0
  323. {agno-2.2.0 → agno-2.2.1}/agno/reasoning/gemini.py +0 -0
  324. {agno-2.2.0 → agno-2.2.1}/agno/reasoning/groq.py +0 -0
  325. {agno-2.2.0 → agno-2.2.1}/agno/reasoning/helpers.py +0 -0
  326. {agno-2.2.0 → agno-2.2.1}/agno/reasoning/ollama.py +0 -0
  327. {agno-2.2.0 → agno-2.2.1}/agno/reasoning/openai.py +0 -0
  328. {agno-2.2.0 → agno-2.2.1}/agno/reasoning/step.py +0 -0
  329. {agno-2.2.0 → agno-2.2.1}/agno/reasoning/vertexai.py +0 -0
  330. {agno-2.2.0 → agno-2.2.1}/agno/run/__init__.py +0 -0
  331. {agno-2.2.0 → agno-2.2.1}/agno/run/base.py +0 -0
  332. {agno-2.2.0 → agno-2.2.1}/agno/run/cancel.py +0 -0
  333. {agno-2.2.0 → agno-2.2.1}/agno/run/messages.py +0 -0
  334. {agno-2.2.0 → agno-2.2.1}/agno/session/__init__.py +0 -0
  335. {agno-2.2.0 → agno-2.2.1}/agno/session/agent.py +0 -0
  336. {agno-2.2.0 → agno-2.2.1}/agno/session/summary.py +0 -0
  337. {agno-2.2.0 → agno-2.2.1}/agno/session/team.py +0 -0
  338. {agno-2.2.0 → agno-2.2.1}/agno/session/workflow.py +0 -0
  339. {agno-2.2.0 → agno-2.2.1}/agno/team/__init__.py +0 -0
  340. {agno-2.2.0 → agno-2.2.1}/agno/tools/__init__.py +0 -0
  341. {agno-2.2.0 → agno-2.2.1}/agno/tools/agentql.py +0 -0
  342. {agno-2.2.0 → agno-2.2.1}/agno/tools/airflow.py +0 -0
  343. {agno-2.2.0 → agno-2.2.1}/agno/tools/api.py +0 -0
  344. {agno-2.2.0 → agno-2.2.1}/agno/tools/apify.py +0 -0
  345. {agno-2.2.0 → agno-2.2.1}/agno/tools/arxiv.py +0 -0
  346. {agno-2.2.0 → agno-2.2.1}/agno/tools/aws_lambda.py +0 -0
  347. {agno-2.2.0 → agno-2.2.1}/agno/tools/aws_ses.py +0 -0
  348. {agno-2.2.0 → agno-2.2.1}/agno/tools/baidusearch.py +0 -0
  349. {agno-2.2.0 → agno-2.2.1}/agno/tools/bitbucket.py +0 -0
  350. {agno-2.2.0 → agno-2.2.1}/agno/tools/brandfetch.py +0 -0
  351. {agno-2.2.0 → agno-2.2.1}/agno/tools/bravesearch.py +0 -0
  352. {agno-2.2.0 → agno-2.2.1}/agno/tools/brightdata.py +0 -0
  353. {agno-2.2.0 → agno-2.2.1}/agno/tools/browserbase.py +0 -0
  354. {agno-2.2.0 → agno-2.2.1}/agno/tools/calcom.py +0 -0
  355. {agno-2.2.0 → agno-2.2.1}/agno/tools/calculator.py +0 -0
  356. {agno-2.2.0 → agno-2.2.1}/agno/tools/cartesia.py +0 -0
  357. {agno-2.2.0 → agno-2.2.1}/agno/tools/clickup.py +0 -0
  358. {agno-2.2.0 → agno-2.2.1}/agno/tools/confluence.py +0 -0
  359. {agno-2.2.0 → agno-2.2.1}/agno/tools/crawl4ai.py +0 -0
  360. {agno-2.2.0 → agno-2.2.1}/agno/tools/csv_toolkit.py +0 -0
  361. {agno-2.2.0 → agno-2.2.1}/agno/tools/dalle.py +0 -0
  362. {agno-2.2.0 → agno-2.2.1}/agno/tools/daytona.py +0 -0
  363. {agno-2.2.0 → agno-2.2.1}/agno/tools/decorator.py +0 -0
  364. {agno-2.2.0 → agno-2.2.1}/agno/tools/desi_vocal.py +0 -0
  365. {agno-2.2.0 → agno-2.2.1}/agno/tools/discord.py +0 -0
  366. {agno-2.2.0 → agno-2.2.1}/agno/tools/docker.py +0 -0
  367. {agno-2.2.0 → agno-2.2.1}/agno/tools/duckdb.py +0 -0
  368. {agno-2.2.0 → agno-2.2.1}/agno/tools/duckduckgo.py +0 -0
  369. {agno-2.2.0 → agno-2.2.1}/agno/tools/e2b.py +0 -0
  370. {agno-2.2.0 → agno-2.2.1}/agno/tools/eleven_labs.py +0 -0
  371. {agno-2.2.0 → agno-2.2.1}/agno/tools/email.py +0 -0
  372. {agno-2.2.0 → agno-2.2.1}/agno/tools/evm.py +0 -0
  373. {agno-2.2.0 → agno-2.2.1}/agno/tools/exa.py +0 -0
  374. {agno-2.2.0 → agno-2.2.1}/agno/tools/fal.py +0 -0
  375. {agno-2.2.0 → agno-2.2.1}/agno/tools/file.py +0 -0
  376. {agno-2.2.0 → agno-2.2.1}/agno/tools/file_generation.py +0 -0
  377. {agno-2.2.0 → agno-2.2.1}/agno/tools/financial_datasets.py +0 -0
  378. {agno-2.2.0 → agno-2.2.1}/agno/tools/firecrawl.py +0 -0
  379. {agno-2.2.0 → agno-2.2.1}/agno/tools/function.py +0 -0
  380. {agno-2.2.0 → agno-2.2.1}/agno/tools/giphy.py +0 -0
  381. {agno-2.2.0 → agno-2.2.1}/agno/tools/github.py +0 -0
  382. {agno-2.2.0 → agno-2.2.1}/agno/tools/gmail.py +0 -0
  383. {agno-2.2.0 → agno-2.2.1}/agno/tools/google_bigquery.py +0 -0
  384. {agno-2.2.0 → agno-2.2.1}/agno/tools/google_drive.py +0 -0
  385. {agno-2.2.0 → agno-2.2.1}/agno/tools/google_maps.py +0 -0
  386. {agno-2.2.0 → agno-2.2.1}/agno/tools/googlecalendar.py +0 -0
  387. {agno-2.2.0 → agno-2.2.1}/agno/tools/googlesearch.py +0 -0
  388. {agno-2.2.0 → agno-2.2.1}/agno/tools/googlesheets.py +0 -0
  389. {agno-2.2.0 → agno-2.2.1}/agno/tools/hackernews.py +0 -0
  390. {agno-2.2.0 → agno-2.2.1}/agno/tools/jina.py +0 -0
  391. {agno-2.2.0 → agno-2.2.1}/agno/tools/jira.py +0 -0
  392. {agno-2.2.0 → agno-2.2.1}/agno/tools/knowledge.py +0 -0
  393. {agno-2.2.0 → agno-2.2.1}/agno/tools/linear.py +0 -0
  394. {agno-2.2.0 → agno-2.2.1}/agno/tools/linkup.py +0 -0
  395. {agno-2.2.0 → agno-2.2.1}/agno/tools/local_file_system.py +0 -0
  396. {agno-2.2.0 → agno-2.2.1}/agno/tools/lumalab.py +0 -0
  397. {agno-2.2.0 → agno-2.2.1}/agno/tools/mcp.py +0 -0
  398. {agno-2.2.0 → agno-2.2.1}/agno/tools/mcp_toolbox.py +0 -0
  399. {agno-2.2.0 → agno-2.2.1}/agno/tools/mem0.py +0 -0
  400. {agno-2.2.0 → agno-2.2.1}/agno/tools/memori.py +0 -0
  401. {agno-2.2.0 → agno-2.2.1}/agno/tools/memory.py +0 -0
  402. {agno-2.2.0 → agno-2.2.1}/agno/tools/mlx_transcribe.py +0 -0
  403. {agno-2.2.0 → agno-2.2.1}/agno/tools/models/__init__.py +0 -0
  404. {agno-2.2.0 → agno-2.2.1}/agno/tools/models/azure_openai.py +0 -0
  405. {agno-2.2.0 → agno-2.2.1}/agno/tools/models/gemini.py +0 -0
  406. {agno-2.2.0 → agno-2.2.1}/agno/tools/models/groq.py +0 -0
  407. {agno-2.2.0 → agno-2.2.1}/agno/tools/models/morph.py +0 -0
  408. {agno-2.2.0 → agno-2.2.1}/agno/tools/models/nebius.py +0 -0
  409. {agno-2.2.0 → agno-2.2.1}/agno/tools/models_labs.py +0 -0
  410. {agno-2.2.0 → agno-2.2.1}/agno/tools/moviepy_video.py +0 -0
  411. {agno-2.2.0 → agno-2.2.1}/agno/tools/neo4j.py +0 -0
  412. {agno-2.2.0 → agno-2.2.1}/agno/tools/newspaper.py +0 -0
  413. {agno-2.2.0 → agno-2.2.1}/agno/tools/newspaper4k.py +0 -0
  414. {agno-2.2.0 → agno-2.2.1}/agno/tools/openai.py +0 -0
  415. {agno-2.2.0 → agno-2.2.1}/agno/tools/openbb.py +0 -0
  416. {agno-2.2.0 → agno-2.2.1}/agno/tools/opencv.py +0 -0
  417. {agno-2.2.0 → agno-2.2.1}/agno/tools/openweather.py +0 -0
  418. {agno-2.2.0 → agno-2.2.1}/agno/tools/oxylabs.py +0 -0
  419. {agno-2.2.0 → agno-2.2.1}/agno/tools/pandas.py +0 -0
  420. {agno-2.2.0 → agno-2.2.1}/agno/tools/postgres.py +0 -0
  421. {agno-2.2.0 → agno-2.2.1}/agno/tools/pubmed.py +0 -0
  422. {agno-2.2.0 → agno-2.2.1}/agno/tools/python.py +0 -0
  423. {agno-2.2.0 → agno-2.2.1}/agno/tools/reasoning.py +0 -0
  424. {agno-2.2.0 → agno-2.2.1}/agno/tools/reddit.py +0 -0
  425. {agno-2.2.0 → agno-2.2.1}/agno/tools/replicate.py +0 -0
  426. {agno-2.2.0 → agno-2.2.1}/agno/tools/resend.py +0 -0
  427. {agno-2.2.0 → agno-2.2.1}/agno/tools/scrapegraph.py +0 -0
  428. {agno-2.2.0 → agno-2.2.1}/agno/tools/searxng.py +0 -0
  429. {agno-2.2.0 → agno-2.2.1}/agno/tools/serpapi.py +0 -0
  430. {agno-2.2.0 → agno-2.2.1}/agno/tools/serper.py +0 -0
  431. {agno-2.2.0 → agno-2.2.1}/agno/tools/shell.py +0 -0
  432. {agno-2.2.0 → agno-2.2.1}/agno/tools/slack.py +0 -0
  433. {agno-2.2.0 → agno-2.2.1}/agno/tools/sleep.py +0 -0
  434. {agno-2.2.0 → agno-2.2.1}/agno/tools/spider.py +0 -0
  435. {agno-2.2.0 → agno-2.2.1}/agno/tools/sql.py +0 -0
  436. {agno-2.2.0 → agno-2.2.1}/agno/tools/streamlit/__init__.py +0 -0
  437. {agno-2.2.0 → agno-2.2.1}/agno/tools/streamlit/components.py +0 -0
  438. {agno-2.2.0 → agno-2.2.1}/agno/tools/tavily.py +0 -0
  439. {agno-2.2.0 → agno-2.2.1}/agno/tools/telegram.py +0 -0
  440. {agno-2.2.0 → agno-2.2.1}/agno/tools/todoist.py +0 -0
  441. {agno-2.2.0 → agno-2.2.1}/agno/tools/tool_registry.py +0 -0
  442. {agno-2.2.0 → agno-2.2.1}/agno/tools/toolkit.py +0 -0
  443. {agno-2.2.0 → agno-2.2.1}/agno/tools/trafilatura.py +0 -0
  444. {agno-2.2.0 → agno-2.2.1}/agno/tools/trello.py +0 -0
  445. {agno-2.2.0 → agno-2.2.1}/agno/tools/twilio.py +0 -0
  446. {agno-2.2.0 → agno-2.2.1}/agno/tools/user_control_flow.py +0 -0
  447. {agno-2.2.0 → agno-2.2.1}/agno/tools/valyu.py +0 -0
  448. {agno-2.2.0 → agno-2.2.1}/agno/tools/visualization.py +0 -0
  449. {agno-2.2.0 → agno-2.2.1}/agno/tools/webbrowser.py +0 -0
  450. {agno-2.2.0 → agno-2.2.1}/agno/tools/webex.py +0 -0
  451. {agno-2.2.0 → agno-2.2.1}/agno/tools/website.py +0 -0
  452. {agno-2.2.0 → agno-2.2.1}/agno/tools/webtools.py +0 -0
  453. {agno-2.2.0 → agno-2.2.1}/agno/tools/whatsapp.py +0 -0
  454. {agno-2.2.0 → agno-2.2.1}/agno/tools/wikipedia.py +0 -0
  455. {agno-2.2.0 → agno-2.2.1}/agno/tools/workflow.py +0 -0
  456. {agno-2.2.0 → agno-2.2.1}/agno/tools/x.py +0 -0
  457. {agno-2.2.0 → agno-2.2.1}/agno/tools/yfinance.py +0 -0
  458. {agno-2.2.0 → agno-2.2.1}/agno/tools/youtube.py +0 -0
  459. {agno-2.2.0 → agno-2.2.1}/agno/tools/zendesk.py +0 -0
  460. {agno-2.2.0 → agno-2.2.1}/agno/tools/zep.py +0 -0
  461. {agno-2.2.0 → agno-2.2.1}/agno/tools/zoom.py +0 -0
  462. {agno-2.2.0 → agno-2.2.1}/agno/utils/__init__.py +0 -0
  463. {agno-2.2.0 → agno-2.2.1}/agno/utils/agent.py +0 -0
  464. {agno-2.2.0 → agno-2.2.1}/agno/utils/audio.py +0 -0
  465. {agno-2.2.0 → agno-2.2.1}/agno/utils/certs.py +0 -0
  466. {agno-2.2.0 → agno-2.2.1}/agno/utils/code_execution.py +0 -0
  467. {agno-2.2.0 → agno-2.2.1}/agno/utils/common.py +0 -0
  468. {agno-2.2.0 → agno-2.2.1}/agno/utils/dttm.py +0 -0
  469. {agno-2.2.0 → agno-2.2.1}/agno/utils/enum.py +0 -0
  470. {agno-2.2.0 → agno-2.2.1}/agno/utils/env.py +0 -0
  471. {agno-2.2.0 → agno-2.2.1}/agno/utils/events.py +0 -0
  472. {agno-2.2.0 → agno-2.2.1}/agno/utils/format_str.py +0 -0
  473. {agno-2.2.0 → agno-2.2.1}/agno/utils/functions.py +0 -0
  474. {agno-2.2.0 → agno-2.2.1}/agno/utils/gemini.py +0 -0
  475. {agno-2.2.0 → agno-2.2.1}/agno/utils/hooks.py +0 -0
  476. {agno-2.2.0 → agno-2.2.1}/agno/utils/http.py +0 -0
  477. {agno-2.2.0 → agno-2.2.1}/agno/utils/json_schema.py +0 -0
  478. {agno-2.2.0 → agno-2.2.1}/agno/utils/knowledge.py +0 -0
  479. {agno-2.2.0 → agno-2.2.1}/agno/utils/location.py +0 -0
  480. {agno-2.2.0 → agno-2.2.1}/agno/utils/log.py +0 -0
  481. {agno-2.2.0 → agno-2.2.1}/agno/utils/mcp.py +0 -0
  482. {agno-2.2.0 → agno-2.2.1}/agno/utils/media.py +0 -0
  483. {agno-2.2.0 → agno-2.2.1}/agno/utils/merge_dict.py +0 -0
  484. {agno-2.2.0 → agno-2.2.1}/agno/utils/models/__init__.py +0 -0
  485. {agno-2.2.0 → agno-2.2.1}/agno/utils/models/ai_foundry.py +0 -0
  486. {agno-2.2.0 → agno-2.2.1}/agno/utils/models/claude.py +0 -0
  487. {agno-2.2.0 → agno-2.2.1}/agno/utils/models/cohere.py +0 -0
  488. {agno-2.2.0 → agno-2.2.1}/agno/utils/models/llama.py +0 -0
  489. {agno-2.2.0 → agno-2.2.1}/agno/utils/models/mistral.py +0 -0
  490. {agno-2.2.0 → agno-2.2.1}/agno/utils/models/openai_responses.py +0 -0
  491. {agno-2.2.0 → agno-2.2.1}/agno/utils/models/schema_utils.py +0 -0
  492. {agno-2.2.0 → agno-2.2.1}/agno/utils/models/watsonx.py +0 -0
  493. {agno-2.2.0 → agno-2.2.1}/agno/utils/openai.py +0 -0
  494. {agno-2.2.0 → agno-2.2.1}/agno/utils/pickle.py +0 -0
  495. {agno-2.2.0 → agno-2.2.1}/agno/utils/pprint.py +0 -0
  496. {agno-2.2.0 → agno-2.2.1}/agno/utils/print_response/__init__.py +0 -0
  497. {agno-2.2.0 → agno-2.2.1}/agno/utils/print_response/agent.py +0 -0
  498. {agno-2.2.0 → agno-2.2.1}/agno/utils/print_response/team.py +0 -0
  499. {agno-2.2.0 → agno-2.2.1}/agno/utils/print_response/workflow.py +0 -0
  500. {agno-2.2.0 → agno-2.2.1}/agno/utils/prompts.py +0 -0
  501. {agno-2.2.0 → agno-2.2.1}/agno/utils/reasoning.py +0 -0
  502. {agno-2.2.0 → agno-2.2.1}/agno/utils/response.py +0 -0
  503. {agno-2.2.0 → agno-2.2.1}/agno/utils/response_iterator.py +0 -0
  504. {agno-2.2.0 → agno-2.2.1}/agno/utils/safe_formatter.py +0 -0
  505. {agno-2.2.0 → agno-2.2.1}/agno/utils/serialize.py +0 -0
  506. {agno-2.2.0 → agno-2.2.1}/agno/utils/shell.py +0 -0
  507. {agno-2.2.0 → agno-2.2.1}/agno/utils/streamlit.py +0 -0
  508. {agno-2.2.0 → agno-2.2.1}/agno/utils/string.py +0 -0
  509. {agno-2.2.0 → agno-2.2.1}/agno/utils/team.py +0 -0
  510. {agno-2.2.0 → agno-2.2.1}/agno/utils/timer.py +0 -0
  511. {agno-2.2.0 → agno-2.2.1}/agno/utils/tools.py +0 -0
  512. {agno-2.2.0 → agno-2.2.1}/agno/utils/web.py +0 -0
  513. {agno-2.2.0 → agno-2.2.1}/agno/utils/whatsapp.py +0 -0
  514. {agno-2.2.0 → agno-2.2.1}/agno/utils/yaml_io.py +0 -0
  515. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/__init__.py +0 -0
  516. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/base.py +0 -0
  517. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/cassandra/__init__.py +0 -0
  518. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/cassandra/cassandra.py +0 -0
  519. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  520. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/cassandra/index.py +0 -0
  521. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/chroma/__init__.py +0 -0
  522. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/chroma/chromadb.py +0 -0
  523. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/clickhouse/__init__.py +0 -0
  524. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  525. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/clickhouse/index.py +0 -0
  526. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/couchbase/__init__.py +0 -0
  527. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/couchbase/couchbase.py +0 -0
  528. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/distance.py +0 -0
  529. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/lancedb/__init__.py +0 -0
  530. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/lancedb/lance_db.py +0 -0
  531. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/langchaindb/__init__.py +0 -0
  532. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  533. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/lightrag/__init__.py +0 -0
  534. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/lightrag/lightrag.py +0 -0
  535. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/llamaindex/__init__.py +0 -0
  536. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  537. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/milvus/__init__.py +0 -0
  538. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/milvus/milvus.py +0 -0
  539. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/mongodb/__init__.py +0 -0
  540. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/mongodb/mongodb.py +0 -0
  541. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/pgvector/__init__.py +0 -0
  542. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/pgvector/index.py +0 -0
  543. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/pgvector/pgvector.py +0 -0
  544. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/pineconedb/__init__.py +0 -0
  545. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  546. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/qdrant/__init__.py +0 -0
  547. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/qdrant/qdrant.py +0 -0
  548. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/search.py +0 -0
  549. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/singlestore/__init__.py +0 -0
  550. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/singlestore/index.py +0 -0
  551. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/singlestore/singlestore.py +0 -0
  552. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/surrealdb/__init__.py +0 -0
  553. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  554. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/upstashdb/__init__.py +0 -0
  555. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  556. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/weaviate/__init__.py +0 -0
  557. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/weaviate/index.py +0 -0
  558. {agno-2.2.0 → agno-2.2.1}/agno/vectordb/weaviate/weaviate.py +0 -0
  559. {agno-2.2.0 → agno-2.2.1}/agno/workflow/__init__.py +0 -0
  560. {agno-2.2.0 → agno-2.2.1}/agno/workflow/condition.py +0 -0
  561. {agno-2.2.0 → agno-2.2.1}/agno/workflow/loop.py +0 -0
  562. {agno-2.2.0 → agno-2.2.1}/agno/workflow/parallel.py +0 -0
  563. {agno-2.2.0 → agno-2.2.1}/agno/workflow/router.py +0 -0
  564. {agno-2.2.0 → agno-2.2.1}/agno/workflow/step.py +0 -0
  565. {agno-2.2.0 → agno-2.2.1}/agno/workflow/steps.py +0 -0
  566. {agno-2.2.0 → agno-2.2.1}/agno/workflow/types.py +0 -0
  567. {agno-2.2.0 → agno-2.2.1}/agno.egg-info/dependency_links.txt +0 -0
  568. {agno-2.2.0 → agno-2.2.1}/agno.egg-info/top_level.txt +0 -0
  569. {agno-2.2.0 → agno-2.2.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.2.0
3
+ Version: 2.2.1
4
4
  Summary: Agno: a lightweight library for building Multi-Agent Systems
5
5
  Author-email: Ashpreet Bedi <ashpreet@agno.com>
6
6
  Project-URL: homepage, https://agno.com
@@ -238,6 +238,8 @@ Requires-Dist: pypdf; extra == "pdf"
238
238
  Requires-Dist: rapidocr_onnxruntime; extra == "pdf"
239
239
  Provides-Extra: docx
240
240
  Requires-Dist: python-docx; extra == "docx"
241
+ Provides-Extra: pptx
242
+ Requires-Dist: python-pptx; extra == "pptx"
241
243
  Provides-Extra: text
242
244
  Requires-Dist: aiofiles; extra == "text"
243
245
  Provides-Extra: csv
@@ -346,6 +348,7 @@ Requires-Dist: agno[upstash]; extra == "vectordbs"
346
348
  Provides-Extra: knowledge
347
349
  Requires-Dist: agno[pdf]; extra == "knowledge"
348
350
  Requires-Dist: agno[docx]; extra == "knowledge"
351
+ Requires-Dist: agno[pptx]; extra == "knowledge"
349
352
  Requires-Dist: agno[text]; extra == "knowledge"
350
353
  Requires-Dist: agno[csv]; extra == "knowledge"
351
354
  Requires-Dist: agno[markdown]; extra == "knowledge"
@@ -117,7 +117,7 @@ from agno.utils.log import (
117
117
  set_log_level_to_info,
118
118
  )
119
119
  from agno.utils.merge_dict import merge_dictionaries
120
- from agno.utils.message import get_text_from_message
120
+ from agno.utils.message import filter_tool_calls, get_text_from_message
121
121
  from agno.utils.print_response.agent import (
122
122
  aprint_response,
123
123
  aprint_response_stream,
@@ -203,6 +203,8 @@ class Agent:
203
203
  add_history_to_context: bool = False
204
204
  # Number of historical runs to include in the messages
205
205
  num_history_runs: int = 3
206
+ # Maximum number of tool calls to include from history (None = no limit)
207
+ max_tool_calls_from_history: Optional[int] = None
206
208
 
207
209
  # --- Knowledge ---
208
210
  knowledge: Optional[Knowledge] = None
@@ -419,6 +421,7 @@ class Agent:
419
421
  session_summary_manager: Optional[SessionSummaryManager] = None,
420
422
  add_history_to_context: bool = False,
421
423
  num_history_runs: int = 3,
424
+ max_tool_calls_from_history: Optional[int] = None,
422
425
  store_media: bool = True,
423
426
  store_tool_messages: bool = True,
424
427
  store_history_messages: bool = True,
@@ -520,6 +523,7 @@ class Agent:
520
523
 
521
524
  self.add_history_to_context = add_history_to_context
522
525
  self.num_history_runs = num_history_runs
526
+ self.max_tool_calls_from_history = max_tool_calls_from_history
523
527
 
524
528
  self.store_media = store_media
525
529
  self.store_tool_messages = store_tool_messages
@@ -1995,6 +1999,9 @@ class Agent:
1995
1999
  run_response=run_response,
1996
2000
  run_input=run_input,
1997
2001
  session=agent_session,
2002
+ session_state=session_state,
2003
+ dependencies=dependencies,
2004
+ metadata=metadata,
1998
2005
  user_id=user_id,
1999
2006
  debug_mode=debug_mode,
2000
2007
  **kwargs,
@@ -7321,6 +7328,10 @@ class Agent:
7321
7328
  for _msg in history_copy:
7322
7329
  _msg.from_history = True
7323
7330
 
7331
+ # Filter tool calls from history if limit is set (before adding to run_messages)
7332
+ if self.max_tool_calls_from_history is not None:
7333
+ filter_tool_calls(history_copy, self.max_tool_calls_from_history)
7334
+
7324
7335
  log_debug(f"Adding {len(history_copy)} messages from history")
7325
7336
 
7326
7337
  run_messages.messages += history_copy
@@ -7514,6 +7525,10 @@ class Agent:
7514
7525
  for _msg in history_copy:
7515
7526
  _msg.from_history = True
7516
7527
 
7528
+ # Filter tool calls from history if limit is set (before adding to run_messages)
7529
+ if self.max_tool_calls_from_history is not None:
7530
+ filter_tool_calls(history_copy, self.max_tool_calls_from_history)
7531
+
7517
7532
  log_debug(f"Adding {len(history_copy)} messages from history")
7518
7533
 
7519
7534
  run_messages.messages += history_copy
@@ -547,6 +547,8 @@ class Knowledge:
547
547
  reader = self.pdf_reader
548
548
  elif file_extension == ".docx":
549
549
  reader = self.docx_reader
550
+ elif file_extension == ".pptx":
551
+ reader = self.pptx_reader
550
552
  elif file_extension == ".json":
551
553
  reader = self.json_reader
552
554
  elif file_extension == ".markdown":
@@ -835,6 +837,8 @@ class Knowledge:
835
837
  reader = self.csv_reader
836
838
  elif s3_object.uri.endswith(".docx"):
837
839
  reader = self.docx_reader
840
+ elif s3_object.uri.endswith(".pptx"):
841
+ reader = self.pptx_reader
838
842
  elif s3_object.uri.endswith(".json"):
839
843
  reader = self.json_reader
840
844
  elif s3_object.uri.endswith(".markdown"):
@@ -917,6 +921,8 @@ class Knowledge:
917
921
  reader = self.csv_reader
918
922
  elif gcs_object.name.endswith(".docx"):
919
923
  reader = self.docx_reader
924
+ elif gcs_object.name.endswith(".pptx"):
925
+ reader = self.pptx_reader
920
926
  elif gcs_object.name.endswith(".json"):
921
927
  reader = self.json_reader
922
928
  elif gcs_object.name.endswith(".markdown"):
@@ -1893,6 +1899,11 @@ class Knowledge:
1893
1899
  """Docx reader - lazy loaded via factory."""
1894
1900
  return self._get_reader("docx")
1895
1901
 
1902
+ @property
1903
+ def pptx_reader(self) -> Optional[Reader]:
1904
+ """PPTX reader - lazy loaded via factory."""
1905
+ return self._get_reader("pptx")
1906
+
1896
1907
  @property
1897
1908
  def json_reader(self) -> Optional[Reader]:
1898
1909
  """JSON reader - lazy loaded via factory."""
@@ -0,0 +1,101 @@
1
+ import asyncio
2
+ from pathlib import Path
3
+ from typing import IO, Any, List, Optional, Union
4
+ from uuid import uuid4
5
+
6
+ from agno.knowledge.chunking.document import DocumentChunking
7
+ from agno.knowledge.chunking.strategy import ChunkingStrategy, ChunkingStrategyType
8
+ from agno.knowledge.document.base import Document
9
+ from agno.knowledge.reader.base import Reader
10
+ from agno.knowledge.types import ContentType
11
+ from agno.utils.log import log_info, logger
12
+
13
+ try:
14
+ from pptx import Presentation # type: ignore
15
+ except ImportError:
16
+ raise ImportError("The `python-pptx` package is not installed. Please install it via `pip install python-pptx`.")
17
+
18
+
19
+ class PPTXReader(Reader):
20
+ """Reader for PPTX files"""
21
+
22
+ def __init__(self, chunking_strategy: Optional[ChunkingStrategy] = DocumentChunking(), **kwargs):
23
+ super().__init__(chunking_strategy=chunking_strategy, **kwargs)
24
+
25
+ @classmethod
26
+ def get_supported_chunking_strategies(self) -> List[ChunkingStrategyType]:
27
+ """Get the list of supported chunking strategies for PPTX readers."""
28
+ return [
29
+ ChunkingStrategyType.DOCUMENT_CHUNKER,
30
+ ChunkingStrategyType.FIXED_SIZE_CHUNKER,
31
+ ChunkingStrategyType.SEMANTIC_CHUNKER,
32
+ ChunkingStrategyType.AGENTIC_CHUNKER,
33
+ ChunkingStrategyType.RECURSIVE_CHUNKER,
34
+ ]
35
+
36
+ @classmethod
37
+ def get_supported_content_types(self) -> List[ContentType]:
38
+ return [ContentType.PPTX]
39
+
40
+ def read(self, file: Union[Path, IO[Any]], name: Optional[str] = None) -> List[Document]:
41
+ """Read a pptx file and return a list of documents"""
42
+ try:
43
+ if isinstance(file, Path):
44
+ if not file.exists():
45
+ raise FileNotFoundError(f"Could not find file: {file}")
46
+ log_info(f"Reading: {file}")
47
+ presentation = Presentation(str(file))
48
+ doc_name = name or file.stem
49
+ else:
50
+ log_info(f"Reading uploaded file: {getattr(file, 'name', 'pptx_file')}")
51
+ presentation = Presentation(file)
52
+ doc_name = name or (
53
+ getattr(file, "name", "pptx_file").split(".")[0] if hasattr(file, "name") else "pptx_file"
54
+ )
55
+
56
+ # Extract text from all slides
57
+ slide_texts = []
58
+ for slide_number, slide in enumerate(presentation.slides, 1):
59
+ slide_text = f"Slide {slide_number}:\n"
60
+
61
+ # Extract text from shapes that contain text
62
+ text_content = []
63
+ for shape in slide.shapes:
64
+ if hasattr(shape, "text") and shape.text.strip():
65
+ text_content.append(shape.text.strip())
66
+
67
+ if text_content:
68
+ slide_text += "\n".join(text_content)
69
+ else:
70
+ slide_text += "(No text content)"
71
+
72
+ slide_texts.append(slide_text)
73
+
74
+ doc_content = "\n\n".join(slide_texts)
75
+
76
+ documents = [
77
+ Document(
78
+ name=doc_name,
79
+ id=str(uuid4()),
80
+ content=doc_content,
81
+ )
82
+ ]
83
+
84
+ if self.chunk:
85
+ chunked_documents = []
86
+ for document in documents:
87
+ chunked_documents.extend(self.chunk_document(document))
88
+ return chunked_documents
89
+ return documents
90
+
91
+ except Exception as e:
92
+ logger.error(f"Error reading file: {e}")
93
+ return []
94
+
95
+ async def async_read(self, file: Union[Path, IO[Any]], name: Optional[str] = None) -> List[Document]:
96
+ """Asynchronously read a pptx file and return a list of documents"""
97
+ try:
98
+ return await asyncio.to_thread(self.read, file, name)
99
+ except Exception as e:
100
+ logger.error(f"Error reading file asynchronously: {e}")
101
+ return []
@@ -58,6 +58,18 @@ class ReaderFactory:
58
58
  config.update(kwargs)
59
59
  return DocxReader(**config)
60
60
 
61
+ @classmethod
62
+ def _get_pptx_reader(cls, **kwargs) -> Reader:
63
+ """Get PPTX reader instance."""
64
+ from agno.knowledge.reader.pptx_reader import PPTXReader
65
+
66
+ config: Dict[str, Any] = {
67
+ "name": "PPTX Reader",
68
+ "description": "Extracts text content from Microsoft PowerPoint presentations (.pptx format)",
69
+ }
70
+ config.update(kwargs)
71
+ return PPTXReader(**config)
72
+
61
73
  @classmethod
62
74
  def _get_json_reader(cls, **kwargs) -> Reader:
63
75
  """Get JSON reader instance."""
@@ -202,6 +214,8 @@ class ReaderFactory:
202
214
  return cls.create_reader("csv")
203
215
  elif extension in [".docx", ".doc", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"]:
204
216
  return cls.create_reader("docx")
217
+ elif extension == ".pptx":
218
+ return cls.create_reader("pptx")
205
219
  elif extension == ".json":
206
220
  return cls.create_reader("json")
207
221
  elif extension in [".md", ".markdown"]:
@@ -20,6 +20,7 @@ class ContentType(str, Enum):
20
20
  MARKDOWN = ".md"
21
21
  DOCX = ".docx"
22
22
  DOC = ".doc"
23
+ PPTX = ".pptx"
23
24
  JSON = ".json"
24
25
 
25
26
  # Spreadsheet file extensions
@@ -1237,8 +1237,8 @@ class Model(ABC):
1237
1237
  if function_call.function.show_result:
1238
1238
  yield ModelResponse(content=item.content)
1239
1239
 
1240
- if isinstance(item, CustomEvent):
1241
- function_call_output += str(item)
1240
+ if isinstance(item, CustomEvent):
1241
+ function_call_output += str(item)
1242
1242
 
1243
1243
  # Yield the event itself to bubble it up
1244
1244
  yield item
@@ -1626,8 +1626,8 @@ class Model(ABC):
1626
1626
  await event_queue.put(ModelResponse(content=item.content))
1627
1627
  continue
1628
1628
 
1629
- if isinstance(item, CustomEvent):
1630
- function_call_output += str(item)
1629
+ if isinstance(item, CustomEvent):
1630
+ function_call_output += str(item)
1631
1631
 
1632
1632
  # Put the event into the queue to be yielded
1633
1633
  await event_queue.put(item)
@@ -385,6 +385,11 @@ class OutputModelResponseCompletedEvent(BaseAgentRunEvent):
385
385
  class CustomEvent(BaseAgentRunEvent):
386
386
  event: str = RunEvent.custom_event.value
387
387
 
388
+ def __init__(self, **kwargs):
389
+ # Store arbitrary attributes directly on the instance
390
+ for key, value in kwargs.items():
391
+ setattr(self, key, value)
392
+
388
393
 
389
394
  RunOutputEvent = Union[
390
395
  RunStartedEvent,
@@ -368,6 +368,11 @@ class OutputModelResponseCompletedEvent(BaseTeamRunEvent):
368
368
  class CustomEvent(BaseTeamRunEvent):
369
369
  event: str = TeamRunEvent.custom_event.value
370
370
 
371
+ def __init__(self, **kwargs):
372
+ # Store arbitrary attributes directly on the instance
373
+ for key, value in kwargs.items():
374
+ setattr(self, key, value)
375
+
371
376
 
372
377
  TeamRunOutputEvent = Union[
373
378
  RunStartedEvent,
@@ -6,9 +6,9 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
6
6
  from pydantic import BaseModel
7
7
 
8
8
  from agno.media import Audio, Image, Video
9
- from agno.run.agent import RunOutput
9
+ from agno.run.agent import RunEvent, RunOutput, run_output_event_from_dict
10
10
  from agno.run.base import BaseRunOutputEvent, RunStatus
11
- from agno.run.team import TeamRunOutput
11
+ from agno.run.team import TeamRunEvent, TeamRunOutput, team_run_output_event_from_dict
12
12
 
13
13
  if TYPE_CHECKING:
14
14
  from agno.workflow.types import StepOutput, WorkflowMetrics
@@ -388,6 +388,11 @@ class CustomEvent(BaseWorkflowRunOutputEvent):
388
388
 
389
389
  event: str = WorkflowRunEvent.custom_event.value
390
390
 
391
+ def __init__(self, **kwargs):
392
+ # Store arbitrary attributes directly on the instance
393
+ for key, value in kwargs.items():
394
+ setattr(self, key, value)
395
+
391
396
 
392
397
  # Union type for all workflow run response events
393
398
  WorkflowRunOutputEvent = Union[
@@ -442,10 +447,15 @@ WORKFLOW_RUN_EVENT_TYPE_REGISTRY = {
442
447
 
443
448
  def workflow_run_output_event_from_dict(data: dict) -> BaseWorkflowRunOutputEvent:
444
449
  event_type = data.get("event", "")
445
- cls = WORKFLOW_RUN_EVENT_TYPE_REGISTRY.get(event_type)
446
- if not cls:
450
+ if event_type in {e.value for e in RunEvent}:
451
+ return run_output_event_from_dict(data) # type: ignore
452
+ elif event_type in {e.value for e in TeamRunEvent}:
453
+ return team_run_output_event_from_dict(data) # type: ignore
454
+ else:
455
+ event_class = WORKFLOW_RUN_EVENT_TYPE_REGISTRY.get(event_type)
456
+ if not event_class:
447
457
  raise ValueError(f"Unknown workflow event type: {event_type}")
448
- return cls.from_dict(data) # type: ignore
458
+ return event_class.from_dict(data) # type: ignore
449
459
 
450
460
 
451
461
  @dataclass
@@ -111,7 +111,7 @@ from agno.utils.log import (
111
111
  use_team_logger,
112
112
  )
113
113
  from agno.utils.merge_dict import merge_dictionaries
114
- from agno.utils.message import get_text_from_message
114
+ from agno.utils.message import filter_tool_calls, get_text_from_message
115
115
  from agno.utils.print_response.team import (
116
116
  aprint_response,
117
117
  aprint_response_stream,
@@ -189,12 +189,6 @@ class Team:
189
189
  # If True, cache the current Team session in memory for faster access
190
190
  cache_session: bool = False
191
191
 
192
- # --- Team history settings ---
193
- # add_history_to_context=true adds messages from the chat history to the messages list sent to the Model. This only applies to the team leader, not the members.
194
- add_history_to_context: bool = False
195
- # Number of historical runs to include in the messages
196
- num_history_runs: int = 3
197
-
198
192
  # Add this flag to control if the workflow should send the team history to the members. This means sending the team-level history to the members, not the agent-level history.
199
193
  add_team_history_to_members: bool = False
200
194
  # Number of historical runs to include in the messages sent to the members
@@ -354,6 +348,14 @@ class Team:
354
348
  # If True, the team adds session summaries to the context
355
349
  add_session_summary_to_context: Optional[bool] = None
356
350
 
351
+ # --- Team History ---
352
+ # add_history_to_context=true adds messages from the chat history to the messages list sent to the Model.
353
+ add_history_to_context: bool = False
354
+ # Number of historical runs to include in the messages
355
+ num_history_runs: int = 3
356
+ # Maximum number of tool calls to include from history (None = no limit)
357
+ max_tool_calls_from_history: Optional[int] = None
358
+
357
359
  # --- Team Storage ---
358
360
  # Metadata stored with this team
359
361
  metadata: Optional[Dict[str, Any]] = None
@@ -421,8 +423,6 @@ class Team:
421
423
  overwrite_db_session_state: bool = False,
422
424
  resolve_in_context: bool = True,
423
425
  cache_session: bool = False,
424
- add_history_to_context: bool = False,
425
- num_history_runs: int = 3,
426
426
  add_team_history_to_members: bool = False,
427
427
  num_team_history_runs: int = 3,
428
428
  search_session_history: Optional[bool] = False,
@@ -458,6 +458,8 @@ class Team:
458
458
  store_tool_messages: bool = True,
459
459
  store_history_messages: bool = True,
460
460
  send_media_to_model: bool = True,
461
+ add_history_to_context: bool = False,
462
+ num_history_runs: int = 3,
461
463
  tools: Optional[List[Union[Toolkit, Callable, Function, Dict]]] = None,
462
464
  tool_call_limit: Optional[int] = None,
463
465
  tool_choice: Optional[Union[str, Dict[str, Any]]] = None,
@@ -480,6 +482,7 @@ class Team:
480
482
  enable_session_summaries: bool = False,
481
483
  session_summary_manager: Optional[SessionSummaryManager] = None,
482
484
  add_session_summary_to_context: Optional[bool] = None,
485
+ max_tool_calls_from_history: Optional[int] = None,
483
486
  metadata: Optional[Dict[str, Any]] = None,
484
487
  reasoning: bool = False,
485
488
  reasoning_model: Optional[Model] = None,
@@ -591,6 +594,9 @@ class Team:
591
594
  self.enable_session_summaries = enable_session_summaries
592
595
  self.session_summary_manager = session_summary_manager
593
596
  self.add_session_summary_to_context = add_session_summary_to_context
597
+ self.add_history_to_context = add_history_to_context
598
+ self.num_history_runs = num_history_runs
599
+ self.max_tool_calls_from_history = max_tool_calls_from_history
594
600
  self.metadata = metadata
595
601
 
596
602
  self.reasoning = reasoning
@@ -1320,6 +1326,9 @@ class Team:
1320
1326
  hooks=self.post_hooks, # type: ignore
1321
1327
  run_output=run_response,
1322
1328
  session=session,
1329
+ session_state=session_state,
1330
+ dependencies=dependencies,
1331
+ metadata=metadata,
1323
1332
  user_id=user_id,
1324
1333
  debug_mode=debug_mode,
1325
1334
  **kwargs,
@@ -2133,6 +2142,9 @@ class Team:
2133
2142
  hooks=self.post_hooks, # type: ignore
2134
2143
  run_output=run_response,
2135
2144
  session=team_session,
2145
+ session_state=session_state,
2146
+ dependencies=dependencies,
2147
+ metadata=metadata,
2136
2148
  user_id=user_id,
2137
2149
  debug_mode=debug_mode,
2138
2150
  **kwargs,
@@ -5824,6 +5836,10 @@ class Team:
5824
5836
  for _msg in history_copy:
5825
5837
  _msg.from_history = True
5826
5838
 
5839
+ # Filter tool calls from history messages
5840
+ if self.max_tool_calls_from_history is not None:
5841
+ filter_tool_calls(history_copy, self.max_tool_calls_from_history)
5842
+
5827
5843
  log_debug(f"Adding {len(history_copy)} messages from history")
5828
5844
 
5829
5845
  # Extend the messages with the history
@@ -5951,6 +5967,10 @@ class Team:
5951
5967
  for _msg in history_copy:
5952
5968
  _msg.from_history = True
5953
5969
 
5970
+ # Filter tool calls from history messages
5971
+ if self.max_tool_calls_from_history is not None:
5972
+ filter_tool_calls(history_copy, self.max_tool_calls_from_history)
5973
+
5954
5974
  log_debug(f"Adding {len(history_copy)} messages from history")
5955
5975
 
5956
5976
  # Extend the messages with the history
@@ -1,8 +1,68 @@
1
+ from copy import deepcopy
1
2
  from typing import Dict, List, Union
2
3
 
3
4
  from pydantic import BaseModel
4
5
 
5
6
  from agno.models.message import Message
7
+ from agno.utils.log import log_debug
8
+
9
+
10
+ def filter_tool_calls(messages: List[Message], max_tool_calls: int) -> None:
11
+ """
12
+ Filter messages (in-place) to keep only the most recent N tool calls.
13
+
14
+ Args:
15
+ messages: List of messages to filter (modified in-place)
16
+ max_tool_calls: Number of recent tool calls to keep
17
+ """
18
+ # Count total tool calls
19
+ tool_call_count = sum(1 for m in messages if m.role == "tool")
20
+
21
+ # No filtering needed
22
+ if tool_call_count <= max_tool_calls:
23
+ return
24
+
25
+ # Collect tool_call_ids to keep (most recent N)
26
+ tool_call_ids_list: List[str] = []
27
+ for msg in reversed(messages):
28
+ if msg.role == "tool" and len(tool_call_ids_list) < max_tool_calls:
29
+ if msg.tool_call_id:
30
+ tool_call_ids_list.append(msg.tool_call_id)
31
+
32
+ tool_call_ids_to_keep: set[str] = set(tool_call_ids_list)
33
+
34
+ # Filter messages in-place
35
+ filtered_messages = []
36
+ for msg in messages:
37
+ if msg.role == "tool":
38
+ # Keep only tool results in our window
39
+ if msg.tool_call_id in tool_call_ids_to_keep:
40
+ filtered_messages.append(msg)
41
+ elif msg.role == "assistant" and msg.tool_calls:
42
+ # Filter tool_calls within the assistant message
43
+ # Use deepcopy to ensure complete isolation of the filtered message
44
+ filtered_msg = deepcopy(msg)
45
+ # Filter tool_calls
46
+ if filtered_msg.tool_calls is not None:
47
+ filtered_msg.tool_calls = [
48
+ tc for tc in filtered_msg.tool_calls if tc.get("id") in tool_call_ids_to_keep
49
+ ]
50
+
51
+ if filtered_msg.tool_calls:
52
+ # Has tool_calls remaining, keep it
53
+ filtered_messages.append(filtered_msg)
54
+ # skip empty messages
55
+ elif filtered_msg.content:
56
+ filtered_msg.tool_calls = None
57
+ filtered_messages.append(filtered_msg)
58
+ else:
59
+ filtered_messages.append(msg)
60
+
61
+ messages[:] = filtered_messages
62
+
63
+ # Log filtering information
64
+ num_filtered = tool_call_count - len(tool_call_ids_to_keep)
65
+ log_debug(f"Filtered {num_filtered} tool calls, kept {len(tool_call_ids_to_keep)}")
6
66
 
7
67
 
8
68
  def get_text_from_message(message: Union[List, Dict, str, Message, BaseModel]) -> str: