agno 2.4.3__tar.gz → 2.4.5__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 (686) hide show
  1. {agno-2.4.3 → agno-2.4.5}/PKG-INFO +5 -2
  2. {agno-2.4.3 → agno-2.4.5}/README.md +1 -1
  3. {agno-2.4.3 → agno-2.4.5}/agno/agent/agent.py +45 -38
  4. {agno-2.4.3 → agno-2.4.5}/agno/db/firestore/firestore.py +53 -30
  5. {agno-2.4.3 → agno-2.4.5}/agno/db/surrealdb/models.py +5 -5
  6. {agno-2.4.3 → agno-2.4.5}/agno/db/surrealdb/surrealdb.py +13 -1
  7. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/markdown.py +112 -11
  8. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/knowledge.py +8 -10
  9. {agno-2.4.3 → agno-2.4.5}/agno/models/base.py +6 -0
  10. agno-2.4.5/agno/models/moonshot/__init__.py +3 -0
  11. agno-2.4.5/agno/models/moonshot/moonshot.py +57 -0
  12. {agno-2.4.3 → agno-2.4.5}/agno/models/response.py +4 -0
  13. {agno-2.4.3 → agno-2.4.5}/agno/models/utils.py +5 -0
  14. {agno-2.4.3 → agno-2.4.5}/agno/team/team.py +27 -20
  15. {agno-2.4.3 → agno-2.4.5}/agno/tools/decorator.py +3 -0
  16. {agno-2.4.3 → agno-2.4.5}/agno/tools/function.py +3 -0
  17. agno-2.4.5/agno/tools/seltz.py +134 -0
  18. agno-2.4.5/agno/tools/unsplash.py +341 -0
  19. {agno-2.4.3 → agno-2.4.5}/agno/utils/print_response/agent.py +8 -5
  20. {agno-2.4.3 → agno-2.4.5}/agno/utils/response.py +38 -28
  21. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/lancedb/lance_db.py +29 -7
  22. {agno-2.4.3 → agno-2.4.5}/agno/workflow/workflow.py +8 -0
  23. {agno-2.4.3 → agno-2.4.5}/agno.egg-info/PKG-INFO +5 -2
  24. {agno-2.4.3 → agno-2.4.5}/agno.egg-info/SOURCES.txt +4 -0
  25. {agno-2.4.3 → agno-2.4.5}/agno.egg-info/requires.txt +4 -0
  26. {agno-2.4.3 → agno-2.4.5}/pyproject.toml +4 -1
  27. {agno-2.4.3 → agno-2.4.5}/LICENSE +0 -0
  28. {agno-2.4.3 → agno-2.4.5}/agno/__init__.py +0 -0
  29. {agno-2.4.3 → agno-2.4.5}/agno/agent/__init__.py +0 -0
  30. {agno-2.4.3 → agno-2.4.5}/agno/agent/remote.py +0 -0
  31. {agno-2.4.3 → agno-2.4.5}/agno/api/__init__.py +0 -0
  32. {agno-2.4.3 → agno-2.4.5}/agno/api/agent.py +0 -0
  33. {agno-2.4.3 → agno-2.4.5}/agno/api/api.py +0 -0
  34. {agno-2.4.3 → agno-2.4.5}/agno/api/evals.py +0 -0
  35. {agno-2.4.3 → agno-2.4.5}/agno/api/os.py +0 -0
  36. {agno-2.4.3 → agno-2.4.5}/agno/api/routes.py +0 -0
  37. {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/__init__.py +0 -0
  38. {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/agent.py +0 -0
  39. {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/evals.py +0 -0
  40. {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/os.py +0 -0
  41. {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/response.py +0 -0
  42. {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/team.py +0 -0
  43. {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/utils.py +0 -0
  44. {agno-2.4.3 → agno-2.4.5}/agno/api/schemas/workflows.py +0 -0
  45. {agno-2.4.3 → agno-2.4.5}/agno/api/settings.py +0 -0
  46. {agno-2.4.3 → agno-2.4.5}/agno/api/team.py +0 -0
  47. {agno-2.4.3 → agno-2.4.5}/agno/api/workflow.py +0 -0
  48. {agno-2.4.3 → agno-2.4.5}/agno/client/__init__.py +0 -0
  49. {agno-2.4.3 → agno-2.4.5}/agno/client/a2a/__init__.py +0 -0
  50. {agno-2.4.3 → agno-2.4.5}/agno/client/a2a/client.py +0 -0
  51. {agno-2.4.3 → agno-2.4.5}/agno/client/a2a/schemas.py +0 -0
  52. {agno-2.4.3 → agno-2.4.5}/agno/client/a2a/utils.py +0 -0
  53. {agno-2.4.3 → agno-2.4.5}/agno/client/os.py +0 -0
  54. {agno-2.4.3 → agno-2.4.5}/agno/cloud/aws/base.py +0 -0
  55. {agno-2.4.3 → agno-2.4.5}/agno/cloud/aws/s3/__init__.py +0 -0
  56. {agno-2.4.3 → agno-2.4.5}/agno/cloud/aws/s3/api_client.py +0 -0
  57. {agno-2.4.3 → agno-2.4.5}/agno/cloud/aws/s3/bucket.py +0 -0
  58. {agno-2.4.3 → agno-2.4.5}/agno/cloud/aws/s3/object.py +0 -0
  59. {agno-2.4.3 → agno-2.4.5}/agno/compression/__init__.py +0 -0
  60. {agno-2.4.3 → agno-2.4.5}/agno/compression/manager.py +0 -0
  61. {agno-2.4.3 → agno-2.4.5}/agno/culture/__init__.py +0 -0
  62. {agno-2.4.3 → agno-2.4.5}/agno/culture/manager.py +0 -0
  63. {agno-2.4.3 → agno-2.4.5}/agno/db/__init__.py +0 -0
  64. {agno-2.4.3 → agno-2.4.5}/agno/db/async_postgres/__init__.py +0 -0
  65. {agno-2.4.3 → agno-2.4.5}/agno/db/base.py +0 -0
  66. {agno-2.4.3 → agno-2.4.5}/agno/db/dynamo/__init__.py +0 -0
  67. {agno-2.4.3 → agno-2.4.5}/agno/db/dynamo/dynamo.py +0 -0
  68. {agno-2.4.3 → agno-2.4.5}/agno/db/dynamo/schemas.py +0 -0
  69. {agno-2.4.3 → agno-2.4.5}/agno/db/dynamo/utils.py +0 -0
  70. {agno-2.4.3 → agno-2.4.5}/agno/db/firestore/__init__.py +0 -0
  71. {agno-2.4.3 → agno-2.4.5}/agno/db/firestore/schemas.py +0 -0
  72. {agno-2.4.3 → agno-2.4.5}/agno/db/firestore/utils.py +0 -0
  73. {agno-2.4.3 → agno-2.4.5}/agno/db/gcs_json/__init__.py +0 -0
  74. {agno-2.4.3 → agno-2.4.5}/agno/db/gcs_json/gcs_json_db.py +0 -0
  75. {agno-2.4.3 → agno-2.4.5}/agno/db/gcs_json/utils.py +0 -0
  76. {agno-2.4.3 → agno-2.4.5}/agno/db/in_memory/__init__.py +0 -0
  77. {agno-2.4.3 → agno-2.4.5}/agno/db/in_memory/in_memory_db.py +0 -0
  78. {agno-2.4.3 → agno-2.4.5}/agno/db/in_memory/utils.py +0 -0
  79. {agno-2.4.3 → agno-2.4.5}/agno/db/json/__init__.py +0 -0
  80. {agno-2.4.3 → agno-2.4.5}/agno/db/json/json_db.py +0 -0
  81. {agno-2.4.3 → agno-2.4.5}/agno/db/json/utils.py +0 -0
  82. {agno-2.4.3 → agno-2.4.5}/agno/db/migrations/__init__.py +0 -0
  83. {agno-2.4.3 → agno-2.4.5}/agno/db/migrations/manager.py +0 -0
  84. {agno-2.4.3 → agno-2.4.5}/agno/db/migrations/utils.py +0 -0
  85. {agno-2.4.3 → agno-2.4.5}/agno/db/migrations/v1_to_v2.py +0 -0
  86. {agno-2.4.3 → agno-2.4.5}/agno/db/migrations/versions/__init__.py +0 -0
  87. {agno-2.4.3 → agno-2.4.5}/agno/db/migrations/versions/v2_3_0.py +0 -0
  88. {agno-2.4.3 → agno-2.4.5}/agno/db/mongo/__init__.py +0 -0
  89. {agno-2.4.3 → agno-2.4.5}/agno/db/mongo/async_mongo.py +0 -0
  90. {agno-2.4.3 → agno-2.4.5}/agno/db/mongo/mongo.py +0 -0
  91. {agno-2.4.3 → agno-2.4.5}/agno/db/mongo/schemas.py +0 -0
  92. {agno-2.4.3 → agno-2.4.5}/agno/db/mongo/utils.py +0 -0
  93. {agno-2.4.3 → agno-2.4.5}/agno/db/mysql/__init__.py +0 -0
  94. {agno-2.4.3 → agno-2.4.5}/agno/db/mysql/async_mysql.py +0 -0
  95. {agno-2.4.3 → agno-2.4.5}/agno/db/mysql/mysql.py +0 -0
  96. {agno-2.4.3 → agno-2.4.5}/agno/db/mysql/schemas.py +0 -0
  97. {agno-2.4.3 → agno-2.4.5}/agno/db/mysql/utils.py +0 -0
  98. {agno-2.4.3 → agno-2.4.5}/agno/db/postgres/__init__.py +0 -0
  99. {agno-2.4.3 → agno-2.4.5}/agno/db/postgres/async_postgres.py +0 -0
  100. {agno-2.4.3 → agno-2.4.5}/agno/db/postgres/postgres.py +0 -0
  101. {agno-2.4.3 → agno-2.4.5}/agno/db/postgres/schemas.py +0 -0
  102. {agno-2.4.3 → agno-2.4.5}/agno/db/postgres/utils.py +0 -0
  103. {agno-2.4.3 → agno-2.4.5}/agno/db/redis/__init__.py +0 -0
  104. {agno-2.4.3 → agno-2.4.5}/agno/db/redis/redis.py +0 -0
  105. {agno-2.4.3 → agno-2.4.5}/agno/db/redis/schemas.py +0 -0
  106. {agno-2.4.3 → agno-2.4.5}/agno/db/redis/utils.py +0 -0
  107. {agno-2.4.3 → agno-2.4.5}/agno/db/schemas/__init__.py +0 -0
  108. {agno-2.4.3 → agno-2.4.5}/agno/db/schemas/culture.py +0 -0
  109. {agno-2.4.3 → agno-2.4.5}/agno/db/schemas/evals.py +0 -0
  110. {agno-2.4.3 → agno-2.4.5}/agno/db/schemas/knowledge.py +0 -0
  111. {agno-2.4.3 → agno-2.4.5}/agno/db/schemas/memory.py +0 -0
  112. {agno-2.4.3 → agno-2.4.5}/agno/db/schemas/metrics.py +0 -0
  113. {agno-2.4.3 → agno-2.4.5}/agno/db/singlestore/__init__.py +0 -0
  114. {agno-2.4.3 → agno-2.4.5}/agno/db/singlestore/schemas.py +0 -0
  115. {agno-2.4.3 → agno-2.4.5}/agno/db/singlestore/singlestore.py +0 -0
  116. {agno-2.4.3 → agno-2.4.5}/agno/db/singlestore/utils.py +0 -0
  117. {agno-2.4.3 → agno-2.4.5}/agno/db/sqlite/__init__.py +0 -0
  118. {agno-2.4.3 → agno-2.4.5}/agno/db/sqlite/async_sqlite.py +0 -0
  119. {agno-2.4.3 → agno-2.4.5}/agno/db/sqlite/schemas.py +0 -0
  120. {agno-2.4.3 → agno-2.4.5}/agno/db/sqlite/sqlite.py +0 -0
  121. {agno-2.4.3 → agno-2.4.5}/agno/db/sqlite/utils.py +0 -0
  122. {agno-2.4.3 → agno-2.4.5}/agno/db/surrealdb/__init__.py +0 -0
  123. {agno-2.4.3 → agno-2.4.5}/agno/db/surrealdb/metrics.py +0 -0
  124. {agno-2.4.3 → agno-2.4.5}/agno/db/surrealdb/queries.py +0 -0
  125. {agno-2.4.3 → agno-2.4.5}/agno/db/surrealdb/utils.py +0 -0
  126. {agno-2.4.3 → agno-2.4.5}/agno/db/utils.py +0 -0
  127. {agno-2.4.3 → agno-2.4.5}/agno/debug.py +0 -0
  128. {agno-2.4.3 → agno-2.4.5}/agno/eval/__init__.py +0 -0
  129. {agno-2.4.3 → agno-2.4.5}/agno/eval/accuracy.py +0 -0
  130. {agno-2.4.3 → agno-2.4.5}/agno/eval/agent_as_judge.py +0 -0
  131. {agno-2.4.3 → agno-2.4.5}/agno/eval/base.py +0 -0
  132. {agno-2.4.3 → agno-2.4.5}/agno/eval/performance.py +0 -0
  133. {agno-2.4.3 → agno-2.4.5}/agno/eval/reliability.py +0 -0
  134. {agno-2.4.3 → agno-2.4.5}/agno/eval/utils.py +0 -0
  135. {agno-2.4.3 → agno-2.4.5}/agno/exceptions.py +0 -0
  136. {agno-2.4.3 → agno-2.4.5}/agno/filters.py +0 -0
  137. {agno-2.4.3 → agno-2.4.5}/agno/guardrails/__init__.py +0 -0
  138. {agno-2.4.3 → agno-2.4.5}/agno/guardrails/base.py +0 -0
  139. {agno-2.4.3 → agno-2.4.5}/agno/guardrails/openai.py +0 -0
  140. {agno-2.4.3 → agno-2.4.5}/agno/guardrails/pii.py +0 -0
  141. {agno-2.4.3 → agno-2.4.5}/agno/guardrails/prompt_injection.py +0 -0
  142. {agno-2.4.3 → agno-2.4.5}/agno/hooks/__init__.py +0 -0
  143. {agno-2.4.3 → agno-2.4.5}/agno/hooks/decorator.py +0 -0
  144. {agno-2.4.3 → agno-2.4.5}/agno/integrations/__init__.py +0 -0
  145. {agno-2.4.3 → agno-2.4.5}/agno/integrations/discord/__init__.py +0 -0
  146. {agno-2.4.3 → agno-2.4.5}/agno/integrations/discord/client.py +0 -0
  147. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/__init__.py +0 -0
  148. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/__init__.py +0 -0
  149. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/agentic.py +0 -0
  150. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/code.py +0 -0
  151. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/document.py +0 -0
  152. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/fixed.py +0 -0
  153. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/recursive.py +0 -0
  154. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/row.py +0 -0
  155. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/semantic.py +0 -0
  156. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/chunking/strategy.py +0 -0
  157. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/content.py +0 -0
  158. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/document/__init__.py +0 -0
  159. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/document/base.py +0 -0
  160. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/__init__.py +0 -0
  161. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/aws_bedrock.py +0 -0
  162. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/azure_openai.py +0 -0
  163. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/base.py +0 -0
  164. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/cohere.py +0 -0
  165. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/fastembed.py +0 -0
  166. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/fireworks.py +0 -0
  167. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/google.py +0 -0
  168. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/huggingface.py +0 -0
  169. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/jina.py +0 -0
  170. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/langdb.py +0 -0
  171. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/mistral.py +0 -0
  172. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/nebius.py +0 -0
  173. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/ollama.py +0 -0
  174. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/openai.py +0 -0
  175. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  176. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/together.py +0 -0
  177. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/vllm.py +0 -0
  178. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/embedder/voyageai.py +0 -0
  179. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/filesystem.py +0 -0
  180. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/protocol.py +0 -0
  181. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/__init__.py +0 -0
  182. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/arxiv_reader.py +0 -0
  183. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/base.py +0 -0
  184. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/csv_reader.py +0 -0
  185. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/docx_reader.py +0 -0
  186. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/excel_reader.py +0 -0
  187. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
  188. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  189. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/json_reader.py +0 -0
  190. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/markdown_reader.py +0 -0
  191. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/pdf_reader.py +0 -0
  192. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/pptx_reader.py +0 -0
  193. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/reader_factory.py +0 -0
  194. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/s3_reader.py +0 -0
  195. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/tavily_reader.py +0 -0
  196. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/text_reader.py +0 -0
  197. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/utils/__init__.py +0 -0
  198. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/utils/spreadsheet.py +0 -0
  199. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/web_search_reader.py +0 -0
  200. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/website_reader.py +0 -0
  201. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  202. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reader/youtube_reader.py +0 -0
  203. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/remote_content/__init__.py +0 -0
  204. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/remote_content/config.py +0 -0
  205. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/remote_content/remote_content.py +0 -0
  206. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reranker/__init__.py +0 -0
  207. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reranker/base.py +0 -0
  208. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reranker/cohere.py +0 -0
  209. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reranker/infinity.py +0 -0
  210. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  211. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/types.py +0 -0
  212. {agno-2.4.3 → agno-2.4.5}/agno/knowledge/utils.py +0 -0
  213. {agno-2.4.3 → agno-2.4.5}/agno/learn/__init__.py +0 -0
  214. {agno-2.4.3 → agno-2.4.5}/agno/learn/config.py +0 -0
  215. {agno-2.4.3 → agno-2.4.5}/agno/learn/curate.py +0 -0
  216. {agno-2.4.3 → agno-2.4.5}/agno/learn/machine.py +0 -0
  217. {agno-2.4.3 → agno-2.4.5}/agno/learn/schemas.py +0 -0
  218. {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/__init__.py +0 -0
  219. {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/decision_log.py +0 -0
  220. {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/entity_memory.py +0 -0
  221. {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/learned_knowledge.py +0 -0
  222. {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/protocol.py +0 -0
  223. {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/session_context.py +0 -0
  224. {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/user_memory.py +0 -0
  225. {agno-2.4.3 → agno-2.4.5}/agno/learn/stores/user_profile.py +0 -0
  226. {agno-2.4.3 → agno-2.4.5}/agno/learn/utils.py +0 -0
  227. {agno-2.4.3 → agno-2.4.5}/agno/media.py +0 -0
  228. {agno-2.4.3 → agno-2.4.5}/agno/memory/__init__.py +0 -0
  229. {agno-2.4.3 → agno-2.4.5}/agno/memory/manager.py +0 -0
  230. {agno-2.4.3 → agno-2.4.5}/agno/memory/strategies/__init__.py +0 -0
  231. {agno-2.4.3 → agno-2.4.5}/agno/memory/strategies/base.py +0 -0
  232. {agno-2.4.3 → agno-2.4.5}/agno/memory/strategies/summarize.py +0 -0
  233. {agno-2.4.3 → agno-2.4.5}/agno/memory/strategies/types.py +0 -0
  234. {agno-2.4.3 → agno-2.4.5}/agno/models/__init__.py +0 -0
  235. {agno-2.4.3 → agno-2.4.5}/agno/models/aimlapi/__init__.py +0 -0
  236. {agno-2.4.3 → agno-2.4.5}/agno/models/aimlapi/aimlapi.py +0 -0
  237. {agno-2.4.3 → agno-2.4.5}/agno/models/anthropic/__init__.py +0 -0
  238. {agno-2.4.3 → agno-2.4.5}/agno/models/anthropic/claude.py +0 -0
  239. {agno-2.4.3 → agno-2.4.5}/agno/models/aws/__init__.py +0 -0
  240. {agno-2.4.3 → agno-2.4.5}/agno/models/aws/bedrock.py +0 -0
  241. {agno-2.4.3 → agno-2.4.5}/agno/models/aws/claude.py +0 -0
  242. {agno-2.4.3 → agno-2.4.5}/agno/models/azure/__init__.py +0 -0
  243. {agno-2.4.3 → agno-2.4.5}/agno/models/azure/ai_foundry.py +0 -0
  244. {agno-2.4.3 → agno-2.4.5}/agno/models/azure/openai_chat.py +0 -0
  245. {agno-2.4.3 → agno-2.4.5}/agno/models/cerebras/__init__.py +0 -0
  246. {agno-2.4.3 → agno-2.4.5}/agno/models/cerebras/cerebras.py +0 -0
  247. {agno-2.4.3 → agno-2.4.5}/agno/models/cerebras/cerebras_openai.py +0 -0
  248. {agno-2.4.3 → agno-2.4.5}/agno/models/cohere/__init__.py +0 -0
  249. {agno-2.4.3 → agno-2.4.5}/agno/models/cohere/chat.py +0 -0
  250. {agno-2.4.3 → agno-2.4.5}/agno/models/cometapi/__init__.py +0 -0
  251. {agno-2.4.3 → agno-2.4.5}/agno/models/cometapi/cometapi.py +0 -0
  252. {agno-2.4.3 → agno-2.4.5}/agno/models/dashscope/__init__.py +0 -0
  253. {agno-2.4.3 → agno-2.4.5}/agno/models/dashscope/dashscope.py +0 -0
  254. {agno-2.4.3 → agno-2.4.5}/agno/models/deepinfra/__init__.py +0 -0
  255. {agno-2.4.3 → agno-2.4.5}/agno/models/deepinfra/deepinfra.py +0 -0
  256. {agno-2.4.3 → agno-2.4.5}/agno/models/deepseek/__init__.py +0 -0
  257. {agno-2.4.3 → agno-2.4.5}/agno/models/deepseek/deepseek.py +0 -0
  258. {agno-2.4.3 → agno-2.4.5}/agno/models/defaults.py +0 -0
  259. {agno-2.4.3 → agno-2.4.5}/agno/models/fireworks/__init__.py +0 -0
  260. {agno-2.4.3 → agno-2.4.5}/agno/models/fireworks/fireworks.py +0 -0
  261. {agno-2.4.3 → agno-2.4.5}/agno/models/google/__init__.py +0 -0
  262. {agno-2.4.3 → agno-2.4.5}/agno/models/google/gemini.py +0 -0
  263. {agno-2.4.3 → agno-2.4.5}/agno/models/google/utils.py +0 -0
  264. {agno-2.4.3 → agno-2.4.5}/agno/models/groq/__init__.py +0 -0
  265. {agno-2.4.3 → agno-2.4.5}/agno/models/groq/groq.py +0 -0
  266. {agno-2.4.3 → agno-2.4.5}/agno/models/huggingface/__init__.py +0 -0
  267. {agno-2.4.3 → agno-2.4.5}/agno/models/huggingface/huggingface.py +0 -0
  268. {agno-2.4.3 → agno-2.4.5}/agno/models/ibm/__init__.py +0 -0
  269. {agno-2.4.3 → agno-2.4.5}/agno/models/ibm/watsonx.py +0 -0
  270. {agno-2.4.3 → agno-2.4.5}/agno/models/internlm/__init__.py +0 -0
  271. {agno-2.4.3 → agno-2.4.5}/agno/models/internlm/internlm.py +0 -0
  272. {agno-2.4.3 → agno-2.4.5}/agno/models/langdb/__init__.py +0 -0
  273. {agno-2.4.3 → agno-2.4.5}/agno/models/langdb/langdb.py +0 -0
  274. {agno-2.4.3 → agno-2.4.5}/agno/models/litellm/__init__.py +0 -0
  275. {agno-2.4.3 → agno-2.4.5}/agno/models/litellm/chat.py +0 -0
  276. {agno-2.4.3 → agno-2.4.5}/agno/models/litellm/litellm_openai.py +0 -0
  277. {agno-2.4.3 → agno-2.4.5}/agno/models/llama_cpp/__init__.py +0 -0
  278. {agno-2.4.3 → agno-2.4.5}/agno/models/llama_cpp/llama_cpp.py +0 -0
  279. {agno-2.4.3 → agno-2.4.5}/agno/models/lmstudio/__init__.py +0 -0
  280. {agno-2.4.3 → agno-2.4.5}/agno/models/lmstudio/lmstudio.py +0 -0
  281. {agno-2.4.3 → agno-2.4.5}/agno/models/message.py +0 -0
  282. {agno-2.4.3 → agno-2.4.5}/agno/models/meta/__init__.py +0 -0
  283. {agno-2.4.3 → agno-2.4.5}/agno/models/meta/llama.py +0 -0
  284. {agno-2.4.3 → agno-2.4.5}/agno/models/meta/llama_openai.py +0 -0
  285. {agno-2.4.3 → agno-2.4.5}/agno/models/metrics.py +0 -0
  286. {agno-2.4.3 → agno-2.4.5}/agno/models/mistral/__init__.py +0 -0
  287. {agno-2.4.3 → agno-2.4.5}/agno/models/mistral/mistral.py +0 -0
  288. {agno-2.4.3 → agno-2.4.5}/agno/models/n1n/__init__.py +0 -0
  289. {agno-2.4.3 → agno-2.4.5}/agno/models/n1n/n1n.py +0 -0
  290. {agno-2.4.3 → agno-2.4.5}/agno/models/nebius/__init__.py +0 -0
  291. {agno-2.4.3 → agno-2.4.5}/agno/models/nebius/nebius.py +0 -0
  292. {agno-2.4.3 → agno-2.4.5}/agno/models/nexus/__init__.py +0 -0
  293. {agno-2.4.3 → agno-2.4.5}/agno/models/nexus/nexus.py +0 -0
  294. {agno-2.4.3 → agno-2.4.5}/agno/models/nvidia/__init__.py +0 -0
  295. {agno-2.4.3 → agno-2.4.5}/agno/models/nvidia/nvidia.py +0 -0
  296. {agno-2.4.3 → agno-2.4.5}/agno/models/ollama/__init__.py +0 -0
  297. {agno-2.4.3 → agno-2.4.5}/agno/models/ollama/chat.py +0 -0
  298. {agno-2.4.3 → agno-2.4.5}/agno/models/ollama/responses.py +0 -0
  299. {agno-2.4.3 → agno-2.4.5}/agno/models/openai/__init__.py +0 -0
  300. {agno-2.4.3 → agno-2.4.5}/agno/models/openai/chat.py +0 -0
  301. {agno-2.4.3 → agno-2.4.5}/agno/models/openai/like.py +0 -0
  302. {agno-2.4.3 → agno-2.4.5}/agno/models/openai/open_responses.py +0 -0
  303. {agno-2.4.3 → agno-2.4.5}/agno/models/openai/responses.py +0 -0
  304. {agno-2.4.3 → agno-2.4.5}/agno/models/openrouter/__init__.py +0 -0
  305. {agno-2.4.3 → agno-2.4.5}/agno/models/openrouter/openrouter.py +0 -0
  306. {agno-2.4.3 → agno-2.4.5}/agno/models/openrouter/responses.py +0 -0
  307. {agno-2.4.3 → agno-2.4.5}/agno/models/perplexity/__init__.py +0 -0
  308. {agno-2.4.3 → agno-2.4.5}/agno/models/perplexity/perplexity.py +0 -0
  309. {agno-2.4.3 → agno-2.4.5}/agno/models/portkey/__init__.py +0 -0
  310. {agno-2.4.3 → agno-2.4.5}/agno/models/portkey/portkey.py +0 -0
  311. {agno-2.4.3 → agno-2.4.5}/agno/models/requesty/__init__.py +0 -0
  312. {agno-2.4.3 → agno-2.4.5}/agno/models/requesty/requesty.py +0 -0
  313. {agno-2.4.3 → agno-2.4.5}/agno/models/sambanova/__init__.py +0 -0
  314. {agno-2.4.3 → agno-2.4.5}/agno/models/sambanova/sambanova.py +0 -0
  315. {agno-2.4.3 → agno-2.4.5}/agno/models/siliconflow/__init__.py +0 -0
  316. {agno-2.4.3 → agno-2.4.5}/agno/models/siliconflow/siliconflow.py +0 -0
  317. {agno-2.4.3 → agno-2.4.5}/agno/models/together/__init__.py +0 -0
  318. {agno-2.4.3 → agno-2.4.5}/agno/models/together/together.py +0 -0
  319. {agno-2.4.3 → agno-2.4.5}/agno/models/vercel/__init__.py +0 -0
  320. {agno-2.4.3 → agno-2.4.5}/agno/models/vercel/v0.py +0 -0
  321. {agno-2.4.3 → agno-2.4.5}/agno/models/vertexai/__init__.py +0 -0
  322. {agno-2.4.3 → agno-2.4.5}/agno/models/vertexai/claude.py +0 -0
  323. {agno-2.4.3 → agno-2.4.5}/agno/models/vllm/__init__.py +0 -0
  324. {agno-2.4.3 → agno-2.4.5}/agno/models/vllm/vllm.py +0 -0
  325. {agno-2.4.3 → agno-2.4.5}/agno/models/xai/__init__.py +0 -0
  326. {agno-2.4.3 → agno-2.4.5}/agno/models/xai/xai.py +0 -0
  327. {agno-2.4.3 → agno-2.4.5}/agno/os/__init__.py +0 -0
  328. {agno-2.4.3 → agno-2.4.5}/agno/os/app.py +0 -0
  329. {agno-2.4.3 → agno-2.4.5}/agno/os/auth.py +0 -0
  330. {agno-2.4.3 → agno-2.4.5}/agno/os/config.py +0 -0
  331. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/__init__.py +0 -0
  332. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/a2a/__init__.py +0 -0
  333. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/a2a/a2a.py +0 -0
  334. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/a2a/router.py +0 -0
  335. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/a2a/utils.py +0 -0
  336. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/agui/__init__.py +0 -0
  337. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/agui/agui.py +0 -0
  338. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/agui/router.py +0 -0
  339. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/agui/utils.py +0 -0
  340. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/base.py +0 -0
  341. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/slack/__init__.py +0 -0
  342. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/slack/router.py +0 -0
  343. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/slack/security.py +0 -0
  344. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/slack/slack.py +0 -0
  345. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  346. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/whatsapp/router.py +0 -0
  347. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/whatsapp/security.py +0 -0
  348. {agno-2.4.3 → agno-2.4.5}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  349. {agno-2.4.3 → agno-2.4.5}/agno/os/managers.py +0 -0
  350. {agno-2.4.3 → agno-2.4.5}/agno/os/mcp.py +0 -0
  351. {agno-2.4.3 → agno-2.4.5}/agno/os/middleware/__init__.py +0 -0
  352. {agno-2.4.3 → agno-2.4.5}/agno/os/middleware/jwt.py +0 -0
  353. {agno-2.4.3 → agno-2.4.5}/agno/os/middleware/trailing_slash.py +0 -0
  354. {agno-2.4.3 → agno-2.4.5}/agno/os/router.py +0 -0
  355. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/__init__.py +0 -0
  356. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/agents/__init__.py +0 -0
  357. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/agents/router.py +0 -0
  358. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/agents/schema.py +0 -0
  359. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/components/__init__.py +0 -0
  360. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/components/components.py +0 -0
  361. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/database.py +0 -0
  362. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/evals/__init__.py +0 -0
  363. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/evals/evals.py +0 -0
  364. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/evals/schemas.py +0 -0
  365. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/evals/utils.py +0 -0
  366. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/health.py +0 -0
  367. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/home.py +0 -0
  368. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/knowledge/__init__.py +0 -0
  369. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/knowledge/knowledge.py +0 -0
  370. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/knowledge/schemas.py +0 -0
  371. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/memory/__init__.py +0 -0
  372. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/memory/memory.py +0 -0
  373. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/memory/schemas.py +0 -0
  374. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/metrics/__init__.py +0 -0
  375. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/metrics/metrics.py +0 -0
  376. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/metrics/schemas.py +0 -0
  377. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/registry/__init__.py +0 -0
  378. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/registry/registry.py +0 -0
  379. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/session/__init__.py +0 -0
  380. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/session/session.py +0 -0
  381. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/teams/__init__.py +0 -0
  382. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/teams/router.py +0 -0
  383. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/teams/schema.py +0 -0
  384. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/traces/__init__.py +0 -0
  385. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/traces/schemas.py +0 -0
  386. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/traces/traces.py +0 -0
  387. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/workflows/__init__.py +0 -0
  388. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/workflows/router.py +0 -0
  389. {agno-2.4.3 → agno-2.4.5}/agno/os/routers/workflows/schema.py +0 -0
  390. {agno-2.4.3 → agno-2.4.5}/agno/os/schema.py +0 -0
  391. {agno-2.4.3 → agno-2.4.5}/agno/os/scopes.py +0 -0
  392. {agno-2.4.3 → agno-2.4.5}/agno/os/settings.py +0 -0
  393. {agno-2.4.3 → agno-2.4.5}/agno/os/utils.py +0 -0
  394. {agno-2.4.3 → agno-2.4.5}/agno/py.typed +0 -0
  395. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/__init__.py +0 -0
  396. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/anthropic.py +0 -0
  397. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/azure_ai_foundry.py +0 -0
  398. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/deepseek.py +0 -0
  399. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/default.py +0 -0
  400. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/gemini.py +0 -0
  401. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/groq.py +0 -0
  402. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/helpers.py +0 -0
  403. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/manager.py +0 -0
  404. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/ollama.py +0 -0
  405. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/openai.py +0 -0
  406. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/step.py +0 -0
  407. {agno-2.4.3 → agno-2.4.5}/agno/reasoning/vertexai.py +0 -0
  408. {agno-2.4.3 → agno-2.4.5}/agno/registry/__init__.py +0 -0
  409. {agno-2.4.3 → agno-2.4.5}/agno/registry/registry.py +0 -0
  410. {agno-2.4.3 → agno-2.4.5}/agno/remote/__init__.py +0 -0
  411. {agno-2.4.3 → agno-2.4.5}/agno/remote/base.py +0 -0
  412. {agno-2.4.3 → agno-2.4.5}/agno/run/__init__.py +0 -0
  413. {agno-2.4.3 → agno-2.4.5}/agno/run/agent.py +0 -0
  414. {agno-2.4.3 → agno-2.4.5}/agno/run/base.py +0 -0
  415. {agno-2.4.3 → agno-2.4.5}/agno/run/cancel.py +0 -0
  416. {agno-2.4.3 → agno-2.4.5}/agno/run/cancellation_management/__init__.py +0 -0
  417. {agno-2.4.3 → agno-2.4.5}/agno/run/cancellation_management/base.py +0 -0
  418. {agno-2.4.3 → agno-2.4.5}/agno/run/cancellation_management/in_memory_cancellation_manager.py +0 -0
  419. {agno-2.4.3 → agno-2.4.5}/agno/run/cancellation_management/redis_cancellation_manager.py +0 -0
  420. {agno-2.4.3 → agno-2.4.5}/agno/run/messages.py +0 -0
  421. {agno-2.4.3 → agno-2.4.5}/agno/run/requirement.py +0 -0
  422. {agno-2.4.3 → agno-2.4.5}/agno/run/team.py +0 -0
  423. {agno-2.4.3 → agno-2.4.5}/agno/run/workflow.py +0 -0
  424. {agno-2.4.3 → agno-2.4.5}/agno/session/__init__.py +0 -0
  425. {agno-2.4.3 → agno-2.4.5}/agno/session/agent.py +0 -0
  426. {agno-2.4.3 → agno-2.4.5}/agno/session/summary.py +0 -0
  427. {agno-2.4.3 → agno-2.4.5}/agno/session/team.py +0 -0
  428. {agno-2.4.3 → agno-2.4.5}/agno/session/workflow.py +0 -0
  429. {agno-2.4.3 → agno-2.4.5}/agno/skills/__init__.py +0 -0
  430. {agno-2.4.3 → agno-2.4.5}/agno/skills/agent_skills.py +0 -0
  431. {agno-2.4.3 → agno-2.4.5}/agno/skills/errors.py +0 -0
  432. {agno-2.4.3 → agno-2.4.5}/agno/skills/loaders/__init__.py +0 -0
  433. {agno-2.4.3 → agno-2.4.5}/agno/skills/loaders/base.py +0 -0
  434. {agno-2.4.3 → agno-2.4.5}/agno/skills/loaders/local.py +0 -0
  435. {agno-2.4.3 → agno-2.4.5}/agno/skills/skill.py +0 -0
  436. {agno-2.4.3 → agno-2.4.5}/agno/skills/utils.py +0 -0
  437. {agno-2.4.3 → agno-2.4.5}/agno/skills/validator.py +0 -0
  438. {agno-2.4.3 → agno-2.4.5}/agno/table.py +0 -0
  439. {agno-2.4.3 → agno-2.4.5}/agno/team/__init__.py +0 -0
  440. {agno-2.4.3 → agno-2.4.5}/agno/team/remote.py +0 -0
  441. {agno-2.4.3 → agno-2.4.5}/agno/tools/__init__.py +0 -0
  442. {agno-2.4.3 → agno-2.4.5}/agno/tools/agentql.py +0 -0
  443. {agno-2.4.3 → agno-2.4.5}/agno/tools/airflow.py +0 -0
  444. {agno-2.4.3 → agno-2.4.5}/agno/tools/api.py +0 -0
  445. {agno-2.4.3 → agno-2.4.5}/agno/tools/apify.py +0 -0
  446. {agno-2.4.3 → agno-2.4.5}/agno/tools/arxiv.py +0 -0
  447. {agno-2.4.3 → agno-2.4.5}/agno/tools/aws_lambda.py +0 -0
  448. {agno-2.4.3 → agno-2.4.5}/agno/tools/aws_ses.py +0 -0
  449. {agno-2.4.3 → agno-2.4.5}/agno/tools/baidusearch.py +0 -0
  450. {agno-2.4.3 → agno-2.4.5}/agno/tools/bitbucket.py +0 -0
  451. {agno-2.4.3 → agno-2.4.5}/agno/tools/brandfetch.py +0 -0
  452. {agno-2.4.3 → agno-2.4.5}/agno/tools/bravesearch.py +0 -0
  453. {agno-2.4.3 → agno-2.4.5}/agno/tools/brightdata.py +0 -0
  454. {agno-2.4.3 → agno-2.4.5}/agno/tools/browserbase.py +0 -0
  455. {agno-2.4.3 → agno-2.4.5}/agno/tools/calcom.py +0 -0
  456. {agno-2.4.3 → agno-2.4.5}/agno/tools/calculator.py +0 -0
  457. {agno-2.4.3 → agno-2.4.5}/agno/tools/cartesia.py +0 -0
  458. {agno-2.4.3 → agno-2.4.5}/agno/tools/clickup.py +0 -0
  459. {agno-2.4.3 → agno-2.4.5}/agno/tools/confluence.py +0 -0
  460. {agno-2.4.3 → agno-2.4.5}/agno/tools/crawl4ai.py +0 -0
  461. {agno-2.4.3 → agno-2.4.5}/agno/tools/csv_toolkit.py +0 -0
  462. {agno-2.4.3 → agno-2.4.5}/agno/tools/dalle.py +0 -0
  463. {agno-2.4.3 → agno-2.4.5}/agno/tools/daytona.py +0 -0
  464. {agno-2.4.3 → agno-2.4.5}/agno/tools/desi_vocal.py +0 -0
  465. {agno-2.4.3 → agno-2.4.5}/agno/tools/discord.py +0 -0
  466. {agno-2.4.3 → agno-2.4.5}/agno/tools/docker.py +0 -0
  467. {agno-2.4.3 → agno-2.4.5}/agno/tools/duckdb.py +0 -0
  468. {agno-2.4.3 → agno-2.4.5}/agno/tools/duckduckgo.py +0 -0
  469. {agno-2.4.3 → agno-2.4.5}/agno/tools/e2b.py +0 -0
  470. {agno-2.4.3 → agno-2.4.5}/agno/tools/eleven_labs.py +0 -0
  471. {agno-2.4.3 → agno-2.4.5}/agno/tools/email.py +0 -0
  472. {agno-2.4.3 → agno-2.4.5}/agno/tools/evm.py +0 -0
  473. {agno-2.4.3 → agno-2.4.5}/agno/tools/exa.py +0 -0
  474. {agno-2.4.3 → agno-2.4.5}/agno/tools/fal.py +0 -0
  475. {agno-2.4.3 → agno-2.4.5}/agno/tools/file.py +0 -0
  476. {agno-2.4.3 → agno-2.4.5}/agno/tools/file_generation.py +0 -0
  477. {agno-2.4.3 → agno-2.4.5}/agno/tools/financial_datasets.py +0 -0
  478. {agno-2.4.3 → agno-2.4.5}/agno/tools/firecrawl.py +0 -0
  479. {agno-2.4.3 → agno-2.4.5}/agno/tools/giphy.py +0 -0
  480. {agno-2.4.3 → agno-2.4.5}/agno/tools/github.py +0 -0
  481. {agno-2.4.3 → agno-2.4.5}/agno/tools/gmail.py +0 -0
  482. {agno-2.4.3 → agno-2.4.5}/agno/tools/google_bigquery.py +0 -0
  483. {agno-2.4.3 → agno-2.4.5}/agno/tools/google_drive.py +0 -0
  484. {agno-2.4.3 → agno-2.4.5}/agno/tools/google_maps.py +0 -0
  485. {agno-2.4.3 → agno-2.4.5}/agno/tools/googlecalendar.py +0 -0
  486. {agno-2.4.3 → agno-2.4.5}/agno/tools/googlesheets.py +0 -0
  487. {agno-2.4.3 → agno-2.4.5}/agno/tools/hackernews.py +0 -0
  488. {agno-2.4.3 → agno-2.4.5}/agno/tools/jina.py +0 -0
  489. {agno-2.4.3 → agno-2.4.5}/agno/tools/jira.py +0 -0
  490. {agno-2.4.3 → agno-2.4.5}/agno/tools/knowledge.py +0 -0
  491. {agno-2.4.3 → agno-2.4.5}/agno/tools/linear.py +0 -0
  492. {agno-2.4.3 → agno-2.4.5}/agno/tools/linkup.py +0 -0
  493. {agno-2.4.3 → agno-2.4.5}/agno/tools/local_file_system.py +0 -0
  494. {agno-2.4.3 → agno-2.4.5}/agno/tools/lumalab.py +0 -0
  495. {agno-2.4.3 → agno-2.4.5}/agno/tools/mcp/__init__.py +0 -0
  496. {agno-2.4.3 → agno-2.4.5}/agno/tools/mcp/mcp.py +0 -0
  497. {agno-2.4.3 → agno-2.4.5}/agno/tools/mcp/multi_mcp.py +0 -0
  498. {agno-2.4.3 → agno-2.4.5}/agno/tools/mcp/params.py +0 -0
  499. {agno-2.4.3 → agno-2.4.5}/agno/tools/mcp_toolbox.py +0 -0
  500. {agno-2.4.3 → agno-2.4.5}/agno/tools/mem0.py +0 -0
  501. {agno-2.4.3 → agno-2.4.5}/agno/tools/memory.py +0 -0
  502. {agno-2.4.3 → agno-2.4.5}/agno/tools/mlx_transcribe.py +0 -0
  503. {agno-2.4.3 → agno-2.4.5}/agno/tools/models/__init__.py +0 -0
  504. {agno-2.4.3 → agno-2.4.5}/agno/tools/models/azure_openai.py +0 -0
  505. {agno-2.4.3 → agno-2.4.5}/agno/tools/models/gemini.py +0 -0
  506. {agno-2.4.3 → agno-2.4.5}/agno/tools/models/groq.py +0 -0
  507. {agno-2.4.3 → agno-2.4.5}/agno/tools/models/morph.py +0 -0
  508. {agno-2.4.3 → agno-2.4.5}/agno/tools/models/nebius.py +0 -0
  509. {agno-2.4.3 → agno-2.4.5}/agno/tools/models_labs.py +0 -0
  510. {agno-2.4.3 → agno-2.4.5}/agno/tools/moviepy_video.py +0 -0
  511. {agno-2.4.3 → agno-2.4.5}/agno/tools/nano_banana.py +0 -0
  512. {agno-2.4.3 → agno-2.4.5}/agno/tools/neo4j.py +0 -0
  513. {agno-2.4.3 → agno-2.4.5}/agno/tools/newspaper.py +0 -0
  514. {agno-2.4.3 → agno-2.4.5}/agno/tools/newspaper4k.py +0 -0
  515. {agno-2.4.3 → agno-2.4.5}/agno/tools/notion.py +0 -0
  516. {agno-2.4.3 → agno-2.4.5}/agno/tools/openai.py +0 -0
  517. {agno-2.4.3 → agno-2.4.5}/agno/tools/openbb.py +0 -0
  518. {agno-2.4.3 → agno-2.4.5}/agno/tools/opencv.py +0 -0
  519. {agno-2.4.3 → agno-2.4.5}/agno/tools/openweather.py +0 -0
  520. {agno-2.4.3 → agno-2.4.5}/agno/tools/oxylabs.py +0 -0
  521. {agno-2.4.3 → agno-2.4.5}/agno/tools/pandas.py +0 -0
  522. {agno-2.4.3 → agno-2.4.5}/agno/tools/parallel.py +0 -0
  523. {agno-2.4.3 → agno-2.4.5}/agno/tools/postgres.py +0 -0
  524. {agno-2.4.3 → agno-2.4.5}/agno/tools/pubmed.py +0 -0
  525. {agno-2.4.3 → agno-2.4.5}/agno/tools/python.py +0 -0
  526. {agno-2.4.3 → agno-2.4.5}/agno/tools/reasoning.py +0 -0
  527. {agno-2.4.3 → agno-2.4.5}/agno/tools/reddit.py +0 -0
  528. {agno-2.4.3 → agno-2.4.5}/agno/tools/redshift.py +0 -0
  529. {agno-2.4.3 → agno-2.4.5}/agno/tools/replicate.py +0 -0
  530. {agno-2.4.3 → agno-2.4.5}/agno/tools/resend.py +0 -0
  531. {agno-2.4.3 → agno-2.4.5}/agno/tools/scrapegraph.py +0 -0
  532. {agno-2.4.3 → agno-2.4.5}/agno/tools/searxng.py +0 -0
  533. {agno-2.4.3 → agno-2.4.5}/agno/tools/serpapi.py +0 -0
  534. {agno-2.4.3 → agno-2.4.5}/agno/tools/serper.py +0 -0
  535. {agno-2.4.3 → agno-2.4.5}/agno/tools/shell.py +0 -0
  536. {agno-2.4.3 → agno-2.4.5}/agno/tools/shopify.py +0 -0
  537. {agno-2.4.3 → agno-2.4.5}/agno/tools/slack.py +0 -0
  538. {agno-2.4.3 → agno-2.4.5}/agno/tools/sleep.py +0 -0
  539. {agno-2.4.3 → agno-2.4.5}/agno/tools/spider.py +0 -0
  540. {agno-2.4.3 → agno-2.4.5}/agno/tools/spotify.py +0 -0
  541. {agno-2.4.3 → agno-2.4.5}/agno/tools/sql.py +0 -0
  542. {agno-2.4.3 → agno-2.4.5}/agno/tools/streamlit/__init__.py +0 -0
  543. {agno-2.4.3 → agno-2.4.5}/agno/tools/streamlit/components.py +0 -0
  544. {agno-2.4.3 → agno-2.4.5}/agno/tools/tavily.py +0 -0
  545. {agno-2.4.3 → agno-2.4.5}/agno/tools/telegram.py +0 -0
  546. {agno-2.4.3 → agno-2.4.5}/agno/tools/todoist.py +0 -0
  547. {agno-2.4.3 → agno-2.4.5}/agno/tools/tool_registry.py +0 -0
  548. {agno-2.4.3 → agno-2.4.5}/agno/tools/toolkit.py +0 -0
  549. {agno-2.4.3 → agno-2.4.5}/agno/tools/trafilatura.py +0 -0
  550. {agno-2.4.3 → agno-2.4.5}/agno/tools/trello.py +0 -0
  551. {agno-2.4.3 → agno-2.4.5}/agno/tools/twilio.py +0 -0
  552. {agno-2.4.3 → agno-2.4.5}/agno/tools/user_control_flow.py +0 -0
  553. {agno-2.4.3 → agno-2.4.5}/agno/tools/valyu.py +0 -0
  554. {agno-2.4.3 → agno-2.4.5}/agno/tools/visualization.py +0 -0
  555. {agno-2.4.3 → agno-2.4.5}/agno/tools/webbrowser.py +0 -0
  556. {agno-2.4.3 → agno-2.4.5}/agno/tools/webex.py +0 -0
  557. {agno-2.4.3 → agno-2.4.5}/agno/tools/websearch.py +0 -0
  558. {agno-2.4.3 → agno-2.4.5}/agno/tools/website.py +0 -0
  559. {agno-2.4.3 → agno-2.4.5}/agno/tools/webtools.py +0 -0
  560. {agno-2.4.3 → agno-2.4.5}/agno/tools/whatsapp.py +0 -0
  561. {agno-2.4.3 → agno-2.4.5}/agno/tools/wikipedia.py +0 -0
  562. {agno-2.4.3 → agno-2.4.5}/agno/tools/workflow.py +0 -0
  563. {agno-2.4.3 → agno-2.4.5}/agno/tools/x.py +0 -0
  564. {agno-2.4.3 → agno-2.4.5}/agno/tools/yfinance.py +0 -0
  565. {agno-2.4.3 → agno-2.4.5}/agno/tools/youtube.py +0 -0
  566. {agno-2.4.3 → agno-2.4.5}/agno/tools/zendesk.py +0 -0
  567. {agno-2.4.3 → agno-2.4.5}/agno/tools/zep.py +0 -0
  568. {agno-2.4.3 → agno-2.4.5}/agno/tools/zoom.py +0 -0
  569. {agno-2.4.3 → agno-2.4.5}/agno/tracing/__init__.py +0 -0
  570. {agno-2.4.3 → agno-2.4.5}/agno/tracing/exporter.py +0 -0
  571. {agno-2.4.3 → agno-2.4.5}/agno/tracing/schemas.py +0 -0
  572. {agno-2.4.3 → agno-2.4.5}/agno/tracing/setup.py +0 -0
  573. {agno-2.4.3 → agno-2.4.5}/agno/utils/__init__.py +0 -0
  574. {agno-2.4.3 → agno-2.4.5}/agno/utils/agent.py +0 -0
  575. {agno-2.4.3 → agno-2.4.5}/agno/utils/audio.py +0 -0
  576. {agno-2.4.3 → agno-2.4.5}/agno/utils/certs.py +0 -0
  577. {agno-2.4.3 → agno-2.4.5}/agno/utils/code_execution.py +0 -0
  578. {agno-2.4.3 → agno-2.4.5}/agno/utils/common.py +0 -0
  579. {agno-2.4.3 → agno-2.4.5}/agno/utils/cryptography.py +0 -0
  580. {agno-2.4.3 → agno-2.4.5}/agno/utils/dttm.py +0 -0
  581. {agno-2.4.3 → agno-2.4.5}/agno/utils/enum.py +0 -0
  582. {agno-2.4.3 → agno-2.4.5}/agno/utils/env.py +0 -0
  583. {agno-2.4.3 → agno-2.4.5}/agno/utils/events.py +0 -0
  584. {agno-2.4.3 → agno-2.4.5}/agno/utils/format_str.py +0 -0
  585. {agno-2.4.3 → agno-2.4.5}/agno/utils/functions.py +0 -0
  586. {agno-2.4.3 → agno-2.4.5}/agno/utils/gemini.py +0 -0
  587. {agno-2.4.3 → agno-2.4.5}/agno/utils/hooks.py +0 -0
  588. {agno-2.4.3 → agno-2.4.5}/agno/utils/http.py +0 -0
  589. {agno-2.4.3 → agno-2.4.5}/agno/utils/json_schema.py +0 -0
  590. {agno-2.4.3 → agno-2.4.5}/agno/utils/knowledge.py +0 -0
  591. {agno-2.4.3 → agno-2.4.5}/agno/utils/location.py +0 -0
  592. {agno-2.4.3 → agno-2.4.5}/agno/utils/log.py +0 -0
  593. {agno-2.4.3 → agno-2.4.5}/agno/utils/mcp.py +0 -0
  594. {agno-2.4.3 → agno-2.4.5}/agno/utils/media.py +0 -0
  595. {agno-2.4.3 → agno-2.4.5}/agno/utils/merge_dict.py +0 -0
  596. {agno-2.4.3 → agno-2.4.5}/agno/utils/message.py +0 -0
  597. {agno-2.4.3 → agno-2.4.5}/agno/utils/models/__init__.py +0 -0
  598. {agno-2.4.3 → agno-2.4.5}/agno/utils/models/ai_foundry.py +0 -0
  599. {agno-2.4.3 → agno-2.4.5}/agno/utils/models/claude.py +0 -0
  600. {agno-2.4.3 → agno-2.4.5}/agno/utils/models/cohere.py +0 -0
  601. {agno-2.4.3 → agno-2.4.5}/agno/utils/models/llama.py +0 -0
  602. {agno-2.4.3 → agno-2.4.5}/agno/utils/models/mistral.py +0 -0
  603. {agno-2.4.3 → agno-2.4.5}/agno/utils/models/openai_responses.py +0 -0
  604. {agno-2.4.3 → agno-2.4.5}/agno/utils/models/schema_utils.py +0 -0
  605. {agno-2.4.3 → agno-2.4.5}/agno/utils/models/watsonx.py +0 -0
  606. {agno-2.4.3 → agno-2.4.5}/agno/utils/openai.py +0 -0
  607. {agno-2.4.3 → agno-2.4.5}/agno/utils/os.py +0 -0
  608. {agno-2.4.3 → agno-2.4.5}/agno/utils/pickle.py +0 -0
  609. {agno-2.4.3 → agno-2.4.5}/agno/utils/pprint.py +0 -0
  610. {agno-2.4.3 → agno-2.4.5}/agno/utils/print_response/__init__.py +0 -0
  611. {agno-2.4.3 → agno-2.4.5}/agno/utils/print_response/team.py +0 -0
  612. {agno-2.4.3 → agno-2.4.5}/agno/utils/print_response/workflow.py +0 -0
  613. {agno-2.4.3 → agno-2.4.5}/agno/utils/prompts.py +0 -0
  614. {agno-2.4.3 → agno-2.4.5}/agno/utils/reasoning.py +0 -0
  615. {agno-2.4.3 → agno-2.4.5}/agno/utils/remote.py +0 -0
  616. {agno-2.4.3 → agno-2.4.5}/agno/utils/response_iterator.py +0 -0
  617. {agno-2.4.3 → agno-2.4.5}/agno/utils/safe_formatter.py +0 -0
  618. {agno-2.4.3 → agno-2.4.5}/agno/utils/serialize.py +0 -0
  619. {agno-2.4.3 → agno-2.4.5}/agno/utils/shell.py +0 -0
  620. {agno-2.4.3 → agno-2.4.5}/agno/utils/streamlit.py +0 -0
  621. {agno-2.4.3 → agno-2.4.5}/agno/utils/string.py +0 -0
  622. {agno-2.4.3 → agno-2.4.5}/agno/utils/team.py +0 -0
  623. {agno-2.4.3 → agno-2.4.5}/agno/utils/timer.py +0 -0
  624. {agno-2.4.3 → agno-2.4.5}/agno/utils/tokens.py +0 -0
  625. {agno-2.4.3 → agno-2.4.5}/agno/utils/tools.py +0 -0
  626. {agno-2.4.3 → agno-2.4.5}/agno/utils/web.py +0 -0
  627. {agno-2.4.3 → agno-2.4.5}/agno/utils/whatsapp.py +0 -0
  628. {agno-2.4.3 → agno-2.4.5}/agno/utils/yaml_io.py +0 -0
  629. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/__init__.py +0 -0
  630. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/base.py +0 -0
  631. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/cassandra/__init__.py +0 -0
  632. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/cassandra/cassandra.py +0 -0
  633. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  634. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/cassandra/index.py +0 -0
  635. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/chroma/__init__.py +0 -0
  636. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/chroma/chromadb.py +0 -0
  637. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/clickhouse/__init__.py +0 -0
  638. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  639. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/clickhouse/index.py +0 -0
  640. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/couchbase/__init__.py +0 -0
  641. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/couchbase/couchbase.py +0 -0
  642. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/distance.py +0 -0
  643. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/lancedb/__init__.py +0 -0
  644. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/langchaindb/__init__.py +0 -0
  645. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  646. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/lightrag/__init__.py +0 -0
  647. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/lightrag/lightrag.py +0 -0
  648. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/llamaindex/__init__.py +0 -0
  649. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  650. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/milvus/__init__.py +0 -0
  651. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/milvus/milvus.py +0 -0
  652. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/mongodb/__init__.py +0 -0
  653. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/mongodb/mongodb.py +0 -0
  654. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/pgvector/__init__.py +0 -0
  655. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/pgvector/index.py +0 -0
  656. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/pgvector/pgvector.py +0 -0
  657. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/pineconedb/__init__.py +0 -0
  658. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  659. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/qdrant/__init__.py +0 -0
  660. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/qdrant/qdrant.py +0 -0
  661. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/redis/__init__.py +0 -0
  662. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/redis/redisdb.py +0 -0
  663. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/search.py +0 -0
  664. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/singlestore/__init__.py +0 -0
  665. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/singlestore/index.py +0 -0
  666. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/singlestore/singlestore.py +0 -0
  667. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/surrealdb/__init__.py +0 -0
  668. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  669. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/upstashdb/__init__.py +0 -0
  670. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  671. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/weaviate/__init__.py +0 -0
  672. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/weaviate/index.py +0 -0
  673. {agno-2.4.3 → agno-2.4.5}/agno/vectordb/weaviate/weaviate.py +0 -0
  674. {agno-2.4.3 → agno-2.4.5}/agno/workflow/__init__.py +0 -0
  675. {agno-2.4.3 → agno-2.4.5}/agno/workflow/agent.py +0 -0
  676. {agno-2.4.3 → agno-2.4.5}/agno/workflow/condition.py +0 -0
  677. {agno-2.4.3 → agno-2.4.5}/agno/workflow/loop.py +0 -0
  678. {agno-2.4.3 → agno-2.4.5}/agno/workflow/parallel.py +0 -0
  679. {agno-2.4.3 → agno-2.4.5}/agno/workflow/remote.py +0 -0
  680. {agno-2.4.3 → agno-2.4.5}/agno/workflow/router.py +0 -0
  681. {agno-2.4.3 → agno-2.4.5}/agno/workflow/step.py +0 -0
  682. {agno-2.4.3 → agno-2.4.5}/agno/workflow/steps.py +0 -0
  683. {agno-2.4.3 → agno-2.4.5}/agno/workflow/types.py +0 -0
  684. {agno-2.4.3 → agno-2.4.5}/agno.egg-info/dependency_links.txt +0 -0
  685. {agno-2.4.3 → agno-2.4.5}/agno.egg-info/top_level.txt +0 -0
  686. {agno-2.4.3 → agno-2.4.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.4.3
3
+ Version: 2.4.5
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
@@ -132,6 +132,8 @@ Provides-Extra: evm
132
132
  Requires-Dist: web3; extra == "evm"
133
133
  Provides-Extra: exa
134
134
  Requires-Dist: exa_py; extra == "exa"
135
+ Provides-Extra: seltz
136
+ Requires-Dist: seltz; extra == "seltz"
135
137
  Provides-Extra: fal
136
138
  Requires-Dist: fal_client; extra == "fal"
137
139
  Provides-Extra: firecrawl
@@ -308,6 +310,7 @@ Provides-Extra: tools
308
310
  Requires-Dist: agno[apify]; extra == "tools"
309
311
  Requires-Dist: agno[arxiv]; extra == "tools"
310
312
  Requires-Dist: agno[exa]; extra == "tools"
313
+ Requires-Dist: agno[seltz]; extra == "tools"
311
314
  Requires-Dist: agno[cartesia]; extra == "tools"
312
315
  Requires-Dist: agno[ddg]; extra == "tools"
313
316
  Requires-Dist: agno[duckdb]; extra == "tools"
@@ -531,7 +534,7 @@ https://github.com/user-attachments/assets/feb23db8-15cc-4e88-be7c-01a21a03ebf6
531
534
 
532
535
  ## Getting Started
533
536
 
534
- 1. Follow the [getting started guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_getting_started)
537
+ 1. Follow the [quickstart guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_quickstart)
535
538
  2. Browse the [cookbook](https://github.com/agno-agi/agno/tree/main/cookbook) for real-world examples
536
539
  3. Read the [docs](https://docs.agno.com) to go deeper
537
540
 
@@ -98,7 +98,7 @@ https://github.com/user-attachments/assets/feb23db8-15cc-4e88-be7c-01a21a03ebf6
98
98
 
99
99
  ## Getting Started
100
100
 
101
- 1. Follow the [getting started guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_getting_started)
101
+ 1. Follow the [quickstart guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_quickstart)
102
102
  2. Browse the [cookbook](https://github.com/agno-agi/agno/tree/main/cookbook) for real-world examples
103
103
  3. Read the [docs](https://docs.agno.com) to go deeper
104
104
 
@@ -320,6 +320,8 @@ class Agent:
320
320
  # Add a tool that allows the Model to search the knowledge base (aka Agentic RAG)
321
321
  # Added only if knowledge is provided.
322
322
  search_knowledge: bool = True
323
+ # If True, add search_knowledge instructions to the system prompt
324
+ add_search_knowledge_instructions: bool = True
323
325
  # Add a tool that allows the Agent to update Knowledge.
324
326
  update_knowledge: bool = False
325
327
  # Add a tool that allows the Model to get the tool call history.
@@ -524,6 +526,7 @@ class Agent:
524
526
  reasoning_max_steps: int = 10,
525
527
  read_chat_history: bool = False,
526
528
  search_knowledge: bool = True,
529
+ add_search_knowledge_instructions: bool = True,
527
530
  update_knowledge: bool = False,
528
531
  read_tool_call_history: bool = False,
529
532
  send_media_to_model: bool = True,
@@ -661,6 +664,7 @@ class Agent:
661
664
 
662
665
  self.read_chat_history = read_chat_history
663
666
  self.search_knowledge = search_knowledge
667
+ self.add_search_knowledge_instructions = add_search_knowledge_instructions
664
668
  self.update_knowledge = update_knowledge
665
669
  self.read_tool_call_history = read_tool_call_history
666
670
  self.send_media_to_model = send_media_to_model
@@ -7431,6 +7435,10 @@ class Agent:
7431
7435
  config["enable_agentic_knowledge_filters"] = self.enable_agentic_knowledge_filters
7432
7436
  if self.add_knowledge_to_context:
7433
7437
  config["add_knowledge_to_context"] = self.add_knowledge_to_context
7438
+ if not self.search_knowledge:
7439
+ config["search_knowledge"] = self.search_knowledge
7440
+ if self.add_search_knowledge_instructions:
7441
+ config["add_search_knowledge_instructions"] = self.add_search_knowledge_instructions
7434
7442
  # Skip knowledge_retriever as it's a callable
7435
7443
  if self.references_format != "json":
7436
7444
  config["references_format"] = self.references_format
@@ -7481,8 +7489,6 @@ class Agent:
7481
7489
  # --- Default tools settings ---
7482
7490
  if self.read_chat_history:
7483
7491
  config["read_chat_history"] = self.read_chat_history
7484
- if not self.search_knowledge:
7485
- config["search_knowledge"] = self.search_knowledge
7486
7492
  if self.update_knowledge:
7487
7493
  config["update_knowledge"] = self.update_knowledge
7488
7494
  if self.read_tool_call_history:
@@ -7806,6 +7812,7 @@ class Agent:
7806
7812
  # --- Default tools settings ---
7807
7813
  read_chat_history=config.get("read_chat_history", False),
7808
7814
  search_knowledge=config.get("search_knowledge", True),
7815
+ add_search_knowledge_instructions=config.get("add_search_knowledge_instructions", True),
7809
7816
  update_knowledge=config.get("update_knowledge", False),
7810
7817
  read_tool_call_history=config.get("read_tool_call_history", False),
7811
7818
  send_media_to_model=config.get("send_media_to_model", True),
@@ -8859,16 +8866,6 @@ class Agent:
8859
8866
  if self.name is not None and self.add_name_to_context:
8860
8867
  additional_information.append(f"Your name is: {self.name}.")
8861
8868
 
8862
- # 3.2.5 Add knowledge context using protocol's build_context
8863
- if self.knowledge is not None:
8864
- build_context_fn = getattr(self.knowledge, "build_context", None)
8865
- if callable(build_context_fn):
8866
- knowledge_context = build_context_fn(
8867
- enable_agentic_filters=self.enable_agentic_knowledge_filters,
8868
- )
8869
- if knowledge_context:
8870
- additional_information.append(knowledge_context)
8871
-
8872
8869
  # 3.3 Build the default system message for the Agent.
8873
8870
  system_message_content: str = ""
8874
8871
  # 3.3.1 First add the Agent description if provided
@@ -9045,12 +9042,22 @@ class Agent:
9045
9042
  if learning_context:
9046
9043
  system_message_content += learning_context + "\n"
9047
9044
 
9048
- # 3.3.13 Add the system message from the Model
9045
+ # 3.3.13 then add search_knowledge instructions to the system prompt
9046
+ if self.knowledge is not None and self.search_knowledge and self.add_search_knowledge_instructions:
9047
+ build_context_fn = getattr(self.knowledge, "build_context", None)
9048
+ if callable(build_context_fn):
9049
+ knowledge_context = build_context_fn(
9050
+ enable_agentic_filters=self.enable_agentic_knowledge_filters,
9051
+ )
9052
+ if knowledge_context is not None:
9053
+ system_message_content += knowledge_context + "\n"
9054
+
9055
+ # 3.3.14 Add the system message from the Model
9049
9056
  system_message_from_model = self.model.get_system_message_for_model(tools)
9050
9057
  if system_message_from_model is not None:
9051
9058
  system_message_content += system_message_from_model
9052
9059
 
9053
- # 3.3.14 Add the JSON output prompt if output_schema is provided and the model does not support native structured outputs or JSON schema outputs
9060
+ # 3.3.15 Add the JSON output prompt if output_schema is provided and the model does not support native structured outputs or JSON schema outputs
9054
9061
  # or if use_json_mode is True
9055
9062
  if (
9056
9063
  output_schema is not None
@@ -9062,11 +9069,11 @@ class Agent:
9062
9069
  ):
9063
9070
  system_message_content += f"{get_json_output_prompt(output_schema)}" # type: ignore
9064
9071
 
9065
- # 3.3.15 Add the response model format prompt if output_schema is provided (Pydantic only)
9072
+ # 3.3.16 Add the response model format prompt if output_schema is provided (Pydantic only)
9066
9073
  if output_schema is not None and self.parser_model is not None and not isinstance(output_schema, dict):
9067
9074
  system_message_content += f"{get_response_model_format_prompt(output_schema)}"
9068
9075
 
9069
- # 3.3.16 Add the session state to the system message
9076
+ # 3.3.17 Add the session state to the system message
9070
9077
  if add_session_state_to_context and session_state is not None:
9071
9078
  system_message_content += f"\n<session_state>\n{session_state}\n</session_state>\n\n"
9072
9079
 
@@ -9196,24 +9203,6 @@ class Agent:
9196
9203
  if self.name is not None and self.add_name_to_context:
9197
9204
  additional_information.append(f"Your name is: {self.name}.")
9198
9205
 
9199
- # 3.2.5 Add knowledge context using protocol's build_context (async)
9200
- if self.knowledge is not None:
9201
- # Prefer async version if available for async databases
9202
- abuild_context_fn = getattr(self.knowledge, "abuild_context", None)
9203
- build_context_fn = getattr(self.knowledge, "build_context", None)
9204
- if callable(abuild_context_fn):
9205
- knowledge_context = await abuild_context_fn(
9206
- enable_agentic_filters=self.enable_agentic_knowledge_filters,
9207
- )
9208
- if knowledge_context:
9209
- additional_information.append(knowledge_context)
9210
- elif callable(build_context_fn):
9211
- knowledge_context = build_context_fn(
9212
- enable_agentic_filters=self.enable_agentic_knowledge_filters,
9213
- )
9214
- if knowledge_context:
9215
- additional_information.append(knowledge_context)
9216
-
9217
9206
  # 3.3 Build the default system message for the Agent.
9218
9207
  system_message_content: str = ""
9219
9208
  # 3.3.1 First add the Agent description if provided
@@ -9393,12 +9382,30 @@ class Agent:
9393
9382
  if learning_context:
9394
9383
  system_message_content += learning_context + "\n"
9395
9384
 
9396
- # 3.3.13 Add the system message from the Model
9385
+ # 3.3.13 then add search_knowledge instructions to the system prompt
9386
+ if self.knowledge is not None and self.search_knowledge and self.add_search_knowledge_instructions:
9387
+ # Prefer async version if available for async databases
9388
+ abuild_context_fn = getattr(self.knowledge, "abuild_context", None)
9389
+ build_context_fn = getattr(self.knowledge, "build_context", None)
9390
+ if callable(abuild_context_fn):
9391
+ knowledge_context = await abuild_context_fn(
9392
+ enable_agentic_filters=self.enable_agentic_knowledge_filters,
9393
+ )
9394
+ if knowledge_context is not None:
9395
+ system_message_content += knowledge_context + "\n"
9396
+ elif callable(build_context_fn):
9397
+ knowledge_context = build_context_fn(
9398
+ enable_agentic_filters=self.enable_agentic_knowledge_filters,
9399
+ )
9400
+ if knowledge_context is not None:
9401
+ system_message_content += knowledge_context + "\n"
9402
+
9403
+ # 3.3.14 Add the system message from the Model
9397
9404
  system_message_from_model = self.model.get_system_message_for_model(tools)
9398
9405
  if system_message_from_model is not None:
9399
9406
  system_message_content += system_message_from_model
9400
9407
 
9401
- # 3.3.14 Add the JSON output prompt if output_schema is provided and the model does not support native structured outputs or JSON schema outputs
9408
+ # 3.3.15 Add the JSON output prompt if output_schema is provided and the model does not support native structured outputs or JSON schema outputs
9402
9409
  # or if use_json_mode is True
9403
9410
  if (
9404
9411
  output_schema is not None
@@ -9410,11 +9417,11 @@ class Agent:
9410
9417
  ):
9411
9418
  system_message_content += f"{get_json_output_prompt(output_schema)}" # type: ignore
9412
9419
 
9413
- # 3.3.15 Add the response model format prompt if output_schema is provided (Pydantic only)
9420
+ # 3.3.16 Add the response model format prompt if output_schema is provided (Pydantic only)
9414
9421
  if output_schema is not None and self.parser_model is not None and not isinstance(output_schema, dict):
9415
9422
  system_message_content += f"{get_response_model_format_prompt(output_schema)}"
9416
9423
 
9417
- # 3.3.16 Add the session state to the system message
9424
+ # 3.3.17 Add the session state to the system message
9418
9425
  if add_session_state_to_context and session_state is not None:
9419
9426
  system_message_content += self._get_formatted_session_state_for_system_message(session_state)
9420
9427
 
@@ -1,7 +1,7 @@
1
1
  import json
2
2
  import time
3
3
  from datetime import date, datetime, timedelta, timezone
4
- from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
4
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union, cast
5
5
  from uuid import uuid4
6
6
 
7
7
  if TYPE_CHECKING:
@@ -25,7 +25,7 @@ from agno.db.schemas.culture import CulturalKnowledge
25
25
  from agno.db.schemas.evals import EvalFilterType, EvalRunRecord, EvalType
26
26
  from agno.db.schemas.knowledge import KnowledgeRow
27
27
  from agno.db.schemas.memory import UserMemory
28
- from agno.db.utils import deserialize_session_json_fields, serialize_session_json_fields
28
+ from agno.db.utils import deserialize_session_json_fields
29
29
  from agno.session import AgentSession, Session, TeamSession, WorkflowSession
30
30
  from agno.utils.log import log_debug, log_error, log_info
31
31
  from agno.utils.string import generate_id
@@ -496,6 +496,29 @@ class FirestoreDb(BaseDb):
496
496
  if doc_ref is None:
497
497
  return None
498
498
 
499
+ # Check if session_data is stored as JSON string (legacy) or native map.
500
+ # Legacy sessions stored session_data as a JSON string, but Firestore's dot notation
501
+ # (e.g., "session_data.session_name") only works with native maps. Using dot notation
502
+ # on a JSON string overwrites the entire field, causing data loss.
503
+ # For legacy sessions, we use read-modify-write which also migrates them to native maps.
504
+ current_doc = doc_ref.get()
505
+ if not current_doc.exists:
506
+ return None
507
+
508
+ current_data = current_doc.to_dict()
509
+ session_data = current_data.get("session_data") if current_data else None
510
+
511
+ if session_data is None or isinstance(session_data, str):
512
+ existing_session = self.get_session(session_id, session_type, deserialize=True)
513
+ if existing_session is None:
514
+ return None
515
+ existing_session = cast(Session, existing_session)
516
+ if existing_session.session_data is None:
517
+ existing_session.session_data = {}
518
+ existing_session.session_data["session_name"] = session_name
519
+ return self.upsert_session(existing_session, deserialize=deserialize)
520
+
521
+ # Native map format - use efficient dot notation update
499
522
  doc_ref.update({"session_data.session_name": session_name, "updated_at": int(time.time())})
500
523
 
501
524
  updated_doc = doc_ref.get()
@@ -539,50 +562,50 @@ class FirestoreDb(BaseDb):
539
562
  """
540
563
  try:
541
564
  collection_ref = self._get_collection(table_type="sessions", create_collection_if_not_found=True)
542
- serialized_session_dict = serialize_session_json_fields(session.to_dict())
565
+ session_dict = session.to_dict()
543
566
 
544
567
  if isinstance(session, AgentSession):
545
568
  record = {
546
- "session_id": serialized_session_dict.get("session_id"),
569
+ "session_id": session_dict.get("session_id"),
547
570
  "session_type": SessionType.AGENT.value,
548
- "agent_id": serialized_session_dict.get("agent_id"),
549
- "user_id": serialized_session_dict.get("user_id"),
550
- "runs": serialized_session_dict.get("runs"),
551
- "agent_data": serialized_session_dict.get("agent_data"),
552
- "session_data": serialized_session_dict.get("session_data"),
553
- "summary": serialized_session_dict.get("summary"),
554
- "metadata": serialized_session_dict.get("metadata"),
555
- "created_at": serialized_session_dict.get("created_at"),
571
+ "agent_id": session_dict.get("agent_id"),
572
+ "user_id": session_dict.get("user_id"),
573
+ "runs": session_dict.get("runs"),
574
+ "agent_data": session_dict.get("agent_data"),
575
+ "session_data": session_dict.get("session_data"),
576
+ "summary": session_dict.get("summary"),
577
+ "metadata": session_dict.get("metadata"),
578
+ "created_at": session_dict.get("created_at"),
556
579
  "updated_at": int(time.time()),
557
580
  }
558
581
 
559
582
  elif isinstance(session, TeamSession):
560
583
  record = {
561
- "session_id": serialized_session_dict.get("session_id"),
584
+ "session_id": session_dict.get("session_id"),
562
585
  "session_type": SessionType.TEAM.value,
563
- "team_id": serialized_session_dict.get("team_id"),
564
- "user_id": serialized_session_dict.get("user_id"),
565
- "runs": serialized_session_dict.get("runs"),
566
- "team_data": serialized_session_dict.get("team_data"),
567
- "session_data": serialized_session_dict.get("session_data"),
568
- "summary": serialized_session_dict.get("summary"),
569
- "metadata": serialized_session_dict.get("metadata"),
570
- "created_at": serialized_session_dict.get("created_at"),
586
+ "team_id": session_dict.get("team_id"),
587
+ "user_id": session_dict.get("user_id"),
588
+ "runs": session_dict.get("runs"),
589
+ "team_data": session_dict.get("team_data"),
590
+ "session_data": session_dict.get("session_data"),
591
+ "summary": session_dict.get("summary"),
592
+ "metadata": session_dict.get("metadata"),
593
+ "created_at": session_dict.get("created_at"),
571
594
  "updated_at": int(time.time()),
572
595
  }
573
596
 
574
597
  elif isinstance(session, WorkflowSession):
575
598
  record = {
576
- "session_id": serialized_session_dict.get("session_id"),
599
+ "session_id": session_dict.get("session_id"),
577
600
  "session_type": SessionType.WORKFLOW.value,
578
- "workflow_id": serialized_session_dict.get("workflow_id"),
579
- "user_id": serialized_session_dict.get("user_id"),
580
- "runs": serialized_session_dict.get("runs"),
581
- "workflow_data": serialized_session_dict.get("workflow_data"),
582
- "session_data": serialized_session_dict.get("session_data"),
583
- "summary": serialized_session_dict.get("summary"),
584
- "metadata": serialized_session_dict.get("metadata"),
585
- "created_at": serialized_session_dict.get("created_at"),
601
+ "workflow_id": session_dict.get("workflow_id"),
602
+ "user_id": session_dict.get("user_id"),
603
+ "runs": session_dict.get("runs"),
604
+ "workflow_data": session_dict.get("workflow_data"),
605
+ "session_data": session_dict.get("session_data"),
606
+ "summary": session_dict.get("summary"),
607
+ "metadata": session_dict.get("metadata"),
608
+ "created_at": session_dict.get("created_at"),
586
609
  "updated_at": int(time.time()),
587
610
  }
588
611
 
@@ -292,25 +292,25 @@ def get_schema(table_type: TableType, table_name: str) -> str:
292
292
  elif table_type == "knowledge":
293
293
  return dedent(f"""
294
294
  {define_table}
295
- DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime VALUE time::now();
295
+ DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime DEFAULT time::now();
296
296
  DEFINE FIELD OVERWRITE updated_at ON {table_name} TYPE datetime VALUE time::now();
297
297
  """)
298
298
  elif table_type == "culture":
299
299
  return dedent(f"""
300
300
  {define_table}
301
- DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime VALUE time::now();
301
+ DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime DEFAULT time::now();
302
302
  DEFINE FIELD OVERWRITE updated_at ON {table_name} TYPE datetime VALUE time::now();
303
303
  """)
304
304
  elif table_type == "sessions":
305
305
  return dedent(f"""
306
306
  {define_table}
307
- DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime VALUE time::now();
307
+ DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime DEFAULT time::now();
308
308
  DEFINE FIELD OVERWRITE updated_at ON {table_name} TYPE datetime VALUE time::now();
309
309
  """)
310
310
  elif table_type == "traces":
311
311
  return dedent(f"""
312
312
  {define_table}
313
- DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime VALUE time::now();
313
+ DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime DEFAULT time::now();
314
314
  DEFINE INDEX idx_trace_id ON {table_name} FIELDS trace_id UNIQUE;
315
315
  DEFINE INDEX idx_run_id ON {table_name} FIELDS run_id;
316
316
  DEFINE INDEX idx_session_id ON {table_name} FIELDS session_id;
@@ -324,7 +324,7 @@ def get_schema(table_type: TableType, table_name: str) -> str:
324
324
  elif table_type == "spans":
325
325
  return dedent(f"""
326
326
  {define_table}
327
- DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime VALUE time::now();
327
+ DEFINE FIELD OVERWRITE created_at ON {table_name} TYPE datetime DEFAULT time::now();
328
328
  DEFINE INDEX idx_span_id ON {table_name} FIELDS span_id UNIQUE;
329
329
  DEFINE INDEX idx_trace_id ON {table_name} FIELDS trace_id;
330
330
  DEFINE INDEX idx_parent_span_id ON {table_name} FIELDS parent_span_id;
@@ -287,6 +287,7 @@ class SurrealDb(BaseDb):
287
287
  where = WhereClause()
288
288
  if user_id is not None:
289
289
  where = where.and_("user_id", user_id)
290
+
290
291
  where_clause, where_vars = where.build()
291
292
  query = dedent(f"""
292
293
  SELECT *
@@ -295,7 +296,18 @@ class SurrealDb(BaseDb):
295
296
  """)
296
297
  vars = {"record": record, **where_vars}
297
298
  raw = self._query_one(query, vars, dict)
298
- if raw is None or not deserialize:
299
+ if raw is None:
300
+ return None
301
+
302
+ # Verify session type matches
303
+ if session_type == SessionType.AGENT and raw.get("agent") is None:
304
+ return None
305
+ elif session_type == SessionType.TEAM and raw.get("team") is None:
306
+ return None
307
+ elif session_type == SessionType.WORKFLOW and raw.get("workflow") is None:
308
+ return None
309
+
310
+ if not deserialize:
299
311
  return raw
300
312
 
301
313
  return deserialize_session(session_type, raw)
@@ -37,6 +37,103 @@ class MarkdownChunking(ChunkingStrategy):
37
37
  if not (1 <= split_on_headings <= 6):
38
38
  raise ValueError("split_on_headings must be between 1 and 6 when using integer value")
39
39
 
40
+ def _split_large_section(self, section: str) -> List[str]:
41
+ """
42
+ Split a large section into smaller chunks while preserving the heading context.
43
+ Each sub-chunk will include the original heading for context.
44
+
45
+ Args:
46
+ section: The section content to split (may start with a heading)
47
+
48
+ Returns:
49
+ List of chunks, each respecting chunk_size
50
+ """
51
+ if len(section) <= self.chunk_size:
52
+ return [section]
53
+
54
+ # Extract heading and content from the section
55
+ lines = section.split("\n")
56
+ if lines and re.match(r"^#{1,6}\s+", lines[0]):
57
+ heading = lines[0]
58
+ content_lines = lines[1:]
59
+ else:
60
+ heading = ""
61
+ content_lines = lines
62
+
63
+ content = "\n".join(content_lines).strip()
64
+
65
+ # If just heading and small content, return as-is
66
+ if not content or len(section) <= self.chunk_size:
67
+ return [section]
68
+
69
+ # Split content by paragraphs
70
+ paragraphs = re.split(r"\n\n+", content)
71
+
72
+ chunks: List[str] = []
73
+ current_chunk_content: List[str] = []
74
+ # Account for heading size in each chunk
75
+ heading_size = len(heading) + 2 if heading else 0 # +2 for "\n\n"
76
+
77
+ for para in paragraphs:
78
+ para = para.strip()
79
+ if not para:
80
+ continue
81
+
82
+ current_size = sum(len(p) for p in current_chunk_content) + len(current_chunk_content) * 2 # \n\n
83
+ para_size = len(para)
84
+
85
+ # Check if adding this paragraph would exceed chunk_size
86
+ if current_chunk_content and (heading_size + current_size + para_size + 2) > self.chunk_size:
87
+ # Save current chunk
88
+ chunk_text = (
89
+ heading + "\n\n" + "\n\n".join(current_chunk_content)
90
+ if heading
91
+ else "\n\n".join(current_chunk_content)
92
+ )
93
+ chunks.append(chunk_text.strip())
94
+ current_chunk_content = []
95
+
96
+ # If single paragraph exceeds chunk_size, split it further
97
+ if para_size + heading_size > self.chunk_size:
98
+ # Save any accumulated content first
99
+ if current_chunk_content:
100
+ chunk_text = (
101
+ heading + "\n\n" + "\n\n".join(current_chunk_content)
102
+ if heading
103
+ else "\n\n".join(current_chunk_content)
104
+ )
105
+ chunks.append(chunk_text.strip())
106
+ current_chunk_content = []
107
+
108
+ # Split the large paragraph by sentences or fixed size
109
+ available_size = self.chunk_size - heading_size
110
+ words = para.split()
111
+ current_words: List[str] = []
112
+ current_word_len = 0
113
+
114
+ for word in words:
115
+ if current_word_len + len(word) + 1 > available_size and current_words:
116
+ chunk_text = heading + "\n\n" + " ".join(current_words) if heading else " ".join(current_words)
117
+ chunks.append(chunk_text.strip())
118
+ current_words = []
119
+ current_word_len = 0
120
+ current_words.append(word)
121
+ current_word_len += len(word) + 1
122
+
123
+ if current_words:
124
+ current_chunk_content.append(" ".join(current_words))
125
+ else:
126
+ current_chunk_content.append(para)
127
+
128
+ # add the remaining content
129
+ if current_chunk_content:
130
+ chunk_text = (
131
+ heading + "\n\n" + "\n\n".join(current_chunk_content) if heading else "\n\n".join(current_chunk_content)
132
+ )
133
+ chunks.append(chunk_text.strip())
134
+
135
+ return chunks if chunks else [section]
136
+
40
137
  def _split_by_headings(self, content: str) -> List[str]:
41
138
  """
42
139
  Split markdown content by headings, keeping each heading with its content.
@@ -163,18 +260,22 @@ class MarkdownChunking(ChunkingStrategy):
163
260
  section_size = len(section)
164
261
 
165
262
  # When split_on_headings is True or an int, each section becomes its own chunk
263
+ # But if section exceeds chunk_size, split it further
166
264
  if self.split_on_headings:
167
- meta_data = chunk_meta_data.copy()
168
- meta_data["chunk"] = chunk_number
169
- chunk_id = None
170
- if document.id:
171
- chunk_id = f"{document.id}_{chunk_number}"
172
- elif document.name:
173
- chunk_id = f"{document.name}_{chunk_number}"
174
- meta_data["chunk_size"] = section_size
175
-
176
- chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=section))
177
- chunk_number += 1
265
+ # Split large sections to respect chunk_size
266
+ sub_chunks = self._split_large_section(section)
267
+ for sub_chunk in sub_chunks:
268
+ meta_data = chunk_meta_data.copy()
269
+ meta_data["chunk"] = chunk_number
270
+ chunk_id = None
271
+ if document.id:
272
+ chunk_id = f"{document.id}_{chunk_number}"
273
+ elif document.name:
274
+ chunk_id = f"{document.name}_{chunk_number}"
275
+ meta_data["chunk_size"] = len(sub_chunk)
276
+
277
+ chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=sub_chunk))
278
+ chunk_number += 1
178
279
  elif current_size + section_size <= self.chunk_size:
179
280
  current_chunk.append(section)
180
281
  current_size += section_size
@@ -4451,12 +4451,10 @@ class Knowledge:
4451
4451
  # ========================================================================
4452
4452
 
4453
4453
  # Shared context strings
4454
- _KNOWLEDGE_BASE_SEARCH_INSTRUCTION = (
4455
- "You have access to a knowledge base.\n"
4456
- "IMPORTANT: For any user question that could be answered from the knowledge base, you MUST call the "
4457
- "search_knowledge_base tool before responding.\n"
4458
- "If the user question is ambiguous (e.g., 'the candidate') do NOT ask clarifying questions first—search the "
4459
- "knowledge base to identify the relevant documents.\n"
4454
+ _SEARCH_KNOWLEDGE_INSTRUCTIONS = (
4455
+ "You have a knowledge base you can search using the search_knowledge_base tool. "
4456
+ "Search before answering questions—don't assume you know the answer. "
4457
+ "For ambiguous questions, search first rather than asking for clarification."
4460
4458
  )
4461
4459
 
4462
4460
  _AGENTIC_FILTER_INSTRUCTION_TEMPLATE = """
@@ -4499,7 +4497,7 @@ Make sure to pass the filters as [Dict[str: Any]] to the tool. FOLLOW THIS STRUC
4499
4497
  Returns:
4500
4498
  Context string to add to system prompt.
4501
4499
  """
4502
- context_parts: List[str] = [self._KNOWLEDGE_BASE_SEARCH_INSTRUCTION]
4500
+ context_parts: List[str] = [self._SEARCH_KNOWLEDGE_INSTRUCTIONS]
4503
4501
 
4504
4502
  # Add filter instructions if agentic filters are enabled
4505
4503
  if enable_agentic_filters:
@@ -4507,7 +4505,7 @@ Make sure to pass the filters as [Dict[str: Any]] to the tool. FOLLOW THIS STRUC
4507
4505
  if valid_filters:
4508
4506
  context_parts.append(self._get_agentic_filter_instructions(valid_filters))
4509
4507
 
4510
- return "\n".join(context_parts)
4508
+ return "<knowledge_base>\n" + "\n".join(context_parts) + "\n</knowledge_base>"
4511
4509
 
4512
4510
  async def abuild_context(
4513
4511
  self,
@@ -4526,7 +4524,7 @@ Make sure to pass the filters as [Dict[str: Any]] to the tool. FOLLOW THIS STRUC
4526
4524
  Returns:
4527
4525
  Context string to add to system prompt.
4528
4526
  """
4529
- context_parts: List[str] = [self._KNOWLEDGE_BASE_SEARCH_INSTRUCTION]
4527
+ context_parts: List[str] = [self._SEARCH_KNOWLEDGE_INSTRUCTIONS]
4530
4528
 
4531
4529
  # Add filter instructions if agentic filters are enabled
4532
4530
  if enable_agentic_filters:
@@ -4534,7 +4532,7 @@ Make sure to pass the filters as [Dict[str: Any]] to the tool. FOLLOW THIS STRUC
4534
4532
  if valid_filters:
4535
4533
  context_parts.append(self._get_agentic_filter_instructions(valid_filters))
4536
4534
 
4537
- return "\n".join(context_parts)
4535
+ return "<knowledge_base>\n" + "\n".join(context_parts) + "\n</knowledge_base>"
4538
4536
 
4539
4537
  def get_tools(
4540
4538
  self,
@@ -2109,6 +2109,7 @@ class Model(ABC):
2109
2109
  tool_name=fc.function.name,
2110
2110
  tool_args=fc.arguments,
2111
2111
  requires_confirmation=True,
2112
+ external_execution_silent=fc.function.external_execution_silent,
2112
2113
  )
2113
2114
  )
2114
2115
 
@@ -2128,6 +2129,7 @@ class Model(ABC):
2128
2129
  tool_args=fc.arguments,
2129
2130
  requires_user_input=True,
2130
2131
  user_input_schema=user_input_schema,
2132
+ external_execution_silent=fc.function.external_execution_silent,
2131
2133
  )
2132
2134
  )
2133
2135
 
@@ -2176,6 +2178,7 @@ class Model(ABC):
2176
2178
  tool_name=fc.function.name,
2177
2179
  tool_args=fc.arguments,
2178
2180
  external_execution_required=True,
2181
+ external_execution_silent=fc.function.external_execution_silent,
2179
2182
  )
2180
2183
  )
2181
2184
 
@@ -2270,6 +2273,7 @@ class Model(ABC):
2270
2273
  tool_name=fc.function.name,
2271
2274
  tool_args=fc.arguments,
2272
2275
  requires_confirmation=True,
2276
+ external_execution_silent=fc.function.external_execution_silent,
2273
2277
  )
2274
2278
  )
2275
2279
  # If the function requires user input, we yield a message to the user
@@ -2288,6 +2292,7 @@ class Model(ABC):
2288
2292
  tool_args=fc.arguments,
2289
2293
  requires_user_input=True,
2290
2294
  user_input_schema=user_input_schema,
2295
+ external_execution_silent=fc.function.external_execution_silent,
2291
2296
  )
2292
2297
  )
2293
2298
  # If the function is from the user control flow tools, we handle it here
@@ -2340,6 +2345,7 @@ class Model(ABC):
2340
2345
  tool_name=fc.function.name,
2341
2346
  tool_args=fc.arguments,
2342
2347
  external_execution_required=True,
2348
+ external_execution_silent=fc.function.external_execution_silent,
2343
2349
  )
2344
2350
  )
2345
2351