agno 2.4.5__tar.gz → 2.4.7__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 (689) hide show
  1. {agno-2.4.5 → agno-2.4.7}/PKG-INFO +34 -59
  2. agno-2.4.7/README.md +109 -0
  3. {agno-2.4.5 → agno-2.4.7}/agno/agent/agent.py +2 -1
  4. {agno-2.4.5 → agno-2.4.7}/agno/db/singlestore/singlestore.py +4 -5
  5. {agno-2.4.5 → agno-2.4.7}/agno/db/surrealdb/models.py +1 -1
  6. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/chunking/agentic.py +1 -5
  7. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/chunking/code.py +1 -1
  8. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/chunking/document.py +22 -42
  9. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/chunking/fixed.py +1 -5
  10. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/chunking/markdown.py +9 -25
  11. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/chunking/recursive.py +1 -3
  12. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/chunking/row.py +3 -2
  13. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/chunking/semantic.py +1 -1
  14. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/chunking/strategy.py +19 -0
  15. agno-2.4.7/agno/knowledge/embedder/aws_bedrock.py +562 -0
  16. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/knowledge.py +173 -14
  17. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/text_reader.py +1 -1
  18. agno-2.4.7/agno/knowledge/reranker/aws_bedrock.py +299 -0
  19. {agno-2.4.5 → agno-2.4.7}/agno/learn/machine.py +5 -6
  20. {agno-2.4.5 → agno-2.4.7}/agno/learn/stores/learned_knowledge.py +108 -131
  21. {agno-2.4.5 → agno-2.4.7}/agno/run/workflow.py +3 -0
  22. {agno-2.4.5 → agno-2.4.7}/agno/tools/mcp/mcp.py +26 -1
  23. {agno-2.4.5 → agno-2.4.7}/agno/utils/print_response/agent.py +8 -8
  24. {agno-2.4.5 → agno-2.4.7}/agno/utils/print_response/team.py +8 -8
  25. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/lancedb/lance_db.py +9 -9
  26. {agno-2.4.5 → agno-2.4.7}/agno/workflow/condition.py +135 -56
  27. {agno-2.4.5 → agno-2.4.7}/agno.egg-info/PKG-INFO +34 -59
  28. {agno-2.4.5 → agno-2.4.7}/agno.egg-info/SOURCES.txt +1 -0
  29. {agno-2.4.5 → agno-2.4.7}/agno.egg-info/requires.txt +2 -2
  30. {agno-2.4.5 → agno-2.4.7}/pyproject.toml +3 -3
  31. agno-2.4.5/README.md +0 -134
  32. agno-2.4.5/agno/knowledge/embedder/aws_bedrock.py +0 -343
  33. {agno-2.4.5 → agno-2.4.7}/LICENSE +0 -0
  34. {agno-2.4.5 → agno-2.4.7}/agno/__init__.py +0 -0
  35. {agno-2.4.5 → agno-2.4.7}/agno/agent/__init__.py +0 -0
  36. {agno-2.4.5 → agno-2.4.7}/agno/agent/remote.py +0 -0
  37. {agno-2.4.5 → agno-2.4.7}/agno/api/__init__.py +0 -0
  38. {agno-2.4.5 → agno-2.4.7}/agno/api/agent.py +0 -0
  39. {agno-2.4.5 → agno-2.4.7}/agno/api/api.py +0 -0
  40. {agno-2.4.5 → agno-2.4.7}/agno/api/evals.py +0 -0
  41. {agno-2.4.5 → agno-2.4.7}/agno/api/os.py +0 -0
  42. {agno-2.4.5 → agno-2.4.7}/agno/api/routes.py +0 -0
  43. {agno-2.4.5 → agno-2.4.7}/agno/api/schemas/__init__.py +0 -0
  44. {agno-2.4.5 → agno-2.4.7}/agno/api/schemas/agent.py +0 -0
  45. {agno-2.4.5 → agno-2.4.7}/agno/api/schemas/evals.py +0 -0
  46. {agno-2.4.5 → agno-2.4.7}/agno/api/schemas/os.py +0 -0
  47. {agno-2.4.5 → agno-2.4.7}/agno/api/schemas/response.py +0 -0
  48. {agno-2.4.5 → agno-2.4.7}/agno/api/schemas/team.py +0 -0
  49. {agno-2.4.5 → agno-2.4.7}/agno/api/schemas/utils.py +0 -0
  50. {agno-2.4.5 → agno-2.4.7}/agno/api/schemas/workflows.py +0 -0
  51. {agno-2.4.5 → agno-2.4.7}/agno/api/settings.py +0 -0
  52. {agno-2.4.5 → agno-2.4.7}/agno/api/team.py +0 -0
  53. {agno-2.4.5 → agno-2.4.7}/agno/api/workflow.py +0 -0
  54. {agno-2.4.5 → agno-2.4.7}/agno/client/__init__.py +0 -0
  55. {agno-2.4.5 → agno-2.4.7}/agno/client/a2a/__init__.py +0 -0
  56. {agno-2.4.5 → agno-2.4.7}/agno/client/a2a/client.py +0 -0
  57. {agno-2.4.5 → agno-2.4.7}/agno/client/a2a/schemas.py +0 -0
  58. {agno-2.4.5 → agno-2.4.7}/agno/client/a2a/utils.py +0 -0
  59. {agno-2.4.5 → agno-2.4.7}/agno/client/os.py +0 -0
  60. {agno-2.4.5 → agno-2.4.7}/agno/cloud/aws/base.py +0 -0
  61. {agno-2.4.5 → agno-2.4.7}/agno/cloud/aws/s3/__init__.py +0 -0
  62. {agno-2.4.5 → agno-2.4.7}/agno/cloud/aws/s3/api_client.py +0 -0
  63. {agno-2.4.5 → agno-2.4.7}/agno/cloud/aws/s3/bucket.py +0 -0
  64. {agno-2.4.5 → agno-2.4.7}/agno/cloud/aws/s3/object.py +0 -0
  65. {agno-2.4.5 → agno-2.4.7}/agno/compression/__init__.py +0 -0
  66. {agno-2.4.5 → agno-2.4.7}/agno/compression/manager.py +0 -0
  67. {agno-2.4.5 → agno-2.4.7}/agno/culture/__init__.py +0 -0
  68. {agno-2.4.5 → agno-2.4.7}/agno/culture/manager.py +0 -0
  69. {agno-2.4.5 → agno-2.4.7}/agno/db/__init__.py +0 -0
  70. {agno-2.4.5 → agno-2.4.7}/agno/db/async_postgres/__init__.py +0 -0
  71. {agno-2.4.5 → agno-2.4.7}/agno/db/base.py +0 -0
  72. {agno-2.4.5 → agno-2.4.7}/agno/db/dynamo/__init__.py +0 -0
  73. {agno-2.4.5 → agno-2.4.7}/agno/db/dynamo/dynamo.py +0 -0
  74. {agno-2.4.5 → agno-2.4.7}/agno/db/dynamo/schemas.py +0 -0
  75. {agno-2.4.5 → agno-2.4.7}/agno/db/dynamo/utils.py +0 -0
  76. {agno-2.4.5 → agno-2.4.7}/agno/db/firestore/__init__.py +0 -0
  77. {agno-2.4.5 → agno-2.4.7}/agno/db/firestore/firestore.py +0 -0
  78. {agno-2.4.5 → agno-2.4.7}/agno/db/firestore/schemas.py +0 -0
  79. {agno-2.4.5 → agno-2.4.7}/agno/db/firestore/utils.py +0 -0
  80. {agno-2.4.5 → agno-2.4.7}/agno/db/gcs_json/__init__.py +0 -0
  81. {agno-2.4.5 → agno-2.4.7}/agno/db/gcs_json/gcs_json_db.py +0 -0
  82. {agno-2.4.5 → agno-2.4.7}/agno/db/gcs_json/utils.py +0 -0
  83. {agno-2.4.5 → agno-2.4.7}/agno/db/in_memory/__init__.py +0 -0
  84. {agno-2.4.5 → agno-2.4.7}/agno/db/in_memory/in_memory_db.py +0 -0
  85. {agno-2.4.5 → agno-2.4.7}/agno/db/in_memory/utils.py +0 -0
  86. {agno-2.4.5 → agno-2.4.7}/agno/db/json/__init__.py +0 -0
  87. {agno-2.4.5 → agno-2.4.7}/agno/db/json/json_db.py +0 -0
  88. {agno-2.4.5 → agno-2.4.7}/agno/db/json/utils.py +0 -0
  89. {agno-2.4.5 → agno-2.4.7}/agno/db/migrations/__init__.py +0 -0
  90. {agno-2.4.5 → agno-2.4.7}/agno/db/migrations/manager.py +0 -0
  91. {agno-2.4.5 → agno-2.4.7}/agno/db/migrations/utils.py +0 -0
  92. {agno-2.4.5 → agno-2.4.7}/agno/db/migrations/v1_to_v2.py +0 -0
  93. {agno-2.4.5 → agno-2.4.7}/agno/db/migrations/versions/__init__.py +0 -0
  94. {agno-2.4.5 → agno-2.4.7}/agno/db/migrations/versions/v2_3_0.py +0 -0
  95. {agno-2.4.5 → agno-2.4.7}/agno/db/mongo/__init__.py +0 -0
  96. {agno-2.4.5 → agno-2.4.7}/agno/db/mongo/async_mongo.py +0 -0
  97. {agno-2.4.5 → agno-2.4.7}/agno/db/mongo/mongo.py +0 -0
  98. {agno-2.4.5 → agno-2.4.7}/agno/db/mongo/schemas.py +0 -0
  99. {agno-2.4.5 → agno-2.4.7}/agno/db/mongo/utils.py +0 -0
  100. {agno-2.4.5 → agno-2.4.7}/agno/db/mysql/__init__.py +0 -0
  101. {agno-2.4.5 → agno-2.4.7}/agno/db/mysql/async_mysql.py +0 -0
  102. {agno-2.4.5 → agno-2.4.7}/agno/db/mysql/mysql.py +0 -0
  103. {agno-2.4.5 → agno-2.4.7}/agno/db/mysql/schemas.py +0 -0
  104. {agno-2.4.5 → agno-2.4.7}/agno/db/mysql/utils.py +0 -0
  105. {agno-2.4.5 → agno-2.4.7}/agno/db/postgres/__init__.py +0 -0
  106. {agno-2.4.5 → agno-2.4.7}/agno/db/postgres/async_postgres.py +0 -0
  107. {agno-2.4.5 → agno-2.4.7}/agno/db/postgres/postgres.py +0 -0
  108. {agno-2.4.5 → agno-2.4.7}/agno/db/postgres/schemas.py +0 -0
  109. {agno-2.4.5 → agno-2.4.7}/agno/db/postgres/utils.py +0 -0
  110. {agno-2.4.5 → agno-2.4.7}/agno/db/redis/__init__.py +0 -0
  111. {agno-2.4.5 → agno-2.4.7}/agno/db/redis/redis.py +0 -0
  112. {agno-2.4.5 → agno-2.4.7}/agno/db/redis/schemas.py +0 -0
  113. {agno-2.4.5 → agno-2.4.7}/agno/db/redis/utils.py +0 -0
  114. {agno-2.4.5 → agno-2.4.7}/agno/db/schemas/__init__.py +0 -0
  115. {agno-2.4.5 → agno-2.4.7}/agno/db/schemas/culture.py +0 -0
  116. {agno-2.4.5 → agno-2.4.7}/agno/db/schemas/evals.py +0 -0
  117. {agno-2.4.5 → agno-2.4.7}/agno/db/schemas/knowledge.py +0 -0
  118. {agno-2.4.5 → agno-2.4.7}/agno/db/schemas/memory.py +0 -0
  119. {agno-2.4.5 → agno-2.4.7}/agno/db/schemas/metrics.py +0 -0
  120. {agno-2.4.5 → agno-2.4.7}/agno/db/singlestore/__init__.py +0 -0
  121. {agno-2.4.5 → agno-2.4.7}/agno/db/singlestore/schemas.py +0 -0
  122. {agno-2.4.5 → agno-2.4.7}/agno/db/singlestore/utils.py +0 -0
  123. {agno-2.4.5 → agno-2.4.7}/agno/db/sqlite/__init__.py +0 -0
  124. {agno-2.4.5 → agno-2.4.7}/agno/db/sqlite/async_sqlite.py +0 -0
  125. {agno-2.4.5 → agno-2.4.7}/agno/db/sqlite/schemas.py +0 -0
  126. {agno-2.4.5 → agno-2.4.7}/agno/db/sqlite/sqlite.py +0 -0
  127. {agno-2.4.5 → agno-2.4.7}/agno/db/sqlite/utils.py +0 -0
  128. {agno-2.4.5 → agno-2.4.7}/agno/db/surrealdb/__init__.py +0 -0
  129. {agno-2.4.5 → agno-2.4.7}/agno/db/surrealdb/metrics.py +0 -0
  130. {agno-2.4.5 → agno-2.4.7}/agno/db/surrealdb/queries.py +0 -0
  131. {agno-2.4.5 → agno-2.4.7}/agno/db/surrealdb/surrealdb.py +0 -0
  132. {agno-2.4.5 → agno-2.4.7}/agno/db/surrealdb/utils.py +0 -0
  133. {agno-2.4.5 → agno-2.4.7}/agno/db/utils.py +0 -0
  134. {agno-2.4.5 → agno-2.4.7}/agno/debug.py +0 -0
  135. {agno-2.4.5 → agno-2.4.7}/agno/eval/__init__.py +0 -0
  136. {agno-2.4.5 → agno-2.4.7}/agno/eval/accuracy.py +0 -0
  137. {agno-2.4.5 → agno-2.4.7}/agno/eval/agent_as_judge.py +0 -0
  138. {agno-2.4.5 → agno-2.4.7}/agno/eval/base.py +0 -0
  139. {agno-2.4.5 → agno-2.4.7}/agno/eval/performance.py +0 -0
  140. {agno-2.4.5 → agno-2.4.7}/agno/eval/reliability.py +0 -0
  141. {agno-2.4.5 → agno-2.4.7}/agno/eval/utils.py +0 -0
  142. {agno-2.4.5 → agno-2.4.7}/agno/exceptions.py +0 -0
  143. {agno-2.4.5 → agno-2.4.7}/agno/filters.py +0 -0
  144. {agno-2.4.5 → agno-2.4.7}/agno/guardrails/__init__.py +0 -0
  145. {agno-2.4.5 → agno-2.4.7}/agno/guardrails/base.py +0 -0
  146. {agno-2.4.5 → agno-2.4.7}/agno/guardrails/openai.py +0 -0
  147. {agno-2.4.5 → agno-2.4.7}/agno/guardrails/pii.py +0 -0
  148. {agno-2.4.5 → agno-2.4.7}/agno/guardrails/prompt_injection.py +0 -0
  149. {agno-2.4.5 → agno-2.4.7}/agno/hooks/__init__.py +0 -0
  150. {agno-2.4.5 → agno-2.4.7}/agno/hooks/decorator.py +0 -0
  151. {agno-2.4.5 → agno-2.4.7}/agno/integrations/__init__.py +0 -0
  152. {agno-2.4.5 → agno-2.4.7}/agno/integrations/discord/__init__.py +0 -0
  153. {agno-2.4.5 → agno-2.4.7}/agno/integrations/discord/client.py +0 -0
  154. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/__init__.py +0 -0
  155. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/chunking/__init__.py +0 -0
  156. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/content.py +0 -0
  157. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/document/__init__.py +0 -0
  158. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/document/base.py +0 -0
  159. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/__init__.py +0 -0
  160. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/azure_openai.py +0 -0
  161. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/base.py +0 -0
  162. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/cohere.py +0 -0
  163. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/fastembed.py +0 -0
  164. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/fireworks.py +0 -0
  165. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/google.py +0 -0
  166. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/huggingface.py +0 -0
  167. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/jina.py +0 -0
  168. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/langdb.py +0 -0
  169. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/mistral.py +0 -0
  170. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/nebius.py +0 -0
  171. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/ollama.py +0 -0
  172. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/openai.py +0 -0
  173. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/sentence_transformer.py +0 -0
  174. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/together.py +0 -0
  175. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/vllm.py +0 -0
  176. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/embedder/voyageai.py +0 -0
  177. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/filesystem.py +0 -0
  178. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/protocol.py +0 -0
  179. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/__init__.py +0 -0
  180. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/arxiv_reader.py +0 -0
  181. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/base.py +0 -0
  182. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/csv_reader.py +0 -0
  183. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/docx_reader.py +0 -0
  184. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/excel_reader.py +0 -0
  185. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/field_labeled_csv_reader.py +0 -0
  186. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/firecrawl_reader.py +0 -0
  187. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/json_reader.py +0 -0
  188. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/markdown_reader.py +0 -0
  189. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/pdf_reader.py +0 -0
  190. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/pptx_reader.py +0 -0
  191. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/reader_factory.py +0 -0
  192. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/s3_reader.py +0 -0
  193. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/tavily_reader.py +0 -0
  194. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/utils/__init__.py +0 -0
  195. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/utils/spreadsheet.py +0 -0
  196. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/web_search_reader.py +0 -0
  197. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/website_reader.py +0 -0
  198. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/wikipedia_reader.py +0 -0
  199. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reader/youtube_reader.py +0 -0
  200. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/remote_content/__init__.py +0 -0
  201. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/remote_content/config.py +0 -0
  202. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/remote_content/remote_content.py +0 -0
  203. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reranker/__init__.py +0 -0
  204. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reranker/base.py +0 -0
  205. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reranker/cohere.py +0 -0
  206. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reranker/infinity.py +0 -0
  207. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/reranker/sentence_transformer.py +0 -0
  208. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/types.py +0 -0
  209. {agno-2.4.5 → agno-2.4.7}/agno/knowledge/utils.py +0 -0
  210. {agno-2.4.5 → agno-2.4.7}/agno/learn/__init__.py +0 -0
  211. {agno-2.4.5 → agno-2.4.7}/agno/learn/config.py +0 -0
  212. {agno-2.4.5 → agno-2.4.7}/agno/learn/curate.py +0 -0
  213. {agno-2.4.5 → agno-2.4.7}/agno/learn/schemas.py +0 -0
  214. {agno-2.4.5 → agno-2.4.7}/agno/learn/stores/__init__.py +0 -0
  215. {agno-2.4.5 → agno-2.4.7}/agno/learn/stores/decision_log.py +0 -0
  216. {agno-2.4.5 → agno-2.4.7}/agno/learn/stores/entity_memory.py +0 -0
  217. {agno-2.4.5 → agno-2.4.7}/agno/learn/stores/protocol.py +0 -0
  218. {agno-2.4.5 → agno-2.4.7}/agno/learn/stores/session_context.py +0 -0
  219. {agno-2.4.5 → agno-2.4.7}/agno/learn/stores/user_memory.py +0 -0
  220. {agno-2.4.5 → agno-2.4.7}/agno/learn/stores/user_profile.py +0 -0
  221. {agno-2.4.5 → agno-2.4.7}/agno/learn/utils.py +0 -0
  222. {agno-2.4.5 → agno-2.4.7}/agno/media.py +0 -0
  223. {agno-2.4.5 → agno-2.4.7}/agno/memory/__init__.py +0 -0
  224. {agno-2.4.5 → agno-2.4.7}/agno/memory/manager.py +0 -0
  225. {agno-2.4.5 → agno-2.4.7}/agno/memory/strategies/__init__.py +0 -0
  226. {agno-2.4.5 → agno-2.4.7}/agno/memory/strategies/base.py +0 -0
  227. {agno-2.4.5 → agno-2.4.7}/agno/memory/strategies/summarize.py +0 -0
  228. {agno-2.4.5 → agno-2.4.7}/agno/memory/strategies/types.py +0 -0
  229. {agno-2.4.5 → agno-2.4.7}/agno/models/__init__.py +0 -0
  230. {agno-2.4.5 → agno-2.4.7}/agno/models/aimlapi/__init__.py +0 -0
  231. {agno-2.4.5 → agno-2.4.7}/agno/models/aimlapi/aimlapi.py +0 -0
  232. {agno-2.4.5 → agno-2.4.7}/agno/models/anthropic/__init__.py +0 -0
  233. {agno-2.4.5 → agno-2.4.7}/agno/models/anthropic/claude.py +0 -0
  234. {agno-2.4.5 → agno-2.4.7}/agno/models/aws/__init__.py +0 -0
  235. {agno-2.4.5 → agno-2.4.7}/agno/models/aws/bedrock.py +0 -0
  236. {agno-2.4.5 → agno-2.4.7}/agno/models/aws/claude.py +0 -0
  237. {agno-2.4.5 → agno-2.4.7}/agno/models/azure/__init__.py +0 -0
  238. {agno-2.4.5 → agno-2.4.7}/agno/models/azure/ai_foundry.py +0 -0
  239. {agno-2.4.5 → agno-2.4.7}/agno/models/azure/openai_chat.py +0 -0
  240. {agno-2.4.5 → agno-2.4.7}/agno/models/base.py +0 -0
  241. {agno-2.4.5 → agno-2.4.7}/agno/models/cerebras/__init__.py +0 -0
  242. {agno-2.4.5 → agno-2.4.7}/agno/models/cerebras/cerebras.py +0 -0
  243. {agno-2.4.5 → agno-2.4.7}/agno/models/cerebras/cerebras_openai.py +0 -0
  244. {agno-2.4.5 → agno-2.4.7}/agno/models/cohere/__init__.py +0 -0
  245. {agno-2.4.5 → agno-2.4.7}/agno/models/cohere/chat.py +0 -0
  246. {agno-2.4.5 → agno-2.4.7}/agno/models/cometapi/__init__.py +0 -0
  247. {agno-2.4.5 → agno-2.4.7}/agno/models/cometapi/cometapi.py +0 -0
  248. {agno-2.4.5 → agno-2.4.7}/agno/models/dashscope/__init__.py +0 -0
  249. {agno-2.4.5 → agno-2.4.7}/agno/models/dashscope/dashscope.py +0 -0
  250. {agno-2.4.5 → agno-2.4.7}/agno/models/deepinfra/__init__.py +0 -0
  251. {agno-2.4.5 → agno-2.4.7}/agno/models/deepinfra/deepinfra.py +0 -0
  252. {agno-2.4.5 → agno-2.4.7}/agno/models/deepseek/__init__.py +0 -0
  253. {agno-2.4.5 → agno-2.4.7}/agno/models/deepseek/deepseek.py +0 -0
  254. {agno-2.4.5 → agno-2.4.7}/agno/models/defaults.py +0 -0
  255. {agno-2.4.5 → agno-2.4.7}/agno/models/fireworks/__init__.py +0 -0
  256. {agno-2.4.5 → agno-2.4.7}/agno/models/fireworks/fireworks.py +0 -0
  257. {agno-2.4.5 → agno-2.4.7}/agno/models/google/__init__.py +0 -0
  258. {agno-2.4.5 → agno-2.4.7}/agno/models/google/gemini.py +0 -0
  259. {agno-2.4.5 → agno-2.4.7}/agno/models/google/utils.py +0 -0
  260. {agno-2.4.5 → agno-2.4.7}/agno/models/groq/__init__.py +0 -0
  261. {agno-2.4.5 → agno-2.4.7}/agno/models/groq/groq.py +0 -0
  262. {agno-2.4.5 → agno-2.4.7}/agno/models/huggingface/__init__.py +0 -0
  263. {agno-2.4.5 → agno-2.4.7}/agno/models/huggingface/huggingface.py +0 -0
  264. {agno-2.4.5 → agno-2.4.7}/agno/models/ibm/__init__.py +0 -0
  265. {agno-2.4.5 → agno-2.4.7}/agno/models/ibm/watsonx.py +0 -0
  266. {agno-2.4.5 → agno-2.4.7}/agno/models/internlm/__init__.py +0 -0
  267. {agno-2.4.5 → agno-2.4.7}/agno/models/internlm/internlm.py +0 -0
  268. {agno-2.4.5 → agno-2.4.7}/agno/models/langdb/__init__.py +0 -0
  269. {agno-2.4.5 → agno-2.4.7}/agno/models/langdb/langdb.py +0 -0
  270. {agno-2.4.5 → agno-2.4.7}/agno/models/litellm/__init__.py +0 -0
  271. {agno-2.4.5 → agno-2.4.7}/agno/models/litellm/chat.py +0 -0
  272. {agno-2.4.5 → agno-2.4.7}/agno/models/litellm/litellm_openai.py +0 -0
  273. {agno-2.4.5 → agno-2.4.7}/agno/models/llama_cpp/__init__.py +0 -0
  274. {agno-2.4.5 → agno-2.4.7}/agno/models/llama_cpp/llama_cpp.py +0 -0
  275. {agno-2.4.5 → agno-2.4.7}/agno/models/lmstudio/__init__.py +0 -0
  276. {agno-2.4.5 → agno-2.4.7}/agno/models/lmstudio/lmstudio.py +0 -0
  277. {agno-2.4.5 → agno-2.4.7}/agno/models/message.py +0 -0
  278. {agno-2.4.5 → agno-2.4.7}/agno/models/meta/__init__.py +0 -0
  279. {agno-2.4.5 → agno-2.4.7}/agno/models/meta/llama.py +0 -0
  280. {agno-2.4.5 → agno-2.4.7}/agno/models/meta/llama_openai.py +0 -0
  281. {agno-2.4.5 → agno-2.4.7}/agno/models/metrics.py +0 -0
  282. {agno-2.4.5 → agno-2.4.7}/agno/models/mistral/__init__.py +0 -0
  283. {agno-2.4.5 → agno-2.4.7}/agno/models/mistral/mistral.py +0 -0
  284. {agno-2.4.5 → agno-2.4.7}/agno/models/moonshot/__init__.py +0 -0
  285. {agno-2.4.5 → agno-2.4.7}/agno/models/moonshot/moonshot.py +0 -0
  286. {agno-2.4.5 → agno-2.4.7}/agno/models/n1n/__init__.py +0 -0
  287. {agno-2.4.5 → agno-2.4.7}/agno/models/n1n/n1n.py +0 -0
  288. {agno-2.4.5 → agno-2.4.7}/agno/models/nebius/__init__.py +0 -0
  289. {agno-2.4.5 → agno-2.4.7}/agno/models/nebius/nebius.py +0 -0
  290. {agno-2.4.5 → agno-2.4.7}/agno/models/nexus/__init__.py +0 -0
  291. {agno-2.4.5 → agno-2.4.7}/agno/models/nexus/nexus.py +0 -0
  292. {agno-2.4.5 → agno-2.4.7}/agno/models/nvidia/__init__.py +0 -0
  293. {agno-2.4.5 → agno-2.4.7}/agno/models/nvidia/nvidia.py +0 -0
  294. {agno-2.4.5 → agno-2.4.7}/agno/models/ollama/__init__.py +0 -0
  295. {agno-2.4.5 → agno-2.4.7}/agno/models/ollama/chat.py +0 -0
  296. {agno-2.4.5 → agno-2.4.7}/agno/models/ollama/responses.py +0 -0
  297. {agno-2.4.5 → agno-2.4.7}/agno/models/openai/__init__.py +0 -0
  298. {agno-2.4.5 → agno-2.4.7}/agno/models/openai/chat.py +0 -0
  299. {agno-2.4.5 → agno-2.4.7}/agno/models/openai/like.py +0 -0
  300. {agno-2.4.5 → agno-2.4.7}/agno/models/openai/open_responses.py +0 -0
  301. {agno-2.4.5 → agno-2.4.7}/agno/models/openai/responses.py +0 -0
  302. {agno-2.4.5 → agno-2.4.7}/agno/models/openrouter/__init__.py +0 -0
  303. {agno-2.4.5 → agno-2.4.7}/agno/models/openrouter/openrouter.py +0 -0
  304. {agno-2.4.5 → agno-2.4.7}/agno/models/openrouter/responses.py +0 -0
  305. {agno-2.4.5 → agno-2.4.7}/agno/models/perplexity/__init__.py +0 -0
  306. {agno-2.4.5 → agno-2.4.7}/agno/models/perplexity/perplexity.py +0 -0
  307. {agno-2.4.5 → agno-2.4.7}/agno/models/portkey/__init__.py +0 -0
  308. {agno-2.4.5 → agno-2.4.7}/agno/models/portkey/portkey.py +0 -0
  309. {agno-2.4.5 → agno-2.4.7}/agno/models/requesty/__init__.py +0 -0
  310. {agno-2.4.5 → agno-2.4.7}/agno/models/requesty/requesty.py +0 -0
  311. {agno-2.4.5 → agno-2.4.7}/agno/models/response.py +0 -0
  312. {agno-2.4.5 → agno-2.4.7}/agno/models/sambanova/__init__.py +0 -0
  313. {agno-2.4.5 → agno-2.4.7}/agno/models/sambanova/sambanova.py +0 -0
  314. {agno-2.4.5 → agno-2.4.7}/agno/models/siliconflow/__init__.py +0 -0
  315. {agno-2.4.5 → agno-2.4.7}/agno/models/siliconflow/siliconflow.py +0 -0
  316. {agno-2.4.5 → agno-2.4.7}/agno/models/together/__init__.py +0 -0
  317. {agno-2.4.5 → agno-2.4.7}/agno/models/together/together.py +0 -0
  318. {agno-2.4.5 → agno-2.4.7}/agno/models/utils.py +0 -0
  319. {agno-2.4.5 → agno-2.4.7}/agno/models/vercel/__init__.py +0 -0
  320. {agno-2.4.5 → agno-2.4.7}/agno/models/vercel/v0.py +0 -0
  321. {agno-2.4.5 → agno-2.4.7}/agno/models/vertexai/__init__.py +0 -0
  322. {agno-2.4.5 → agno-2.4.7}/agno/models/vertexai/claude.py +0 -0
  323. {agno-2.4.5 → agno-2.4.7}/agno/models/vllm/__init__.py +0 -0
  324. {agno-2.4.5 → agno-2.4.7}/agno/models/vllm/vllm.py +0 -0
  325. {agno-2.4.5 → agno-2.4.7}/agno/models/xai/__init__.py +0 -0
  326. {agno-2.4.5 → agno-2.4.7}/agno/models/xai/xai.py +0 -0
  327. {agno-2.4.5 → agno-2.4.7}/agno/os/__init__.py +0 -0
  328. {agno-2.4.5 → agno-2.4.7}/agno/os/app.py +0 -0
  329. {agno-2.4.5 → agno-2.4.7}/agno/os/auth.py +0 -0
  330. {agno-2.4.5 → agno-2.4.7}/agno/os/config.py +0 -0
  331. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/__init__.py +0 -0
  332. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/a2a/__init__.py +0 -0
  333. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/a2a/a2a.py +0 -0
  334. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/a2a/router.py +0 -0
  335. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/a2a/utils.py +0 -0
  336. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/agui/__init__.py +0 -0
  337. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/agui/agui.py +0 -0
  338. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/agui/router.py +0 -0
  339. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/agui/utils.py +0 -0
  340. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/base.py +0 -0
  341. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/slack/__init__.py +0 -0
  342. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/slack/router.py +0 -0
  343. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/slack/security.py +0 -0
  344. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/slack/slack.py +0 -0
  345. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/whatsapp/__init__.py +0 -0
  346. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/whatsapp/router.py +0 -0
  347. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/whatsapp/security.py +0 -0
  348. {agno-2.4.5 → agno-2.4.7}/agno/os/interfaces/whatsapp/whatsapp.py +0 -0
  349. {agno-2.4.5 → agno-2.4.7}/agno/os/managers.py +0 -0
  350. {agno-2.4.5 → agno-2.4.7}/agno/os/mcp.py +0 -0
  351. {agno-2.4.5 → agno-2.4.7}/agno/os/middleware/__init__.py +0 -0
  352. {agno-2.4.5 → agno-2.4.7}/agno/os/middleware/jwt.py +0 -0
  353. {agno-2.4.5 → agno-2.4.7}/agno/os/middleware/trailing_slash.py +0 -0
  354. {agno-2.4.5 → agno-2.4.7}/agno/os/router.py +0 -0
  355. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/__init__.py +0 -0
  356. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/agents/__init__.py +0 -0
  357. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/agents/router.py +0 -0
  358. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/agents/schema.py +0 -0
  359. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/components/__init__.py +0 -0
  360. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/components/components.py +0 -0
  361. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/database.py +0 -0
  362. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/evals/__init__.py +0 -0
  363. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/evals/evals.py +0 -0
  364. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/evals/schemas.py +0 -0
  365. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/evals/utils.py +0 -0
  366. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/health.py +0 -0
  367. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/home.py +0 -0
  368. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/knowledge/__init__.py +0 -0
  369. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/knowledge/knowledge.py +0 -0
  370. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/knowledge/schemas.py +0 -0
  371. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/memory/__init__.py +0 -0
  372. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/memory/memory.py +0 -0
  373. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/memory/schemas.py +0 -0
  374. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/metrics/__init__.py +0 -0
  375. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/metrics/metrics.py +0 -0
  376. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/metrics/schemas.py +0 -0
  377. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/registry/__init__.py +0 -0
  378. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/registry/registry.py +0 -0
  379. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/session/__init__.py +0 -0
  380. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/session/session.py +0 -0
  381. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/teams/__init__.py +0 -0
  382. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/teams/router.py +0 -0
  383. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/teams/schema.py +0 -0
  384. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/traces/__init__.py +0 -0
  385. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/traces/schemas.py +0 -0
  386. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/traces/traces.py +0 -0
  387. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/workflows/__init__.py +0 -0
  388. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/workflows/router.py +0 -0
  389. {agno-2.4.5 → agno-2.4.7}/agno/os/routers/workflows/schema.py +0 -0
  390. {agno-2.4.5 → agno-2.4.7}/agno/os/schema.py +0 -0
  391. {agno-2.4.5 → agno-2.4.7}/agno/os/scopes.py +0 -0
  392. {agno-2.4.5 → agno-2.4.7}/agno/os/settings.py +0 -0
  393. {agno-2.4.5 → agno-2.4.7}/agno/os/utils.py +0 -0
  394. {agno-2.4.5 → agno-2.4.7}/agno/py.typed +0 -0
  395. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/__init__.py +0 -0
  396. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/anthropic.py +0 -0
  397. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/azure_ai_foundry.py +0 -0
  398. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/deepseek.py +0 -0
  399. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/default.py +0 -0
  400. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/gemini.py +0 -0
  401. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/groq.py +0 -0
  402. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/helpers.py +0 -0
  403. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/manager.py +0 -0
  404. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/ollama.py +0 -0
  405. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/openai.py +0 -0
  406. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/step.py +0 -0
  407. {agno-2.4.5 → agno-2.4.7}/agno/reasoning/vertexai.py +0 -0
  408. {agno-2.4.5 → agno-2.4.7}/agno/registry/__init__.py +0 -0
  409. {agno-2.4.5 → agno-2.4.7}/agno/registry/registry.py +0 -0
  410. {agno-2.4.5 → agno-2.4.7}/agno/remote/__init__.py +0 -0
  411. {agno-2.4.5 → agno-2.4.7}/agno/remote/base.py +0 -0
  412. {agno-2.4.5 → agno-2.4.7}/agno/run/__init__.py +0 -0
  413. {agno-2.4.5 → agno-2.4.7}/agno/run/agent.py +0 -0
  414. {agno-2.4.5 → agno-2.4.7}/agno/run/base.py +0 -0
  415. {agno-2.4.5 → agno-2.4.7}/agno/run/cancel.py +0 -0
  416. {agno-2.4.5 → agno-2.4.7}/agno/run/cancellation_management/__init__.py +0 -0
  417. {agno-2.4.5 → agno-2.4.7}/agno/run/cancellation_management/base.py +0 -0
  418. {agno-2.4.5 → agno-2.4.7}/agno/run/cancellation_management/in_memory_cancellation_manager.py +0 -0
  419. {agno-2.4.5 → agno-2.4.7}/agno/run/cancellation_management/redis_cancellation_manager.py +0 -0
  420. {agno-2.4.5 → agno-2.4.7}/agno/run/messages.py +0 -0
  421. {agno-2.4.5 → agno-2.4.7}/agno/run/requirement.py +0 -0
  422. {agno-2.4.5 → agno-2.4.7}/agno/run/team.py +0 -0
  423. {agno-2.4.5 → agno-2.4.7}/agno/session/__init__.py +0 -0
  424. {agno-2.4.5 → agno-2.4.7}/agno/session/agent.py +0 -0
  425. {agno-2.4.5 → agno-2.4.7}/agno/session/summary.py +0 -0
  426. {agno-2.4.5 → agno-2.4.7}/agno/session/team.py +0 -0
  427. {agno-2.4.5 → agno-2.4.7}/agno/session/workflow.py +0 -0
  428. {agno-2.4.5 → agno-2.4.7}/agno/skills/__init__.py +0 -0
  429. {agno-2.4.5 → agno-2.4.7}/agno/skills/agent_skills.py +0 -0
  430. {agno-2.4.5 → agno-2.4.7}/agno/skills/errors.py +0 -0
  431. {agno-2.4.5 → agno-2.4.7}/agno/skills/loaders/__init__.py +0 -0
  432. {agno-2.4.5 → agno-2.4.7}/agno/skills/loaders/base.py +0 -0
  433. {agno-2.4.5 → agno-2.4.7}/agno/skills/loaders/local.py +0 -0
  434. {agno-2.4.5 → agno-2.4.7}/agno/skills/skill.py +0 -0
  435. {agno-2.4.5 → agno-2.4.7}/agno/skills/utils.py +0 -0
  436. {agno-2.4.5 → agno-2.4.7}/agno/skills/validator.py +0 -0
  437. {agno-2.4.5 → agno-2.4.7}/agno/table.py +0 -0
  438. {agno-2.4.5 → agno-2.4.7}/agno/team/__init__.py +0 -0
  439. {agno-2.4.5 → agno-2.4.7}/agno/team/remote.py +0 -0
  440. {agno-2.4.5 → agno-2.4.7}/agno/team/team.py +0 -0
  441. {agno-2.4.5 → agno-2.4.7}/agno/tools/__init__.py +0 -0
  442. {agno-2.4.5 → agno-2.4.7}/agno/tools/agentql.py +0 -0
  443. {agno-2.4.5 → agno-2.4.7}/agno/tools/airflow.py +0 -0
  444. {agno-2.4.5 → agno-2.4.7}/agno/tools/api.py +0 -0
  445. {agno-2.4.5 → agno-2.4.7}/agno/tools/apify.py +0 -0
  446. {agno-2.4.5 → agno-2.4.7}/agno/tools/arxiv.py +0 -0
  447. {agno-2.4.5 → agno-2.4.7}/agno/tools/aws_lambda.py +0 -0
  448. {agno-2.4.5 → agno-2.4.7}/agno/tools/aws_ses.py +0 -0
  449. {agno-2.4.5 → agno-2.4.7}/agno/tools/baidusearch.py +0 -0
  450. {agno-2.4.5 → agno-2.4.7}/agno/tools/bitbucket.py +0 -0
  451. {agno-2.4.5 → agno-2.4.7}/agno/tools/brandfetch.py +0 -0
  452. {agno-2.4.5 → agno-2.4.7}/agno/tools/bravesearch.py +0 -0
  453. {agno-2.4.5 → agno-2.4.7}/agno/tools/brightdata.py +0 -0
  454. {agno-2.4.5 → agno-2.4.7}/agno/tools/browserbase.py +0 -0
  455. {agno-2.4.5 → agno-2.4.7}/agno/tools/calcom.py +0 -0
  456. {agno-2.4.5 → agno-2.4.7}/agno/tools/calculator.py +0 -0
  457. {agno-2.4.5 → agno-2.4.7}/agno/tools/cartesia.py +0 -0
  458. {agno-2.4.5 → agno-2.4.7}/agno/tools/clickup.py +0 -0
  459. {agno-2.4.5 → agno-2.4.7}/agno/tools/confluence.py +0 -0
  460. {agno-2.4.5 → agno-2.4.7}/agno/tools/crawl4ai.py +0 -0
  461. {agno-2.4.5 → agno-2.4.7}/agno/tools/csv_toolkit.py +0 -0
  462. {agno-2.4.5 → agno-2.4.7}/agno/tools/dalle.py +0 -0
  463. {agno-2.4.5 → agno-2.4.7}/agno/tools/daytona.py +0 -0
  464. {agno-2.4.5 → agno-2.4.7}/agno/tools/decorator.py +0 -0
  465. {agno-2.4.5 → agno-2.4.7}/agno/tools/desi_vocal.py +0 -0
  466. {agno-2.4.5 → agno-2.4.7}/agno/tools/discord.py +0 -0
  467. {agno-2.4.5 → agno-2.4.7}/agno/tools/docker.py +0 -0
  468. {agno-2.4.5 → agno-2.4.7}/agno/tools/duckdb.py +0 -0
  469. {agno-2.4.5 → agno-2.4.7}/agno/tools/duckduckgo.py +0 -0
  470. {agno-2.4.5 → agno-2.4.7}/agno/tools/e2b.py +0 -0
  471. {agno-2.4.5 → agno-2.4.7}/agno/tools/eleven_labs.py +0 -0
  472. {agno-2.4.5 → agno-2.4.7}/agno/tools/email.py +0 -0
  473. {agno-2.4.5 → agno-2.4.7}/agno/tools/evm.py +0 -0
  474. {agno-2.4.5 → agno-2.4.7}/agno/tools/exa.py +0 -0
  475. {agno-2.4.5 → agno-2.4.7}/agno/tools/fal.py +0 -0
  476. {agno-2.4.5 → agno-2.4.7}/agno/tools/file.py +0 -0
  477. {agno-2.4.5 → agno-2.4.7}/agno/tools/file_generation.py +0 -0
  478. {agno-2.4.5 → agno-2.4.7}/agno/tools/financial_datasets.py +0 -0
  479. {agno-2.4.5 → agno-2.4.7}/agno/tools/firecrawl.py +0 -0
  480. {agno-2.4.5 → agno-2.4.7}/agno/tools/function.py +0 -0
  481. {agno-2.4.5 → agno-2.4.7}/agno/tools/giphy.py +0 -0
  482. {agno-2.4.5 → agno-2.4.7}/agno/tools/github.py +0 -0
  483. {agno-2.4.5 → agno-2.4.7}/agno/tools/gmail.py +0 -0
  484. {agno-2.4.5 → agno-2.4.7}/agno/tools/google_bigquery.py +0 -0
  485. {agno-2.4.5 → agno-2.4.7}/agno/tools/google_drive.py +0 -0
  486. {agno-2.4.5 → agno-2.4.7}/agno/tools/google_maps.py +0 -0
  487. {agno-2.4.5 → agno-2.4.7}/agno/tools/googlecalendar.py +0 -0
  488. {agno-2.4.5 → agno-2.4.7}/agno/tools/googlesheets.py +0 -0
  489. {agno-2.4.5 → agno-2.4.7}/agno/tools/hackernews.py +0 -0
  490. {agno-2.4.5 → agno-2.4.7}/agno/tools/jina.py +0 -0
  491. {agno-2.4.5 → agno-2.4.7}/agno/tools/jira.py +0 -0
  492. {agno-2.4.5 → agno-2.4.7}/agno/tools/knowledge.py +0 -0
  493. {agno-2.4.5 → agno-2.4.7}/agno/tools/linear.py +0 -0
  494. {agno-2.4.5 → agno-2.4.7}/agno/tools/linkup.py +0 -0
  495. {agno-2.4.5 → agno-2.4.7}/agno/tools/local_file_system.py +0 -0
  496. {agno-2.4.5 → agno-2.4.7}/agno/tools/lumalab.py +0 -0
  497. {agno-2.4.5 → agno-2.4.7}/agno/tools/mcp/__init__.py +0 -0
  498. {agno-2.4.5 → agno-2.4.7}/agno/tools/mcp/multi_mcp.py +0 -0
  499. {agno-2.4.5 → agno-2.4.7}/agno/tools/mcp/params.py +0 -0
  500. {agno-2.4.5 → agno-2.4.7}/agno/tools/mcp_toolbox.py +0 -0
  501. {agno-2.4.5 → agno-2.4.7}/agno/tools/mem0.py +0 -0
  502. {agno-2.4.5 → agno-2.4.7}/agno/tools/memory.py +0 -0
  503. {agno-2.4.5 → agno-2.4.7}/agno/tools/mlx_transcribe.py +0 -0
  504. {agno-2.4.5 → agno-2.4.7}/agno/tools/models/__init__.py +0 -0
  505. {agno-2.4.5 → agno-2.4.7}/agno/tools/models/azure_openai.py +0 -0
  506. {agno-2.4.5 → agno-2.4.7}/agno/tools/models/gemini.py +0 -0
  507. {agno-2.4.5 → agno-2.4.7}/agno/tools/models/groq.py +0 -0
  508. {agno-2.4.5 → agno-2.4.7}/agno/tools/models/morph.py +0 -0
  509. {agno-2.4.5 → agno-2.4.7}/agno/tools/models/nebius.py +0 -0
  510. {agno-2.4.5 → agno-2.4.7}/agno/tools/models_labs.py +0 -0
  511. {agno-2.4.5 → agno-2.4.7}/agno/tools/moviepy_video.py +0 -0
  512. {agno-2.4.5 → agno-2.4.7}/agno/tools/nano_banana.py +0 -0
  513. {agno-2.4.5 → agno-2.4.7}/agno/tools/neo4j.py +0 -0
  514. {agno-2.4.5 → agno-2.4.7}/agno/tools/newspaper.py +0 -0
  515. {agno-2.4.5 → agno-2.4.7}/agno/tools/newspaper4k.py +0 -0
  516. {agno-2.4.5 → agno-2.4.7}/agno/tools/notion.py +0 -0
  517. {agno-2.4.5 → agno-2.4.7}/agno/tools/openai.py +0 -0
  518. {agno-2.4.5 → agno-2.4.7}/agno/tools/openbb.py +0 -0
  519. {agno-2.4.5 → agno-2.4.7}/agno/tools/opencv.py +0 -0
  520. {agno-2.4.5 → agno-2.4.7}/agno/tools/openweather.py +0 -0
  521. {agno-2.4.5 → agno-2.4.7}/agno/tools/oxylabs.py +0 -0
  522. {agno-2.4.5 → agno-2.4.7}/agno/tools/pandas.py +0 -0
  523. {agno-2.4.5 → agno-2.4.7}/agno/tools/parallel.py +0 -0
  524. {agno-2.4.5 → agno-2.4.7}/agno/tools/postgres.py +0 -0
  525. {agno-2.4.5 → agno-2.4.7}/agno/tools/pubmed.py +0 -0
  526. {agno-2.4.5 → agno-2.4.7}/agno/tools/python.py +0 -0
  527. {agno-2.4.5 → agno-2.4.7}/agno/tools/reasoning.py +0 -0
  528. {agno-2.4.5 → agno-2.4.7}/agno/tools/reddit.py +0 -0
  529. {agno-2.4.5 → agno-2.4.7}/agno/tools/redshift.py +0 -0
  530. {agno-2.4.5 → agno-2.4.7}/agno/tools/replicate.py +0 -0
  531. {agno-2.4.5 → agno-2.4.7}/agno/tools/resend.py +0 -0
  532. {agno-2.4.5 → agno-2.4.7}/agno/tools/scrapegraph.py +0 -0
  533. {agno-2.4.5 → agno-2.4.7}/agno/tools/searxng.py +0 -0
  534. {agno-2.4.5 → agno-2.4.7}/agno/tools/seltz.py +0 -0
  535. {agno-2.4.5 → agno-2.4.7}/agno/tools/serpapi.py +0 -0
  536. {agno-2.4.5 → agno-2.4.7}/agno/tools/serper.py +0 -0
  537. {agno-2.4.5 → agno-2.4.7}/agno/tools/shell.py +0 -0
  538. {agno-2.4.5 → agno-2.4.7}/agno/tools/shopify.py +0 -0
  539. {agno-2.4.5 → agno-2.4.7}/agno/tools/slack.py +0 -0
  540. {agno-2.4.5 → agno-2.4.7}/agno/tools/sleep.py +0 -0
  541. {agno-2.4.5 → agno-2.4.7}/agno/tools/spider.py +0 -0
  542. {agno-2.4.5 → agno-2.4.7}/agno/tools/spotify.py +0 -0
  543. {agno-2.4.5 → agno-2.4.7}/agno/tools/sql.py +0 -0
  544. {agno-2.4.5 → agno-2.4.7}/agno/tools/streamlit/__init__.py +0 -0
  545. {agno-2.4.5 → agno-2.4.7}/agno/tools/streamlit/components.py +0 -0
  546. {agno-2.4.5 → agno-2.4.7}/agno/tools/tavily.py +0 -0
  547. {agno-2.4.5 → agno-2.4.7}/agno/tools/telegram.py +0 -0
  548. {agno-2.4.5 → agno-2.4.7}/agno/tools/todoist.py +0 -0
  549. {agno-2.4.5 → agno-2.4.7}/agno/tools/tool_registry.py +0 -0
  550. {agno-2.4.5 → agno-2.4.7}/agno/tools/toolkit.py +0 -0
  551. {agno-2.4.5 → agno-2.4.7}/agno/tools/trafilatura.py +0 -0
  552. {agno-2.4.5 → agno-2.4.7}/agno/tools/trello.py +0 -0
  553. {agno-2.4.5 → agno-2.4.7}/agno/tools/twilio.py +0 -0
  554. {agno-2.4.5 → agno-2.4.7}/agno/tools/unsplash.py +0 -0
  555. {agno-2.4.5 → agno-2.4.7}/agno/tools/user_control_flow.py +0 -0
  556. {agno-2.4.5 → agno-2.4.7}/agno/tools/valyu.py +0 -0
  557. {agno-2.4.5 → agno-2.4.7}/agno/tools/visualization.py +0 -0
  558. {agno-2.4.5 → agno-2.4.7}/agno/tools/webbrowser.py +0 -0
  559. {agno-2.4.5 → agno-2.4.7}/agno/tools/webex.py +0 -0
  560. {agno-2.4.5 → agno-2.4.7}/agno/tools/websearch.py +0 -0
  561. {agno-2.4.5 → agno-2.4.7}/agno/tools/website.py +0 -0
  562. {agno-2.4.5 → agno-2.4.7}/agno/tools/webtools.py +0 -0
  563. {agno-2.4.5 → agno-2.4.7}/agno/tools/whatsapp.py +0 -0
  564. {agno-2.4.5 → agno-2.4.7}/agno/tools/wikipedia.py +0 -0
  565. {agno-2.4.5 → agno-2.4.7}/agno/tools/workflow.py +0 -0
  566. {agno-2.4.5 → agno-2.4.7}/agno/tools/x.py +0 -0
  567. {agno-2.4.5 → agno-2.4.7}/agno/tools/yfinance.py +0 -0
  568. {agno-2.4.5 → agno-2.4.7}/agno/tools/youtube.py +0 -0
  569. {agno-2.4.5 → agno-2.4.7}/agno/tools/zendesk.py +0 -0
  570. {agno-2.4.5 → agno-2.4.7}/agno/tools/zep.py +0 -0
  571. {agno-2.4.5 → agno-2.4.7}/agno/tools/zoom.py +0 -0
  572. {agno-2.4.5 → agno-2.4.7}/agno/tracing/__init__.py +0 -0
  573. {agno-2.4.5 → agno-2.4.7}/agno/tracing/exporter.py +0 -0
  574. {agno-2.4.5 → agno-2.4.7}/agno/tracing/schemas.py +0 -0
  575. {agno-2.4.5 → agno-2.4.7}/agno/tracing/setup.py +0 -0
  576. {agno-2.4.5 → agno-2.4.7}/agno/utils/__init__.py +0 -0
  577. {agno-2.4.5 → agno-2.4.7}/agno/utils/agent.py +0 -0
  578. {agno-2.4.5 → agno-2.4.7}/agno/utils/audio.py +0 -0
  579. {agno-2.4.5 → agno-2.4.7}/agno/utils/certs.py +0 -0
  580. {agno-2.4.5 → agno-2.4.7}/agno/utils/code_execution.py +0 -0
  581. {agno-2.4.5 → agno-2.4.7}/agno/utils/common.py +0 -0
  582. {agno-2.4.5 → agno-2.4.7}/agno/utils/cryptography.py +0 -0
  583. {agno-2.4.5 → agno-2.4.7}/agno/utils/dttm.py +0 -0
  584. {agno-2.4.5 → agno-2.4.7}/agno/utils/enum.py +0 -0
  585. {agno-2.4.5 → agno-2.4.7}/agno/utils/env.py +0 -0
  586. {agno-2.4.5 → agno-2.4.7}/agno/utils/events.py +0 -0
  587. {agno-2.4.5 → agno-2.4.7}/agno/utils/format_str.py +0 -0
  588. {agno-2.4.5 → agno-2.4.7}/agno/utils/functions.py +0 -0
  589. {agno-2.4.5 → agno-2.4.7}/agno/utils/gemini.py +0 -0
  590. {agno-2.4.5 → agno-2.4.7}/agno/utils/hooks.py +0 -0
  591. {agno-2.4.5 → agno-2.4.7}/agno/utils/http.py +0 -0
  592. {agno-2.4.5 → agno-2.4.7}/agno/utils/json_schema.py +0 -0
  593. {agno-2.4.5 → agno-2.4.7}/agno/utils/knowledge.py +0 -0
  594. {agno-2.4.5 → agno-2.4.7}/agno/utils/location.py +0 -0
  595. {agno-2.4.5 → agno-2.4.7}/agno/utils/log.py +0 -0
  596. {agno-2.4.5 → agno-2.4.7}/agno/utils/mcp.py +0 -0
  597. {agno-2.4.5 → agno-2.4.7}/agno/utils/media.py +0 -0
  598. {agno-2.4.5 → agno-2.4.7}/agno/utils/merge_dict.py +0 -0
  599. {agno-2.4.5 → agno-2.4.7}/agno/utils/message.py +0 -0
  600. {agno-2.4.5 → agno-2.4.7}/agno/utils/models/__init__.py +0 -0
  601. {agno-2.4.5 → agno-2.4.7}/agno/utils/models/ai_foundry.py +0 -0
  602. {agno-2.4.5 → agno-2.4.7}/agno/utils/models/claude.py +0 -0
  603. {agno-2.4.5 → agno-2.4.7}/agno/utils/models/cohere.py +0 -0
  604. {agno-2.4.5 → agno-2.4.7}/agno/utils/models/llama.py +0 -0
  605. {agno-2.4.5 → agno-2.4.7}/agno/utils/models/mistral.py +0 -0
  606. {agno-2.4.5 → agno-2.4.7}/agno/utils/models/openai_responses.py +0 -0
  607. {agno-2.4.5 → agno-2.4.7}/agno/utils/models/schema_utils.py +0 -0
  608. {agno-2.4.5 → agno-2.4.7}/agno/utils/models/watsonx.py +0 -0
  609. {agno-2.4.5 → agno-2.4.7}/agno/utils/openai.py +0 -0
  610. {agno-2.4.5 → agno-2.4.7}/agno/utils/os.py +0 -0
  611. {agno-2.4.5 → agno-2.4.7}/agno/utils/pickle.py +0 -0
  612. {agno-2.4.5 → agno-2.4.7}/agno/utils/pprint.py +0 -0
  613. {agno-2.4.5 → agno-2.4.7}/agno/utils/print_response/__init__.py +0 -0
  614. {agno-2.4.5 → agno-2.4.7}/agno/utils/print_response/workflow.py +0 -0
  615. {agno-2.4.5 → agno-2.4.7}/agno/utils/prompts.py +0 -0
  616. {agno-2.4.5 → agno-2.4.7}/agno/utils/reasoning.py +0 -0
  617. {agno-2.4.5 → agno-2.4.7}/agno/utils/remote.py +0 -0
  618. {agno-2.4.5 → agno-2.4.7}/agno/utils/response.py +0 -0
  619. {agno-2.4.5 → agno-2.4.7}/agno/utils/response_iterator.py +0 -0
  620. {agno-2.4.5 → agno-2.4.7}/agno/utils/safe_formatter.py +0 -0
  621. {agno-2.4.5 → agno-2.4.7}/agno/utils/serialize.py +0 -0
  622. {agno-2.4.5 → agno-2.4.7}/agno/utils/shell.py +0 -0
  623. {agno-2.4.5 → agno-2.4.7}/agno/utils/streamlit.py +0 -0
  624. {agno-2.4.5 → agno-2.4.7}/agno/utils/string.py +0 -0
  625. {agno-2.4.5 → agno-2.4.7}/agno/utils/team.py +0 -0
  626. {agno-2.4.5 → agno-2.4.7}/agno/utils/timer.py +0 -0
  627. {agno-2.4.5 → agno-2.4.7}/agno/utils/tokens.py +0 -0
  628. {agno-2.4.5 → agno-2.4.7}/agno/utils/tools.py +0 -0
  629. {agno-2.4.5 → agno-2.4.7}/agno/utils/web.py +0 -0
  630. {agno-2.4.5 → agno-2.4.7}/agno/utils/whatsapp.py +0 -0
  631. {agno-2.4.5 → agno-2.4.7}/agno/utils/yaml_io.py +0 -0
  632. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/__init__.py +0 -0
  633. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/base.py +0 -0
  634. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/cassandra/__init__.py +0 -0
  635. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/cassandra/cassandra.py +0 -0
  636. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/cassandra/extra_param_mixin.py +0 -0
  637. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/cassandra/index.py +0 -0
  638. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/chroma/__init__.py +0 -0
  639. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/chroma/chromadb.py +0 -0
  640. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/clickhouse/__init__.py +0 -0
  641. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/clickhouse/clickhousedb.py +0 -0
  642. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/clickhouse/index.py +0 -0
  643. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/couchbase/__init__.py +0 -0
  644. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/couchbase/couchbase.py +0 -0
  645. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/distance.py +0 -0
  646. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/lancedb/__init__.py +0 -0
  647. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/langchaindb/__init__.py +0 -0
  648. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/langchaindb/langchaindb.py +0 -0
  649. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/lightrag/__init__.py +0 -0
  650. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/lightrag/lightrag.py +0 -0
  651. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/llamaindex/__init__.py +0 -0
  652. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/llamaindex/llamaindexdb.py +0 -0
  653. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/milvus/__init__.py +0 -0
  654. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/milvus/milvus.py +0 -0
  655. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/mongodb/__init__.py +0 -0
  656. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/mongodb/mongodb.py +0 -0
  657. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/pgvector/__init__.py +0 -0
  658. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/pgvector/index.py +0 -0
  659. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/pgvector/pgvector.py +0 -0
  660. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/pineconedb/__init__.py +0 -0
  661. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/pineconedb/pineconedb.py +0 -0
  662. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/qdrant/__init__.py +0 -0
  663. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/qdrant/qdrant.py +0 -0
  664. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/redis/__init__.py +0 -0
  665. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/redis/redisdb.py +0 -0
  666. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/search.py +0 -0
  667. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/singlestore/__init__.py +0 -0
  668. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/singlestore/index.py +0 -0
  669. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/singlestore/singlestore.py +0 -0
  670. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/surrealdb/__init__.py +0 -0
  671. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/surrealdb/surrealdb.py +0 -0
  672. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/upstashdb/__init__.py +0 -0
  673. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/upstashdb/upstashdb.py +0 -0
  674. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/weaviate/__init__.py +0 -0
  675. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/weaviate/index.py +0 -0
  676. {agno-2.4.5 → agno-2.4.7}/agno/vectordb/weaviate/weaviate.py +0 -0
  677. {agno-2.4.5 → agno-2.4.7}/agno/workflow/__init__.py +0 -0
  678. {agno-2.4.5 → agno-2.4.7}/agno/workflow/agent.py +0 -0
  679. {agno-2.4.5 → agno-2.4.7}/agno/workflow/loop.py +0 -0
  680. {agno-2.4.5 → agno-2.4.7}/agno/workflow/parallel.py +0 -0
  681. {agno-2.4.5 → agno-2.4.7}/agno/workflow/remote.py +0 -0
  682. {agno-2.4.5 → agno-2.4.7}/agno/workflow/router.py +0 -0
  683. {agno-2.4.5 → agno-2.4.7}/agno/workflow/step.py +0 -0
  684. {agno-2.4.5 → agno-2.4.7}/agno/workflow/steps.py +0 -0
  685. {agno-2.4.5 → agno-2.4.7}/agno/workflow/types.py +0 -0
  686. {agno-2.4.5 → agno-2.4.7}/agno/workflow/workflow.py +0 -0
  687. {agno-2.4.5 → agno-2.4.7}/agno.egg-info/dependency_links.txt +0 -0
  688. {agno-2.4.5 → agno-2.4.7}/agno.egg-info/top_level.txt +0 -0
  689. {agno-2.4.5 → agno-2.4.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.4.5
3
+ Version: 2.4.7
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
@@ -225,7 +225,7 @@ Requires-Dist: pgvector; extra == "pgvector"
225
225
  Provides-Extra: chromadb
226
226
  Requires-Dist: chromadb; extra == "chromadb"
227
227
  Provides-Extra: lancedb
228
- Requires-Dist: lancedb==0.24.0; extra == "lancedb"
228
+ Requires-Dist: lancedb>=0.26.0; extra == "lancedb"
229
229
  Requires-Dist: tantivy; extra == "lancedb"
230
230
  Provides-Extra: pylance
231
231
  Requires-Dist: pylance; extra == "pylance"
@@ -266,7 +266,7 @@ Provides-Extra: excel
266
266
  Requires-Dist: openpyxl; extra == "excel"
267
267
  Requires-Dist: xlrd; extra == "excel"
268
268
  Provides-Extra: markdown
269
- Requires-Dist: unstructured; extra == "markdown"
269
+ Requires-Dist: unstructured<0.18.31; extra == "markdown"
270
270
  Requires-Dist: markdown; extra == "markdown"
271
271
  Requires-Dist: aiofiles; extra == "markdown"
272
272
  Provides-Extra: chonkie
@@ -445,7 +445,7 @@ Dynamic: license-file
445
445
  </div>
446
446
 
447
447
  <p align="center">
448
- Build, run, manage multi-agent systems.
448
+ Build agents that learn.
449
449
  </p>
450
450
 
451
451
  <div align="center">
@@ -460,68 +460,58 @@ Dynamic: license-file
460
460
 
461
461
  ## What is Agno?
462
462
 
463
- Agno is a framework, runtime, and control plane for multi-agent systems.
463
+ **A Python SDK for building agents that learn and improve with every interaction.**
464
464
 
465
- | Layer | What it does |
466
- |-------|--------------|
467
- | **Framework** | Build agents, teams, and workflows with memory, knowledge, guardrails, and 100+ integrations |
468
- | **AgentOS Runtime** | Run your system in production with a stateless, secure FastAPI backend |
469
- | **Control Plane** | Test, monitor, and manage your system using the [AgentOS UI](https://os.agno.com) |
465
+ Most agents are stateless. They reason, respond, forget. Session history helps, but they're exactly as capable on day 1000 as they were on day 1.
470
466
 
471
- ## Why Agno?
467
+ Agno agents are different. They remember users across sessions, accumulate knowledge across conversations, and learn from decisions. Insights from one user benefit everyone.
472
468
 
473
- - **Private by design.** AgentOS runs in your cloud. The control plane connects directly to your runtime from your browser. No retention costs, no vendor lock-in, no compliance headaches.
474
- - **Production-ready on day one.** Pre-built FastAPI runtime with SSE endpoints, ready to deploy.
475
- - **Fast.** 529× faster instantiation than LangGraph. 24× lower memory. [See benchmarks →](#performance)
469
+ Everything runs in your cloud. Your data never leaves your environment.
476
470
 
477
- ## Example
478
-
479
- An agent with MCP tools, persistent state, served via FastAPI:
471
+ ## Quick Example
480
472
  ```python
481
473
  from agno.agent import Agent
482
474
  from agno.db.sqlite import SqliteDb
483
- from agno.models.anthropic import Claude
484
- from agno.os import AgentOS
485
- from agno.tools.mcp import MCPTools
475
+ from agno.models.openai import OpenAIResponses
486
476
 
487
- agno_agent = Agent(
488
- name="Agno Agent",
489
- model=Claude(id="claude-sonnet-4-5"),
490
- db=SqliteDb(db_file="agno.db"),
491
- tools=[MCPTools(transport="streamable-http", url="https://docs.agno.com/mcp")],
492
- add_history_to_context=True,
493
- markdown=True,
477
+ agent = Agent(
478
+ model=OpenAIResponses(id="gpt-5.2"),
479
+ db=SqliteDb(db_file="tmp/agents.db"),
480
+ learning=True,
494
481
  )
495
-
496
- agent_os = AgentOS(agents=[agno_agent])
497
- app = agent_os.get_app()
498
-
499
- if __name__ == "__main__":
500
- agent_os.serve(app="agno_agent:app", reload=True)
501
482
  ```
502
483
 
503
- Run this and connect to the [AgentOS UI](https://os.agno.com):
484
+ One line. Your agent now remembers users, accumulates knowledge, and improves over time.
485
+
486
+ ## Production Stack
504
487
 
505
- https://github.com/user-attachments/assets/feb23db8-15cc-4e88-be7c-01a21a03ebf6
488
+ | Layer | What it does |
489
+ |-------|--------------|
490
+ | **SDK** | Build agents with learning, tools, knowledge, and guardrails |
491
+ | **Runtime** | Run in production using [AgentOS](https://docs.agno.com/agent-os/introduction) |
492
+ | **Control Plane** | Monitor and manage via the [AgentOS UI](https://os.agno.com) |
506
493
 
507
494
  ## Features
508
495
 
496
+ **Learning**
497
+ - User profiles that persist across sessions
498
+ - User memories that accumulate over time
499
+ - Learned knowledge that transfers across users
500
+ - Always or agentic learning modes
501
+
509
502
  **Core**
510
503
  - Model-agnostic: OpenAI, Anthropic, Google, local models
511
504
  - Type-safe I/O with `input_schema` and `output_schema`
512
505
  - Async-first, built for long-running tasks
513
506
  - Natively multimodal (text, images, audio, video, files)
514
507
 
515
- **Memory & Knowledge**
516
- - Persistent storage for session history and state
517
- - User memory across sessions
508
+ **Knowledge**
518
509
  - Agentic RAG with 20+ vector stores, hybrid search, reranking
519
- - Culture: shared long-term memory across agents
510
+ - Persistent storage for session history and state
520
511
 
521
512
  **Orchestration**
522
513
  - Human-in-the-loop (confirmations, approvals, overrides)
523
514
  - Guardrails for validation and security
524
- - Pre/post hooks for the agent lifecycle
525
515
  - First-class MCP and A2A support
526
516
  - 100+ built-in toolkits
527
517
 
@@ -529,27 +519,12 @@ https://github.com/user-attachments/assets/feb23db8-15cc-4e88-be7c-01a21a03ebf6
529
519
  - Ready-to-use FastAPI runtime
530
520
  - Integrated control plane UI
531
521
  - Evals for accuracy, performance, latency
532
- - Durable execution for resumable workflows
533
- - RBAC and per-agent permissions
534
522
 
535
523
  ## Getting Started
536
524
 
537
- 1. Follow the [quickstart guide](https://github.com/agno-agi/agno/tree/main/cookbook/00_quickstart)
538
- 2. Browse the [cookbook](https://github.com/agno-agi/agno/tree/main/cookbook) for real-world examples
539
- 3. Read the [docs](https://docs.agno.com) to go deeper
540
-
541
- ## Performance
542
-
543
- Agent workloads spawn hundreds of instances. Stateless, horizontal scalability isn't optional.
544
-
545
- | Metric | Agno | LangGraph | PydanticAI | CrewAI |
546
- |--------|------|-----------|------------|--------|
547
- | Instantiation | **3μs** | 1,587μs (529×) | 170μs (57×) | 210μs (70×) |
548
- | Memory | **6.6 KiB** | 161 KiB (24×) | 29 KiB (4×) | 66 KiB (10×) |
549
-
550
- <sub>Apple M4 MacBook Pro, Oct 2025. [Run benchmarks yourself →](https://github.com/agno-agi/agno/tree/main/cookbook/12_evals/performance)</sub>
551
-
552
- https://github.com/user-attachments/assets/54b98576-1859-4880-9f2d-15e1a426719d
525
+ 1. Follow the [quickstart](https://docs.agno.com/get-started/quickstart)
526
+ 2. Browse the [cookbook](https://github.com/agno-agi/agno/tree/main/cookbook)
527
+ 3. Read the [docs](https://docs.agno.com)
553
528
 
554
529
  ## IDE Integration
555
530
 
@@ -561,7 +536,7 @@ Also works with VSCode, Windsurf, and similar tools.
561
536
 
562
537
  ## Contributing
563
538
 
564
- We welcome contributions. See the [contributing guide](https://github.com/agno-agi/agno/blob/v2.0/CONTRIBUTING.md).
539
+ See the [contributing guide](https://github.com/agno-agi/agno/blob/v2.0/CONTRIBUTING.md).
565
540
 
566
541
  ## Telemetry
567
542
 
agno-2.4.7/README.md ADDED
@@ -0,0 +1,109 @@
1
+ <div align="center" id="top">
2
+ <a href="https://agno.com">
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://agno-public.s3.us-east-1.amazonaws.com/assets/logo-dark.svg">
5
+ <source media="(prefers-color-scheme: light)" srcset="https://agno-public.s3.us-east-1.amazonaws.com/assets/logo-light.svg">
6
+ <img src="https://agno-public.s3.us-east-1.amazonaws.com/assets/logo-light.svg" alt="Agno">
7
+ </picture>
8
+ </a>
9
+ </div>
10
+
11
+ <p align="center">
12
+ Build agents that learn.
13
+ </p>
14
+
15
+ <div align="center">
16
+ <a href="https://docs.agno.com">Docs</a>
17
+ <span>&nbsp;•&nbsp;</span>
18
+ <a href="https://github.com/agno-agi/agno/tree/main/cookbook">Cookbook</a>
19
+ <span>&nbsp;•&nbsp;</span>
20
+ <a href="https://community.agno.com/">Community</a>
21
+ <span>&nbsp;•&nbsp;</span>
22
+ <a href="https://www.agno.com/discord">Discord</a>
23
+ </div>
24
+
25
+ ## What is Agno?
26
+
27
+ **A Python SDK for building agents that learn and improve with every interaction.**
28
+
29
+ Most agents are stateless. They reason, respond, forget. Session history helps, but they're exactly as capable on day 1000 as they were on day 1.
30
+
31
+ Agno agents are different. They remember users across sessions, accumulate knowledge across conversations, and learn from decisions. Insights from one user benefit everyone.
32
+
33
+ Everything runs in your cloud. Your data never leaves your environment.
34
+
35
+ ## Quick Example
36
+ ```python
37
+ from agno.agent import Agent
38
+ from agno.db.sqlite import SqliteDb
39
+ from agno.models.openai import OpenAIResponses
40
+
41
+ agent = Agent(
42
+ model=OpenAIResponses(id="gpt-5.2"),
43
+ db=SqliteDb(db_file="tmp/agents.db"),
44
+ learning=True,
45
+ )
46
+ ```
47
+
48
+ One line. Your agent now remembers users, accumulates knowledge, and improves over time.
49
+
50
+ ## Production Stack
51
+
52
+ | Layer | What it does |
53
+ |-------|--------------|
54
+ | **SDK** | Build agents with learning, tools, knowledge, and guardrails |
55
+ | **Runtime** | Run in production using [AgentOS](https://docs.agno.com/agent-os/introduction) |
56
+ | **Control Plane** | Monitor and manage via the [AgentOS UI](https://os.agno.com) |
57
+
58
+ ## Features
59
+
60
+ **Learning**
61
+ - User profiles that persist across sessions
62
+ - User memories that accumulate over time
63
+ - Learned knowledge that transfers across users
64
+ - Always or agentic learning modes
65
+
66
+ **Core**
67
+ - Model-agnostic: OpenAI, Anthropic, Google, local models
68
+ - Type-safe I/O with `input_schema` and `output_schema`
69
+ - Async-first, built for long-running tasks
70
+ - Natively multimodal (text, images, audio, video, files)
71
+
72
+ **Knowledge**
73
+ - Agentic RAG with 20+ vector stores, hybrid search, reranking
74
+ - Persistent storage for session history and state
75
+
76
+ **Orchestration**
77
+ - Human-in-the-loop (confirmations, approvals, overrides)
78
+ - Guardrails for validation and security
79
+ - First-class MCP and A2A support
80
+ - 100+ built-in toolkits
81
+
82
+ **Production**
83
+ - Ready-to-use FastAPI runtime
84
+ - Integrated control plane UI
85
+ - Evals for accuracy, performance, latency
86
+
87
+ ## Getting Started
88
+
89
+ 1. Follow the [quickstart](https://docs.agno.com/get-started/quickstart)
90
+ 2. Browse the [cookbook](https://github.com/agno-agi/agno/tree/main/cookbook)
91
+ 3. Read the [docs](https://docs.agno.com)
92
+
93
+ ## IDE Integration
94
+
95
+ Add our docs to your AI-enabled editor:
96
+
97
+ **Cursor:** Settings → Indexing & Docs → Add `https://docs.agno.com/llms-full.txt`
98
+
99
+ Also works with VSCode, Windsurf, and similar tools.
100
+
101
+ ## Contributing
102
+
103
+ See the [contributing guide](https://github.com/agno-agi/agno/blob/v2.0/CONTRIBUTING.md).
104
+
105
+ ## Telemetry
106
+
107
+ Agno logs which model providers are used to prioritize updates. Disable with `AGNO_TELEMETRY=false`.
108
+
109
+ <p align="right"><a href="#top">↑ Back to top</a></p>
@@ -858,8 +858,9 @@ class Agent:
858
858
  return
859
859
 
860
860
  # Handle learning=True: create default LearningMachine
861
+ # Enables user_profile (structured fields) and user_memory (unstructured observations)
861
862
  if self.learning is True:
862
- self._learning = LearningMachine(db=self.db, model=self.model, user_profile=True)
863
+ self._learning = LearningMachine(db=self.db, model=self.model, user_profile=True, user_memory=True)
863
864
  return
864
865
 
865
866
  # Handle learning=LearningMachine(...): inject dependencies
@@ -173,8 +173,7 @@ class SingleStoreDb(BaseDb):
173
173
  column_kwargs["unique"] = True
174
174
  columns.append(Column(*column_args, **column_kwargs))
175
175
 
176
- # Create the table object without constraints to avoid autoload issues
177
- table = Table(table_name, self.metadata, *columns, schema=self.db_schema)
176
+ table = Table(table_name, self.metadata, *columns, schema=self.db_schema, extend_existing=True)
178
177
 
179
178
  return table
180
179
 
@@ -240,8 +239,7 @@ class SingleStoreDb(BaseDb):
240
239
 
241
240
  columns.append(Column(*column_args, **column_kwargs))
242
241
 
243
- # Create the table object
244
- table = Table(table_name, self.metadata, *columns, schema=self.db_schema)
242
+ table = Table(table_name, self.metadata, *columns, schema=self.db_schema, extend_existing=True)
245
243
 
246
244
  # Add multi-column unique constraints with table-specific names
247
245
  for constraint in schema_unique_constraints:
@@ -396,7 +394,8 @@ class SingleStoreDb(BaseDb):
396
394
 
397
395
  if table_type == "spans":
398
396
  # Ensure traces table exists first (for foreign key)
399
- self._get_table(table_type="traces", create_table_if_not_found=create_table_if_not_found)
397
+ if create_table_if_not_found:
398
+ self._get_table(table_type="traces", create_table_if_not_found=True)
400
399
  self.spans_table = self._get_or_create_table(
401
400
  table_name=self.span_table_name,
402
401
  table_type="spans",
@@ -48,7 +48,7 @@ def surrealize_dates(record: dict) -> dict:
48
48
  if isinstance(value, date):
49
49
  copy[key] = datetime.combine(value, datetime.min.time()).replace(tzinfo=timezone.utc)
50
50
  elif key in ["created_at", "updated_at"] and isinstance(value, (int, float)):
51
- copy[key] = datetime.fromtimestamp(value).replace(tzinfo=timezone.utc)
51
+ copy[key] = datetime.fromtimestamp(value, tz=timezone.utc)
52
52
  elif key in ["created_at", "updated_at"] and isinstance(value, str):
53
53
  # Handle ISO string format - convert back to datetime object for SurrealDB
54
54
  try:
@@ -55,11 +55,7 @@ class AgenticChunking(ChunkingStrategy):
55
55
  chunk = remaining_text[:break_point].strip()
56
56
  meta_data = chunk_meta_data.copy()
57
57
  meta_data["chunk"] = chunk_number
58
- chunk_id = None
59
- if document.id:
60
- chunk_id = f"{document.id}_{chunk_number}"
61
- elif document.name:
62
- chunk_id = f"{document.name}_{chunk_number}"
58
+ chunk_id = self._generate_chunk_id(document, chunk_number, chunk)
63
59
  meta_data["chunk_size"] = len(chunk)
64
60
  chunks.append(
65
61
  Document(
@@ -82,7 +82,7 @@ class CodeChunking(ChunkingStrategy):
82
82
  for i, chunk in enumerate(chunks, 1):
83
83
  meta_data = document.meta_data.copy()
84
84
  meta_data["chunk"] = i
85
- chunk_id = f"{document.id}_{i}" if document.id else None
85
+ chunk_id = self._generate_chunk_id(document, i, chunk.text)
86
86
  meta_data["chunk_size"] = len(chunk.text)
87
87
 
88
88
  chunked_documents.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk.text))
@@ -38,17 +38,10 @@ class DocumentChunking(ChunkingStrategy):
38
38
  if current_chunk:
39
39
  meta_data = chunk_meta_data.copy()
40
40
  meta_data["chunk"] = chunk_number
41
- chunk_id = None
42
- if document.id:
43
- chunk_id = f"{document.id}_{chunk_number}"
44
- elif document.name:
45
- chunk_id = f"{document.name}_{chunk_number}"
46
- meta_data["chunk_size"] = len("\n\n".join(current_chunk))
47
- chunks.append(
48
- Document(
49
- id=chunk_id, name=document.name, meta_data=meta_data, content="\n\n".join(current_chunk)
50
- )
51
- )
41
+ chunk_content = "\n\n".join(current_chunk)
42
+ chunk_id = self._generate_chunk_id(document, chunk_number, chunk_content)
43
+ meta_data["chunk_size"] = len(chunk_content)
44
+ chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk_content))
52
45
  chunk_number += 1
53
46
  current_chunk = []
54
47
  current_size = 0
@@ -70,18 +63,15 @@ class DocumentChunking(ChunkingStrategy):
70
63
  if current_chunk:
71
64
  meta_data = chunk_meta_data.copy()
72
65
  meta_data["chunk"] = chunk_number
73
- chunk_id = None
74
- if document.id:
75
- chunk_id = f"{document.id}_{chunk_number}"
76
- elif document.name:
77
- chunk_id = f"{document.name}_{chunk_number}"
78
- meta_data["chunk_size"] = len(" ".join(current_chunk))
66
+ chunk_content = " ".join(current_chunk)
67
+ chunk_id = self._generate_chunk_id(document, chunk_number, chunk_content)
68
+ meta_data["chunk_size"] = len(chunk_content)
79
69
  chunks.append(
80
70
  Document(
81
71
  id=chunk_id,
82
72
  name=document.name,
83
73
  meta_data=meta_data,
84
- content=" ".join(current_chunk),
74
+ content=chunk_content,
85
75
  )
86
76
  )
87
77
  chunk_number += 1
@@ -94,18 +84,11 @@ class DocumentChunking(ChunkingStrategy):
94
84
  else:
95
85
  meta_data = chunk_meta_data.copy()
96
86
  meta_data["chunk"] = chunk_number
97
- chunk_id = None
98
- if document.id:
99
- chunk_id = f"{document.id}_{chunk_number}"
100
- elif document.name:
101
- chunk_id = f"{document.name}_{chunk_number}"
102
- meta_data["chunk_size"] = len("\n\n".join(current_chunk))
87
+ chunk_content = "\n\n".join(current_chunk)
88
+ chunk_id = self._generate_chunk_id(document, chunk_number, chunk_content)
89
+ meta_data["chunk_size"] = len(chunk_content)
103
90
  if current_chunk:
104
- chunks.append(
105
- Document(
106
- id=chunk_id, name=document.name, meta_data=meta_data, content="\n\n".join(current_chunk)
107
- )
108
- )
91
+ chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk_content))
109
92
  chunk_number += 1
110
93
  current_chunk = [para]
111
94
  current_size = para_size
@@ -113,15 +96,10 @@ class DocumentChunking(ChunkingStrategy):
113
96
  if current_chunk:
114
97
  meta_data = chunk_meta_data.copy()
115
98
  meta_data["chunk"] = chunk_number
116
- chunk_id = None
117
- if document.id:
118
- chunk_id = f"{document.id}_{chunk_number}"
119
- elif document.name:
120
- chunk_id = f"{document.name}_{chunk_number}"
121
- meta_data["chunk_size"] = len("\n\n".join(current_chunk))
122
- chunks.append(
123
- Document(id=chunk_id, name=document.name, meta_data=meta_data, content="\n\n".join(current_chunk))
124
- )
99
+ chunk_content = "\n\n".join(current_chunk)
100
+ chunk_id = self._generate_chunk_id(document, chunk_number, chunk_content)
101
+ meta_data["chunk_size"] = len(chunk_content)
102
+ chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk_content))
125
103
 
126
104
  # Handle overlap if specified
127
105
  if self.overlap > 0:
@@ -131,11 +109,11 @@ class DocumentChunking(ChunkingStrategy):
131
109
  # Add overlap from previous chunk
132
110
  prev_text = chunks[i - 1].content[-self.overlap :]
133
111
  meta_data = chunk_meta_data.copy()
134
- meta_data["chunk"] = chunk_number
135
- chunk_id = None
136
- if document.id:
137
- chunk_id = f"{document.id}_{chunk_number}"
112
+ # Use the chunk's existing metadata and ID instead of stale chunk_number
113
+ meta_data["chunk"] = chunks[i].meta_data["chunk"]
114
+ chunk_id = chunks[i].id
138
115
  meta_data["chunk_size"] = len(prev_text + chunks[i].content)
116
+
139
117
  if prev_text:
140
118
  overlapped_chunks.append(
141
119
  Document(
@@ -145,6 +123,8 @@ class DocumentChunking(ChunkingStrategy):
145
123
  content=prev_text + chunks[i].content,
146
124
  )
147
125
  )
126
+ else:
127
+ overlapped_chunks.append(chunks[i])
148
128
  else:
149
129
  overlapped_chunks.append(chunks[i])
150
130
  chunks = overlapped_chunks
@@ -38,11 +38,7 @@ class FixedSizeChunking(ChunkingStrategy):
38
38
  chunk = content[start:end]
39
39
  meta_data = chunk_meta_data.copy()
40
40
  meta_data["chunk"] = chunk_number
41
- chunk_id = None
42
- if document.id:
43
- chunk_id = f"{document.id}_{chunk_number}"
44
- elif document.name:
45
- chunk_id = f"{document.name}_{chunk_number}"
41
+ chunk_id = self._generate_chunk_id(document, chunk_number, chunk)
46
42
  meta_data["chunk_size"] = len(chunk)
47
43
  chunked_documents.append(
48
44
  Document(
@@ -267,11 +267,7 @@ class MarkdownChunking(ChunkingStrategy):
267
267
  for sub_chunk in sub_chunks:
268
268
  meta_data = chunk_meta_data.copy()
269
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}"
270
+ chunk_id = self._generate_chunk_id(document, chunk_number, sub_chunk)
275
271
  meta_data["chunk_size"] = len(sub_chunk)
276
272
 
277
273
  chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=sub_chunk))
@@ -282,19 +278,12 @@ class MarkdownChunking(ChunkingStrategy):
282
278
  else:
283
279
  meta_data = chunk_meta_data.copy()
284
280
  meta_data["chunk"] = chunk_number
285
- chunk_id = None
286
- if document.id:
287
- chunk_id = f"{document.id}_{chunk_number}"
288
- elif document.name:
289
- chunk_id = f"{document.name}_{chunk_number}"
290
- meta_data["chunk_size"] = len("\n\n".join(current_chunk))
281
+ chunk_content = "\n\n".join(current_chunk)
282
+ chunk_id = self._generate_chunk_id(document, chunk_number, chunk_content)
283
+ meta_data["chunk_size"] = len(chunk_content)
291
284
 
292
285
  if current_chunk:
293
- chunks.append(
294
- Document(
295
- id=chunk_id, name=document.name, meta_data=meta_data, content="\n\n".join(current_chunk)
296
- )
297
- )
286
+ chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk_content))
298
287
  chunk_number += 1
299
288
 
300
289
  current_chunk = [section]
@@ -304,15 +293,10 @@ class MarkdownChunking(ChunkingStrategy):
304
293
  if current_chunk and not self.split_on_headings:
305
294
  meta_data = chunk_meta_data.copy()
306
295
  meta_data["chunk"] = chunk_number
307
- chunk_id = None
308
- if document.id:
309
- chunk_id = f"{document.id}_{chunk_number}"
310
- elif document.name:
311
- chunk_id = f"{document.name}_{chunk_number}"
312
- meta_data["chunk_size"] = len("\n\n".join(current_chunk))
313
- chunks.append(
314
- Document(id=chunk_id, name=document.name, meta_data=meta_data, content="\n\n".join(current_chunk))
315
- )
296
+ chunk_content = "\n\n".join(current_chunk)
297
+ chunk_id = self._generate_chunk_id(document, chunk_number, chunk_content)
298
+ meta_data["chunk_size"] = len(chunk_content)
299
+ chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk_content))
316
300
 
317
301
  # Handle overlap if specified
318
302
  if self.overlap > 0:
@@ -46,9 +46,7 @@ class RecursiveChunking(ChunkingStrategy):
46
46
  chunk = self.clean_text(content[start:end])
47
47
  meta_data = chunk_meta_data.copy()
48
48
  meta_data["chunk"] = chunk_number
49
- chunk_id = None
50
- if document.id:
51
- chunk_id = f"{document.id}_{chunk_number}"
49
+ chunk_id = self._generate_chunk_id(document, chunk_number, chunk)
52
50
  chunk_number += 1
53
51
  meta_data["chunk_size"] = len(chunk)
54
52
  chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk))
@@ -33,7 +33,8 @@ class RowChunking(ChunkingStrategy):
33
33
 
34
34
  if chunk_content: # Skip empty rows
35
35
  meta_data = document.meta_data.copy()
36
- meta_data["row_number"] = start_index + i # Preserve logical row numbering
37
- chunk_id = f"{document.id}_row_{start_index + i}" if document.id else None
36
+ row_number = start_index + i
37
+ meta_data["row_number"] = row_number # Preserve logical row numbering
38
+ chunk_id = self._generate_chunk_id(document, row_number, chunk_content, prefix="row")
38
39
  chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk_content))
39
40
  return chunks
@@ -160,7 +160,7 @@ class SemanticChunking(ChunkingStrategy):
160
160
  for i, chunk in enumerate(chunks, 1):
161
161
  meta_data = document.meta_data.copy()
162
162
  meta_data["chunk"] = i
163
- chunk_id = f"{document.id}_{i}" if document.id else None
163
+ chunk_id = self._generate_chunk_id(document, i, chunk.text)
164
164
  meta_data["chunk_size"] = len(chunk.text)
165
165
 
166
166
  chunked_documents.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk.text))
@@ -1,3 +1,4 @@
1
+ import hashlib
1
2
  from abc import ABC, abstractmethod
2
3
  from enum import Enum
3
4
  from typing import List, Optional
@@ -12,6 +13,24 @@ class ChunkingStrategy(ABC):
12
13
  def chunk(self, document: Document) -> List[Document]:
13
14
  raise NotImplementedError
14
15
 
16
+ def _generate_chunk_id(
17
+ self, document: Document, chunk_number: int, content: Optional[str] = None, prefix: Optional[str] = None
18
+ ) -> Optional[str]:
19
+ """Generate a deterministic ID for the chunk."""
20
+ suffix = f"_{prefix}_{chunk_number}" if prefix else f"_{chunk_number}"
21
+
22
+ if document.id:
23
+ return f"{document.id}{suffix}"
24
+ elif document.name:
25
+ return f"{document.name}{suffix}"
26
+ else:
27
+ # Hash the chunk content for a deterministic ID when no identifier exists
28
+ hash_source = content if content else document.content
29
+ if hash_source:
30
+ content_hash = hashlib.md5(hash_source.encode("utf-8")).hexdigest()[:12] # nosec B324
31
+ return f"chunk_{content_hash}{suffix}"
32
+ return None
33
+
15
34
  async def achunk(self, document: Document) -> List[Document]:
16
35
  """Async version of chunk. Override for truly async implementations."""
17
36
  return self.chunk(document)