agno 2.0.0a1__tar.gz → 2.0.0rc1__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 (520) hide show
  1. {agno-2.0.0a1 → agno-2.0.0rc1}/PKG-INFO +1 -1
  2. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/agent/agent.py +390 -33
  3. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/agent.py +2 -2
  4. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/evals.py +2 -2
  5. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/os.py +1 -1
  6. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/settings.py +2 -2
  7. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/team.py +2 -2
  8. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/dynamo/dynamo.py +0 -6
  9. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/firestore/firestore.py +0 -6
  10. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/in_memory/in_memory_db.py +0 -6
  11. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/json/json_db.py +0 -6
  12. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/mongo/mongo.py +0 -6
  13. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/mysql/utils.py +0 -1
  14. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/postgres/postgres.py +0 -10
  15. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/postgres/utils.py +0 -1
  16. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/redis/redis.py +0 -4
  17. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/singlestore/singlestore.py +0 -10
  18. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/singlestore/utils.py +0 -1
  19. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/sqlite/sqlite.py +0 -4
  20. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/sqlite/utils.py +0 -1
  21. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/integrations/discord/client.py +5 -1
  22. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/aws_bedrock.py +2 -2
  23. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/anthropic/claude.py +2 -49
  24. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/message.py +7 -6
  25. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/app.py +158 -62
  26. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/agui/agui.py +1 -1
  27. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/agui/utils.py +16 -9
  28. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/slack/slack.py +2 -3
  29. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/whatsapp/whatsapp.py +2 -3
  30. agno-2.0.0rc1/agno/os/mcp.py +255 -0
  31. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/router.py +33 -7
  32. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/evals/evals.py +9 -5
  33. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/knowledge/knowledge.py +30 -7
  34. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/memory/memory.py +17 -8
  35. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/metrics/metrics.py +4 -2
  36. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/session/session.py +8 -3
  37. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/settings.py +0 -1
  38. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/run/agent.py +87 -2
  39. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/run/cancel.py +0 -2
  40. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/team/team.py +2 -2
  41. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/function.py +65 -7
  42. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/linear.py +1 -1
  43. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/gemini.py +31 -1
  44. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/models/claude.py +49 -0
  45. agno-2.0.0rc1/agno/utils/streamlit.py +454 -0
  46. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/workflow/workflow.py +8 -1
  47. {agno-2.0.0a1 → agno-2.0.0rc1}/agno.egg-info/PKG-INFO +1 -1
  48. {agno-2.0.0a1 → agno-2.0.0rc1}/agno.egg-info/SOURCES.txt +2 -0
  49. {agno-2.0.0a1 → agno-2.0.0rc1}/pyproject.toml +2 -1
  50. {agno-2.0.0a1 → agno-2.0.0rc1}/LICENSE +0 -0
  51. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/__init__.py +0 -0
  52. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/agent/__init__.py +0 -0
  53. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/__init__.py +0 -0
  54. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/api.py +0 -0
  55. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/routes.py +0 -0
  56. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/schemas/__init__.py +0 -0
  57. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/schemas/agent.py +0 -0
  58. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/schemas/evals.py +0 -0
  59. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/schemas/os.py +0 -0
  60. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/schemas/response.py +0 -0
  61. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/schemas/team.py +0 -0
  62. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/schemas/utils.py +0 -0
  63. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/schemas/workflows.py +0 -0
  64. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/api/workflow.py +0 -0
  65. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/cloud/aws/base.py +0 -0
  66. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/cloud/aws/s3/__init__.py +0 -0
  67. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/cloud/aws/s3/api_client.py +0 -0
  68. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/cloud/aws/s3/bucket.py +0 -0
  69. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/cloud/aws/s3/object.py +0 -0
  70. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/__init__.py +0 -0
  71. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/base.py +0 -0
  72. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/dynamo/__init__.py +0 -0
  73. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/dynamo/schemas.py +0 -0
  74. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/dynamo/utils.py +0 -0
  75. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/firestore/__init__.py +0 -0
  76. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/firestore/schemas.py +0 -0
  77. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/firestore/utils.py +0 -0
  78. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/gcs_json/__init__.py +0 -0
  79. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/gcs_json/gcs_json_db.py +0 -0
  80. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/gcs_json/utils.py +0 -0
  81. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/in_memory/__init__.py +0 -0
  82. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/in_memory/utils.py +0 -0
  83. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/json/__init__.py +0 -0
  84. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/json/utils.py +0 -0
  85. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/migrations/__init__.py +0 -0
  86. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/migrations/v1_to_v2.py +0 -0
  87. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/mongo/__init__.py +0 -0
  88. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/mongo/schemas.py +0 -0
  89. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/mongo/utils.py +0 -0
  90. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/mysql/__init__.py +0 -0
  91. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/mysql/mysql.py +0 -0
  92. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/mysql/schemas.py +0 -0
  93. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/postgres/__init__.py +0 -0
  94. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/postgres/schemas.py +0 -0
  95. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/redis/__init__.py +0 -0
  96. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/redis/schemas.py +0 -0
  97. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/redis/utils.py +0 -0
  98. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/schemas/__init__.py +0 -0
  99. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/schemas/evals.py +0 -0
  100. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/schemas/knowledge.py +0 -0
  101. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/schemas/memory.py +0 -0
  102. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/schemas/metrics.py +0 -0
  103. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/singlestore/__init__.py +0 -0
  104. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/singlestore/schemas.py +0 -0
  105. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/sqlite/__init__.py +0 -0
  106. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/sqlite/schemas.py +0 -0
  107. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/db/utils.py +0 -0
  108. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/debug.py +0 -0
  109. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/eval/__init__.py +0 -0
  110. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/eval/accuracy.py +0 -0
  111. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/eval/performance.py +0 -0
  112. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/eval/reliability.py +0 -0
  113. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/eval/utils.py +0 -0
  114. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/exceptions.py +0 -0
  115. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/integrations/__init__.py +0 -0
  116. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/integrations/discord/__init__.py +0 -0
  117. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/__init__.py +0 -0
  118. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/chunking/__init__.py +0 -0
  119. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/chunking/agentic.py +0 -0
  120. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/chunking/document.py +0 -0
  121. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/chunking/fixed.py +0 -0
  122. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/chunking/markdown.py +0 -0
  123. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/chunking/recursive.py +0 -0
  124. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/chunking/row.py +0 -0
  125. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/chunking/semantic.py +0 -0
  126. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/chunking/strategy.py +0 -0
  127. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/content.py +0 -0
  128. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/document/__init__.py +0 -0
  129. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/document/base.py +0 -0
  130. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/__init__.py +0 -0
  131. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/azure_openai.py +0 -0
  132. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/base.py +0 -0
  133. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/cohere.py +0 -0
  134. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/fastembed.py +0 -0
  135. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/fireworks.py +0 -0
  136. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/google.py +0 -0
  137. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/huggingface.py +0 -0
  138. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/jina.py +0 -0
  139. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/langdb.py +0 -0
  140. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/mistral.py +0 -0
  141. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/nebius.py +0 -0
  142. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/ollama.py +0 -0
  143. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/openai.py +0 -0
  144. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  145. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/together.py +0 -0
  146. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/embedder/voyageai.py +0 -0
  147. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/knowledge.py +0 -0
  148. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/__init__.py +0 -0
  149. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/arxiv_reader.py +0 -0
  150. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/base.py +0 -0
  151. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/csv_reader.py +0 -0
  152. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/docx_reader.py +0 -0
  153. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  154. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/gcs_reader.py +0 -0
  155. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/json_reader.py +0 -0
  156. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/markdown_reader.py +0 -0
  157. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/pdf_reader.py +0 -0
  158. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/reader_factory.py +0 -0
  159. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/s3_reader.py +0 -0
  160. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/text_reader.py +0 -0
  161. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/url_reader.py +0 -0
  162. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/web_search_reader.py +0 -0
  163. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/website_reader.py +0 -0
  164. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  165. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reader/youtube_reader.py +0 -0
  166. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/remote_content/__init__.py +0 -0
  167. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/remote_content/remote_content.py +0 -0
  168. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reranker/__init__.py +0 -0
  169. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reranker/base.py +0 -0
  170. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reranker/cohere.py +0 -0
  171. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reranker/infinity.py +0 -0
  172. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  173. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/types.py +0 -0
  174. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/knowledge/utils.py +0 -0
  175. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/media.py +0 -0
  176. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/memory/__init__.py +0 -0
  177. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/memory/manager.py +0 -0
  178. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/__init__.py +0 -0
  179. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/aimlapi/__init__.py +0 -0
  180. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/aimlapi/aimlapi.py +0 -0
  181. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/anthropic/__init__.py +0 -0
  182. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/aws/__init__.py +0 -0
  183. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/aws/bedrock.py +0 -0
  184. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/aws/claude.py +0 -0
  185. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/azure/__init__.py +0 -0
  186. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/azure/ai_foundry.py +0 -0
  187. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/azure/openai_chat.py +0 -0
  188. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/base.py +0 -0
  189. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/cerebras/__init__.py +0 -0
  190. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/cerebras/cerebras.py +0 -0
  191. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/cerebras/cerebras_openai.py +0 -0
  192. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/cohere/__init__.py +0 -0
  193. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/cohere/chat.py +0 -0
  194. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/dashscope/__init__.py +0 -0
  195. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/dashscope/dashscope.py +0 -0
  196. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/deepinfra/__init__.py +0 -0
  197. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/deepinfra/deepinfra.py +0 -0
  198. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/deepseek/__init__.py +0 -0
  199. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/deepseek/deepseek.py +0 -0
  200. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/defaults.py +0 -0
  201. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/fireworks/__init__.py +0 -0
  202. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/fireworks/fireworks.py +0 -0
  203. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/google/__init__.py +0 -0
  204. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/google/gemini.py +0 -0
  205. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/groq/__init__.py +0 -0
  206. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/groq/groq.py +0 -0
  207. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/huggingface/__init__.py +0 -0
  208. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/huggingface/huggingface.py +0 -0
  209. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/ibm/__init__.py +0 -0
  210. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/ibm/watsonx.py +0 -0
  211. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/internlm/__init__.py +0 -0
  212. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/internlm/internlm.py +0 -0
  213. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/langdb/__init__.py +0 -0
  214. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/langdb/langdb.py +0 -0
  215. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/litellm/__init__.py +0 -0
  216. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/litellm/chat.py +0 -0
  217. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/litellm/litellm_openai.py +0 -0
  218. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/lmstudio/__init__.py +0 -0
  219. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/lmstudio/lmstudio.py +0 -0
  220. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/meta/__init__.py +0 -0
  221. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/meta/llama.py +0 -0
  222. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/meta/llama_openai.py +0 -0
  223. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/metrics.py +0 -0
  224. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/mistral/__init__.py +0 -0
  225. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/mistral/mistral.py +0 -0
  226. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/nebius/__init__.py +0 -0
  227. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/nebius/nebius.py +0 -0
  228. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/nvidia/__init__.py +0 -0
  229. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/nvidia/nvidia.py +0 -0
  230. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/ollama/__init__.py +0 -0
  231. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/ollama/chat.py +0 -0
  232. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/openai/__init__.py +0 -0
  233. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/openai/chat.py +0 -0
  234. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/openai/like.py +0 -0
  235. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/openai/responses.py +0 -0
  236. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/openrouter/__init__.py +0 -0
  237. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/openrouter/openrouter.py +0 -0
  238. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/perplexity/__init__.py +0 -0
  239. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/perplexity/perplexity.py +0 -0
  240. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/portkey/__init__.py +0 -0
  241. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/portkey/portkey.py +0 -0
  242. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/response.py +0 -0
  243. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/sambanova/__init__.py +0 -0
  244. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/sambanova/sambanova.py +0 -0
  245. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/together/__init__.py +0 -0
  246. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/together/together.py +0 -0
  247. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/utils.py +0 -0
  248. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/vercel/__init__.py +0 -0
  249. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/vercel/v0.py +0 -0
  250. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/vllm/__init__.py +0 -0
  251. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/vllm/vllm.py +0 -0
  252. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/xai/__init__.py +0 -0
  253. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/models/xai/xai.py +0 -0
  254. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/__init__.py +0 -0
  255. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/auth.py +0 -0
  256. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/config.py +0 -0
  257. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/__init__.py +0 -0
  258. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/agui/__init__.py +0 -0
  259. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/agui/router.py +0 -0
  260. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/base.py +0 -0
  261. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/slack/__init__.py +0 -0
  262. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/slack/router.py +0 -0
  263. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/slack/security.py +0 -0
  264. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  265. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/whatsapp/router.py +0 -0
  266. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/interfaces/whatsapp/security.py +0 -0
  267. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/__init__.py +0 -0
  268. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/evals/__init__.py +0 -0
  269. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/evals/schemas.py +0 -0
  270. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/evals/utils.py +0 -0
  271. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/knowledge/__init__.py +0 -0
  272. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/knowledge/schemas.py +0 -0
  273. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/memory/__init__.py +0 -0
  274. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/memory/schemas.py +0 -0
  275. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/metrics/__init__.py +0 -0
  276. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/metrics/schemas.py +0 -0
  277. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/routers/session/__init__.py +0 -0
  278. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/schema.py +0 -0
  279. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/os/utils.py +0 -0
  280. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/py.typed +0 -0
  281. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/reasoning/__init__.py +0 -0
  282. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/reasoning/azure_ai_foundry.py +0 -0
  283. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/reasoning/deepseek.py +0 -0
  284. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/reasoning/default.py +0 -0
  285. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/reasoning/groq.py +0 -0
  286. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/reasoning/helpers.py +0 -0
  287. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/reasoning/ollama.py +0 -0
  288. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/reasoning/openai.py +0 -0
  289. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/reasoning/step.py +0 -0
  290. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/run/__init__.py +0 -0
  291. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/run/base.py +0 -0
  292. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/run/messages.py +0 -0
  293. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/run/team.py +0 -0
  294. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/run/workflow.py +0 -0
  295. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/session/__init__.py +0 -0
  296. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/session/agent.py +0 -0
  297. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/session/summary.py +0 -0
  298. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/session/team.py +0 -0
  299. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/session/workflow.py +0 -0
  300. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/team/__init__.py +0 -0
  301. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/__init__.py +0 -0
  302. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/agentql.py +0 -0
  303. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/airflow.py +0 -0
  304. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/api.py +0 -0
  305. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/apify.py +0 -0
  306. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/arxiv.py +0 -0
  307. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/aws_lambda.py +0 -0
  308. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/aws_ses.py +0 -0
  309. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/baidusearch.py +0 -0
  310. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/bitbucket.py +0 -0
  311. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/brandfetch.py +0 -0
  312. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/bravesearch.py +0 -0
  313. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/brightdata.py +0 -0
  314. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/browserbase.py +0 -0
  315. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/calcom.py +0 -0
  316. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/calculator.py +0 -0
  317. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/cartesia.py +0 -0
  318. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/clickup.py +0 -0
  319. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/confluence.py +0 -0
  320. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/crawl4ai.py +0 -0
  321. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/csv_toolkit.py +0 -0
  322. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/dalle.py +0 -0
  323. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/daytona.py +0 -0
  324. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/decorator.py +0 -0
  325. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/desi_vocal.py +0 -0
  326. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/discord.py +0 -0
  327. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/docker.py +0 -0
  328. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/duckdb.py +0 -0
  329. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/duckduckgo.py +0 -0
  330. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/e2b.py +0 -0
  331. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/eleven_labs.py +0 -0
  332. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/email.py +0 -0
  333. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/evm.py +0 -0
  334. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/exa.py +0 -0
  335. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/fal.py +0 -0
  336. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/file.py +0 -0
  337. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/financial_datasets.py +0 -0
  338. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/firecrawl.py +0 -0
  339. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/giphy.py +0 -0
  340. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/github.py +0 -0
  341. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/gmail.py +0 -0
  342. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/google_bigquery.py +0 -0
  343. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/google_maps.py +0 -0
  344. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/googlecalendar.py +0 -0
  345. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/googlesearch.py +0 -0
  346. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/googlesheets.py +0 -0
  347. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/hackernews.py +0 -0
  348. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/jina.py +0 -0
  349. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/jira.py +0 -0
  350. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/knowledge.py +0 -0
  351. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/linkup.py +0 -0
  352. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/local_file_system.py +0 -0
  353. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/lumalab.py +0 -0
  354. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/mcp.py +0 -0
  355. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/mem0.py +0 -0
  356. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/memori.py +0 -0
  357. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/mlx_transcribe.py +0 -0
  358. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/models/__init__.py +0 -0
  359. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/models/azure_openai.py +0 -0
  360. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/models/gemini.py +0 -0
  361. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/models/groq.py +0 -0
  362. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/models/morph.py +0 -0
  363. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/models/nebius.py +0 -0
  364. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/models_labs.py +0 -0
  365. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/moviepy_video.py +0 -0
  366. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/neo4j.py +0 -0
  367. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/newspaper.py +0 -0
  368. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/newspaper4k.py +0 -0
  369. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/openai.py +0 -0
  370. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/openbb.py +0 -0
  371. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/opencv.py +0 -0
  372. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/openweather.py +0 -0
  373. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/oxylabs.py +0 -0
  374. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/pandas.py +0 -0
  375. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/postgres.py +0 -0
  376. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/pubmed.py +0 -0
  377. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/python.py +0 -0
  378. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/reasoning.py +0 -0
  379. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/reddit.py +0 -0
  380. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/replicate.py +0 -0
  381. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/resend.py +0 -0
  382. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/scrapegraph.py +0 -0
  383. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/searxng.py +0 -0
  384. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/serpapi.py +0 -0
  385. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/serper.py +0 -0
  386. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/shell.py +0 -0
  387. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/slack.py +0 -0
  388. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/sleep.py +0 -0
  389. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/spider.py +0 -0
  390. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/sql.py +0 -0
  391. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/streamlit/__init__.py +0 -0
  392. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/streamlit/components.py +0 -0
  393. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/tavily.py +0 -0
  394. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/telegram.py +0 -0
  395. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/todoist.py +0 -0
  396. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/tool_registry.py +0 -0
  397. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/toolkit.py +0 -0
  398. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/trafilatura.py +0 -0
  399. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/trello.py +0 -0
  400. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/twilio.py +0 -0
  401. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/user_control_flow.py +0 -0
  402. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/valyu.py +0 -0
  403. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/visualization.py +0 -0
  404. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/webbrowser.py +0 -0
  405. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/webex.py +0 -0
  406. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/website.py +0 -0
  407. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/webtools.py +0 -0
  408. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/whatsapp.py +0 -0
  409. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/wikipedia.py +0 -0
  410. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/x.py +0 -0
  411. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/yfinance.py +0 -0
  412. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/youtube.py +0 -0
  413. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/zendesk.py +0 -0
  414. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/zep.py +0 -0
  415. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/tools/zoom.py +0 -0
  416. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/__init__.py +0 -0
  417. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/audio.py +0 -0
  418. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/certs.py +0 -0
  419. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/code_execution.py +0 -0
  420. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/common.py +0 -0
  421. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/dttm.py +0 -0
  422. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/enum.py +0 -0
  423. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/env.py +0 -0
  424. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/events.py +0 -0
  425. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/format_str.py +0 -0
  426. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/functions.py +0 -0
  427. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/http.py +0 -0
  428. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/json_schema.py +0 -0
  429. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/knowledge.py +0 -0
  430. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/location.py +0 -0
  431. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/log.py +0 -0
  432. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/mcp.py +0 -0
  433. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/media.py +0 -0
  434. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/merge_dict.py +0 -0
  435. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/message.py +0 -0
  436. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/models/__init__.py +0 -0
  437. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/models/ai_foundry.py +0 -0
  438. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/models/aws_claude.py +0 -0
  439. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/models/cohere.py +0 -0
  440. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/models/llama.py +0 -0
  441. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/models/mistral.py +0 -0
  442. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/models/openai_responses.py +0 -0
  443. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/models/schema_utils.py +0 -0
  444. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/models/watsonx.py +0 -0
  445. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/openai.py +0 -0
  446. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/pickle.py +0 -0
  447. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/pprint.py +0 -0
  448. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/print_response/__init__.py +0 -0
  449. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/print_response/agent.py +0 -0
  450. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/print_response/team.py +0 -0
  451. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/print_response/workflow.py +0 -0
  452. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/prompts.py +0 -0
  453. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/reasoning.py +0 -0
  454. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/response.py +0 -0
  455. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/response_iterator.py +0 -0
  456. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/safe_formatter.py +0 -0
  457. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/shell.py +0 -0
  458. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/string.py +0 -0
  459. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/team.py +0 -0
  460. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/timer.py +0 -0
  461. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/tools.py +0 -0
  462. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/web.py +0 -0
  463. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/whatsapp.py +0 -0
  464. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/utils/yaml_io.py +0 -0
  465. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/__init__.py +0 -0
  466. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/base.py +0 -0
  467. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/cassandra/__init__.py +0 -0
  468. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/cassandra/cassandra.py +0 -0
  469. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  470. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/cassandra/index.py +0 -0
  471. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/chroma/__init__.py +0 -0
  472. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/chroma/chromadb.py +0 -0
  473. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/clickhouse/__init__.py +0 -0
  474. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  475. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/clickhouse/index.py +0 -0
  476. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/couchbase/__init__.py +0 -0
  477. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/couchbase/couchbase.py +0 -0
  478. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/distance.py +0 -0
  479. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/lancedb/__init__.py +0 -0
  480. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/lancedb/lance_db.py +0 -0
  481. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/langchaindb/__init__.py +0 -0
  482. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  483. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/lightrag/__init__.py +0 -0
  484. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/lightrag/lightrag.py +0 -0
  485. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/llamaindex/__init__.py +0 -0
  486. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  487. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/milvus/__init__.py +0 -0
  488. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/milvus/milvus.py +0 -0
  489. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/mongodb/__init__.py +0 -0
  490. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/mongodb/mongodb.py +0 -0
  491. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/pgvector/__init__.py +0 -0
  492. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/pgvector/index.py +0 -0
  493. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/pgvector/pgvector.py +0 -0
  494. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/pineconedb/__init__.py +0 -0
  495. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  496. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/qdrant/__init__.py +0 -0
  497. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/qdrant/qdrant.py +0 -0
  498. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/search.py +0 -0
  499. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/singlestore/__init__.py +0 -0
  500. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/singlestore/index.py +0 -0
  501. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/singlestore/singlestore.py +0 -0
  502. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/surrealdb/__init__.py +0 -0
  503. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  504. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/upstashdb/__init__.py +0 -0
  505. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  506. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/weaviate/__init__.py +0 -0
  507. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/weaviate/index.py +0 -0
  508. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/vectordb/weaviate/weaviate.py +0 -0
  509. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/workflow/__init__.py +0 -0
  510. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/workflow/condition.py +0 -0
  511. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/workflow/loop.py +0 -0
  512. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/workflow/parallel.py +0 -0
  513. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/workflow/router.py +0 -0
  514. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/workflow/step.py +0 -0
  515. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/workflow/steps.py +0 -0
  516. {agno-2.0.0a1 → agno-2.0.0rc1}/agno/workflow/types.py +0 -0
  517. {agno-2.0.0a1 → agno-2.0.0rc1}/agno.egg-info/dependency_links.txt +0 -0
  518. {agno-2.0.0a1 → agno-2.0.0rc1}/agno.egg-info/requires.txt +0 -0
  519. {agno-2.0.0a1 → agno-2.0.0rc1}/agno.egg-info/top_level.txt +0 -0
  520. {agno-2.0.0a1 → agno-2.0.0rc1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.0.0a1
3
+ Version: 2.0.0rc1
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
@@ -23,7 +23,7 @@ from typing import (
23
23
  get_args,
24
24
  overload,
25
25
  )
26
- from uuid import NAMESPACE_DNS, uuid4, uuid5
26
+ from uuid import uuid4
27
27
 
28
28
  from pydantic import BaseModel
29
29
 
@@ -39,6 +39,7 @@ from agno.models.response import ModelResponse, ModelResponseEvent, ToolExecutio
39
39
  from agno.reasoning.step import NextAction, ReasoningStep, ReasoningSteps
40
40
  from agno.run.agent import (
41
41
  RunEvent,
42
+ RunInput,
42
43
  RunOutput,
43
44
  RunOutputEvent,
44
45
  )
@@ -222,6 +223,10 @@ class Agent:
222
223
  update_knowledge: bool = False
223
224
  # Add a tool that allows the Model to get the tool call history.
224
225
  read_tool_call_history: bool = False
226
+ # If False, media (images, videos, audio, files) is only available to tools and not sent to the LLM
227
+ send_media_to_model: bool = True
228
+ # If True, store media in run output
229
+ store_media: bool = True
225
230
 
226
231
  # --- System message settings ---
227
232
  # Provide the system message as a string or function
@@ -360,6 +365,7 @@ class Agent:
360
365
  session_summary_manager: Optional[SessionSummaryManager] = None,
361
366
  add_history_to_context: bool = False,
362
367
  num_history_runs: int = 3,
368
+ store_media: bool = True,
363
369
  knowledge: Optional[Knowledge] = None,
364
370
  knowledge_filters: Optional[Dict[str, Any]] = None,
365
371
  enable_agentic_knowledge_filters: Optional[bool] = None,
@@ -380,6 +386,7 @@ class Agent:
380
386
  search_knowledge: bool = True,
381
387
  update_knowledge: bool = False,
382
388
  read_tool_call_history: bool = False,
389
+ send_media_to_model: bool = True,
383
390
  system_message: Optional[Union[str, Callable, Message]] = None,
384
391
  system_message_role: str = "system",
385
392
  build_context: bool = True,
@@ -450,6 +457,8 @@ class Agent:
450
457
  self.add_history_to_context = add_history_to_context
451
458
  self.num_history_runs = num_history_runs
452
459
 
460
+ self.store_media = store_media
461
+
453
462
  self.knowledge = knowledge
454
463
  self.knowledge_filters = knowledge_filters
455
464
  self.enable_agentic_knowledge_filters = enable_agentic_knowledge_filters
@@ -474,7 +483,7 @@ class Agent:
474
483
  self.search_knowledge = search_knowledge
475
484
  self.update_knowledge = update_knowledge
476
485
  self.read_tool_call_history = read_tool_call_history
477
-
486
+ self.send_media_to_model = send_media_to_model
478
487
  self.system_message = system_message
479
488
  self.system_message_role = system_message_role
480
489
  self.build_context = build_context
@@ -539,7 +548,7 @@ class Agent:
539
548
  def set_id(self) -> None:
540
549
  if self.id is None:
541
550
  if self.name is not None:
542
- self.id = str(uuid5(NAMESPACE_DNS, self.name))
551
+ self.id = self.name.lower().replace(" ", "-")
543
552
  else:
544
553
  self.id = str(uuid4())
545
554
 
@@ -760,6 +769,11 @@ class Agent:
760
769
  # 3. Update the RunOutput with the model response
761
770
  self._update_run_response(model_response=model_response, run_response=run_response, run_messages=run_messages)
762
771
 
772
+ if self.store_media:
773
+ self._store_media(run_response, model_response)
774
+ else:
775
+ self._scrub_media_from_run_output(run_response)
776
+
763
777
  # We should break out of the run function
764
778
  if any(tool_call.is_paused for tool_call in run_response.tools or []):
765
779
  return self._handle_agent_run_paused(
@@ -1059,6 +1073,15 @@ class Agent:
1059
1073
  # Initialize the Agent
1060
1074
  self.initialize_agent(debug_mode=debug_mode)
1061
1075
 
1076
+ image_artifacts, video_artifacts, audio_artifacts = self._convert_media_to_artifacts(
1077
+ images=images, videos=videos, audios=audio
1078
+ )
1079
+
1080
+ # Create RunInput to capture the original user input
1081
+ run_input = RunInput(
1082
+ input_content=input, images=image_artifacts, videos=video_artifacts, audios=audio_artifacts, files=files
1083
+ )
1084
+
1062
1085
  # Read existing session from database
1063
1086
  agent_session = self._read_or_create_session(session_id=session_id, user_id=user_id)
1064
1087
  self._update_metadata(session=agent_session)
@@ -1128,6 +1151,7 @@ class Agent:
1128
1151
  agent_id=self.id,
1129
1152
  agent_name=self.name,
1130
1153
  metadata=metadata,
1154
+ input=run_input,
1131
1155
  )
1132
1156
 
1133
1157
  run_response.model = self.model.id if self.model is not None else None
@@ -1305,6 +1329,11 @@ class Agent:
1305
1329
  # 3. Update the RunOutput with the model response
1306
1330
  self._update_run_response(model_response=model_response, run_response=run_response, run_messages=run_messages)
1307
1331
 
1332
+ if self.store_media:
1333
+ self._store_media(run_response, model_response)
1334
+ else:
1335
+ self._scrub_media_from_run_output(run_response)
1336
+
1308
1337
  # We should break out of the run function
1309
1338
  if any(tool_call.is_paused for tool_call in run_response.tools or []):
1310
1339
  return self._handle_agent_run_paused(
@@ -1613,6 +1642,15 @@ class Agent:
1613
1642
  # Initialize the Agent
1614
1643
  self.initialize_agent(debug_mode=debug_mode)
1615
1644
 
1645
+ image_artifacts, video_artifacts, audio_artifacts = self._convert_media_to_artifacts(
1646
+ images=images, videos=videos, audios=audio
1647
+ )
1648
+
1649
+ # Create RunInput to capture the original user input
1650
+ run_input = RunInput(
1651
+ input_content=input, images=image_artifacts, videos=video_artifacts, audios=audio_artifacts, files=files
1652
+ )
1653
+
1616
1654
  # Read existing session from storage
1617
1655
  agent_session = self._read_or_create_session(session_id=session_id, user_id=user_id)
1618
1656
  self._update_metadata(session=agent_session)
@@ -1679,6 +1717,7 @@ class Agent:
1679
1717
  agent_id=self.id,
1680
1718
  agent_name=self.name,
1681
1719
  metadata=metadata,
1720
+ input=run_input,
1682
1721
  )
1683
1722
 
1684
1723
  run_response.model = self.model.id if self.model is not None else None
@@ -2942,6 +2981,21 @@ class Agent:
2942
2981
  _t.requires_user_input = False
2943
2982
  _t.answered = True
2944
2983
 
2984
+ def _store_media(self, run_response: RunOutput, model_response: ModelResponse):
2985
+ """Store media from model response in run_response for persistence"""
2986
+ # Handle generated media fields from ModelResponse (generated media)
2987
+ if model_response.images is not None:
2988
+ for image in model_response.images:
2989
+ self._add_image(image, run_response) # Generated images go to run_response.images
2990
+
2991
+ if model_response.videos is not None:
2992
+ for video in model_response.videos:
2993
+ self._add_video(video, run_response) # Generated videos go to run_response.videos
2994
+
2995
+ if model_response.audios is not None:
2996
+ for audio in model_response.audios:
2997
+ self._add_audio(audio, run_response) # Generated audio go to run_response.audio
2998
+
2945
2999
  def _update_run_response(self, model_response: ModelResponse, run_response: RunOutput, run_messages: RunMessages):
2946
3000
  # Handle structured outputs
2947
3001
  if self.output_schema is not None and model_response.parsed is not None:
@@ -2984,19 +3038,6 @@ class Agent:
2984
3038
  run_response=run_response, tool_name=tool_name, tool_args=tool_args
2985
3039
  )
2986
3040
 
2987
- # Handle unified media fields from ModelResponse
2988
- if model_response.images is not None:
2989
- for image in model_response.images:
2990
- self._add_image(image, run_response)
2991
-
2992
- if model_response.videos is not None:
2993
- for video in model_response.videos:
2994
- self._add_video(video, run_response)
2995
-
2996
- if model_response.audios is not None:
2997
- for audio in model_response.audios:
2998
- self._add_audio(audio, run_response)
2999
-
3000
3041
  # Update the run_response audio with the model response audio
3001
3042
  if model_response.audio is not None:
3002
3043
  run_response.response_audio = model_response.audio
@@ -3704,6 +3745,209 @@ class Agent:
3704
3745
 
3705
3746
  return agent_tools
3706
3747
 
3748
+ def _collect_joint_images(
3749
+ self,
3750
+ run_input: Optional[RunInput] = None,
3751
+ session: Optional[AgentSession] = None,
3752
+ ) -> Optional[Sequence[Image]]:
3753
+ """Collect images from input, session history, and current run response."""
3754
+ joint_images = []
3755
+
3756
+ # 1. Add images from current input
3757
+ if run_input and run_input.images:
3758
+ for artifact in run_input.images:
3759
+ try:
3760
+ if artifact.url:
3761
+ joint_images.append(Image(url=artifact.url))
3762
+ elif artifact.content:
3763
+ joint_images.append(Image(content=artifact.content))
3764
+ except Exception as e:
3765
+ log_warning(f"Error converting ImageArtifact to Image: {e}")
3766
+ continue
3767
+ log_debug(f"Added {len(run_input.images)} input images to joint list")
3768
+
3769
+ # 2. Add images from session history (from both input and generated sources)
3770
+ try:
3771
+ if session and session.runs:
3772
+ for historical_run in session.runs:
3773
+ # Add generated images from previous runs
3774
+ if historical_run.images:
3775
+ for artifact in historical_run.images:
3776
+ try:
3777
+ if artifact.url:
3778
+ joint_images.append(Image(url=artifact.url))
3779
+ elif artifact.content:
3780
+ joint_images.append(Image(content=artifact.content))
3781
+ except Exception as e:
3782
+ log_warning(f"Error converting historical ImageArtifact to Image: {e}")
3783
+ continue
3784
+ log_debug(
3785
+ f"Added {len(historical_run.images)} generated images from historical run {historical_run.run_id}"
3786
+ )
3787
+
3788
+ # Add input images from previous runs
3789
+ if historical_run.input and historical_run.input.images:
3790
+ for artifact in historical_run.input.images:
3791
+ try:
3792
+ if artifact.url:
3793
+ joint_images.append(Image(url=artifact.url))
3794
+ elif artifact.content:
3795
+ joint_images.append(Image(content=artifact.content))
3796
+ except Exception as e:
3797
+ log_warning(f"Error converting input ImageArtifact to Image: {e}")
3798
+ continue
3799
+ log_debug(
3800
+ f"Added {len(historical_run.input.images)} input images from historical run {historical_run.run_id}"
3801
+ )
3802
+ except Exception as e:
3803
+ log_debug(f"Could not access session history for images: {e}")
3804
+
3805
+ if joint_images:
3806
+ log_debug(f"Images Available to Model: {len(joint_images)} images")
3807
+ return joint_images if joint_images else None
3808
+
3809
+ def _collect_joint_videos(
3810
+ self,
3811
+ run_input: Optional[RunInput] = None,
3812
+ session: Optional[AgentSession] = None,
3813
+ ) -> Optional[Sequence[Video]]:
3814
+ """Collect videos from input, session history, and current run response."""
3815
+ joint_videos = []
3816
+
3817
+ # 1. Add videos from current input
3818
+ if run_input and run_input.videos:
3819
+ for artifact in run_input.videos:
3820
+ try:
3821
+ if artifact.url:
3822
+ joint_videos.append(Video(url=artifact.url))
3823
+ elif artifact.content:
3824
+ joint_videos.append(Video(content=artifact.content))
3825
+ except Exception as e:
3826
+ log_warning(f"Error converting VideoArtifact to Video: {e}")
3827
+ continue
3828
+ log_debug(f"Added {len(run_input.videos)} input videos to joint list")
3829
+
3830
+ # 2. Add videos from session history (from both input and generated sources)
3831
+ try:
3832
+ if session and session.runs:
3833
+ for historical_run in session.runs:
3834
+ # Add generated videos from previous runs
3835
+ if historical_run.videos:
3836
+ for artifact in historical_run.videos:
3837
+ try:
3838
+ if artifact.url:
3839
+ joint_videos.append(Video(url=artifact.url))
3840
+ elif artifact.content:
3841
+ joint_videos.append(Video(content=artifact.content))
3842
+ except Exception as e:
3843
+ log_warning(f"Error converting historical VideoArtifact to Video: {e}")
3844
+ continue
3845
+ log_debug(
3846
+ f"Added {len(historical_run.videos)} generated videos from historical run {historical_run.run_id}"
3847
+ )
3848
+
3849
+ # Add input videos from previous runs
3850
+ if historical_run.input and historical_run.input.videos:
3851
+ for artifact in historical_run.input.videos:
3852
+ try:
3853
+ if artifact.url:
3854
+ joint_videos.append(Video(url=artifact.url))
3855
+ elif artifact.content:
3856
+ joint_videos.append(Video(content=artifact.content))
3857
+ except Exception as e:
3858
+ log_warning(f"Error converting input VideoArtifact to Video: {e}")
3859
+ continue
3860
+ log_debug(
3861
+ f"Added {len(historical_run.input.videos)} input videos from historical run {historical_run.run_id}"
3862
+ )
3863
+ except Exception as e:
3864
+ log_debug(f"Could not access session history for videos: {e}")
3865
+
3866
+ if joint_videos:
3867
+ log_debug(f"Videos Available to Model: {len(joint_videos)} videos")
3868
+ return joint_videos if joint_videos else None
3869
+
3870
+ def _collect_joint_audios(
3871
+ self,
3872
+ run_input: Optional[RunInput] = None,
3873
+ session: Optional[AgentSession] = None,
3874
+ ) -> Optional[Sequence[Audio]]:
3875
+ """Collect audios from input, session history, and current run response."""
3876
+ joint_audios = []
3877
+
3878
+ # 1. Add audios from current input
3879
+ if run_input and run_input.audios:
3880
+ for artifact in run_input.audios:
3881
+ try:
3882
+ if artifact.url:
3883
+ joint_audios.append(Audio(url=artifact.url))
3884
+ elif artifact.base64_audio:
3885
+ joint_audios.append(Audio(content=artifact.base64_audio))
3886
+ except Exception as e:
3887
+ log_warning(f"Error converting AudioArtifact to Audio: {e}")
3888
+ continue
3889
+ log_debug(f"Added {len(run_input.audios)} input audios to joint list")
3890
+
3891
+ # 2. Add audios from session history (from both input and generated sources)
3892
+ try:
3893
+ if session and session.runs:
3894
+ for historical_run in session.runs:
3895
+ # Add generated audios from previous runs
3896
+ if historical_run.audio:
3897
+ for artifact in historical_run.audio:
3898
+ try:
3899
+ if artifact.url:
3900
+ joint_audios.append(Audio(url=artifact.url))
3901
+ elif artifact.base64_audio:
3902
+ joint_audios.append(Audio(content=artifact.base64_audio))
3903
+ except Exception as e:
3904
+ log_warning(f"Error converting historical AudioArtifact to Audio: {e}")
3905
+ continue
3906
+ log_debug(
3907
+ f"Added {len(historical_run.audio)} generated audios from historical run {historical_run.run_id}"
3908
+ )
3909
+
3910
+ # Add input audios from previous runs
3911
+ if historical_run.input and historical_run.input.audios:
3912
+ for artifact in historical_run.input.audios:
3913
+ try:
3914
+ if artifact.url:
3915
+ joint_audios.append(Audio(url=artifact.url))
3916
+ elif artifact.base64_audio:
3917
+ joint_audios.append(Audio(content=artifact.base64_audio))
3918
+ except Exception as e:
3919
+ log_warning(f"Error converting input AudioArtifact to Audio: {e}")
3920
+ continue
3921
+ log_debug(
3922
+ f"Added {len(historical_run.input.audios)} input audios from historical run {historical_run.run_id}"
3923
+ )
3924
+ except Exception as e:
3925
+ log_debug(f"Could not access session history for audios: {e}")
3926
+
3927
+ if joint_audios:
3928
+ log_debug(f"Audios Available to Model: {len(joint_audios)} audios")
3929
+ return joint_audios if joint_audios else None
3930
+
3931
+ def _collect_joint_files(
3932
+ self,
3933
+ run_input: Optional[RunInput] = None,
3934
+ ) -> Optional[Sequence[File]]:
3935
+ """Collect files from input and session history."""
3936
+ from agno.utils.log import log_debug
3937
+
3938
+ joint_files: List[File] = []
3939
+
3940
+ # 1. Add files from current input
3941
+ if run_input and run_input.files:
3942
+ joint_files.extend(run_input.files)
3943
+
3944
+ # TODO: Files aren't stored in session history yet and dont have a FileArtifact
3945
+
3946
+ if joint_files:
3947
+ log_debug(f"Files Available to Model: {len(joint_files)} files")
3948
+
3949
+ return joint_files if joint_files else None
3950
+
3707
3951
  def _determine_tools_for_model(
3708
3952
  self,
3709
3953
  model: Model,
@@ -3802,8 +4046,27 @@ class Agent:
3802
4046
 
3803
4047
  # Update the session state for the functions
3804
4048
  if self._functions_for_model:
4049
+ from inspect import signature
4050
+
4051
+ # Check if any functions need media before collecting
4052
+ needs_media = any(
4053
+ any(param in signature(func.entrypoint).parameters for param in ["images", "videos", "audios", "files"])
4054
+ for func in self._functions_for_model.values()
4055
+ if func.entrypoint is not None
4056
+ )
4057
+
4058
+ # Only collect media if functions actually need them
4059
+ joint_images = self._collect_joint_images(run_response.input, session) if needs_media else None
4060
+ joint_files = self._collect_joint_files(run_response.input) if needs_media else None
4061
+ joint_audios = self._collect_joint_audios(run_response.input, session) if needs_media else None
4062
+ joint_videos = self._collect_joint_videos(run_response.input, session) if needs_media else None
4063
+
3805
4064
  for func in self._functions_for_model.values():
3806
4065
  func._session_state = session_state
4066
+ func._images = joint_images
4067
+ func._files = joint_files
4068
+ func._audios = joint_audios
4069
+ func._videos = joint_videos
3807
4070
 
3808
4071
  def _model_should_return_structured_output(self):
3809
4072
  self.model = cast(Model, self.model)
@@ -4656,10 +4919,10 @@ class Agent:
4656
4919
  return Message(
4657
4920
  role=self.user_message_role,
4658
4921
  content=input,
4659
- images=images,
4660
- audio=audio,
4661
- videos=videos,
4662
- files=files,
4922
+ images=None if not self.send_media_to_model else images,
4923
+ audio=None if not self.send_media_to_model else audio,
4924
+ videos=None if not self.send_media_to_model else videos,
4925
+ files=None if not self.send_media_to_model else files,
4663
4926
  **kwargs,
4664
4927
  )
4665
4928
  # 2. Build the user message for the Agent
@@ -4669,10 +4932,10 @@ class Agent:
4669
4932
  return Message(
4670
4933
  role=self.user_message_role,
4671
4934
  content="",
4672
- images=images,
4673
- audio=audio,
4674
- videos=videos,
4675
- files=files,
4935
+ images=None if not self.send_media_to_model else images,
4936
+ audio=None if not self.send_media_to_model else audio,
4937
+ videos=None if not self.send_media_to_model else videos,
4938
+ files=None if not self.send_media_to_model else files,
4676
4939
  **kwargs,
4677
4940
  )
4678
4941
  else:
@@ -4691,10 +4954,10 @@ class Agent:
4691
4954
  return Message(
4692
4955
  role=self.user_message_role,
4693
4956
  content=message_content,
4694
- images=images,
4695
- audio=audio,
4696
- videos=videos,
4697
- files=files,
4957
+ images=None if not self.send_media_to_model else images,
4958
+ audio=None if not self.send_media_to_model else audio,
4959
+ videos=None if not self.send_media_to_model else videos,
4960
+ files=None if not self.send_media_to_model else files,
4698
4961
  **kwargs,
4699
4962
  )
4700
4963
 
@@ -4785,10 +5048,10 @@ class Agent:
4785
5048
  return Message(
4786
5049
  role=self.user_message_role,
4787
5050
  content=user_msg_content,
4788
- audio=audio,
4789
- images=images,
4790
- videos=videos,
4791
- files=files,
5051
+ audio=None if not self.send_media_to_model else audio,
5052
+ images=None if not self.send_media_to_model else images,
5053
+ videos=None if not self.send_media_to_model else videos,
5054
+ files=None if not self.send_media_to_model else files,
4792
5055
  **kwargs,
4793
5056
  )
4794
5057
 
@@ -4836,7 +5099,7 @@ class Agent:
4836
5099
  )
4837
5100
  """
4838
5101
 
4839
- # Initialize the RunMessages object
5102
+ # Initialize the RunMessages object (no media here - that's in RunInput now)
4840
5103
  run_messages = RunMessages()
4841
5104
 
4842
5105
  # 1. Add system message to run_messages
@@ -6851,6 +7114,100 @@ class Agent:
6851
7114
 
6852
7115
  return effective_filters
6853
7116
 
7117
+ def _scrub_media_from_run_output(self, run_response: RunOutput) -> None:
7118
+ """
7119
+ Completely remove all media from RunOutput when store_media=False.
7120
+ This includes media in input, output artifacts, and all messages.
7121
+ """
7122
+ # 1. Scrub RunInput media
7123
+ if run_response.input is not None:
7124
+ run_response.input.images = []
7125
+ run_response.input.videos = []
7126
+ run_response.input.audios = []
7127
+ run_response.input.files = []
7128
+
7129
+ # 2. RunOutput artifact media are skipped since we don't store them when store_media=False
7130
+
7131
+ # 3. Scrub media from all messages
7132
+ if run_response.messages:
7133
+ for message in run_response.messages:
7134
+ self._scrub_media_from_message(message)
7135
+
7136
+ # 4. Scrub media from additional_input messages if any
7137
+ if run_response.additional_input:
7138
+ for message in run_response.additional_input:
7139
+ self._scrub_media_from_message(message)
7140
+
7141
+ # 5. Scrub media from reasoning_messages if any
7142
+ if run_response.reasoning_messages:
7143
+ for message in run_response.reasoning_messages:
7144
+ self._scrub_media_from_message(message)
7145
+
7146
+ def _scrub_media_from_message(self, message: Message) -> None:
7147
+ """Remove all media from a Message object."""
7148
+ # Input media
7149
+ message.images = None
7150
+ message.videos = None
7151
+ message.audio = None
7152
+ message.files = None
7153
+
7154
+ # Output media
7155
+ message.audio_output = None
7156
+ message.image_output = None
7157
+ message.video_output = None
7158
+
7159
+ def _convert_media_to_artifacts(
7160
+ self,
7161
+ images: Optional[Sequence[Image]] = None,
7162
+ videos: Optional[Sequence[Video]] = None,
7163
+ audios: Optional[Sequence[Audio]] = None,
7164
+ ) -> tuple:
7165
+ """Convert raw Image/Video/Audio objects to ImageArtifact/VideoArtifact/AudioArtifact objects."""
7166
+ from uuid import uuid4
7167
+
7168
+ from agno.media import AudioArtifact, ImageArtifact, VideoArtifact
7169
+
7170
+ image_artifacts = None
7171
+ if images:
7172
+ image_artifacts = []
7173
+ for img in images:
7174
+ try:
7175
+ if img.url:
7176
+ image_artifacts.append(ImageArtifact(id=str(uuid4()), url=img.url))
7177
+ elif img.content:
7178
+ image_artifacts.append(ImageArtifact(id=str(uuid4()), content=img.content))
7179
+ except Exception as e:
7180
+ log_warning(f"Error creating ImageArtifact: {e}")
7181
+ continue
7182
+
7183
+ video_artifacts = None
7184
+ if videos:
7185
+ video_artifacts = []
7186
+ for vid in videos:
7187
+ try:
7188
+ if vid.url:
7189
+ video_artifacts.append(VideoArtifact(id=str(uuid4()), url=vid.url))
7190
+ elif vid.content:
7191
+ video_artifacts.append(VideoArtifact(id=str(uuid4()), content=vid.content))
7192
+ except Exception as e:
7193
+ log_warning(f"Error creating VideoArtifact: {e}")
7194
+ continue
7195
+
7196
+ audio_artifacts = None
7197
+ if audios:
7198
+ audio_artifacts = []
7199
+ for aud in audios:
7200
+ try:
7201
+ if aud.url:
7202
+ audio_artifacts.append(AudioArtifact(id=str(uuid4()), url=aud.url))
7203
+ elif aud.content:
7204
+ audio_artifacts.append(AudioArtifact(id=str(uuid4()), content=aud.content))
7205
+ except Exception as e:
7206
+ log_warning(f"Error creating AudioArtifact: {e}")
7207
+ continue
7208
+
7209
+ return image_artifacts, video_artifacts, audio_artifacts
7210
+
6854
7211
  def cli_app(
6855
7212
  self,
6856
7213
  input: Optional[str] = None,
@@ -10,7 +10,7 @@ def create_agent_run(run: AgentRunCreate) -> None:
10
10
  try:
11
11
  api_client.post(
12
12
  ApiRoutes.RUN_CREATE,
13
- json={"run": run.model_dump(exclude_none=True)},
13
+ json=run.model_dump(exclude_none=True),
14
14
  )
15
15
  except Exception as e:
16
16
  log_debug(f"Could not create Agent run: {e}")
@@ -22,7 +22,7 @@ async def acreate_agent_run(run: AgentRunCreate) -> None:
22
22
  try:
23
23
  await api_client.post(
24
24
  ApiRoutes.RUN_CREATE,
25
- json={"run": run.model_dump(exclude_none=True)},
25
+ json=run.model_dump(exclude_none=True),
26
26
  )
27
27
  except Exception as e:
28
28
  log_debug(f"Could not create Agent run: {e}")
@@ -8,7 +8,7 @@ def create_eval_run_telemetry(eval_run: EvalRunCreate) -> None:
8
8
  """Telemetry recording for Eval runs"""
9
9
  with api.Client() as api_client:
10
10
  try:
11
- api_client.post(ApiRoutes.EVAL_RUN_CREATE, json={"eval_run": eval_run.model_dump(exclude_none=True)})
11
+ api_client.post(ApiRoutes.EVAL_RUN_CREATE, json=eval_run.model_dump(exclude_none=True))
12
12
  except Exception as e:
13
13
  log_debug(f"Could not create evaluation run: {e}")
14
14
 
@@ -17,6 +17,6 @@ async def async_create_eval_run_telemetry(eval_run: EvalRunCreate) -> None:
17
17
  """Telemetry recording for async Eval runs"""
18
18
  async with api.AsyncClient() as api_client:
19
19
  try:
20
- await api_client.post(ApiRoutes.EVAL_RUN_CREATE, json={"eval_run": eval_run.model_dump(exclude_none=True)})
20
+ await api_client.post(ApiRoutes.EVAL_RUN_CREATE, json=eval_run.model_dump(exclude_none=True))
21
21
  except Exception as e:
22
22
  log_debug(f"Could not create evaluation run: {e}")
@@ -10,7 +10,7 @@ def log_os_telemetry(launch: OSLaunch) -> None:
10
10
  try:
11
11
  response = api_client.post(
12
12
  ApiRoutes.AGENT_OS_LAUNCH,
13
- json={"launch": launch.model_dump(exclude_none=True)},
13
+ json=launch.model_dump(exclude_none=True),
14
14
  )
15
15
  response.raise_for_status()
16
16
  except Exception as e:
@@ -16,7 +16,7 @@ class AgnoAPISettings(BaseSettings):
16
16
  api_runtime: str = "prd"
17
17
  alpha_features: bool = False
18
18
 
19
- api_url: str = "https://api.agno.com"
19
+ api_url: str = "https://os-api.agno.com"
20
20
 
21
21
  model_config = SettingsConfigDict(env_prefix="AGNO_")
22
22
 
@@ -42,7 +42,7 @@ class AgnoAPISettings(BaseSettings):
42
42
  elif api_runtime == "stg":
43
43
  return "https://api-stg.agno.com"
44
44
  else:
45
- return "https://api.agno.com"
45
+ return "https://os-api.agno.com"
46
46
 
47
47
  def gate_alpha_feature(self):
48
48
  if not self.alpha_features:
@@ -10,7 +10,7 @@ def create_team_run(run: TeamRunCreate) -> None:
10
10
  try:
11
11
  response = api_client.post(
12
12
  ApiRoutes.RUN_CREATE,
13
- json={"run": run.model_dump(exclude_none=True)},
13
+ json=run.model_dump(exclude_none=True),
14
14
  )
15
15
  response.raise_for_status()
16
16
  except Exception as e:
@@ -23,7 +23,7 @@ async def acreate_team_run(run: TeamRunCreate) -> None:
23
23
  try:
24
24
  response = await api_client.post(
25
25
  ApiRoutes.RUN_CREATE,
26
- json={"run": run.model_dump(exclude_none=True)},
26
+ json=run.model_dump(exclude_none=True),
27
27
  )
28
28
  response.raise_for_status()
29
29
  except Exception as e: