agno 1.8.1__py3-none-any.whl → 2.0.0__py3-none-any.whl

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 (590) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +19 -27
  3. agno/agent/agent.py +3143 -4170
  4. agno/api/agent.py +11 -67
  5. agno/api/api.py +5 -46
  6. agno/api/evals.py +8 -19
  7. agno/api/os.py +17 -0
  8. agno/api/routes.py +6 -41
  9. agno/api/schemas/__init__.py +9 -0
  10. agno/api/schemas/agent.py +5 -21
  11. agno/api/schemas/evals.py +7 -16
  12. agno/api/schemas/os.py +14 -0
  13. agno/api/schemas/team.py +5 -21
  14. agno/api/schemas/utils.py +21 -0
  15. agno/api/schemas/workflows.py +11 -7
  16. agno/api/settings.py +53 -0
  17. agno/api/team.py +11 -66
  18. agno/api/workflow.py +28 -0
  19. agno/cloud/aws/base.py +214 -0
  20. agno/cloud/aws/s3/__init__.py +2 -0
  21. agno/cloud/aws/s3/api_client.py +43 -0
  22. agno/cloud/aws/s3/bucket.py +195 -0
  23. agno/cloud/aws/s3/object.py +57 -0
  24. agno/db/__init__.py +24 -0
  25. agno/db/base.py +245 -0
  26. agno/db/dynamo/__init__.py +3 -0
  27. agno/db/dynamo/dynamo.py +1743 -0
  28. agno/db/dynamo/schemas.py +278 -0
  29. agno/db/dynamo/utils.py +684 -0
  30. agno/db/firestore/__init__.py +3 -0
  31. agno/db/firestore/firestore.py +1432 -0
  32. agno/db/firestore/schemas.py +130 -0
  33. agno/db/firestore/utils.py +278 -0
  34. agno/db/gcs_json/__init__.py +3 -0
  35. agno/db/gcs_json/gcs_json_db.py +1001 -0
  36. agno/db/gcs_json/utils.py +194 -0
  37. agno/db/in_memory/__init__.py +3 -0
  38. agno/db/in_memory/in_memory_db.py +882 -0
  39. agno/db/in_memory/utils.py +172 -0
  40. agno/db/json/__init__.py +3 -0
  41. agno/db/json/json_db.py +1045 -0
  42. agno/db/json/utils.py +196 -0
  43. agno/db/migrations/v1_to_v2.py +162 -0
  44. agno/db/mongo/__init__.py +3 -0
  45. agno/db/mongo/mongo.py +1416 -0
  46. agno/db/mongo/schemas.py +77 -0
  47. agno/db/mongo/utils.py +204 -0
  48. agno/db/mysql/__init__.py +3 -0
  49. agno/db/mysql/mysql.py +1719 -0
  50. agno/db/mysql/schemas.py +124 -0
  51. agno/db/mysql/utils.py +297 -0
  52. agno/db/postgres/__init__.py +3 -0
  53. agno/db/postgres/postgres.py +1710 -0
  54. agno/db/postgres/schemas.py +124 -0
  55. agno/db/postgres/utils.py +280 -0
  56. agno/db/redis/__init__.py +3 -0
  57. agno/db/redis/redis.py +1367 -0
  58. agno/db/redis/schemas.py +109 -0
  59. agno/db/redis/utils.py +288 -0
  60. agno/db/schemas/__init__.py +3 -0
  61. agno/db/schemas/evals.py +33 -0
  62. agno/db/schemas/knowledge.py +40 -0
  63. agno/db/schemas/memory.py +46 -0
  64. agno/db/singlestore/__init__.py +3 -0
  65. agno/db/singlestore/schemas.py +116 -0
  66. agno/db/singlestore/singlestore.py +1712 -0
  67. agno/db/singlestore/utils.py +326 -0
  68. agno/db/sqlite/__init__.py +3 -0
  69. agno/db/sqlite/schemas.py +119 -0
  70. agno/db/sqlite/sqlite.py +1676 -0
  71. agno/db/sqlite/utils.py +268 -0
  72. agno/db/utils.py +88 -0
  73. agno/eval/__init__.py +14 -0
  74. agno/eval/accuracy.py +154 -48
  75. agno/eval/performance.py +88 -23
  76. agno/eval/reliability.py +73 -20
  77. agno/eval/utils.py +23 -13
  78. agno/integrations/discord/__init__.py +3 -0
  79. agno/{app → integrations}/discord/client.py +15 -11
  80. agno/knowledge/__init__.py +2 -2
  81. agno/{document → knowledge}/chunking/agentic.py +2 -2
  82. agno/{document → knowledge}/chunking/document.py +2 -2
  83. agno/{document → knowledge}/chunking/fixed.py +3 -3
  84. agno/{document → knowledge}/chunking/markdown.py +2 -2
  85. agno/{document → knowledge}/chunking/recursive.py +2 -2
  86. agno/{document → knowledge}/chunking/row.py +2 -2
  87. agno/knowledge/chunking/semantic.py +59 -0
  88. agno/knowledge/chunking/strategy.py +121 -0
  89. agno/knowledge/content.py +74 -0
  90. agno/knowledge/document/__init__.py +5 -0
  91. agno/{document → knowledge/document}/base.py +12 -2
  92. agno/knowledge/embedder/__init__.py +5 -0
  93. agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
  94. agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
  95. agno/{embedder → knowledge/embedder}/base.py +6 -0
  96. agno/{embedder → knowledge/embedder}/cohere.py +72 -1
  97. agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
  98. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  99. agno/{embedder → knowledge/embedder}/google.py +74 -1
  100. agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
  101. agno/{embedder → knowledge/embedder}/jina.py +48 -2
  102. agno/knowledge/embedder/langdb.py +22 -0
  103. agno/knowledge/embedder/mistral.py +139 -0
  104. agno/{embedder → knowledge/embedder}/nebius.py +1 -1
  105. agno/{embedder → knowledge/embedder}/ollama.py +54 -3
  106. agno/knowledge/embedder/openai.py +223 -0
  107. agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
  108. agno/{embedder → knowledge/embedder}/together.py +1 -1
  109. agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
  110. agno/knowledge/knowledge.py +1551 -0
  111. agno/knowledge/reader/__init__.py +7 -0
  112. agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
  113. agno/knowledge/reader/base.py +88 -0
  114. agno/{document → knowledge}/reader/csv_reader.py +47 -65
  115. agno/knowledge/reader/docx_reader.py +83 -0
  116. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  117. agno/{document → knowledge}/reader/json_reader.py +30 -9
  118. agno/{document → knowledge}/reader/markdown_reader.py +58 -9
  119. agno/{document → knowledge}/reader/pdf_reader.py +71 -126
  120. agno/knowledge/reader/reader_factory.py +268 -0
  121. agno/knowledge/reader/s3_reader.py +101 -0
  122. agno/{document → knowledge}/reader/text_reader.py +31 -10
  123. agno/knowledge/reader/url_reader.py +128 -0
  124. agno/knowledge/reader/web_search_reader.py +366 -0
  125. agno/{document → knowledge}/reader/website_reader.py +37 -10
  126. agno/knowledge/reader/wikipedia_reader.py +59 -0
  127. agno/knowledge/reader/youtube_reader.py +78 -0
  128. agno/knowledge/remote_content/remote_content.py +88 -0
  129. agno/{reranker → knowledge/reranker}/base.py +1 -1
  130. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  131. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  132. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  133. agno/knowledge/types.py +30 -0
  134. agno/knowledge/utils.py +169 -0
  135. agno/media.py +269 -268
  136. agno/memory/__init__.py +2 -10
  137. agno/memory/manager.py +1003 -148
  138. agno/models/aimlapi/__init__.py +2 -2
  139. agno/models/aimlapi/aimlapi.py +6 -6
  140. agno/models/anthropic/claude.py +131 -131
  141. agno/models/aws/bedrock.py +110 -182
  142. agno/models/aws/claude.py +64 -18
  143. agno/models/azure/ai_foundry.py +73 -23
  144. agno/models/base.py +346 -290
  145. agno/models/cerebras/cerebras.py +84 -27
  146. agno/models/cohere/chat.py +106 -98
  147. agno/models/google/gemini.py +105 -46
  148. agno/models/groq/groq.py +97 -35
  149. agno/models/huggingface/huggingface.py +92 -27
  150. agno/models/ibm/watsonx.py +72 -13
  151. agno/models/litellm/chat.py +85 -13
  152. agno/models/message.py +46 -151
  153. agno/models/meta/llama.py +85 -49
  154. agno/models/metrics.py +120 -0
  155. agno/models/mistral/mistral.py +90 -21
  156. agno/models/ollama/__init__.py +0 -2
  157. agno/models/ollama/chat.py +85 -47
  158. agno/models/openai/chat.py +154 -37
  159. agno/models/openai/responses.py +178 -105
  160. agno/models/perplexity/perplexity.py +26 -2
  161. agno/models/portkey/portkey.py +0 -7
  162. agno/models/response.py +15 -9
  163. agno/models/utils.py +20 -0
  164. agno/models/vercel/__init__.py +2 -2
  165. agno/models/vercel/v0.py +1 -1
  166. agno/models/vllm/__init__.py +2 -2
  167. agno/models/vllm/vllm.py +3 -3
  168. agno/models/xai/xai.py +10 -10
  169. agno/os/__init__.py +3 -0
  170. agno/os/app.py +497 -0
  171. agno/os/auth.py +47 -0
  172. agno/os/config.py +103 -0
  173. agno/os/interfaces/agui/__init__.py +3 -0
  174. agno/os/interfaces/agui/agui.py +31 -0
  175. agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
  176. agno/{app → os/interfaces}/agui/utils.py +77 -33
  177. agno/os/interfaces/base.py +21 -0
  178. agno/os/interfaces/slack/__init__.py +3 -0
  179. agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
  180. agno/os/interfaces/slack/slack.py +32 -0
  181. agno/os/interfaces/whatsapp/__init__.py +3 -0
  182. agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
  183. agno/os/interfaces/whatsapp/whatsapp.py +29 -0
  184. agno/os/mcp.py +235 -0
  185. agno/os/router.py +1400 -0
  186. agno/os/routers/__init__.py +3 -0
  187. agno/os/routers/evals/__init__.py +3 -0
  188. agno/os/routers/evals/evals.py +393 -0
  189. agno/os/routers/evals/schemas.py +142 -0
  190. agno/os/routers/evals/utils.py +161 -0
  191. agno/os/routers/knowledge/__init__.py +3 -0
  192. agno/os/routers/knowledge/knowledge.py +850 -0
  193. agno/os/routers/knowledge/schemas.py +118 -0
  194. agno/os/routers/memory/__init__.py +3 -0
  195. agno/os/routers/memory/memory.py +410 -0
  196. agno/os/routers/memory/schemas.py +58 -0
  197. agno/os/routers/metrics/__init__.py +3 -0
  198. agno/os/routers/metrics/metrics.py +178 -0
  199. agno/os/routers/metrics/schemas.py +47 -0
  200. agno/os/routers/session/__init__.py +3 -0
  201. agno/os/routers/session/session.py +536 -0
  202. agno/os/schema.py +945 -0
  203. agno/{app/playground → os}/settings.py +7 -15
  204. agno/os/utils.py +270 -0
  205. agno/reasoning/azure_ai_foundry.py +4 -4
  206. agno/reasoning/deepseek.py +4 -4
  207. agno/reasoning/default.py +6 -11
  208. agno/reasoning/groq.py +4 -4
  209. agno/reasoning/helpers.py +4 -6
  210. agno/reasoning/ollama.py +4 -4
  211. agno/reasoning/openai.py +4 -4
  212. agno/run/agent.py +633 -0
  213. agno/run/base.py +53 -77
  214. agno/run/cancel.py +81 -0
  215. agno/run/team.py +243 -96
  216. agno/run/workflow.py +550 -12
  217. agno/session/__init__.py +10 -0
  218. agno/session/agent.py +244 -0
  219. agno/session/summary.py +225 -0
  220. agno/session/team.py +262 -0
  221. agno/{storage/session/v2 → session}/workflow.py +47 -24
  222. agno/team/__init__.py +15 -16
  223. agno/team/team.py +3260 -4824
  224. agno/tools/agentql.py +14 -5
  225. agno/tools/airflow.py +9 -4
  226. agno/tools/api.py +7 -3
  227. agno/tools/apify.py +2 -46
  228. agno/tools/arxiv.py +8 -3
  229. agno/tools/aws_lambda.py +7 -5
  230. agno/tools/aws_ses.py +7 -1
  231. agno/tools/baidusearch.py +4 -1
  232. agno/tools/bitbucket.py +4 -4
  233. agno/tools/brandfetch.py +14 -11
  234. agno/tools/bravesearch.py +4 -1
  235. agno/tools/brightdata.py +43 -23
  236. agno/tools/browserbase.py +13 -4
  237. agno/tools/calcom.py +12 -10
  238. agno/tools/calculator.py +10 -27
  239. agno/tools/cartesia.py +20 -17
  240. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  241. agno/tools/confluence.py +8 -8
  242. agno/tools/crawl4ai.py +7 -1
  243. agno/tools/csv_toolkit.py +9 -8
  244. agno/tools/dalle.py +22 -12
  245. agno/tools/daytona.py +13 -16
  246. agno/tools/decorator.py +6 -3
  247. agno/tools/desi_vocal.py +17 -8
  248. agno/tools/discord.py +11 -8
  249. agno/tools/docker.py +30 -42
  250. agno/tools/duckdb.py +34 -53
  251. agno/tools/duckduckgo.py +8 -7
  252. agno/tools/e2b.py +62 -62
  253. agno/tools/eleven_labs.py +36 -29
  254. agno/tools/email.py +4 -1
  255. agno/tools/evm.py +7 -1
  256. agno/tools/exa.py +19 -14
  257. agno/tools/fal.py +30 -30
  258. agno/tools/file.py +9 -8
  259. agno/tools/financial_datasets.py +25 -44
  260. agno/tools/firecrawl.py +22 -22
  261. agno/tools/function.py +127 -18
  262. agno/tools/giphy.py +23 -11
  263. agno/tools/github.py +48 -126
  264. agno/tools/gmail.py +45 -61
  265. agno/tools/google_bigquery.py +7 -6
  266. agno/tools/google_maps.py +11 -26
  267. agno/tools/googlesearch.py +7 -2
  268. agno/tools/googlesheets.py +21 -17
  269. agno/tools/hackernews.py +9 -5
  270. agno/tools/jina.py +5 -4
  271. agno/tools/jira.py +18 -9
  272. agno/tools/knowledge.py +31 -32
  273. agno/tools/linear.py +19 -34
  274. agno/tools/linkup.py +5 -1
  275. agno/tools/local_file_system.py +8 -5
  276. agno/tools/lumalab.py +32 -20
  277. agno/tools/mcp.py +1 -2
  278. agno/tools/mem0.py +18 -12
  279. agno/tools/memori.py +14 -10
  280. agno/tools/mlx_transcribe.py +3 -2
  281. agno/tools/models/azure_openai.py +33 -15
  282. agno/tools/models/gemini.py +59 -32
  283. agno/tools/models/groq.py +30 -23
  284. agno/tools/models/nebius.py +28 -12
  285. agno/tools/models_labs.py +40 -16
  286. agno/tools/moviepy_video.py +7 -6
  287. agno/tools/neo4j.py +10 -8
  288. agno/tools/newspaper.py +7 -2
  289. agno/tools/newspaper4k.py +8 -3
  290. agno/tools/openai.py +58 -32
  291. agno/tools/openbb.py +12 -11
  292. agno/tools/opencv.py +63 -47
  293. agno/tools/openweather.py +14 -12
  294. agno/tools/pandas.py +11 -3
  295. agno/tools/postgres.py +4 -12
  296. agno/tools/pubmed.py +4 -1
  297. agno/tools/python.py +9 -22
  298. agno/tools/reasoning.py +35 -27
  299. agno/tools/reddit.py +11 -26
  300. agno/tools/replicate.py +55 -42
  301. agno/tools/resend.py +4 -1
  302. agno/tools/scrapegraph.py +15 -14
  303. agno/tools/searxng.py +10 -23
  304. agno/tools/serpapi.py +6 -3
  305. agno/tools/serper.py +13 -4
  306. agno/tools/shell.py +9 -2
  307. agno/tools/slack.py +12 -11
  308. agno/tools/sleep.py +3 -2
  309. agno/tools/spider.py +24 -4
  310. agno/tools/sql.py +7 -6
  311. agno/tools/tavily.py +6 -4
  312. agno/tools/telegram.py +12 -4
  313. agno/tools/todoist.py +11 -31
  314. agno/tools/toolkit.py +1 -1
  315. agno/tools/trafilatura.py +22 -6
  316. agno/tools/trello.py +9 -22
  317. agno/tools/twilio.py +10 -3
  318. agno/tools/user_control_flow.py +6 -1
  319. agno/tools/valyu.py +34 -5
  320. agno/tools/visualization.py +19 -28
  321. agno/tools/webbrowser.py +4 -3
  322. agno/tools/webex.py +11 -7
  323. agno/tools/website.py +15 -46
  324. agno/tools/webtools.py +12 -4
  325. agno/tools/whatsapp.py +5 -9
  326. agno/tools/wikipedia.py +20 -13
  327. agno/tools/x.py +14 -13
  328. agno/tools/yfinance.py +13 -40
  329. agno/tools/youtube.py +26 -20
  330. agno/tools/zendesk.py +7 -2
  331. agno/tools/zep.py +10 -7
  332. agno/tools/zoom.py +10 -9
  333. agno/utils/common.py +1 -19
  334. agno/utils/events.py +100 -123
  335. agno/utils/gemini.py +32 -2
  336. agno/utils/knowledge.py +29 -0
  337. agno/utils/log.py +54 -4
  338. agno/utils/mcp.py +68 -10
  339. agno/utils/media.py +39 -0
  340. agno/utils/message.py +12 -1
  341. agno/utils/models/aws_claude.py +1 -1
  342. agno/utils/models/claude.py +47 -4
  343. agno/utils/models/cohere.py +1 -1
  344. agno/utils/models/mistral.py +8 -7
  345. agno/utils/models/schema_utils.py +3 -3
  346. agno/utils/models/watsonx.py +1 -1
  347. agno/utils/openai.py +1 -1
  348. agno/utils/pprint.py +33 -32
  349. agno/utils/print_response/agent.py +779 -0
  350. agno/utils/print_response/team.py +1669 -0
  351. agno/utils/print_response/workflow.py +1451 -0
  352. agno/utils/prompts.py +14 -14
  353. agno/utils/reasoning.py +87 -0
  354. agno/utils/response.py +42 -42
  355. agno/utils/streamlit.py +481 -0
  356. agno/utils/string.py +8 -22
  357. agno/utils/team.py +50 -0
  358. agno/utils/timer.py +2 -2
  359. agno/vectordb/base.py +33 -21
  360. agno/vectordb/cassandra/cassandra.py +287 -23
  361. agno/vectordb/chroma/chromadb.py +482 -59
  362. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  363. agno/vectordb/couchbase/couchbase.py +309 -29
  364. agno/vectordb/lancedb/lance_db.py +360 -21
  365. agno/vectordb/langchaindb/__init__.py +5 -0
  366. agno/vectordb/langchaindb/langchaindb.py +145 -0
  367. agno/vectordb/lightrag/__init__.py +5 -0
  368. agno/vectordb/lightrag/lightrag.py +374 -0
  369. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  370. agno/vectordb/milvus/milvus.py +242 -32
  371. agno/vectordb/mongodb/mongodb.py +200 -24
  372. agno/vectordb/pgvector/pgvector.py +319 -37
  373. agno/vectordb/pineconedb/pineconedb.py +221 -27
  374. agno/vectordb/qdrant/qdrant.py +334 -14
  375. agno/vectordb/singlestore/singlestore.py +286 -29
  376. agno/vectordb/surrealdb/surrealdb.py +187 -7
  377. agno/vectordb/upstashdb/upstashdb.py +342 -26
  378. agno/vectordb/weaviate/weaviate.py +227 -165
  379. agno/workflow/__init__.py +17 -13
  380. agno/workflow/{v2/condition.py → condition.py} +135 -32
  381. agno/workflow/{v2/loop.py → loop.py} +115 -28
  382. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  383. agno/workflow/{v2/router.py → router.py} +133 -32
  384. agno/workflow/{v2/step.py → step.py} +207 -49
  385. agno/workflow/{v2/steps.py → steps.py} +147 -66
  386. agno/workflow/types.py +482 -0
  387. agno/workflow/workflow.py +2410 -696
  388. agno-2.0.0.dist-info/METADATA +494 -0
  389. agno-2.0.0.dist-info/RECORD +515 -0
  390. agno-2.0.0.dist-info/licenses/LICENSE +201 -0
  391. agno/agent/metrics.py +0 -107
  392. agno/api/app.py +0 -35
  393. agno/api/playground.py +0 -92
  394. agno/api/schemas/app.py +0 -12
  395. agno/api/schemas/playground.py +0 -22
  396. agno/api/schemas/user.py +0 -35
  397. agno/api/schemas/workspace.py +0 -46
  398. agno/api/user.py +0 -160
  399. agno/api/workflows.py +0 -33
  400. agno/api/workspace.py +0 -175
  401. agno/app/agui/__init__.py +0 -3
  402. agno/app/agui/app.py +0 -17
  403. agno/app/agui/sync_router.py +0 -120
  404. agno/app/base.py +0 -186
  405. agno/app/discord/__init__.py +0 -3
  406. agno/app/fastapi/__init__.py +0 -3
  407. agno/app/fastapi/app.py +0 -107
  408. agno/app/fastapi/async_router.py +0 -457
  409. agno/app/fastapi/sync_router.py +0 -448
  410. agno/app/playground/app.py +0 -228
  411. agno/app/playground/async_router.py +0 -1050
  412. agno/app/playground/deploy.py +0 -249
  413. agno/app/playground/operator.py +0 -183
  414. agno/app/playground/schemas.py +0 -220
  415. agno/app/playground/serve.py +0 -55
  416. agno/app/playground/sync_router.py +0 -1042
  417. agno/app/playground/utils.py +0 -46
  418. agno/app/settings.py +0 -15
  419. agno/app/slack/__init__.py +0 -3
  420. agno/app/slack/app.py +0 -19
  421. agno/app/slack/sync_router.py +0 -92
  422. agno/app/utils.py +0 -54
  423. agno/app/whatsapp/__init__.py +0 -3
  424. agno/app/whatsapp/app.py +0 -15
  425. agno/app/whatsapp/sync_router.py +0 -197
  426. agno/cli/auth_server.py +0 -249
  427. agno/cli/config.py +0 -274
  428. agno/cli/console.py +0 -88
  429. agno/cli/credentials.py +0 -23
  430. agno/cli/entrypoint.py +0 -571
  431. agno/cli/operator.py +0 -357
  432. agno/cli/settings.py +0 -96
  433. agno/cli/ws/ws_cli.py +0 -817
  434. agno/constants.py +0 -13
  435. agno/document/__init__.py +0 -5
  436. agno/document/chunking/semantic.py +0 -45
  437. agno/document/chunking/strategy.py +0 -31
  438. agno/document/reader/__init__.py +0 -5
  439. agno/document/reader/base.py +0 -47
  440. agno/document/reader/docx_reader.py +0 -60
  441. agno/document/reader/gcs/pdf_reader.py +0 -44
  442. agno/document/reader/s3/pdf_reader.py +0 -59
  443. agno/document/reader/s3/text_reader.py +0 -63
  444. agno/document/reader/url_reader.py +0 -59
  445. agno/document/reader/youtube_reader.py +0 -58
  446. agno/embedder/__init__.py +0 -5
  447. agno/embedder/langdb.py +0 -80
  448. agno/embedder/mistral.py +0 -82
  449. agno/embedder/openai.py +0 -78
  450. agno/file/__init__.py +0 -5
  451. agno/file/file.py +0 -16
  452. agno/file/local/csv.py +0 -32
  453. agno/file/local/txt.py +0 -19
  454. agno/infra/app.py +0 -240
  455. agno/infra/base.py +0 -144
  456. agno/infra/context.py +0 -20
  457. agno/infra/db_app.py +0 -52
  458. agno/infra/resource.py +0 -205
  459. agno/infra/resources.py +0 -55
  460. agno/knowledge/agent.py +0 -702
  461. agno/knowledge/arxiv.py +0 -33
  462. agno/knowledge/combined.py +0 -36
  463. agno/knowledge/csv.py +0 -144
  464. agno/knowledge/csv_url.py +0 -124
  465. agno/knowledge/document.py +0 -223
  466. agno/knowledge/docx.py +0 -137
  467. agno/knowledge/firecrawl.py +0 -34
  468. agno/knowledge/gcs/__init__.py +0 -0
  469. agno/knowledge/gcs/base.py +0 -39
  470. agno/knowledge/gcs/pdf.py +0 -125
  471. agno/knowledge/json.py +0 -137
  472. agno/knowledge/langchain.py +0 -71
  473. agno/knowledge/light_rag.py +0 -273
  474. agno/knowledge/llamaindex.py +0 -66
  475. agno/knowledge/markdown.py +0 -154
  476. agno/knowledge/pdf.py +0 -164
  477. agno/knowledge/pdf_bytes.py +0 -42
  478. agno/knowledge/pdf_url.py +0 -148
  479. agno/knowledge/s3/__init__.py +0 -0
  480. agno/knowledge/s3/base.py +0 -64
  481. agno/knowledge/s3/pdf.py +0 -33
  482. agno/knowledge/s3/text.py +0 -34
  483. agno/knowledge/text.py +0 -141
  484. agno/knowledge/url.py +0 -46
  485. agno/knowledge/website.py +0 -179
  486. agno/knowledge/wikipedia.py +0 -32
  487. agno/knowledge/youtube.py +0 -35
  488. agno/memory/agent.py +0 -423
  489. agno/memory/classifier.py +0 -104
  490. agno/memory/db/__init__.py +0 -5
  491. agno/memory/db/base.py +0 -42
  492. agno/memory/db/mongodb.py +0 -189
  493. agno/memory/db/postgres.py +0 -203
  494. agno/memory/db/sqlite.py +0 -193
  495. agno/memory/memory.py +0 -22
  496. agno/memory/row.py +0 -36
  497. agno/memory/summarizer.py +0 -201
  498. agno/memory/summary.py +0 -19
  499. agno/memory/team.py +0 -415
  500. agno/memory/v2/__init__.py +0 -2
  501. agno/memory/v2/db/__init__.py +0 -1
  502. agno/memory/v2/db/base.py +0 -42
  503. agno/memory/v2/db/firestore.py +0 -339
  504. agno/memory/v2/db/mongodb.py +0 -196
  505. agno/memory/v2/db/postgres.py +0 -214
  506. agno/memory/v2/db/redis.py +0 -187
  507. agno/memory/v2/db/schema.py +0 -54
  508. agno/memory/v2/db/sqlite.py +0 -209
  509. agno/memory/v2/manager.py +0 -437
  510. agno/memory/v2/memory.py +0 -1097
  511. agno/memory/v2/schema.py +0 -55
  512. agno/memory/v2/summarizer.py +0 -215
  513. agno/memory/workflow.py +0 -38
  514. agno/models/ollama/tools.py +0 -430
  515. agno/models/qwen/__init__.py +0 -5
  516. agno/playground/__init__.py +0 -10
  517. agno/playground/deploy.py +0 -3
  518. agno/playground/playground.py +0 -3
  519. agno/playground/serve.py +0 -3
  520. agno/playground/settings.py +0 -3
  521. agno/reranker/__init__.py +0 -0
  522. agno/run/response.py +0 -467
  523. agno/run/v2/__init__.py +0 -0
  524. agno/run/v2/workflow.py +0 -567
  525. agno/storage/__init__.py +0 -0
  526. agno/storage/agent/__init__.py +0 -0
  527. agno/storage/agent/dynamodb.py +0 -1
  528. agno/storage/agent/json.py +0 -1
  529. agno/storage/agent/mongodb.py +0 -1
  530. agno/storage/agent/postgres.py +0 -1
  531. agno/storage/agent/singlestore.py +0 -1
  532. agno/storage/agent/sqlite.py +0 -1
  533. agno/storage/agent/yaml.py +0 -1
  534. agno/storage/base.py +0 -60
  535. agno/storage/dynamodb.py +0 -673
  536. agno/storage/firestore.py +0 -297
  537. agno/storage/gcs_json.py +0 -261
  538. agno/storage/in_memory.py +0 -234
  539. agno/storage/json.py +0 -237
  540. agno/storage/mongodb.py +0 -328
  541. agno/storage/mysql.py +0 -685
  542. agno/storage/postgres.py +0 -682
  543. agno/storage/redis.py +0 -336
  544. agno/storage/session/__init__.py +0 -16
  545. agno/storage/session/agent.py +0 -64
  546. agno/storage/session/team.py +0 -63
  547. agno/storage/session/v2/__init__.py +0 -5
  548. agno/storage/session/workflow.py +0 -61
  549. agno/storage/singlestore.py +0 -606
  550. agno/storage/sqlite.py +0 -646
  551. agno/storage/workflow/__init__.py +0 -0
  552. agno/storage/workflow/mongodb.py +0 -1
  553. agno/storage/workflow/postgres.py +0 -1
  554. agno/storage/workflow/sqlite.py +0 -1
  555. agno/storage/yaml.py +0 -241
  556. agno/tools/thinking.py +0 -73
  557. agno/utils/defaults.py +0 -57
  558. agno/utils/filesystem.py +0 -39
  559. agno/utils/git.py +0 -52
  560. agno/utils/json_io.py +0 -30
  561. agno/utils/load_env.py +0 -19
  562. agno/utils/py_io.py +0 -19
  563. agno/utils/pyproject.py +0 -18
  564. agno/utils/resource_filter.py +0 -31
  565. agno/workflow/v2/__init__.py +0 -21
  566. agno/workflow/v2/types.py +0 -357
  567. agno/workflow/v2/workflow.py +0 -3312
  568. agno/workspace/__init__.py +0 -0
  569. agno/workspace/config.py +0 -325
  570. agno/workspace/enums.py +0 -6
  571. agno/workspace/helpers.py +0 -52
  572. agno/workspace/operator.py +0 -757
  573. agno/workspace/settings.py +0 -158
  574. agno-1.8.1.dist-info/METADATA +0 -982
  575. agno-1.8.1.dist-info/RECORD +0 -566
  576. agno-1.8.1.dist-info/entry_points.txt +0 -3
  577. agno-1.8.1.dist-info/licenses/LICENSE +0 -375
  578. /agno/{app → db/migrations}/__init__.py +0 -0
  579. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  580. /agno/{cli → integrations}/__init__.py +0 -0
  581. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  582. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  583. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  584. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  585. /agno/{app → os/interfaces}/slack/security.py +0 -0
  586. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  587. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  588. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  589. {agno-1.8.1.dist-info → agno-2.0.0.dist-info}/WHEEL +0 -0
  590. {agno-1.8.1.dist-info → agno-2.0.0.dist-info}/top_level.txt +0 -0
agno/memory/team.py DELETED
@@ -1,415 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from dataclasses import dataclass, field
4
- from typing import Any, Dict, List, Optional, Tuple
5
-
6
- from pydantic import ConfigDict
7
-
8
- from agno.media import AudioArtifact, ImageArtifact, VideoArtifact
9
- from agno.memory.agent import AgentRun, MemoryRetrieval
10
- from agno.memory.classifier import MemoryClassifier
11
- from agno.memory.db import MemoryDb
12
- from agno.memory.manager import MemoryManager
13
- from agno.memory.memory import Memory
14
- from agno.models.message import Message
15
- from agno.run.response import RunResponse
16
- from agno.run.team import TeamRunResponse
17
- from agno.utils.log import log_debug, log_info, log_warning
18
-
19
-
20
- @dataclass
21
- class TeamRun:
22
- message: Optional[Message] = None
23
- member_runs: Optional[List[AgentRun]] = None
24
- response: Optional[TeamRunResponse] = None
25
-
26
- def to_dict(self) -> Dict[str, Any]:
27
- message = self.message.to_dict() if self.message else None
28
- member_responses = [run.to_dict() for run in self.member_runs] if self.member_runs else None
29
- response = self.response.to_dict() if self.response else None
30
- return {
31
- "message": message,
32
- "member_responses": member_responses,
33
- "response": response,
34
- }
35
-
36
- @classmethod
37
- def from_dict(cls, data: Dict[str, Any]) -> "TeamRun":
38
- message = Message.model_validate(data.get("message")) if data.get("message") else None
39
- member_runs = (
40
- [AgentRun.model_validate(run) for run in data.get("member_runs", [])] if data.get("member_runs") else None
41
- )
42
- response = TeamRunResponse.from_dict(data.get("response", {})) if data.get("response") else None
43
- return cls(message=message, member_runs=member_runs, response=response)
44
-
45
-
46
- @dataclass
47
- class TeamMemberInteraction:
48
- member_name: str
49
- task: str
50
- response: RunResponse
51
-
52
-
53
- @dataclass
54
- class TeamContext:
55
- # List of team member interaction, represented as a request and a response
56
- member_interactions: List[TeamMemberInteraction] = field(default_factory=list)
57
- text: Optional[str] = None
58
-
59
-
60
- @dataclass
61
- class TeamMemory:
62
- # Runs between the user and agent
63
- runs: List[TeamRun] = field(default_factory=list)
64
- # List of messages sent to the model
65
- messages: List[Message] = field(default_factory=list)
66
- # If True, update the system message when it changes
67
- update_system_message_on_change: bool = True
68
-
69
- team_context: Optional[TeamContext] = None
70
-
71
- # Create and store personalized memories for this user
72
- create_user_memories: bool = False
73
- # Update memories for the user after each run
74
- update_user_memories_after_run: bool = True
75
-
76
- # MemoryDb to store personalized memories
77
- db: Optional[MemoryDb] = None
78
- # User ID for the personalized memories
79
- user_id: Optional[str] = None
80
- retrieval: MemoryRetrieval = MemoryRetrieval.last_n
81
- memories: Optional[List[Memory]] = None
82
- classifier: Optional[MemoryClassifier] = None
83
- manager: Optional[MemoryManager] = None
84
-
85
- num_memories: Optional[int] = None
86
-
87
- # True when memory is being updated
88
- updating_memory: bool = False
89
-
90
- model_config = ConfigDict(arbitrary_types_allowed=True)
91
-
92
- def to_dict(self) -> Dict[str, Any]:
93
- _memory_dict = {}
94
- for key, value in self.__dict__.items():
95
- if value is not None and key in [
96
- "update_system_message_on_change",
97
- "create_user_memories",
98
- "update_user_memories_after_run",
99
- "user_id",
100
- "num_memories",
101
- ]:
102
- _memory_dict[key] = value
103
-
104
- # Add messages if they exist
105
- if self.messages is not None:
106
- _memory_dict["messages"] = [message.to_dict() for message in self.messages]
107
- # Add memories if they exist
108
- if self.memories is not None:
109
- _memory_dict["memories"] = [memory.to_dict() for memory in self.memories]
110
- # Add runs if they exist
111
- if self.runs is not None:
112
- _memory_dict["runs"] = [run.to_dict() for run in self.runs]
113
- return _memory_dict
114
-
115
- def add_interaction_to_team_context(self, member_name: str, task: str, run_response: RunResponse) -> None:
116
- if self.team_context is None:
117
- self.team_context = TeamContext()
118
- self.team_context.member_interactions.append(
119
- TeamMemberInteraction(
120
- member_name=member_name,
121
- task=task,
122
- response=run_response,
123
- )
124
- )
125
- log_debug(f"Updated team context with member name: {member_name}")
126
-
127
- def set_team_context_text(self, text: str) -> None:
128
- if self.team_context:
129
- self.team_context.text = text
130
- else:
131
- self.team_context = TeamContext(text=text)
132
-
133
- def get_team_context_str(self) -> str:
134
- if self.team_context and self.team_context.text:
135
- return f"<team_context>\n{self.team_context.text}\n</team_context>"
136
- return ""
137
-
138
- def get_team_member_interactions_str(self) -> str:
139
- team_member_interactions_str = ""
140
- if self.team_context and self.team_context.member_interactions:
141
- team_member_interactions_str += "<member_interactions>\n"
142
-
143
- for interaction in self.team_context.member_interactions:
144
- team_member_interactions_str += f"Member: {interaction.member_name}\n"
145
- team_member_interactions_str += f"Task: {interaction.task}\n"
146
- team_member_interactions_str += f"Response: {interaction.response.to_dict().get('content', '')}\n"
147
- team_member_interactions_str += "\n"
148
- team_member_interactions_str += "</member_interactions>\n"
149
- return team_member_interactions_str
150
-
151
- def get_team_context_images(self) -> List[ImageArtifact]:
152
- images = []
153
- if self.team_context and self.team_context.member_interactions:
154
- for interaction in self.team_context.member_interactions:
155
- if interaction.response.images:
156
- images.extend(interaction.response.images)
157
- return images
158
-
159
- def get_team_context_videos(self) -> List[VideoArtifact]:
160
- videos = []
161
- if self.team_context and self.team_context.member_interactions:
162
- for interaction in self.team_context.member_interactions:
163
- if interaction.response.videos:
164
- videos.extend(interaction.response.videos)
165
- return videos
166
-
167
- def get_team_context_audio(self) -> List[AudioArtifact]:
168
- audio = []
169
- if self.team_context and self.team_context.member_interactions:
170
- for interaction in self.team_context.member_interactions:
171
- if interaction.response.audio:
172
- audio.extend(interaction.response.audio)
173
- return audio
174
-
175
- def add_team_run(self, team_run: TeamRun) -> None:
176
- """Adds an TeamRun to the runs list."""
177
- self.runs.append(team_run)
178
- log_debug("Added TeamRun to TeamMemory")
179
-
180
- def add_system_message(self, message: Message, system_message_role: str = "system") -> None:
181
- """Add the system messages to the messages list"""
182
- # If this is the first run in the session, add the system message to the messages list
183
- if len(self.messages) == 0:
184
- if message is not None:
185
- self.messages.append(message)
186
- # If there are messages in the memory, check if the system message is already in the memory
187
- # If it is not, add the system message to the messages list
188
- # If it is, update the system message if content has changed and update_system_message_on_change is True
189
- else:
190
- system_message_index = next((i for i, m in enumerate(self.messages) if m.role == system_message_role), None)
191
- # Update the system message in memory if content has changed
192
- if system_message_index is not None:
193
- if (
194
- self.messages[system_message_index].content != message.content
195
- and self.update_system_message_on_change
196
- ):
197
- log_info("Updating system message in memory with new content")
198
- self.messages[system_message_index] = message
199
- else:
200
- # Add the system message to the messages list
201
- self.messages.insert(0, message)
202
-
203
- def add_messages(self, messages: List[Message]) -> None:
204
- """Add a list of messages to the messages list."""
205
- self.messages.extend(messages)
206
- log_debug(f"Added {len(messages)} Messages to TeamMemory")
207
-
208
- def get_messages(self) -> List[Dict[str, Any]]:
209
- """Returns the messages list as a list of dictionaries."""
210
- return [message.model_dump() for message in self.messages]
211
-
212
- def get_messages_from_last_n_runs(
213
- self, last_n: Optional[int] = None, skip_role: Optional[str] = None
214
- ) -> List[Message]:
215
- """Returns the messages from the last_n runs, excluding previously tagged history messages.
216
-
217
- Args:
218
- last_n: The number of runs to return from the end of the conversation.
219
- skip_role: Skip messages with this role.
220
-
221
- Returns:
222
- A list of Messages from the specified runs, excluding history messages.
223
- """
224
- if not self.runs:
225
- return []
226
-
227
- runs_to_process = self.runs if last_n is None else self.runs[-last_n:]
228
- messages_from_history = []
229
-
230
- for run in runs_to_process:
231
- if not (run.response and run.response.messages):
232
- continue
233
-
234
- for message in run.response.messages:
235
- # Skip messages with specified role
236
- if skip_role and message.role == skip_role:
237
- continue
238
- # Skip messages that were tagged as history in previous runs
239
- if hasattr(message, "from_history") and message.from_history:
240
- continue
241
-
242
- messages_from_history.append(message)
243
-
244
- log_debug(f"Getting messages from previous runs: {len(messages_from_history)}")
245
- return messages_from_history
246
-
247
- def get_all_messages(self) -> List[Tuple[Message, Message]]:
248
- """Returns a list of tuples of (user message, assistant response)."""
249
-
250
- assistant_role = ["assistant", "model", "CHATBOT"]
251
-
252
- runs_as_message_pairs: List[Tuple[Message, Message]] = []
253
- for run in self.runs:
254
- if run.response and run.response.messages:
255
- user_message_from_run = None
256
- assistant_message_from_run = None
257
-
258
- # Start from the beginning to look for the user message
259
- for message in run.response.messages:
260
- if message.role == "user":
261
- user_message_from_run = message
262
- break
263
-
264
- # Start from the end to look for the assistant response
265
- for message in run.response.messages[::-1]:
266
- if message.role in assistant_role:
267
- assistant_message_from_run = message
268
- break
269
-
270
- if user_message_from_run and assistant_message_from_run:
271
- runs_as_message_pairs.append((user_message_from_run, assistant_message_from_run))
272
- return runs_as_message_pairs
273
-
274
- def load_user_memories(self) -> None:
275
- """Load memories from memory db for this user."""
276
-
277
- if self.db is None:
278
- return
279
-
280
- try:
281
- if self.retrieval in (MemoryRetrieval.last_n, MemoryRetrieval.first_n):
282
- memory_rows = self.db.read_memories(
283
- user_id=self.user_id,
284
- limit=self.num_memories,
285
- sort="asc" if self.retrieval == MemoryRetrieval.first_n else "desc",
286
- )
287
- else:
288
- raise NotImplementedError("Semantic retrieval not yet supported.")
289
- except Exception as e:
290
- log_debug(f"Error reading memory: {e}")
291
- return
292
-
293
- # Clear the existing memories
294
- self.memories = []
295
-
296
- # No memories to load
297
- if memory_rows is None or len(memory_rows) == 0:
298
- return
299
-
300
- for row in memory_rows:
301
- try:
302
- self.memories.append(Memory.model_validate(row.memory))
303
- except Exception as e:
304
- log_warning(f"Error loading memory: {e}")
305
- continue
306
-
307
- def should_update_memory(self, input: str) -> bool:
308
- """Determines if a message should be added to the memory db."""
309
- from agno.memory.classifier import MemoryClassifier
310
-
311
- if self.classifier is None:
312
- self.classifier = MemoryClassifier()
313
-
314
- self.classifier.existing_memories = self.memories
315
- classifier_response = self.classifier.run(input)
316
- if classifier_response and classifier_response.lower() == "yes":
317
- return True
318
- return False
319
-
320
- async def ashould_update_memory(self, input: str) -> bool:
321
- """Determines if a message should be added to the memory db."""
322
- from agno.memory.classifier import MemoryClassifier
323
-
324
- if self.classifier is None:
325
- self.classifier = MemoryClassifier()
326
-
327
- self.classifier.existing_memories = self.memories
328
- classifier_response = await self.classifier.arun(input)
329
- if classifier_response and classifier_response.lower() == "yes":
330
- return True
331
- return False
332
-
333
- def update_memory(self, input: str, force: bool = False) -> Optional[str]:
334
- """Creates a memory from a message and adds it to the memory db."""
335
-
336
- if input is None or not isinstance(input, str):
337
- return "Invalid message content"
338
-
339
- if self.db is None:
340
- log_warning("MemoryDb not provided.")
341
- return "Please provide a db to store memories"
342
-
343
- self.updating_memory = True
344
-
345
- # Check if this user message should be added to long term memory
346
- should_update_memory = force or self.should_update_memory(input=input)
347
- log_debug(f"Update memory: {should_update_memory}")
348
-
349
- if not should_update_memory:
350
- log_debug("Memory update not required")
351
- return "Memory update not required"
352
-
353
- if self.manager is None:
354
- self.manager = MemoryManager(user_id=self.user_id, db=self.db)
355
-
356
- else:
357
- self.manager.db = self.db
358
- self.manager.user_id = self.user_id
359
-
360
- response = self.manager.run(input)
361
- self.load_user_memories()
362
- self.updating_memory = False
363
- return response
364
-
365
- async def aupdate_memory(self, input: str, force: bool = False) -> Optional[str]:
366
- """Creates a memory from a message and adds it to the memory db."""
367
- if input is None or not isinstance(input, str):
368
- return "Invalid message content"
369
-
370
- if self.db is None:
371
- log_warning("MemoryDb not provided.")
372
- return "Please provide a db to store memories"
373
-
374
- self.updating_memory = True
375
-
376
- # Check if this user message should be added to long term memory
377
- should_update_memory = force or await self.ashould_update_memory(input=input)
378
- log_debug(f"Async update memory: {should_update_memory}")
379
-
380
- if not should_update_memory:
381
- log_debug("Memory update not required")
382
- return "Memory update not required"
383
-
384
- if self.manager is None:
385
- self.manager = MemoryManager(user_id=self.user_id, db=self.db)
386
-
387
- else:
388
- self.manager.db = self.db
389
- self.manager.user_id = self.user_id
390
-
391
- response = await self.manager.arun(input)
392
- self.load_user_memories()
393
- self.updating_memory = False
394
- return response
395
-
396
- def deep_copy(self) -> "TeamMemory":
397
- from copy import deepcopy
398
-
399
- # Create a shallow copy of the object
400
- copied_obj = self.__class__(**self.to_dict())
401
-
402
- # Manually deepcopy fields that are known to be safe
403
- for field_name, field_value in self.__dict__.items():
404
- if field_name not in ["db", "classifier", "manager"]:
405
- try:
406
- setattr(copied_obj, field_name, deepcopy(field_value))
407
- except Exception as e:
408
- log_warning(f"Failed to deepcopy field: {field_name} - {e}")
409
- setattr(copied_obj, field_name, field_value)
410
-
411
- copied_obj.db = self.db
412
- copied_obj.classifier = self.classifier
413
- copied_obj.manager = self.manager
414
-
415
- return copied_obj
@@ -1,2 +0,0 @@
1
- from agno.memory.v2.memory import Memory, MemoryManager, MemoryRow, SessionSummarizer
2
- from agno.memory.v2.schema import SessionSummary, UserMemory
@@ -1 +0,0 @@
1
- from agno.memory.db.base import MemoryDb
agno/memory/v2/db/base.py DELETED
@@ -1,42 +0,0 @@
1
- from abc import ABC, abstractmethod
2
- from typing import List, Optional
3
-
4
- from agno.memory.v2.db.schema import MemoryRow
5
-
6
-
7
- class MemoryDb(ABC):
8
- """Base class for the Memory Database."""
9
-
10
- @abstractmethod
11
- def create(self) -> None:
12
- raise NotImplementedError
13
-
14
- @abstractmethod
15
- def memory_exists(self, memory: MemoryRow) -> bool:
16
- raise NotImplementedError
17
-
18
- @abstractmethod
19
- def read_memories(
20
- self, user_id: Optional[str] = None, limit: Optional[int] = None, sort: Optional[str] = None
21
- ) -> List[MemoryRow]:
22
- raise NotImplementedError
23
-
24
- @abstractmethod
25
- def upsert_memory(self, memory: MemoryRow) -> Optional[MemoryRow]:
26
- raise NotImplementedError
27
-
28
- @abstractmethod
29
- def delete_memory(self, memory_id: str) -> None:
30
- raise NotImplementedError
31
-
32
- @abstractmethod
33
- def drop_table(self) -> None:
34
- raise NotImplementedError
35
-
36
- @abstractmethod
37
- def table_exists(self) -> bool:
38
- raise NotImplementedError
39
-
40
- @abstractmethod
41
- def clear(self) -> bool:
42
- raise NotImplementedError