agno 1.8.1__py3-none-any.whl → 2.0.0a1__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 (580) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +19 -27
  3. agno/agent/agent.py +2778 -4123
  4. agno/api/agent.py +9 -65
  5. agno/api/api.py +5 -46
  6. agno/api/evals.py +6 -17
  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 +9 -64
  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 +1749 -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 +1438 -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 +888 -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 +1051 -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 +1417 -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 +298 -0
  52. agno/db/postgres/__init__.py +3 -0
  53. agno/db/postgres/postgres.py +1720 -0
  54. agno/db/postgres/schemas.py +124 -0
  55. agno/db/postgres/utils.py +281 -0
  56. agno/db/redis/__init__.py +3 -0
  57. agno/db/redis/redis.py +1371 -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 +1722 -0
  67. agno/db/singlestore/utils.py +327 -0
  68. agno/db/sqlite/__init__.py +3 -0
  69. agno/db/sqlite/schemas.py +119 -0
  70. agno/db/sqlite/sqlite.py +1680 -0
  71. agno/db/sqlite/utils.py +269 -0
  72. agno/db/utils.py +88 -0
  73. agno/eval/__init__.py +14 -0
  74. agno/eval/accuracy.py +142 -43
  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 +10 -10
  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 +1515 -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 +68 -15
  115. agno/knowledge/reader/docx_reader.py +83 -0
  116. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  117. agno/knowledge/reader/gcs_reader.py +67 -0
  118. agno/{document → knowledge}/reader/json_reader.py +30 -9
  119. agno/{document → knowledge}/reader/markdown_reader.py +36 -9
  120. agno/{document → knowledge}/reader/pdf_reader.py +79 -21
  121. agno/knowledge/reader/reader_factory.py +275 -0
  122. agno/knowledge/reader/s3_reader.py +171 -0
  123. agno/{document → knowledge}/reader/text_reader.py +31 -10
  124. agno/knowledge/reader/url_reader.py +84 -0
  125. agno/knowledge/reader/web_search_reader.py +389 -0
  126. agno/{document → knowledge}/reader/website_reader.py +37 -10
  127. agno/knowledge/reader/wikipedia_reader.py +59 -0
  128. agno/knowledge/reader/youtube_reader.py +78 -0
  129. agno/knowledge/remote_content/remote_content.py +88 -0
  130. agno/{reranker → knowledge/reranker}/base.py +1 -1
  131. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  132. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  133. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  134. agno/knowledge/types.py +30 -0
  135. agno/knowledge/utils.py +169 -0
  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 +129 -82
  141. agno/models/aws/bedrock.py +107 -175
  142. agno/models/aws/claude.py +64 -18
  143. agno/models/azure/ai_foundry.py +73 -23
  144. agno/models/base.py +347 -287
  145. agno/models/cerebras/cerebras.py +84 -27
  146. agno/models/cohere/chat.py +106 -98
  147. agno/models/google/gemini.py +100 -42
  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 +38 -144
  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 +84 -46
  158. agno/models/openai/chat.py +121 -23
  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 +14 -8
  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 +393 -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 +65 -28
  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 +33 -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 +30 -0
  184. agno/os/router.py +843 -0
  185. agno/os/routers/__init__.py +3 -0
  186. agno/os/routers/evals/__init__.py +3 -0
  187. agno/os/routers/evals/evals.py +204 -0
  188. agno/os/routers/evals/schemas.py +142 -0
  189. agno/os/routers/evals/utils.py +161 -0
  190. agno/os/routers/knowledge/__init__.py +3 -0
  191. agno/os/routers/knowledge/knowledge.py +413 -0
  192. agno/os/routers/knowledge/schemas.py +118 -0
  193. agno/os/routers/memory/__init__.py +3 -0
  194. agno/os/routers/memory/memory.py +179 -0
  195. agno/os/routers/memory/schemas.py +58 -0
  196. agno/os/routers/metrics/__init__.py +3 -0
  197. agno/os/routers/metrics/metrics.py +58 -0
  198. agno/os/routers/metrics/schemas.py +47 -0
  199. agno/os/routers/session/__init__.py +3 -0
  200. agno/os/routers/session/session.py +163 -0
  201. agno/os/schema.py +892 -0
  202. agno/{app/playground → os}/settings.py +8 -15
  203. agno/os/utils.py +270 -0
  204. agno/reasoning/azure_ai_foundry.py +4 -4
  205. agno/reasoning/deepseek.py +4 -4
  206. agno/reasoning/default.py +6 -11
  207. agno/reasoning/groq.py +4 -4
  208. agno/reasoning/helpers.py +4 -6
  209. agno/reasoning/ollama.py +4 -4
  210. agno/reasoning/openai.py +4 -4
  211. agno/run/{response.py → agent.py} +144 -72
  212. agno/run/base.py +44 -58
  213. agno/run/cancel.py +83 -0
  214. agno/run/team.py +133 -77
  215. agno/run/workflow.py +537 -12
  216. agno/session/__init__.py +10 -0
  217. agno/session/agent.py +244 -0
  218. agno/session/summary.py +225 -0
  219. agno/session/team.py +262 -0
  220. agno/{storage/session/v2 → session}/workflow.py +47 -24
  221. agno/team/__init__.py +15 -16
  222. agno/team/team.py +2961 -4253
  223. agno/tools/agentql.py +14 -5
  224. agno/tools/airflow.py +9 -4
  225. agno/tools/api.py +7 -3
  226. agno/tools/apify.py +2 -46
  227. agno/tools/arxiv.py +8 -3
  228. agno/tools/aws_lambda.py +7 -5
  229. agno/tools/aws_ses.py +7 -1
  230. agno/tools/baidusearch.py +4 -1
  231. agno/tools/bitbucket.py +4 -4
  232. agno/tools/brandfetch.py +14 -11
  233. agno/tools/bravesearch.py +4 -1
  234. agno/tools/brightdata.py +42 -22
  235. agno/tools/browserbase.py +13 -4
  236. agno/tools/calcom.py +12 -10
  237. agno/tools/calculator.py +10 -27
  238. agno/tools/cartesia.py +18 -13
  239. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  240. agno/tools/confluence.py +8 -8
  241. agno/tools/crawl4ai.py +7 -1
  242. agno/tools/csv_toolkit.py +9 -8
  243. agno/tools/dalle.py +18 -11
  244. agno/tools/daytona.py +13 -16
  245. agno/tools/decorator.py +6 -3
  246. agno/tools/desi_vocal.py +16 -7
  247. agno/tools/discord.py +11 -8
  248. agno/tools/docker.py +30 -42
  249. agno/tools/duckdb.py +34 -53
  250. agno/tools/duckduckgo.py +8 -7
  251. agno/tools/e2b.py +61 -61
  252. agno/tools/eleven_labs.py +35 -28
  253. agno/tools/email.py +4 -1
  254. agno/tools/evm.py +7 -1
  255. agno/tools/exa.py +19 -14
  256. agno/tools/fal.py +29 -29
  257. agno/tools/file.py +9 -8
  258. agno/tools/financial_datasets.py +25 -44
  259. agno/tools/firecrawl.py +22 -22
  260. agno/tools/function.py +68 -17
  261. agno/tools/giphy.py +22 -10
  262. agno/tools/github.py +48 -126
  263. agno/tools/gmail.py +45 -61
  264. agno/tools/google_bigquery.py +7 -6
  265. agno/tools/google_maps.py +11 -26
  266. agno/tools/googlesearch.py +7 -2
  267. agno/tools/googlesheets.py +21 -17
  268. agno/tools/hackernews.py +9 -5
  269. agno/tools/jina.py +5 -4
  270. agno/tools/jira.py +18 -9
  271. agno/tools/knowledge.py +31 -32
  272. agno/tools/linear.py +18 -33
  273. agno/tools/linkup.py +5 -1
  274. agno/tools/local_file_system.py +8 -5
  275. agno/tools/lumalab.py +31 -19
  276. agno/tools/mem0.py +18 -12
  277. agno/tools/memori.py +14 -10
  278. agno/tools/mlx_transcribe.py +3 -2
  279. agno/tools/models/azure_openai.py +32 -14
  280. agno/tools/models/gemini.py +58 -31
  281. agno/tools/models/groq.py +29 -20
  282. agno/tools/models/nebius.py +27 -11
  283. agno/tools/models_labs.py +39 -15
  284. agno/tools/moviepy_video.py +7 -6
  285. agno/tools/neo4j.py +10 -8
  286. agno/tools/newspaper.py +7 -2
  287. agno/tools/newspaper4k.py +8 -3
  288. agno/tools/openai.py +57 -26
  289. agno/tools/openbb.py +12 -11
  290. agno/tools/opencv.py +62 -46
  291. agno/tools/openweather.py +14 -12
  292. agno/tools/pandas.py +11 -3
  293. agno/tools/postgres.py +4 -12
  294. agno/tools/pubmed.py +4 -1
  295. agno/tools/python.py +9 -22
  296. agno/tools/reasoning.py +35 -27
  297. agno/tools/reddit.py +11 -26
  298. agno/tools/replicate.py +54 -41
  299. agno/tools/resend.py +4 -1
  300. agno/tools/scrapegraph.py +15 -14
  301. agno/tools/searxng.py +10 -23
  302. agno/tools/serpapi.py +6 -3
  303. agno/tools/serper.py +13 -4
  304. agno/tools/shell.py +9 -2
  305. agno/tools/slack.py +12 -11
  306. agno/tools/sleep.py +3 -2
  307. agno/tools/spider.py +24 -4
  308. agno/tools/sql.py +7 -6
  309. agno/tools/tavily.py +6 -4
  310. agno/tools/telegram.py +12 -4
  311. agno/tools/todoist.py +11 -31
  312. agno/tools/toolkit.py +1 -1
  313. agno/tools/trafilatura.py +22 -6
  314. agno/tools/trello.py +9 -22
  315. agno/tools/twilio.py +10 -3
  316. agno/tools/user_control_flow.py +6 -1
  317. agno/tools/valyu.py +34 -5
  318. agno/tools/visualization.py +19 -28
  319. agno/tools/webbrowser.py +4 -3
  320. agno/tools/webex.py +11 -7
  321. agno/tools/website.py +15 -46
  322. agno/tools/webtools.py +12 -4
  323. agno/tools/whatsapp.py +5 -9
  324. agno/tools/wikipedia.py +20 -13
  325. agno/tools/x.py +14 -13
  326. agno/tools/yfinance.py +13 -40
  327. agno/tools/youtube.py +26 -20
  328. agno/tools/zendesk.py +7 -2
  329. agno/tools/zep.py +10 -7
  330. agno/tools/zoom.py +10 -9
  331. agno/utils/common.py +1 -19
  332. agno/utils/events.py +95 -118
  333. agno/utils/knowledge.py +29 -0
  334. agno/utils/log.py +2 -2
  335. agno/utils/mcp.py +11 -5
  336. agno/utils/media.py +39 -0
  337. agno/utils/message.py +12 -1
  338. agno/utils/models/claude.py +6 -4
  339. agno/utils/models/mistral.py +8 -7
  340. agno/utils/models/schema_utils.py +3 -3
  341. agno/utils/pprint.py +33 -32
  342. agno/utils/print_response/agent.py +779 -0
  343. agno/utils/print_response/team.py +1565 -0
  344. agno/utils/print_response/workflow.py +1451 -0
  345. agno/utils/prompts.py +14 -14
  346. agno/utils/reasoning.py +87 -0
  347. agno/utils/response.py +42 -42
  348. agno/utils/string.py +8 -22
  349. agno/utils/team.py +50 -0
  350. agno/utils/timer.py +2 -2
  351. agno/vectordb/base.py +33 -21
  352. agno/vectordb/cassandra/cassandra.py +287 -23
  353. agno/vectordb/chroma/chromadb.py +482 -59
  354. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  355. agno/vectordb/couchbase/couchbase.py +309 -29
  356. agno/vectordb/lancedb/lance_db.py +360 -21
  357. agno/vectordb/langchaindb/__init__.py +5 -0
  358. agno/vectordb/langchaindb/langchaindb.py +145 -0
  359. agno/vectordb/lightrag/__init__.py +5 -0
  360. agno/vectordb/lightrag/lightrag.py +374 -0
  361. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  362. agno/vectordb/milvus/milvus.py +242 -32
  363. agno/vectordb/mongodb/mongodb.py +200 -24
  364. agno/vectordb/pgvector/pgvector.py +319 -37
  365. agno/vectordb/pineconedb/pineconedb.py +221 -27
  366. agno/vectordb/qdrant/qdrant.py +334 -14
  367. agno/vectordb/singlestore/singlestore.py +286 -29
  368. agno/vectordb/surrealdb/surrealdb.py +187 -7
  369. agno/vectordb/upstashdb/upstashdb.py +342 -26
  370. agno/vectordb/weaviate/weaviate.py +227 -165
  371. agno/workflow/__init__.py +17 -13
  372. agno/workflow/{v2/condition.py → condition.py} +135 -32
  373. agno/workflow/{v2/loop.py → loop.py} +115 -28
  374. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  375. agno/workflow/{v2/router.py → router.py} +133 -32
  376. agno/workflow/{v2/step.py → step.py} +200 -42
  377. agno/workflow/{v2/steps.py → steps.py} +147 -66
  378. agno/workflow/types.py +482 -0
  379. agno/workflow/workflow.py +2394 -696
  380. agno-2.0.0a1.dist-info/METADATA +355 -0
  381. agno-2.0.0a1.dist-info/RECORD +514 -0
  382. agno/agent/metrics.py +0 -107
  383. agno/api/app.py +0 -35
  384. agno/api/playground.py +0 -92
  385. agno/api/schemas/app.py +0 -12
  386. agno/api/schemas/playground.py +0 -22
  387. agno/api/schemas/user.py +0 -35
  388. agno/api/schemas/workspace.py +0 -46
  389. agno/api/user.py +0 -160
  390. agno/api/workflows.py +0 -33
  391. agno/api/workspace.py +0 -175
  392. agno/app/agui/__init__.py +0 -3
  393. agno/app/agui/app.py +0 -17
  394. agno/app/agui/sync_router.py +0 -120
  395. agno/app/base.py +0 -186
  396. agno/app/discord/__init__.py +0 -3
  397. agno/app/fastapi/__init__.py +0 -3
  398. agno/app/fastapi/app.py +0 -107
  399. agno/app/fastapi/async_router.py +0 -457
  400. agno/app/fastapi/sync_router.py +0 -448
  401. agno/app/playground/app.py +0 -228
  402. agno/app/playground/async_router.py +0 -1050
  403. agno/app/playground/deploy.py +0 -249
  404. agno/app/playground/operator.py +0 -183
  405. agno/app/playground/schemas.py +0 -220
  406. agno/app/playground/serve.py +0 -55
  407. agno/app/playground/sync_router.py +0 -1042
  408. agno/app/playground/utils.py +0 -46
  409. agno/app/settings.py +0 -15
  410. agno/app/slack/__init__.py +0 -3
  411. agno/app/slack/app.py +0 -19
  412. agno/app/slack/sync_router.py +0 -92
  413. agno/app/utils.py +0 -54
  414. agno/app/whatsapp/__init__.py +0 -3
  415. agno/app/whatsapp/app.py +0 -15
  416. agno/app/whatsapp/sync_router.py +0 -197
  417. agno/cli/auth_server.py +0 -249
  418. agno/cli/config.py +0 -274
  419. agno/cli/console.py +0 -88
  420. agno/cli/credentials.py +0 -23
  421. agno/cli/entrypoint.py +0 -571
  422. agno/cli/operator.py +0 -357
  423. agno/cli/settings.py +0 -96
  424. agno/cli/ws/ws_cli.py +0 -817
  425. agno/constants.py +0 -13
  426. agno/document/__init__.py +0 -5
  427. agno/document/chunking/semantic.py +0 -45
  428. agno/document/chunking/strategy.py +0 -31
  429. agno/document/reader/__init__.py +0 -5
  430. agno/document/reader/base.py +0 -47
  431. agno/document/reader/docx_reader.py +0 -60
  432. agno/document/reader/gcs/pdf_reader.py +0 -44
  433. agno/document/reader/s3/pdf_reader.py +0 -59
  434. agno/document/reader/s3/text_reader.py +0 -63
  435. agno/document/reader/url_reader.py +0 -59
  436. agno/document/reader/youtube_reader.py +0 -58
  437. agno/embedder/__init__.py +0 -5
  438. agno/embedder/langdb.py +0 -80
  439. agno/embedder/mistral.py +0 -82
  440. agno/embedder/openai.py +0 -78
  441. agno/file/__init__.py +0 -5
  442. agno/file/file.py +0 -16
  443. agno/file/local/csv.py +0 -32
  444. agno/file/local/txt.py +0 -19
  445. agno/infra/app.py +0 -240
  446. agno/infra/base.py +0 -144
  447. agno/infra/context.py +0 -20
  448. agno/infra/db_app.py +0 -52
  449. agno/infra/resource.py +0 -205
  450. agno/infra/resources.py +0 -55
  451. agno/knowledge/agent.py +0 -702
  452. agno/knowledge/arxiv.py +0 -33
  453. agno/knowledge/combined.py +0 -36
  454. agno/knowledge/csv.py +0 -144
  455. agno/knowledge/csv_url.py +0 -124
  456. agno/knowledge/document.py +0 -223
  457. agno/knowledge/docx.py +0 -137
  458. agno/knowledge/firecrawl.py +0 -34
  459. agno/knowledge/gcs/__init__.py +0 -0
  460. agno/knowledge/gcs/base.py +0 -39
  461. agno/knowledge/gcs/pdf.py +0 -125
  462. agno/knowledge/json.py +0 -137
  463. agno/knowledge/langchain.py +0 -71
  464. agno/knowledge/light_rag.py +0 -273
  465. agno/knowledge/llamaindex.py +0 -66
  466. agno/knowledge/markdown.py +0 -154
  467. agno/knowledge/pdf.py +0 -164
  468. agno/knowledge/pdf_bytes.py +0 -42
  469. agno/knowledge/pdf_url.py +0 -148
  470. agno/knowledge/s3/__init__.py +0 -0
  471. agno/knowledge/s3/base.py +0 -64
  472. agno/knowledge/s3/pdf.py +0 -33
  473. agno/knowledge/s3/text.py +0 -34
  474. agno/knowledge/text.py +0 -141
  475. agno/knowledge/url.py +0 -46
  476. agno/knowledge/website.py +0 -179
  477. agno/knowledge/wikipedia.py +0 -32
  478. agno/knowledge/youtube.py +0 -35
  479. agno/memory/agent.py +0 -423
  480. agno/memory/classifier.py +0 -104
  481. agno/memory/db/__init__.py +0 -5
  482. agno/memory/db/base.py +0 -42
  483. agno/memory/db/mongodb.py +0 -189
  484. agno/memory/db/postgres.py +0 -203
  485. agno/memory/db/sqlite.py +0 -193
  486. agno/memory/memory.py +0 -22
  487. agno/memory/row.py +0 -36
  488. agno/memory/summarizer.py +0 -201
  489. agno/memory/summary.py +0 -19
  490. agno/memory/team.py +0 -415
  491. agno/memory/v2/__init__.py +0 -2
  492. agno/memory/v2/db/__init__.py +0 -1
  493. agno/memory/v2/db/base.py +0 -42
  494. agno/memory/v2/db/firestore.py +0 -339
  495. agno/memory/v2/db/mongodb.py +0 -196
  496. agno/memory/v2/db/postgres.py +0 -214
  497. agno/memory/v2/db/redis.py +0 -187
  498. agno/memory/v2/db/schema.py +0 -54
  499. agno/memory/v2/db/sqlite.py +0 -209
  500. agno/memory/v2/manager.py +0 -437
  501. agno/memory/v2/memory.py +0 -1097
  502. agno/memory/v2/schema.py +0 -55
  503. agno/memory/v2/summarizer.py +0 -215
  504. agno/memory/workflow.py +0 -38
  505. agno/models/ollama/tools.py +0 -430
  506. agno/models/qwen/__init__.py +0 -5
  507. agno/playground/__init__.py +0 -10
  508. agno/playground/deploy.py +0 -3
  509. agno/playground/playground.py +0 -3
  510. agno/playground/serve.py +0 -3
  511. agno/playground/settings.py +0 -3
  512. agno/reranker/__init__.py +0 -0
  513. agno/run/v2/__init__.py +0 -0
  514. agno/run/v2/workflow.py +0 -567
  515. agno/storage/__init__.py +0 -0
  516. agno/storage/agent/__init__.py +0 -0
  517. agno/storage/agent/dynamodb.py +0 -1
  518. agno/storage/agent/json.py +0 -1
  519. agno/storage/agent/mongodb.py +0 -1
  520. agno/storage/agent/postgres.py +0 -1
  521. agno/storage/agent/singlestore.py +0 -1
  522. agno/storage/agent/sqlite.py +0 -1
  523. agno/storage/agent/yaml.py +0 -1
  524. agno/storage/base.py +0 -60
  525. agno/storage/dynamodb.py +0 -673
  526. agno/storage/firestore.py +0 -297
  527. agno/storage/gcs_json.py +0 -261
  528. agno/storage/in_memory.py +0 -234
  529. agno/storage/json.py +0 -237
  530. agno/storage/mongodb.py +0 -328
  531. agno/storage/mysql.py +0 -685
  532. agno/storage/postgres.py +0 -682
  533. agno/storage/redis.py +0 -336
  534. agno/storage/session/__init__.py +0 -16
  535. agno/storage/session/agent.py +0 -64
  536. agno/storage/session/team.py +0 -63
  537. agno/storage/session/v2/__init__.py +0 -5
  538. agno/storage/session/workflow.py +0 -61
  539. agno/storage/singlestore.py +0 -606
  540. agno/storage/sqlite.py +0 -646
  541. agno/storage/workflow/__init__.py +0 -0
  542. agno/storage/workflow/mongodb.py +0 -1
  543. agno/storage/workflow/postgres.py +0 -1
  544. agno/storage/workflow/sqlite.py +0 -1
  545. agno/storage/yaml.py +0 -241
  546. agno/tools/thinking.py +0 -73
  547. agno/utils/defaults.py +0 -57
  548. agno/utils/filesystem.py +0 -39
  549. agno/utils/git.py +0 -52
  550. agno/utils/json_io.py +0 -30
  551. agno/utils/load_env.py +0 -19
  552. agno/utils/py_io.py +0 -19
  553. agno/utils/pyproject.py +0 -18
  554. agno/utils/resource_filter.py +0 -31
  555. agno/workflow/v2/__init__.py +0 -21
  556. agno/workflow/v2/types.py +0 -357
  557. agno/workflow/v2/workflow.py +0 -3312
  558. agno/workspace/__init__.py +0 -0
  559. agno/workspace/config.py +0 -325
  560. agno/workspace/enums.py +0 -6
  561. agno/workspace/helpers.py +0 -52
  562. agno/workspace/operator.py +0 -757
  563. agno/workspace/settings.py +0 -158
  564. agno-1.8.1.dist-info/METADATA +0 -982
  565. agno-1.8.1.dist-info/RECORD +0 -566
  566. agno-1.8.1.dist-info/entry_points.txt +0 -3
  567. /agno/{app → db/migrations}/__init__.py +0 -0
  568. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  569. /agno/{cli → integrations}/__init__.py +0 -0
  570. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  571. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  572. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  573. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  574. /agno/{app → os/interfaces}/slack/security.py +0 -0
  575. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  576. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  577. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  578. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/WHEEL +0 -0
  579. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/licenses/LICENSE +0 -0
  580. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/top_level.txt +0 -0
agno/memory/db/sqlite.py DELETED
@@ -1,193 +0,0 @@
1
- from pathlib import Path
2
- from typing import List, Optional
3
-
4
- try:
5
- from sqlalchemy import (
6
- Column,
7
- DateTime,
8
- Engine,
9
- MetaData,
10
- String,
11
- Table,
12
- create_engine,
13
- delete,
14
- inspect,
15
- select,
16
- text,
17
- )
18
- from sqlalchemy.exc import SQLAlchemyError
19
- from sqlalchemy.orm import scoped_session, sessionmaker
20
- except ImportError:
21
- raise ImportError("`sqlalchemy` not installed. Please install it with `pip install sqlalchemy`")
22
-
23
- from agno.memory.db import MemoryDb
24
- from agno.memory.row import MemoryRow
25
- from agno.utils.log import log_debug, log_info, logger
26
-
27
-
28
- class SqliteMemoryDb(MemoryDb):
29
- def __init__(
30
- self,
31
- table_name: str = "memory",
32
- db_url: Optional[str] = None,
33
- db_file: Optional[str] = None,
34
- db_engine: Optional[Engine] = None,
35
- ):
36
- """
37
- This class provides a memory store backed by a SQLite table.
38
-
39
- The following order is used to determine the database connection:
40
- 1. Use the db_engine if provided
41
- 2. Use the db_url
42
- 3. Use the db_file
43
- 4. Create a new in-memory database
44
-
45
- Args:
46
- table_name: The name of the table to store Agent sessions.
47
- db_url: The database URL to connect to.
48
- db_file: The database file to connect to.
49
- db_engine: The database engine to use.
50
- """
51
- _engine: Optional[Engine] = db_engine
52
- if _engine is None and db_url is not None:
53
- _engine = create_engine(db_url)
54
- elif _engine is None and db_file is not None:
55
- # Use the db_file to create the engine
56
- db_path = Path(db_file).resolve()
57
- # Ensure the directory exists
58
- db_path.parent.mkdir(parents=True, exist_ok=True)
59
- _engine = create_engine(f"sqlite:///{db_path}")
60
- else:
61
- _engine = create_engine("sqlite://")
62
-
63
- if _engine is None:
64
- raise ValueError("Must provide either db_url, db_file or db_engine")
65
-
66
- # Database attributes
67
- self.table_name: str = table_name
68
- self.db_url: Optional[str] = db_url
69
- self.db_engine: Engine = _engine
70
- self.metadata: MetaData = MetaData()
71
- self.inspector = inspect(self.db_engine)
72
-
73
- # Database session
74
- self.Session = scoped_session(sessionmaker(bind=self.db_engine))
75
- # Database table for memories
76
- self.table: Table = self.get_table()
77
-
78
- def get_table(self) -> Table:
79
- return Table(
80
- self.table_name,
81
- self.metadata,
82
- Column("id", String, primary_key=True),
83
- Column("user_id", String),
84
- Column("memory", String),
85
- Column("created_at", DateTime, server_default=text("CURRENT_TIMESTAMP")),
86
- Column(
87
- "updated_at", DateTime, server_default=text("CURRENT_TIMESTAMP"), onupdate=text("CURRENT_TIMESTAMP")
88
- ),
89
- extend_existing=True,
90
- )
91
-
92
- def create(self) -> None:
93
- if not self.table_exists():
94
- try:
95
- log_debug(f"Creating table: {self.table_name}")
96
- self.table.create(self.db_engine, checkfirst=True)
97
- except Exception as e:
98
- logger.error(f"Error creating table '{self.table_name}': {e}")
99
- raise
100
-
101
- def memory_exists(self, memory: MemoryRow) -> bool:
102
- with self.Session() as session:
103
- stmt = select(self.table.c.id).where(self.table.c.id == memory.id)
104
- result = session.execute(stmt).first()
105
- return result is not None
106
-
107
- def read_memories(
108
- self, user_id: Optional[str] = None, limit: Optional[int] = None, sort: Optional[str] = None
109
- ) -> List[MemoryRow]:
110
- memories: List[MemoryRow] = []
111
- try:
112
- with self.Session() as session:
113
- stmt = select(self.table)
114
- if user_id is not None:
115
- stmt = stmt.where(self.table.c.user_id == user_id)
116
-
117
- if sort == "asc":
118
- stmt = stmt.order_by(self.table.c.created_at.asc())
119
- else:
120
- stmt = stmt.order_by(self.table.c.created_at.desc())
121
-
122
- if limit is not None:
123
- stmt = stmt.limit(limit)
124
-
125
- result = session.execute(stmt)
126
- for row in result:
127
- memories.append(MemoryRow(id=row.id, user_id=row.user_id, memory=eval(row.memory)))
128
- except SQLAlchemyError as e:
129
- log_debug(f"Exception reading from table: {e}")
130
- log_debug(f"Table does not exist: {self.table_name}")
131
- log_debug("Creating table for future transactions")
132
- self.create()
133
- return memories
134
-
135
- def upsert_memory(self, memory: MemoryRow, create_and_retry: bool = True) -> None:
136
- try:
137
- with self.Session() as session:
138
- # Check if the memory already exists
139
- existing = session.execute(select(self.table).where(self.table.c.id == memory.id)).first()
140
-
141
- if existing:
142
- # Update existing memory
143
- stmt = (
144
- self.table.update()
145
- .where(self.table.c.id == memory.id)
146
- .values(user_id=memory.user_id, memory=str(memory.memory), updated_at=text("CURRENT_TIMESTAMP"))
147
- )
148
- else:
149
- # Insert new memory
150
- stmt = self.table.insert().values(id=memory.id, user_id=memory.user_id, memory=str(memory.memory)) # type: ignore
151
-
152
- session.execute(stmt)
153
- session.commit()
154
- except SQLAlchemyError as e:
155
- logger.error(f"Exception upserting into table: {e}")
156
- if not self.table_exists():
157
- log_info(f"Table does not exist: {self.table_name}")
158
- log_info("Creating table for future transactions")
159
- self.create()
160
- if create_and_retry:
161
- return self.upsert_memory(memory, create_and_retry=False)
162
- else:
163
- raise
164
-
165
- def delete_memory(self, id: str) -> None:
166
- with self.Session() as session:
167
- stmt = delete(self.table).where(self.table.c.id == id)
168
- session.execute(stmt)
169
- session.commit()
170
-
171
- def drop_table(self) -> None:
172
- if self.table_exists():
173
- log_debug(f"Deleting table: {self.table_name}")
174
- self.table.drop(self.db_engine)
175
-
176
- def table_exists(self) -> bool:
177
- log_debug(f"Checking if table exists: {self.table.name}")
178
- try:
179
- return self.inspector.has_table(self.table.name)
180
- except Exception as e:
181
- logger.error(e)
182
- return False
183
-
184
- def clear(self) -> bool:
185
- with self.Session() as session:
186
- stmt = delete(self.table)
187
- session.execute(stmt)
188
- session.commit()
189
- return True
190
-
191
- def __del__(self):
192
- # self.Session.remove()
193
- pass
agno/memory/memory.py DELETED
@@ -1,22 +0,0 @@
1
- from enum import Enum
2
- from typing import Any, Dict, Optional
3
-
4
- from pydantic import BaseModel
5
-
6
-
7
- class MemoryRetrieval(str, Enum):
8
- last_n = "last_n"
9
- first_n = "first_n"
10
- semantic = "semantic"
11
-
12
-
13
- class Memory(BaseModel):
14
- """Model for Agent Memories"""
15
-
16
- memory: str
17
- id: Optional[str] = None
18
- topic: Optional[str] = None
19
- input: Optional[str] = None
20
-
21
- def to_dict(self) -> Dict[str, Any]:
22
- return self.model_dump(exclude_none=True)
agno/memory/row.py DELETED
@@ -1,36 +0,0 @@
1
- import json
2
- from datetime import datetime
3
- from hashlib import md5
4
- from typing import Any, Dict, Optional
5
-
6
- from pydantic import BaseModel, ConfigDict, model_validator
7
-
8
-
9
- class MemoryRow(BaseModel):
10
- """Memory Row that is stored in the database"""
11
-
12
- memory: Dict[str, Any]
13
- user_id: Optional[str] = None
14
- created_at: Optional[datetime] = None
15
- updated_at: Optional[datetime] = None
16
- # id for this memory, auto-generated from the memory
17
- id: Optional[str] = None
18
-
19
- model_config = ConfigDict(from_attributes=True, arbitrary_types_allowed=True)
20
-
21
- def serializable_dict(self) -> Dict[str, Any]:
22
- _dict = self.model_dump(exclude={"created_at", "updated_at"})
23
- _dict["created_at"] = self.created_at.isoformat() if self.created_at else None
24
- _dict["updated_at"] = self.updated_at.isoformat() if self.updated_at else None
25
- return _dict
26
-
27
- def to_dict(self) -> Dict[str, Any]:
28
- return self.serializable_dict()
29
-
30
- @model_validator(mode="after")
31
- def generate_id(self) -> "MemoryRow":
32
- if self.id is None:
33
- memory_str = json.dumps(self.memory, sort_keys=True)
34
- cleaned_memory = memory_str.replace(" ", "").replace("\n", "").replace("\t", "")
35
- self.id = md5(cleaned_memory.encode()).hexdigest()
36
- return self
agno/memory/summarizer.py DELETED
@@ -1,201 +0,0 @@
1
- import json
2
- from textwrap import dedent
3
- from typing import Any, Dict, List, Optional, Tuple, cast
4
-
5
- from pydantic import BaseModel, ValidationError
6
-
7
- from agno.memory.summary import SessionSummary
8
- from agno.models.base import Model
9
- from agno.models.message import Message
10
- from agno.utils.log import log_debug, log_info, logger
11
-
12
-
13
- class MemorySummarizer(BaseModel):
14
- model: Optional[Model] = None
15
- use_structured_outputs: bool = False
16
-
17
- def update_model(self) -> None:
18
- if self.model is None:
19
- try:
20
- from agno.models.openai import OpenAIChat
21
- except ModuleNotFoundError as e:
22
- logger.exception(e)
23
- logger.error(
24
- "Agno uses `openai` as the default model provider. Please provide a `model` or install `openai`."
25
- )
26
- exit(1)
27
- self.model = OpenAIChat(id="gpt-4o")
28
-
29
- def get_system_message(self, messages_for_summarization: List[Dict[str, str]]) -> Message:
30
- # -*- Return a system message for summarization
31
- system_prompt = dedent("""\
32
- Analyze the following conversation between a user and an assistant, and extract the following details:
33
- - Summary (str): Provide a concise summary of the session, focusing on important information that would be helpful for future interactions.
34
- - Topics (Optional[List[str]]): List the topics discussed in the session.
35
- Please ignore any frivolous information.
36
-
37
- Conversation:
38
- """)
39
- conversation = []
40
- for message_pair in messages_for_summarization:
41
- conversation.append(f"User: {message_pair['user']}")
42
- if "assistant" in message_pair:
43
- conversation.append(f"Assistant: {message_pair['assistant']}")
44
- elif "model" in message_pair:
45
- conversation.append(f"Assistant: {message_pair['model']}")
46
-
47
- system_prompt += "\n".join(conversation)
48
-
49
- if not self.use_structured_outputs:
50
- system_prompt += "\n\nProvide your output as a JSON containing the following fields:"
51
- json_schema = SessionSummary.model_json_schema()
52
- response_model_properties = {}
53
- json_schema_properties = json_schema.get("properties")
54
- if json_schema_properties is not None:
55
- for field_name, field_properties in json_schema_properties.items():
56
- formatted_field_properties = {
57
- prop_name: prop_value
58
- for prop_name, prop_value in field_properties.items()
59
- if prop_name != "title"
60
- }
61
- response_model_properties[field_name] = formatted_field_properties
62
-
63
- if len(response_model_properties) > 0:
64
- system_prompt += "\n<json_fields>"
65
- system_prompt += f"\n{json.dumps([key for key in response_model_properties.keys() if key != '$defs'])}"
66
- system_prompt += "\n</json_fields>"
67
- system_prompt += "\nHere are the properties for each field:"
68
- system_prompt += "\n<json_field_properties>"
69
- system_prompt += f"\n{json.dumps(response_model_properties, indent=2)}"
70
- system_prompt += "\n</json_field_properties>"
71
-
72
- system_prompt += "\nStart your response with `{` and end it with `}`."
73
- system_prompt += "\nYour output will be passed to json.loads() to convert it to a Python object."
74
- system_prompt += "\nMake sure it only contains valid JSON."
75
- return Message(role="system", content=system_prompt)
76
-
77
- def run(
78
- self,
79
- message_pairs: List[Tuple[Message, Message]],
80
- **kwargs: Any,
81
- ) -> Optional[SessionSummary]:
82
- log_debug("*********** MemorySummarizer Start ***********")
83
-
84
- if message_pairs is None or len(message_pairs) == 0:
85
- log_info("No message pairs provided for summarization.")
86
- return None
87
-
88
- # Update the Model (set defaults, add logit etc.)
89
- self.update_model()
90
-
91
- # Set response_format if it is not set on the Model
92
- if self.use_structured_outputs:
93
- response_format: Any = SessionSummary
94
- else:
95
- response_format = {"type": "json_object"}
96
-
97
- # Convert the message pairs to a list of dictionaries
98
- messages_for_summarization: List[Dict[str, str]] = []
99
- for message_pair in message_pairs:
100
- user_message, assistant_message = message_pair
101
- messages_for_summarization.append(
102
- {
103
- user_message.role: user_message.get_content_string(),
104
- assistant_message.role: assistant_message.get_content_string(),
105
- }
106
- )
107
-
108
- # Prepare the List of messages to send to the Model
109
- messages_for_model: List[Message] = [
110
- self.get_system_message(messages_for_summarization),
111
- # For models that require a non-system message
112
- Message(role="user", content="Provide the summary of the conversation."),
113
- ]
114
-
115
- # Generate a response from the Model (includes running function calls)
116
- self.model = cast(Model, self.model)
117
- response = self.model.response(messages=messages_for_model, response_format=response_format)
118
- log_debug("*********** MemorySummarizer End ***********")
119
-
120
- # If the model natively supports structured outputs, the parsed value is already in the structured format
121
- if self.use_structured_outputs and response.parsed is not None and isinstance(response.parsed, SessionSummary):
122
- return response.parsed
123
-
124
- # Otherwise convert the response to the structured format
125
- if isinstance(response.content, str):
126
- try:
127
- session_summary = None
128
- try:
129
- session_summary = SessionSummary.model_validate_json(response.content)
130
- except ValidationError:
131
- # Check if response starts with ```json
132
- if response.content.startswith("```json"):
133
- response.content = response.content.replace("```json\n", "").replace("\n```", "")
134
- try:
135
- session_summary = SessionSummary.model_validate_json(response.content)
136
- except ValidationError as exc:
137
- logger.warning(f"Failed to validate session_summary response: {exc}")
138
- return session_summary
139
- except Exception as e:
140
- logger.warning(f"Failed to convert response to session_summary: {e}")
141
- return None
142
-
143
- async def arun(
144
- self,
145
- message_pairs: List[Tuple[Message, Message]],
146
- **kwargs: Any,
147
- ) -> Optional[SessionSummary]:
148
- log_debug("*********** Async MemorySummarizer Start ***********")
149
-
150
- if message_pairs is None or len(message_pairs) == 0:
151
- log_info("No message pairs provided for summarization.")
152
- return None
153
-
154
- # Update the Model (set defaults, add logit etc.)
155
- self.update_model()
156
-
157
- # Convert the message pairs to a list of dictionaries
158
- messages_for_summarization: List[Dict[str, str]] = []
159
- for message_pair in message_pairs:
160
- user_message, assistant_message = message_pair
161
- messages_for_summarization.append(
162
- {
163
- user_message.role: user_message.get_content_string(),
164
- assistant_message.role: assistant_message.get_content_string(),
165
- }
166
- )
167
-
168
- # Prepare the List of messages to send to the Model
169
- messages_for_model: List[Message] = [
170
- self.get_system_message(messages_for_summarization),
171
- # For models that require a non-system message
172
- Message(role="user", content="Provide the summary of the conversation."),
173
- ]
174
-
175
- # Generate a response from the Model (includes running function calls)
176
- self.model = cast(Model, self.model)
177
- response = await self.model.aresponse(messages=messages_for_model)
178
- log_debug("*********** Async MemorySummarizer End ***********")
179
-
180
- # If the model natively supports structured outputs, the parsed value is already in the structured format
181
- if self.use_structured_outputs and response.parsed is not None and isinstance(response.parsed, SessionSummary):
182
- return response.parsed
183
-
184
- # Otherwise convert the response to the structured format
185
- if isinstance(response.content, str):
186
- try:
187
- session_summary = None
188
- try:
189
- session_summary = SessionSummary.model_validate_json(response.content)
190
- except ValidationError:
191
- # Check if response starts with ```json
192
- if response.content.startswith("```json"):
193
- response.content = response.content.replace("```json\n", "").replace("\n```", "")
194
- try:
195
- session_summary = SessionSummary.model_validate_json(response.content)
196
- except ValidationError as exc:
197
- logger.warning(f"Failed to validate session_summary response: {exc}")
198
- return session_summary
199
- except Exception as e:
200
- logger.warning(f"Failed to convert response to session_summary: {e}")
201
- return None
agno/memory/summary.py DELETED
@@ -1,19 +0,0 @@
1
- from typing import Any, Dict, List, Optional
2
-
3
- from pydantic import BaseModel, Field
4
-
5
-
6
- class SessionSummary(BaseModel):
7
- """Model for Session Summary."""
8
-
9
- summary: str = Field(
10
- ...,
11
- description="Summary of the session. Be concise and focus on only important information. Do not make anything up.",
12
- )
13
- topics: Optional[List[str]] = Field(None, description="Topics discussed in the session.")
14
-
15
- def to_dict(self) -> Dict[str, Any]:
16
- return self.model_dump(exclude_none=True)
17
-
18
- def to_json(self) -> str:
19
- return self.model_dump_json(exclude_none=True, indent=2)