agno 2.2.13__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 (575) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +51 -0
  3. agno/agent/agent.py +10405 -0
  4. agno/api/__init__.py +0 -0
  5. agno/api/agent.py +28 -0
  6. agno/api/api.py +40 -0
  7. agno/api/evals.py +22 -0
  8. agno/api/os.py +17 -0
  9. agno/api/routes.py +13 -0
  10. agno/api/schemas/__init__.py +9 -0
  11. agno/api/schemas/agent.py +16 -0
  12. agno/api/schemas/evals.py +16 -0
  13. agno/api/schemas/os.py +14 -0
  14. agno/api/schemas/response.py +6 -0
  15. agno/api/schemas/team.py +16 -0
  16. agno/api/schemas/utils.py +21 -0
  17. agno/api/schemas/workflows.py +16 -0
  18. agno/api/settings.py +53 -0
  19. agno/api/team.py +30 -0
  20. agno/api/workflow.py +28 -0
  21. agno/cloud/aws/base.py +214 -0
  22. agno/cloud/aws/s3/__init__.py +2 -0
  23. agno/cloud/aws/s3/api_client.py +43 -0
  24. agno/cloud/aws/s3/bucket.py +195 -0
  25. agno/cloud/aws/s3/object.py +57 -0
  26. agno/culture/__init__.py +3 -0
  27. agno/culture/manager.py +956 -0
  28. agno/db/__init__.py +24 -0
  29. agno/db/async_postgres/__init__.py +3 -0
  30. agno/db/base.py +598 -0
  31. agno/db/dynamo/__init__.py +3 -0
  32. agno/db/dynamo/dynamo.py +2042 -0
  33. agno/db/dynamo/schemas.py +314 -0
  34. agno/db/dynamo/utils.py +743 -0
  35. agno/db/firestore/__init__.py +3 -0
  36. agno/db/firestore/firestore.py +1795 -0
  37. agno/db/firestore/schemas.py +140 -0
  38. agno/db/firestore/utils.py +376 -0
  39. agno/db/gcs_json/__init__.py +3 -0
  40. agno/db/gcs_json/gcs_json_db.py +1335 -0
  41. agno/db/gcs_json/utils.py +228 -0
  42. agno/db/in_memory/__init__.py +3 -0
  43. agno/db/in_memory/in_memory_db.py +1160 -0
  44. agno/db/in_memory/utils.py +230 -0
  45. agno/db/json/__init__.py +3 -0
  46. agno/db/json/json_db.py +1328 -0
  47. agno/db/json/utils.py +230 -0
  48. agno/db/migrations/__init__.py +0 -0
  49. agno/db/migrations/v1_to_v2.py +635 -0
  50. agno/db/mongo/__init__.py +17 -0
  51. agno/db/mongo/async_mongo.py +2026 -0
  52. agno/db/mongo/mongo.py +1982 -0
  53. agno/db/mongo/schemas.py +87 -0
  54. agno/db/mongo/utils.py +259 -0
  55. agno/db/mysql/__init__.py +3 -0
  56. agno/db/mysql/mysql.py +2308 -0
  57. agno/db/mysql/schemas.py +138 -0
  58. agno/db/mysql/utils.py +355 -0
  59. agno/db/postgres/__init__.py +4 -0
  60. agno/db/postgres/async_postgres.py +1927 -0
  61. agno/db/postgres/postgres.py +2260 -0
  62. agno/db/postgres/schemas.py +139 -0
  63. agno/db/postgres/utils.py +442 -0
  64. agno/db/redis/__init__.py +3 -0
  65. agno/db/redis/redis.py +1660 -0
  66. agno/db/redis/schemas.py +123 -0
  67. agno/db/redis/utils.py +346 -0
  68. agno/db/schemas/__init__.py +4 -0
  69. agno/db/schemas/culture.py +120 -0
  70. agno/db/schemas/evals.py +33 -0
  71. agno/db/schemas/knowledge.py +40 -0
  72. agno/db/schemas/memory.py +46 -0
  73. agno/db/schemas/metrics.py +0 -0
  74. agno/db/singlestore/__init__.py +3 -0
  75. agno/db/singlestore/schemas.py +130 -0
  76. agno/db/singlestore/singlestore.py +2272 -0
  77. agno/db/singlestore/utils.py +384 -0
  78. agno/db/sqlite/__init__.py +4 -0
  79. agno/db/sqlite/async_sqlite.py +2293 -0
  80. agno/db/sqlite/schemas.py +133 -0
  81. agno/db/sqlite/sqlite.py +2288 -0
  82. agno/db/sqlite/utils.py +431 -0
  83. agno/db/surrealdb/__init__.py +3 -0
  84. agno/db/surrealdb/metrics.py +292 -0
  85. agno/db/surrealdb/models.py +309 -0
  86. agno/db/surrealdb/queries.py +71 -0
  87. agno/db/surrealdb/surrealdb.py +1353 -0
  88. agno/db/surrealdb/utils.py +147 -0
  89. agno/db/utils.py +116 -0
  90. agno/debug.py +18 -0
  91. agno/eval/__init__.py +14 -0
  92. agno/eval/accuracy.py +834 -0
  93. agno/eval/performance.py +773 -0
  94. agno/eval/reliability.py +306 -0
  95. agno/eval/utils.py +119 -0
  96. agno/exceptions.py +161 -0
  97. agno/filters.py +354 -0
  98. agno/guardrails/__init__.py +6 -0
  99. agno/guardrails/base.py +19 -0
  100. agno/guardrails/openai.py +144 -0
  101. agno/guardrails/pii.py +94 -0
  102. agno/guardrails/prompt_injection.py +52 -0
  103. agno/integrations/__init__.py +0 -0
  104. agno/integrations/discord/__init__.py +3 -0
  105. agno/integrations/discord/client.py +203 -0
  106. agno/knowledge/__init__.py +5 -0
  107. agno/knowledge/chunking/__init__.py +0 -0
  108. agno/knowledge/chunking/agentic.py +79 -0
  109. agno/knowledge/chunking/document.py +91 -0
  110. agno/knowledge/chunking/fixed.py +57 -0
  111. agno/knowledge/chunking/markdown.py +151 -0
  112. agno/knowledge/chunking/recursive.py +63 -0
  113. agno/knowledge/chunking/row.py +39 -0
  114. agno/knowledge/chunking/semantic.py +86 -0
  115. agno/knowledge/chunking/strategy.py +165 -0
  116. agno/knowledge/content.py +74 -0
  117. agno/knowledge/document/__init__.py +5 -0
  118. agno/knowledge/document/base.py +58 -0
  119. agno/knowledge/embedder/__init__.py +5 -0
  120. agno/knowledge/embedder/aws_bedrock.py +343 -0
  121. agno/knowledge/embedder/azure_openai.py +210 -0
  122. agno/knowledge/embedder/base.py +23 -0
  123. agno/knowledge/embedder/cohere.py +323 -0
  124. agno/knowledge/embedder/fastembed.py +62 -0
  125. agno/knowledge/embedder/fireworks.py +13 -0
  126. agno/knowledge/embedder/google.py +258 -0
  127. agno/knowledge/embedder/huggingface.py +94 -0
  128. agno/knowledge/embedder/jina.py +182 -0
  129. agno/knowledge/embedder/langdb.py +22 -0
  130. agno/knowledge/embedder/mistral.py +206 -0
  131. agno/knowledge/embedder/nebius.py +13 -0
  132. agno/knowledge/embedder/ollama.py +154 -0
  133. agno/knowledge/embedder/openai.py +195 -0
  134. agno/knowledge/embedder/sentence_transformer.py +63 -0
  135. agno/knowledge/embedder/together.py +13 -0
  136. agno/knowledge/embedder/vllm.py +262 -0
  137. agno/knowledge/embedder/voyageai.py +165 -0
  138. agno/knowledge/knowledge.py +1988 -0
  139. agno/knowledge/reader/__init__.py +7 -0
  140. agno/knowledge/reader/arxiv_reader.py +81 -0
  141. agno/knowledge/reader/base.py +95 -0
  142. agno/knowledge/reader/csv_reader.py +166 -0
  143. agno/knowledge/reader/docx_reader.py +82 -0
  144. agno/knowledge/reader/field_labeled_csv_reader.py +292 -0
  145. agno/knowledge/reader/firecrawl_reader.py +201 -0
  146. agno/knowledge/reader/json_reader.py +87 -0
  147. agno/knowledge/reader/markdown_reader.py +137 -0
  148. agno/knowledge/reader/pdf_reader.py +431 -0
  149. agno/knowledge/reader/pptx_reader.py +101 -0
  150. agno/knowledge/reader/reader_factory.py +313 -0
  151. agno/knowledge/reader/s3_reader.py +89 -0
  152. agno/knowledge/reader/tavily_reader.py +194 -0
  153. agno/knowledge/reader/text_reader.py +115 -0
  154. agno/knowledge/reader/web_search_reader.py +372 -0
  155. agno/knowledge/reader/website_reader.py +455 -0
  156. agno/knowledge/reader/wikipedia_reader.py +59 -0
  157. agno/knowledge/reader/youtube_reader.py +78 -0
  158. agno/knowledge/remote_content/__init__.py +0 -0
  159. agno/knowledge/remote_content/remote_content.py +88 -0
  160. agno/knowledge/reranker/__init__.py +3 -0
  161. agno/knowledge/reranker/base.py +14 -0
  162. agno/knowledge/reranker/cohere.py +64 -0
  163. agno/knowledge/reranker/infinity.py +195 -0
  164. agno/knowledge/reranker/sentence_transformer.py +54 -0
  165. agno/knowledge/types.py +39 -0
  166. agno/knowledge/utils.py +189 -0
  167. agno/media.py +462 -0
  168. agno/memory/__init__.py +3 -0
  169. agno/memory/manager.py +1327 -0
  170. agno/models/__init__.py +0 -0
  171. agno/models/aimlapi/__init__.py +5 -0
  172. agno/models/aimlapi/aimlapi.py +45 -0
  173. agno/models/anthropic/__init__.py +5 -0
  174. agno/models/anthropic/claude.py +757 -0
  175. agno/models/aws/__init__.py +15 -0
  176. agno/models/aws/bedrock.py +701 -0
  177. agno/models/aws/claude.py +378 -0
  178. agno/models/azure/__init__.py +18 -0
  179. agno/models/azure/ai_foundry.py +485 -0
  180. agno/models/azure/openai_chat.py +131 -0
  181. agno/models/base.py +2175 -0
  182. agno/models/cerebras/__init__.py +12 -0
  183. agno/models/cerebras/cerebras.py +501 -0
  184. agno/models/cerebras/cerebras_openai.py +112 -0
  185. agno/models/cohere/__init__.py +5 -0
  186. agno/models/cohere/chat.py +389 -0
  187. agno/models/cometapi/__init__.py +5 -0
  188. agno/models/cometapi/cometapi.py +57 -0
  189. agno/models/dashscope/__init__.py +5 -0
  190. agno/models/dashscope/dashscope.py +91 -0
  191. agno/models/deepinfra/__init__.py +5 -0
  192. agno/models/deepinfra/deepinfra.py +28 -0
  193. agno/models/deepseek/__init__.py +5 -0
  194. agno/models/deepseek/deepseek.py +61 -0
  195. agno/models/defaults.py +1 -0
  196. agno/models/fireworks/__init__.py +5 -0
  197. agno/models/fireworks/fireworks.py +26 -0
  198. agno/models/google/__init__.py +5 -0
  199. agno/models/google/gemini.py +1085 -0
  200. agno/models/groq/__init__.py +5 -0
  201. agno/models/groq/groq.py +556 -0
  202. agno/models/huggingface/__init__.py +5 -0
  203. agno/models/huggingface/huggingface.py +491 -0
  204. agno/models/ibm/__init__.py +5 -0
  205. agno/models/ibm/watsonx.py +422 -0
  206. agno/models/internlm/__init__.py +3 -0
  207. agno/models/internlm/internlm.py +26 -0
  208. agno/models/langdb/__init__.py +1 -0
  209. agno/models/langdb/langdb.py +48 -0
  210. agno/models/litellm/__init__.py +14 -0
  211. agno/models/litellm/chat.py +468 -0
  212. agno/models/litellm/litellm_openai.py +25 -0
  213. agno/models/llama_cpp/__init__.py +5 -0
  214. agno/models/llama_cpp/llama_cpp.py +22 -0
  215. agno/models/lmstudio/__init__.py +5 -0
  216. agno/models/lmstudio/lmstudio.py +25 -0
  217. agno/models/message.py +434 -0
  218. agno/models/meta/__init__.py +12 -0
  219. agno/models/meta/llama.py +475 -0
  220. agno/models/meta/llama_openai.py +78 -0
  221. agno/models/metrics.py +120 -0
  222. agno/models/mistral/__init__.py +5 -0
  223. agno/models/mistral/mistral.py +432 -0
  224. agno/models/nebius/__init__.py +3 -0
  225. agno/models/nebius/nebius.py +54 -0
  226. agno/models/nexus/__init__.py +3 -0
  227. agno/models/nexus/nexus.py +22 -0
  228. agno/models/nvidia/__init__.py +5 -0
  229. agno/models/nvidia/nvidia.py +28 -0
  230. agno/models/ollama/__init__.py +5 -0
  231. agno/models/ollama/chat.py +441 -0
  232. agno/models/openai/__init__.py +9 -0
  233. agno/models/openai/chat.py +883 -0
  234. agno/models/openai/like.py +27 -0
  235. agno/models/openai/responses.py +1050 -0
  236. agno/models/openrouter/__init__.py +5 -0
  237. agno/models/openrouter/openrouter.py +66 -0
  238. agno/models/perplexity/__init__.py +5 -0
  239. agno/models/perplexity/perplexity.py +187 -0
  240. agno/models/portkey/__init__.py +3 -0
  241. agno/models/portkey/portkey.py +81 -0
  242. agno/models/requesty/__init__.py +5 -0
  243. agno/models/requesty/requesty.py +52 -0
  244. agno/models/response.py +199 -0
  245. agno/models/sambanova/__init__.py +5 -0
  246. agno/models/sambanova/sambanova.py +28 -0
  247. agno/models/siliconflow/__init__.py +5 -0
  248. agno/models/siliconflow/siliconflow.py +25 -0
  249. agno/models/together/__init__.py +5 -0
  250. agno/models/together/together.py +25 -0
  251. agno/models/utils.py +266 -0
  252. agno/models/vercel/__init__.py +3 -0
  253. agno/models/vercel/v0.py +26 -0
  254. agno/models/vertexai/__init__.py +0 -0
  255. agno/models/vertexai/claude.py +70 -0
  256. agno/models/vllm/__init__.py +3 -0
  257. agno/models/vllm/vllm.py +78 -0
  258. agno/models/xai/__init__.py +3 -0
  259. agno/models/xai/xai.py +113 -0
  260. agno/os/__init__.py +3 -0
  261. agno/os/app.py +876 -0
  262. agno/os/auth.py +57 -0
  263. agno/os/config.py +104 -0
  264. agno/os/interfaces/__init__.py +1 -0
  265. agno/os/interfaces/a2a/__init__.py +3 -0
  266. agno/os/interfaces/a2a/a2a.py +42 -0
  267. agno/os/interfaces/a2a/router.py +250 -0
  268. agno/os/interfaces/a2a/utils.py +924 -0
  269. agno/os/interfaces/agui/__init__.py +3 -0
  270. agno/os/interfaces/agui/agui.py +47 -0
  271. agno/os/interfaces/agui/router.py +144 -0
  272. agno/os/interfaces/agui/utils.py +534 -0
  273. agno/os/interfaces/base.py +25 -0
  274. agno/os/interfaces/slack/__init__.py +3 -0
  275. agno/os/interfaces/slack/router.py +148 -0
  276. agno/os/interfaces/slack/security.py +30 -0
  277. agno/os/interfaces/slack/slack.py +47 -0
  278. agno/os/interfaces/whatsapp/__init__.py +3 -0
  279. agno/os/interfaces/whatsapp/router.py +211 -0
  280. agno/os/interfaces/whatsapp/security.py +53 -0
  281. agno/os/interfaces/whatsapp/whatsapp.py +36 -0
  282. agno/os/mcp.py +292 -0
  283. agno/os/middleware/__init__.py +7 -0
  284. agno/os/middleware/jwt.py +233 -0
  285. agno/os/router.py +1763 -0
  286. agno/os/routers/__init__.py +3 -0
  287. agno/os/routers/evals/__init__.py +3 -0
  288. agno/os/routers/evals/evals.py +430 -0
  289. agno/os/routers/evals/schemas.py +142 -0
  290. agno/os/routers/evals/utils.py +162 -0
  291. agno/os/routers/health.py +31 -0
  292. agno/os/routers/home.py +52 -0
  293. agno/os/routers/knowledge/__init__.py +3 -0
  294. agno/os/routers/knowledge/knowledge.py +997 -0
  295. agno/os/routers/knowledge/schemas.py +178 -0
  296. agno/os/routers/memory/__init__.py +3 -0
  297. agno/os/routers/memory/memory.py +515 -0
  298. agno/os/routers/memory/schemas.py +62 -0
  299. agno/os/routers/metrics/__init__.py +3 -0
  300. agno/os/routers/metrics/metrics.py +190 -0
  301. agno/os/routers/metrics/schemas.py +47 -0
  302. agno/os/routers/session/__init__.py +3 -0
  303. agno/os/routers/session/session.py +997 -0
  304. agno/os/schema.py +1055 -0
  305. agno/os/settings.py +43 -0
  306. agno/os/utils.py +630 -0
  307. agno/py.typed +0 -0
  308. agno/reasoning/__init__.py +0 -0
  309. agno/reasoning/anthropic.py +80 -0
  310. agno/reasoning/azure_ai_foundry.py +67 -0
  311. agno/reasoning/deepseek.py +63 -0
  312. agno/reasoning/default.py +97 -0
  313. agno/reasoning/gemini.py +73 -0
  314. agno/reasoning/groq.py +71 -0
  315. agno/reasoning/helpers.py +63 -0
  316. agno/reasoning/ollama.py +67 -0
  317. agno/reasoning/openai.py +86 -0
  318. agno/reasoning/step.py +31 -0
  319. agno/reasoning/vertexai.py +76 -0
  320. agno/run/__init__.py +6 -0
  321. agno/run/agent.py +787 -0
  322. agno/run/base.py +229 -0
  323. agno/run/cancel.py +81 -0
  324. agno/run/messages.py +32 -0
  325. agno/run/team.py +753 -0
  326. agno/run/workflow.py +708 -0
  327. agno/session/__init__.py +10 -0
  328. agno/session/agent.py +295 -0
  329. agno/session/summary.py +265 -0
  330. agno/session/team.py +392 -0
  331. agno/session/workflow.py +205 -0
  332. agno/team/__init__.py +37 -0
  333. agno/team/team.py +8793 -0
  334. agno/tools/__init__.py +10 -0
  335. agno/tools/agentql.py +120 -0
  336. agno/tools/airflow.py +69 -0
  337. agno/tools/api.py +122 -0
  338. agno/tools/apify.py +314 -0
  339. agno/tools/arxiv.py +127 -0
  340. agno/tools/aws_lambda.py +53 -0
  341. agno/tools/aws_ses.py +66 -0
  342. agno/tools/baidusearch.py +89 -0
  343. agno/tools/bitbucket.py +292 -0
  344. agno/tools/brandfetch.py +213 -0
  345. agno/tools/bravesearch.py +106 -0
  346. agno/tools/brightdata.py +367 -0
  347. agno/tools/browserbase.py +209 -0
  348. agno/tools/calcom.py +255 -0
  349. agno/tools/calculator.py +151 -0
  350. agno/tools/cartesia.py +187 -0
  351. agno/tools/clickup.py +244 -0
  352. agno/tools/confluence.py +240 -0
  353. agno/tools/crawl4ai.py +158 -0
  354. agno/tools/csv_toolkit.py +185 -0
  355. agno/tools/dalle.py +110 -0
  356. agno/tools/daytona.py +475 -0
  357. agno/tools/decorator.py +262 -0
  358. agno/tools/desi_vocal.py +108 -0
  359. agno/tools/discord.py +161 -0
  360. agno/tools/docker.py +716 -0
  361. agno/tools/duckdb.py +379 -0
  362. agno/tools/duckduckgo.py +91 -0
  363. agno/tools/e2b.py +703 -0
  364. agno/tools/eleven_labs.py +196 -0
  365. agno/tools/email.py +67 -0
  366. agno/tools/evm.py +129 -0
  367. agno/tools/exa.py +396 -0
  368. agno/tools/fal.py +127 -0
  369. agno/tools/file.py +240 -0
  370. agno/tools/file_generation.py +350 -0
  371. agno/tools/financial_datasets.py +288 -0
  372. agno/tools/firecrawl.py +143 -0
  373. agno/tools/function.py +1187 -0
  374. agno/tools/giphy.py +93 -0
  375. agno/tools/github.py +1760 -0
  376. agno/tools/gmail.py +922 -0
  377. agno/tools/google_bigquery.py +117 -0
  378. agno/tools/google_drive.py +270 -0
  379. agno/tools/google_maps.py +253 -0
  380. agno/tools/googlecalendar.py +674 -0
  381. agno/tools/googlesearch.py +98 -0
  382. agno/tools/googlesheets.py +377 -0
  383. agno/tools/hackernews.py +77 -0
  384. agno/tools/jina.py +101 -0
  385. agno/tools/jira.py +170 -0
  386. agno/tools/knowledge.py +218 -0
  387. agno/tools/linear.py +426 -0
  388. agno/tools/linkup.py +58 -0
  389. agno/tools/local_file_system.py +90 -0
  390. agno/tools/lumalab.py +183 -0
  391. agno/tools/mcp/__init__.py +10 -0
  392. agno/tools/mcp/mcp.py +331 -0
  393. agno/tools/mcp/multi_mcp.py +347 -0
  394. agno/tools/mcp/params.py +24 -0
  395. agno/tools/mcp_toolbox.py +284 -0
  396. agno/tools/mem0.py +193 -0
  397. agno/tools/memori.py +339 -0
  398. agno/tools/memory.py +419 -0
  399. agno/tools/mlx_transcribe.py +139 -0
  400. agno/tools/models/__init__.py +0 -0
  401. agno/tools/models/azure_openai.py +190 -0
  402. agno/tools/models/gemini.py +203 -0
  403. agno/tools/models/groq.py +158 -0
  404. agno/tools/models/morph.py +186 -0
  405. agno/tools/models/nebius.py +124 -0
  406. agno/tools/models_labs.py +195 -0
  407. agno/tools/moviepy_video.py +349 -0
  408. agno/tools/neo4j.py +134 -0
  409. agno/tools/newspaper.py +46 -0
  410. agno/tools/newspaper4k.py +93 -0
  411. agno/tools/notion.py +204 -0
  412. agno/tools/openai.py +202 -0
  413. agno/tools/openbb.py +160 -0
  414. agno/tools/opencv.py +321 -0
  415. agno/tools/openweather.py +233 -0
  416. agno/tools/oxylabs.py +385 -0
  417. agno/tools/pandas.py +102 -0
  418. agno/tools/parallel.py +314 -0
  419. agno/tools/postgres.py +257 -0
  420. agno/tools/pubmed.py +188 -0
  421. agno/tools/python.py +205 -0
  422. agno/tools/reasoning.py +283 -0
  423. agno/tools/reddit.py +467 -0
  424. agno/tools/replicate.py +117 -0
  425. agno/tools/resend.py +62 -0
  426. agno/tools/scrapegraph.py +222 -0
  427. agno/tools/searxng.py +152 -0
  428. agno/tools/serpapi.py +116 -0
  429. agno/tools/serper.py +255 -0
  430. agno/tools/shell.py +53 -0
  431. agno/tools/slack.py +136 -0
  432. agno/tools/sleep.py +20 -0
  433. agno/tools/spider.py +116 -0
  434. agno/tools/sql.py +154 -0
  435. agno/tools/streamlit/__init__.py +0 -0
  436. agno/tools/streamlit/components.py +113 -0
  437. agno/tools/tavily.py +254 -0
  438. agno/tools/telegram.py +48 -0
  439. agno/tools/todoist.py +218 -0
  440. agno/tools/tool_registry.py +1 -0
  441. agno/tools/toolkit.py +146 -0
  442. agno/tools/trafilatura.py +388 -0
  443. agno/tools/trello.py +274 -0
  444. agno/tools/twilio.py +186 -0
  445. agno/tools/user_control_flow.py +78 -0
  446. agno/tools/valyu.py +228 -0
  447. agno/tools/visualization.py +467 -0
  448. agno/tools/webbrowser.py +28 -0
  449. agno/tools/webex.py +76 -0
  450. agno/tools/website.py +54 -0
  451. agno/tools/webtools.py +45 -0
  452. agno/tools/whatsapp.py +286 -0
  453. agno/tools/wikipedia.py +63 -0
  454. agno/tools/workflow.py +278 -0
  455. agno/tools/x.py +335 -0
  456. agno/tools/yfinance.py +257 -0
  457. agno/tools/youtube.py +184 -0
  458. agno/tools/zendesk.py +82 -0
  459. agno/tools/zep.py +454 -0
  460. agno/tools/zoom.py +382 -0
  461. agno/utils/__init__.py +0 -0
  462. agno/utils/agent.py +820 -0
  463. agno/utils/audio.py +49 -0
  464. agno/utils/certs.py +27 -0
  465. agno/utils/code_execution.py +11 -0
  466. agno/utils/common.py +132 -0
  467. agno/utils/dttm.py +13 -0
  468. agno/utils/enum.py +22 -0
  469. agno/utils/env.py +11 -0
  470. agno/utils/events.py +696 -0
  471. agno/utils/format_str.py +16 -0
  472. agno/utils/functions.py +166 -0
  473. agno/utils/gemini.py +426 -0
  474. agno/utils/hooks.py +57 -0
  475. agno/utils/http.py +74 -0
  476. agno/utils/json_schema.py +234 -0
  477. agno/utils/knowledge.py +36 -0
  478. agno/utils/location.py +19 -0
  479. agno/utils/log.py +255 -0
  480. agno/utils/mcp.py +214 -0
  481. agno/utils/media.py +352 -0
  482. agno/utils/merge_dict.py +41 -0
  483. agno/utils/message.py +118 -0
  484. agno/utils/models/__init__.py +0 -0
  485. agno/utils/models/ai_foundry.py +43 -0
  486. agno/utils/models/claude.py +358 -0
  487. agno/utils/models/cohere.py +87 -0
  488. agno/utils/models/llama.py +78 -0
  489. agno/utils/models/mistral.py +98 -0
  490. agno/utils/models/openai_responses.py +140 -0
  491. agno/utils/models/schema_utils.py +153 -0
  492. agno/utils/models/watsonx.py +41 -0
  493. agno/utils/openai.py +257 -0
  494. agno/utils/pickle.py +32 -0
  495. agno/utils/pprint.py +178 -0
  496. agno/utils/print_response/__init__.py +0 -0
  497. agno/utils/print_response/agent.py +842 -0
  498. agno/utils/print_response/team.py +1724 -0
  499. agno/utils/print_response/workflow.py +1668 -0
  500. agno/utils/prompts.py +111 -0
  501. agno/utils/reasoning.py +108 -0
  502. agno/utils/response.py +163 -0
  503. agno/utils/response_iterator.py +17 -0
  504. agno/utils/safe_formatter.py +24 -0
  505. agno/utils/serialize.py +32 -0
  506. agno/utils/shell.py +22 -0
  507. agno/utils/streamlit.py +487 -0
  508. agno/utils/string.py +231 -0
  509. agno/utils/team.py +139 -0
  510. agno/utils/timer.py +41 -0
  511. agno/utils/tools.py +102 -0
  512. agno/utils/web.py +23 -0
  513. agno/utils/whatsapp.py +305 -0
  514. agno/utils/yaml_io.py +25 -0
  515. agno/vectordb/__init__.py +3 -0
  516. agno/vectordb/base.py +127 -0
  517. agno/vectordb/cassandra/__init__.py +5 -0
  518. agno/vectordb/cassandra/cassandra.py +501 -0
  519. agno/vectordb/cassandra/extra_param_mixin.py +11 -0
  520. agno/vectordb/cassandra/index.py +13 -0
  521. agno/vectordb/chroma/__init__.py +5 -0
  522. agno/vectordb/chroma/chromadb.py +929 -0
  523. agno/vectordb/clickhouse/__init__.py +9 -0
  524. agno/vectordb/clickhouse/clickhousedb.py +835 -0
  525. agno/vectordb/clickhouse/index.py +9 -0
  526. agno/vectordb/couchbase/__init__.py +3 -0
  527. agno/vectordb/couchbase/couchbase.py +1442 -0
  528. agno/vectordb/distance.py +7 -0
  529. agno/vectordb/lancedb/__init__.py +6 -0
  530. agno/vectordb/lancedb/lance_db.py +995 -0
  531. agno/vectordb/langchaindb/__init__.py +5 -0
  532. agno/vectordb/langchaindb/langchaindb.py +163 -0
  533. agno/vectordb/lightrag/__init__.py +5 -0
  534. agno/vectordb/lightrag/lightrag.py +388 -0
  535. agno/vectordb/llamaindex/__init__.py +3 -0
  536. agno/vectordb/llamaindex/llamaindexdb.py +166 -0
  537. agno/vectordb/milvus/__init__.py +4 -0
  538. agno/vectordb/milvus/milvus.py +1182 -0
  539. agno/vectordb/mongodb/__init__.py +9 -0
  540. agno/vectordb/mongodb/mongodb.py +1417 -0
  541. agno/vectordb/pgvector/__init__.py +12 -0
  542. agno/vectordb/pgvector/index.py +23 -0
  543. agno/vectordb/pgvector/pgvector.py +1462 -0
  544. agno/vectordb/pineconedb/__init__.py +5 -0
  545. agno/vectordb/pineconedb/pineconedb.py +747 -0
  546. agno/vectordb/qdrant/__init__.py +5 -0
  547. agno/vectordb/qdrant/qdrant.py +1134 -0
  548. agno/vectordb/redis/__init__.py +9 -0
  549. agno/vectordb/redis/redisdb.py +694 -0
  550. agno/vectordb/search.py +7 -0
  551. agno/vectordb/singlestore/__init__.py +10 -0
  552. agno/vectordb/singlestore/index.py +41 -0
  553. agno/vectordb/singlestore/singlestore.py +763 -0
  554. agno/vectordb/surrealdb/__init__.py +3 -0
  555. agno/vectordb/surrealdb/surrealdb.py +699 -0
  556. agno/vectordb/upstashdb/__init__.py +5 -0
  557. agno/vectordb/upstashdb/upstashdb.py +718 -0
  558. agno/vectordb/weaviate/__init__.py +8 -0
  559. agno/vectordb/weaviate/index.py +15 -0
  560. agno/vectordb/weaviate/weaviate.py +1005 -0
  561. agno/workflow/__init__.py +23 -0
  562. agno/workflow/agent.py +299 -0
  563. agno/workflow/condition.py +738 -0
  564. agno/workflow/loop.py +735 -0
  565. agno/workflow/parallel.py +824 -0
  566. agno/workflow/router.py +702 -0
  567. agno/workflow/step.py +1432 -0
  568. agno/workflow/steps.py +592 -0
  569. agno/workflow/types.py +520 -0
  570. agno/workflow/workflow.py +4321 -0
  571. agno-2.2.13.dist-info/METADATA +614 -0
  572. agno-2.2.13.dist-info/RECORD +575 -0
  573. agno-2.2.13.dist-info/WHEEL +5 -0
  574. agno-2.2.13.dist-info/licenses/LICENSE +201 -0
  575. agno-2.2.13.dist-info/top_level.txt +1 -0
agno/db/__init__.py ADDED
@@ -0,0 +1,24 @@
1
+ from agno.db.base import BaseDb, SessionType
2
+
3
+ __all__ = [
4
+ "BaseDb",
5
+ "SessionType",
6
+ ]
7
+
8
+
9
+ def __getattr__(name: str):
10
+ """Lazy import for database implementations to avoid forcing all dependencies."""
11
+ if name == "DynamoDb":
12
+ from agno.db.dynamo import DynamoDb
13
+
14
+ return DynamoDb
15
+ elif name == "MongoDb":
16
+ from agno.db.mongo import MongoDb
17
+
18
+ return MongoDb
19
+ elif name == "PostgresDb":
20
+ from agno.db.postgres import PostgresDb
21
+
22
+ return PostgresDb
23
+ # Add other db implementations as needed
24
+ raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
@@ -0,0 +1,3 @@
1
+ from agno.db.postgres import AsyncPostgresDb
2
+
3
+ __all__ = ["AsyncPostgresDb"]
agno/db/base.py ADDED
@@ -0,0 +1,598 @@
1
+ from abc import ABC, abstractmethod
2
+ from datetime import date
3
+ from enum import Enum
4
+ from typing import Any, Dict, List, Optional, Tuple, Union
5
+ from uuid import uuid4
6
+
7
+ from agno.db.schemas import UserMemory
8
+ from agno.db.schemas.culture import CulturalKnowledge
9
+ from agno.db.schemas.evals import EvalFilterType, EvalRunRecord, EvalType
10
+ from agno.db.schemas.knowledge import KnowledgeRow
11
+ from agno.session import Session
12
+
13
+
14
+ class SessionType(str, Enum):
15
+ AGENT = "agent"
16
+ TEAM = "team"
17
+ WORKFLOW = "workflow"
18
+
19
+
20
+ class BaseDb(ABC):
21
+ """Base abstract class for all our Database implementations."""
22
+
23
+ def __init__(
24
+ self,
25
+ session_table: Optional[str] = None,
26
+ culture_table: Optional[str] = None,
27
+ memory_table: Optional[str] = None,
28
+ metrics_table: Optional[str] = None,
29
+ eval_table: Optional[str] = None,
30
+ knowledge_table: Optional[str] = None,
31
+ id: Optional[str] = None,
32
+ ):
33
+ self.id = id or str(uuid4())
34
+ self.session_table_name = session_table or "agno_sessions"
35
+ self.culture_table_name = culture_table or "agno_culture"
36
+ self.memory_table_name = memory_table or "agno_memories"
37
+ self.metrics_table_name = metrics_table or "agno_metrics"
38
+ self.eval_table_name = eval_table or "agno_eval_runs"
39
+ self.knowledge_table_name = knowledge_table or "agno_knowledge"
40
+
41
+ @abstractmethod
42
+ def table_exists(self, table_name: str) -> bool:
43
+ raise NotImplementedError
44
+
45
+ def _create_all_tables(self) -> None:
46
+ """Create all tables for this database."""
47
+ pass
48
+
49
+ # --- Sessions ---
50
+ @abstractmethod
51
+ def delete_session(self, session_id: str) -> bool:
52
+ raise NotImplementedError
53
+
54
+ @abstractmethod
55
+ def delete_sessions(self, session_ids: List[str]) -> None:
56
+ raise NotImplementedError
57
+
58
+ @abstractmethod
59
+ def get_session(
60
+ self,
61
+ session_id: str,
62
+ session_type: SessionType,
63
+ user_id: Optional[str] = None,
64
+ deserialize: Optional[bool] = True,
65
+ ) -> Optional[Union[Session, Dict[str, Any]]]:
66
+ raise NotImplementedError
67
+
68
+ @abstractmethod
69
+ def get_sessions(
70
+ self,
71
+ session_type: SessionType,
72
+ user_id: Optional[str] = None,
73
+ component_id: Optional[str] = None,
74
+ session_name: Optional[str] = None,
75
+ start_timestamp: Optional[int] = None,
76
+ end_timestamp: Optional[int] = None,
77
+ limit: Optional[int] = None,
78
+ page: Optional[int] = None,
79
+ sort_by: Optional[str] = None,
80
+ sort_order: Optional[str] = None,
81
+ deserialize: Optional[bool] = True,
82
+ ) -> Union[List[Session], Tuple[List[Dict[str, Any]], int]]:
83
+ raise NotImplementedError
84
+
85
+ @abstractmethod
86
+ def rename_session(
87
+ self,
88
+ session_id: str,
89
+ session_type: SessionType,
90
+ session_name: str,
91
+ deserialize: Optional[bool] = True,
92
+ ) -> Optional[Union[Session, Dict[str, Any]]]:
93
+ raise NotImplementedError
94
+
95
+ @abstractmethod
96
+ def upsert_session(
97
+ self, session: Session, deserialize: Optional[bool] = True
98
+ ) -> Optional[Union[Session, Dict[str, Any]]]:
99
+ raise NotImplementedError
100
+
101
+ @abstractmethod
102
+ def upsert_sessions(
103
+ self,
104
+ sessions: List[Session],
105
+ deserialize: Optional[bool] = True,
106
+ preserve_updated_at: bool = False,
107
+ ) -> List[Union[Session, Dict[str, Any]]]:
108
+ """Bulk upsert multiple sessions for improved performance on large datasets."""
109
+ raise NotImplementedError
110
+
111
+ # --- Memory ---
112
+ @abstractmethod
113
+ def clear_memories(self) -> None:
114
+ raise NotImplementedError
115
+
116
+ @abstractmethod
117
+ def delete_user_memory(self, memory_id: str, user_id: Optional[str] = None) -> None:
118
+ raise NotImplementedError
119
+
120
+ @abstractmethod
121
+ def delete_user_memories(self, memory_ids: List[str], user_id: Optional[str] = None) -> None:
122
+ raise NotImplementedError
123
+
124
+ @abstractmethod
125
+ def get_all_memory_topics(self, user_id: Optional[str] = None) -> List[str]:
126
+ raise NotImplementedError
127
+
128
+ @abstractmethod
129
+ def get_user_memory(
130
+ self,
131
+ memory_id: str,
132
+ deserialize: Optional[bool] = True,
133
+ user_id: Optional[str] = None,
134
+ ) -> Optional[Union[UserMemory, Dict[str, Any]]]:
135
+ raise NotImplementedError
136
+
137
+ @abstractmethod
138
+ def get_user_memories(
139
+ self,
140
+ user_id: Optional[str] = None,
141
+ agent_id: Optional[str] = None,
142
+ team_id: Optional[str] = None,
143
+ topics: Optional[List[str]] = None,
144
+ search_content: Optional[str] = None,
145
+ limit: Optional[int] = None,
146
+ page: Optional[int] = None,
147
+ sort_by: Optional[str] = None,
148
+ sort_order: Optional[str] = None,
149
+ deserialize: Optional[bool] = True,
150
+ ) -> Union[List[UserMemory], Tuple[List[Dict[str, Any]], int]]:
151
+ raise NotImplementedError
152
+
153
+ @abstractmethod
154
+ def get_user_memory_stats(
155
+ self,
156
+ limit: Optional[int] = None,
157
+ page: Optional[int] = None,
158
+ user_id: Optional[str] = None,
159
+ ) -> Tuple[List[Dict[str, Any]], int]:
160
+ raise NotImplementedError
161
+
162
+ @abstractmethod
163
+ def upsert_user_memory(
164
+ self, memory: UserMemory, deserialize: Optional[bool] = True
165
+ ) -> Optional[Union[UserMemory, Dict[str, Any]]]:
166
+ raise NotImplementedError
167
+
168
+ @abstractmethod
169
+ def upsert_memories(
170
+ self,
171
+ memories: List[UserMemory],
172
+ deserialize: Optional[bool] = True,
173
+ preserve_updated_at: bool = False,
174
+ ) -> List[Union[UserMemory, Dict[str, Any]]]:
175
+ """Bulk upsert multiple memories for improved performance on large datasets."""
176
+ raise NotImplementedError
177
+
178
+ # --- Metrics ---
179
+ @abstractmethod
180
+ def get_metrics(
181
+ self,
182
+ starting_date: Optional[date] = None,
183
+ ending_date: Optional[date] = None,
184
+ ) -> Tuple[List[Dict[str, Any]], Optional[int]]:
185
+ raise NotImplementedError
186
+
187
+ @abstractmethod
188
+ def calculate_metrics(self) -> Optional[Any]:
189
+ raise NotImplementedError
190
+
191
+ # --- Knowledge ---
192
+ @abstractmethod
193
+ def delete_knowledge_content(self, id: str):
194
+ """Delete a knowledge row from the database.
195
+
196
+ Args:
197
+ id (str): The ID of the knowledge row to delete.
198
+ """
199
+ raise NotImplementedError
200
+
201
+ @abstractmethod
202
+ def get_knowledge_content(self, id: str) -> Optional[KnowledgeRow]:
203
+ """Get a knowledge row from the database.
204
+
205
+ Args:
206
+ id (str): The ID of the knowledge row to get.
207
+
208
+ Returns:
209
+ Optional[KnowledgeRow]: The knowledge row, or None if it doesn't exist.
210
+ """
211
+ raise NotImplementedError
212
+
213
+ @abstractmethod
214
+ def get_knowledge_contents(
215
+ self,
216
+ limit: Optional[int] = None,
217
+ page: Optional[int] = None,
218
+ sort_by: Optional[str] = None,
219
+ sort_order: Optional[str] = None,
220
+ ) -> Tuple[List[KnowledgeRow], int]:
221
+ """Get all knowledge contents from the database.
222
+
223
+ Args:
224
+ limit (Optional[int]): The maximum number of knowledge contents to return.
225
+ page (Optional[int]): The page number.
226
+ sort_by (Optional[str]): The column to sort by.
227
+ sort_order (Optional[str]): The order to sort by.
228
+
229
+ Returns:
230
+ Tuple[List[KnowledgeRow], int]: The knowledge contents and total count.
231
+
232
+ Raises:
233
+ Exception: If an error occurs during retrieval.
234
+ """
235
+ raise NotImplementedError
236
+
237
+ @abstractmethod
238
+ def upsert_knowledge_content(self, knowledge_row: KnowledgeRow):
239
+ """Upsert knowledge content in the database.
240
+
241
+ Args:
242
+ knowledge_row (KnowledgeRow): The knowledge row to upsert.
243
+
244
+ Returns:
245
+ Optional[KnowledgeRow]: The upserted knowledge row, or None if the operation fails.
246
+ """
247
+ raise NotImplementedError
248
+
249
+ # --- Evals ---
250
+ @abstractmethod
251
+ def create_eval_run(self, eval_run: EvalRunRecord) -> Optional[EvalRunRecord]:
252
+ raise NotImplementedError
253
+
254
+ @abstractmethod
255
+ def delete_eval_runs(self, eval_run_ids: List[str]) -> None:
256
+ raise NotImplementedError
257
+
258
+ @abstractmethod
259
+ def get_eval_run(
260
+ self, eval_run_id: str, deserialize: Optional[bool] = True
261
+ ) -> Optional[Union[EvalRunRecord, Dict[str, Any]]]:
262
+ raise NotImplementedError
263
+
264
+ @abstractmethod
265
+ def get_eval_runs(
266
+ self,
267
+ limit: Optional[int] = None,
268
+ page: Optional[int] = None,
269
+ sort_by: Optional[str] = None,
270
+ sort_order: Optional[str] = None,
271
+ agent_id: Optional[str] = None,
272
+ team_id: Optional[str] = None,
273
+ workflow_id: Optional[str] = None,
274
+ model_id: Optional[str] = None,
275
+ filter_type: Optional[EvalFilterType] = None,
276
+ eval_type: Optional[List[EvalType]] = None,
277
+ deserialize: Optional[bool] = True,
278
+ ) -> Union[List[EvalRunRecord], Tuple[List[Dict[str, Any]], int]]:
279
+ raise NotImplementedError
280
+
281
+ @abstractmethod
282
+ def rename_eval_run(
283
+ self, eval_run_id: str, name: str, deserialize: Optional[bool] = True
284
+ ) -> Optional[Union[EvalRunRecord, Dict[str, Any]]]:
285
+ raise NotImplementedError
286
+
287
+ # --- Cultural Knowledge ---
288
+ @abstractmethod
289
+ def clear_cultural_knowledge(self) -> None:
290
+ raise NotImplementedError
291
+
292
+ @abstractmethod
293
+ def delete_cultural_knowledge(self, id: str) -> None:
294
+ raise NotImplementedError
295
+
296
+ @abstractmethod
297
+ def get_cultural_knowledge(self, id: str) -> Optional[CulturalKnowledge]:
298
+ raise NotImplementedError
299
+
300
+ @abstractmethod
301
+ def get_all_cultural_knowledge(
302
+ self,
303
+ name: Optional[str] = None,
304
+ limit: Optional[int] = None,
305
+ page: Optional[int] = None,
306
+ sort_by: Optional[str] = None,
307
+ sort_order: Optional[str] = None,
308
+ agent_id: Optional[str] = None,
309
+ team_id: Optional[str] = None,
310
+ ) -> Optional[List[CulturalKnowledge]]:
311
+ raise NotImplementedError
312
+
313
+ @abstractmethod
314
+ def upsert_cultural_knowledge(self, cultural_knowledge: CulturalKnowledge) -> Optional[CulturalKnowledge]:
315
+ raise NotImplementedError
316
+
317
+
318
+ class AsyncBaseDb(ABC):
319
+ """Base abstract class for all our async database implementations."""
320
+
321
+ def __init__(
322
+ self,
323
+ id: Optional[str] = None,
324
+ session_table: Optional[str] = None,
325
+ memory_table: Optional[str] = None,
326
+ metrics_table: Optional[str] = None,
327
+ eval_table: Optional[str] = None,
328
+ knowledge_table: Optional[str] = None,
329
+ culture_table: Optional[str] = None,
330
+ ):
331
+ self.id = id or str(uuid4())
332
+ self.session_table_name = session_table or "agno_sessions"
333
+ self.memory_table_name = memory_table or "agno_memories"
334
+ self.metrics_table_name = metrics_table or "agno_metrics"
335
+ self.eval_table_name = eval_table or "agno_eval_runs"
336
+ self.knowledge_table_name = knowledge_table or "agno_knowledge"
337
+ self.culture_table_name = culture_table or "agno_culture"
338
+
339
+ @abstractmethod
340
+ async def table_exists(self, table_name: str) -> bool:
341
+ """Check if a table with the given name exists in this database.
342
+
343
+ Default implementation returns True if the table name is configured.
344
+ Subclasses should override this to perform actual existence checks.
345
+
346
+ Args:
347
+ table_name: Name of the table to check
348
+
349
+ Returns:
350
+ bool: True if the table exists, False otherwise
351
+ """
352
+ raise NotImplementedError
353
+
354
+ # --- Sessions ---
355
+ @abstractmethod
356
+ async def delete_session(self, session_id: str) -> bool:
357
+ raise NotImplementedError
358
+
359
+ @abstractmethod
360
+ async def delete_sessions(self, session_ids: List[str]) -> None:
361
+ raise NotImplementedError
362
+
363
+ @abstractmethod
364
+ async def get_session(
365
+ self,
366
+ session_id: str,
367
+ session_type: SessionType,
368
+ user_id: Optional[str] = None,
369
+ deserialize: Optional[bool] = True,
370
+ ) -> Optional[Union[Session, Dict[str, Any]]]:
371
+ raise NotImplementedError
372
+
373
+ @abstractmethod
374
+ async def get_sessions(
375
+ self,
376
+ session_type: SessionType,
377
+ user_id: Optional[str] = None,
378
+ component_id: Optional[str] = None,
379
+ session_name: Optional[str] = None,
380
+ start_timestamp: Optional[int] = None,
381
+ end_timestamp: Optional[int] = None,
382
+ limit: Optional[int] = None,
383
+ page: Optional[int] = None,
384
+ sort_by: Optional[str] = None,
385
+ sort_order: Optional[str] = None,
386
+ deserialize: Optional[bool] = True,
387
+ ) -> Union[List[Session], Tuple[List[Dict[str, Any]], int]]:
388
+ raise NotImplementedError
389
+
390
+ @abstractmethod
391
+ async def rename_session(
392
+ self,
393
+ session_id: str,
394
+ session_type: SessionType,
395
+ session_name: str,
396
+ deserialize: Optional[bool] = True,
397
+ ) -> Optional[Union[Session, Dict[str, Any]]]:
398
+ raise NotImplementedError
399
+
400
+ @abstractmethod
401
+ async def upsert_session(
402
+ self, session: Session, deserialize: Optional[bool] = True
403
+ ) -> Optional[Union[Session, Dict[str, Any]]]:
404
+ raise NotImplementedError
405
+
406
+ # --- Memory ---
407
+ @abstractmethod
408
+ async def clear_memories(self) -> None:
409
+ raise NotImplementedError
410
+
411
+ @abstractmethod
412
+ async def delete_user_memory(self, memory_id: str, user_id: Optional[str] = None) -> None:
413
+ raise NotImplementedError
414
+
415
+ @abstractmethod
416
+ async def delete_user_memories(self, memory_ids: List[str], user_id: Optional[str] = None) -> None:
417
+ raise NotImplementedError
418
+
419
+ @abstractmethod
420
+ async def get_all_memory_topics(self, user_id: Optional[str] = None) -> List[str]:
421
+ raise NotImplementedError
422
+
423
+ @abstractmethod
424
+ async def get_user_memory(
425
+ self,
426
+ memory_id: str,
427
+ deserialize: Optional[bool] = True,
428
+ user_id: Optional[str] = None,
429
+ ) -> Optional[Union[UserMemory, Dict[str, Any]]]:
430
+ raise NotImplementedError
431
+
432
+ @abstractmethod
433
+ async def get_user_memories(
434
+ self,
435
+ user_id: Optional[str] = None,
436
+ agent_id: Optional[str] = None,
437
+ team_id: Optional[str] = None,
438
+ topics: Optional[List[str]] = None,
439
+ search_content: Optional[str] = None,
440
+ limit: Optional[int] = None,
441
+ page: Optional[int] = None,
442
+ sort_by: Optional[str] = None,
443
+ sort_order: Optional[str] = None,
444
+ deserialize: Optional[bool] = True,
445
+ ) -> Union[List[UserMemory], Tuple[List[Dict[str, Any]], int]]:
446
+ raise NotImplementedError
447
+
448
+ @abstractmethod
449
+ async def get_user_memory_stats(
450
+ self,
451
+ limit: Optional[int] = None,
452
+ page: Optional[int] = None,
453
+ user_id: Optional[str] = None,
454
+ ) -> Tuple[List[Dict[str, Any]], int]:
455
+ raise NotImplementedError
456
+
457
+ @abstractmethod
458
+ async def upsert_user_memory(
459
+ self, memory: UserMemory, deserialize: Optional[bool] = True
460
+ ) -> Optional[Union[UserMemory, Dict[str, Any]]]:
461
+ raise NotImplementedError
462
+
463
+ # --- Metrics ---
464
+ @abstractmethod
465
+ async def get_metrics(
466
+ self, starting_date: Optional[date] = None, ending_date: Optional[date] = None
467
+ ) -> Tuple[List[Dict[str, Any]], Optional[int]]:
468
+ raise NotImplementedError
469
+
470
+ @abstractmethod
471
+ async def calculate_metrics(self) -> Optional[Any]:
472
+ raise NotImplementedError
473
+
474
+ # --- Knowledge ---
475
+ @abstractmethod
476
+ async def delete_knowledge_content(self, id: str):
477
+ """Delete a knowledge row from the database.
478
+
479
+ Args:
480
+ id (str): The ID of the knowledge row to delete.
481
+ """
482
+ raise NotImplementedError
483
+
484
+ @abstractmethod
485
+ async def get_knowledge_content(self, id: str) -> Optional[KnowledgeRow]:
486
+ """Get a knowledge row from the database.
487
+
488
+ Args:
489
+ id (str): The ID of the knowledge row to get.
490
+
491
+ Returns:
492
+ Optional[KnowledgeRow]: The knowledge row, or None if it doesn't exist.
493
+ """
494
+ raise NotImplementedError
495
+
496
+ @abstractmethod
497
+ async def get_knowledge_contents(
498
+ self,
499
+ limit: Optional[int] = None,
500
+ page: Optional[int] = None,
501
+ sort_by: Optional[str] = None,
502
+ sort_order: Optional[str] = None,
503
+ ) -> Tuple[List[KnowledgeRow], int]:
504
+ """Get all knowledge contents from the database.
505
+
506
+ Args:
507
+ limit (Optional[int]): The maximum number of knowledge contents to return.
508
+ page (Optional[int]): The page number.
509
+ sort_by (Optional[str]): The column to sort by.
510
+ sort_order (Optional[str]): The order to sort by.
511
+
512
+ Returns:
513
+ Tuple[List[KnowledgeRow], int]: The knowledge contents and total count.
514
+
515
+ Raises:
516
+ Exception: If an error occurs during retrieval.
517
+ """
518
+ raise NotImplementedError
519
+
520
+ @abstractmethod
521
+ async def upsert_knowledge_content(self, knowledge_row: KnowledgeRow):
522
+ """Upsert knowledge content in the database.
523
+
524
+ Args:
525
+ knowledge_row (KnowledgeRow): The knowledge row to upsert.
526
+
527
+ Returns:
528
+ Optional[KnowledgeRow]: The upserted knowledge row, or None if the operation fails.
529
+ """
530
+ raise NotImplementedError
531
+
532
+ # --- Evals ---
533
+ @abstractmethod
534
+ async def create_eval_run(self, eval_run: EvalRunRecord) -> Optional[EvalRunRecord]:
535
+ raise NotImplementedError
536
+
537
+ @abstractmethod
538
+ async def delete_eval_runs(self, eval_run_ids: List[str]) -> None:
539
+ raise NotImplementedError
540
+
541
+ @abstractmethod
542
+ async def get_eval_run(
543
+ self, eval_run_id: str, deserialize: Optional[bool] = True
544
+ ) -> Optional[Union[EvalRunRecord, Dict[str, Any]]]:
545
+ raise NotImplementedError
546
+
547
+ @abstractmethod
548
+ async def get_eval_runs(
549
+ self,
550
+ limit: Optional[int] = None,
551
+ page: Optional[int] = None,
552
+ sort_by: Optional[str] = None,
553
+ sort_order: Optional[str] = None,
554
+ agent_id: Optional[str] = None,
555
+ team_id: Optional[str] = None,
556
+ workflow_id: Optional[str] = None,
557
+ model_id: Optional[str] = None,
558
+ filter_type: Optional[EvalFilterType] = None,
559
+ eval_type: Optional[List[EvalType]] = None,
560
+ deserialize: Optional[bool] = True,
561
+ ) -> Union[List[EvalRunRecord], Tuple[List[Dict[str, Any]], int]]:
562
+ raise NotImplementedError
563
+
564
+ @abstractmethod
565
+ async def rename_eval_run(
566
+ self, eval_run_id: str, name: str, deserialize: Optional[bool] = True
567
+ ) -> Optional[Union[EvalRunRecord, Dict[str, Any]]]:
568
+ raise NotImplementedError
569
+
570
+ # --- Cultural Notions ---
571
+ @abstractmethod
572
+ async def clear_cultural_knowledge(self) -> None:
573
+ raise NotImplementedError
574
+
575
+ @abstractmethod
576
+ async def delete_cultural_knowledge(self, id: str) -> None:
577
+ raise NotImplementedError
578
+
579
+ @abstractmethod
580
+ async def get_cultural_knowledge(self, id: str) -> Optional[CulturalKnowledge]:
581
+ raise NotImplementedError
582
+
583
+ @abstractmethod
584
+ async def get_all_cultural_knowledge(
585
+ self,
586
+ name: Optional[str] = None,
587
+ limit: Optional[int] = None,
588
+ page: Optional[int] = None,
589
+ sort_by: Optional[str] = None,
590
+ sort_order: Optional[str] = None,
591
+ agent_id: Optional[str] = None,
592
+ team_id: Optional[str] = None,
593
+ ) -> Optional[List[CulturalKnowledge]]:
594
+ raise NotImplementedError
595
+
596
+ @abstractmethod
597
+ async def upsert_cultural_knowledge(self, cultural_knowledge: CulturalKnowledge) -> Optional[CulturalKnowledge]:
598
+ raise NotImplementedError
@@ -0,0 +1,3 @@
1
+ from agno.db.dynamo.dynamo import DynamoDb
2
+
3
+ __all__ = ["DynamoDb"]