agno 1.8.2__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 (589) hide show
  1. agno/agent/__init__.py +19 -27
  2. agno/agent/agent.py +3143 -4170
  3. agno/api/agent.py +11 -67
  4. agno/api/api.py +5 -46
  5. agno/api/evals.py +8 -19
  6. agno/api/os.py +17 -0
  7. agno/api/routes.py +6 -41
  8. agno/api/schemas/__init__.py +9 -0
  9. agno/api/schemas/agent.py +5 -21
  10. agno/api/schemas/evals.py +7 -16
  11. agno/api/schemas/os.py +14 -0
  12. agno/api/schemas/team.py +5 -21
  13. agno/api/schemas/utils.py +21 -0
  14. agno/api/schemas/workflows.py +11 -7
  15. agno/api/settings.py +53 -0
  16. agno/api/team.py +11 -66
  17. agno/api/workflow.py +28 -0
  18. agno/cloud/aws/base.py +214 -0
  19. agno/cloud/aws/s3/__init__.py +2 -0
  20. agno/cloud/aws/s3/api_client.py +43 -0
  21. agno/cloud/aws/s3/bucket.py +195 -0
  22. agno/cloud/aws/s3/object.py +57 -0
  23. agno/db/__init__.py +24 -0
  24. agno/db/base.py +245 -0
  25. agno/db/dynamo/__init__.py +3 -0
  26. agno/db/dynamo/dynamo.py +1743 -0
  27. agno/db/dynamo/schemas.py +278 -0
  28. agno/db/dynamo/utils.py +684 -0
  29. agno/db/firestore/__init__.py +3 -0
  30. agno/db/firestore/firestore.py +1432 -0
  31. agno/db/firestore/schemas.py +130 -0
  32. agno/db/firestore/utils.py +278 -0
  33. agno/db/gcs_json/__init__.py +3 -0
  34. agno/db/gcs_json/gcs_json_db.py +1001 -0
  35. agno/db/gcs_json/utils.py +194 -0
  36. agno/db/in_memory/__init__.py +3 -0
  37. agno/db/in_memory/in_memory_db.py +882 -0
  38. agno/db/in_memory/utils.py +172 -0
  39. agno/db/json/__init__.py +3 -0
  40. agno/db/json/json_db.py +1045 -0
  41. agno/db/json/utils.py +196 -0
  42. agno/db/migrations/v1_to_v2.py +162 -0
  43. agno/db/mongo/__init__.py +3 -0
  44. agno/db/mongo/mongo.py +1416 -0
  45. agno/db/mongo/schemas.py +77 -0
  46. agno/db/mongo/utils.py +204 -0
  47. agno/db/mysql/__init__.py +3 -0
  48. agno/db/mysql/mysql.py +1719 -0
  49. agno/db/mysql/schemas.py +124 -0
  50. agno/db/mysql/utils.py +297 -0
  51. agno/db/postgres/__init__.py +3 -0
  52. agno/db/postgres/postgres.py +1710 -0
  53. agno/db/postgres/schemas.py +124 -0
  54. agno/db/postgres/utils.py +280 -0
  55. agno/db/redis/__init__.py +3 -0
  56. agno/db/redis/redis.py +1367 -0
  57. agno/db/redis/schemas.py +109 -0
  58. agno/db/redis/utils.py +288 -0
  59. agno/db/schemas/__init__.py +3 -0
  60. agno/db/schemas/evals.py +33 -0
  61. agno/db/schemas/knowledge.py +40 -0
  62. agno/db/schemas/memory.py +46 -0
  63. agno/db/singlestore/__init__.py +3 -0
  64. agno/db/singlestore/schemas.py +116 -0
  65. agno/db/singlestore/singlestore.py +1712 -0
  66. agno/db/singlestore/utils.py +326 -0
  67. agno/db/sqlite/__init__.py +3 -0
  68. agno/db/sqlite/schemas.py +119 -0
  69. agno/db/sqlite/sqlite.py +1676 -0
  70. agno/db/sqlite/utils.py +268 -0
  71. agno/db/utils.py +88 -0
  72. agno/eval/__init__.py +14 -0
  73. agno/eval/accuracy.py +154 -48
  74. agno/eval/performance.py +88 -23
  75. agno/eval/reliability.py +73 -20
  76. agno/eval/utils.py +23 -13
  77. agno/integrations/discord/__init__.py +3 -0
  78. agno/{app → integrations}/discord/client.py +10 -10
  79. agno/knowledge/__init__.py +2 -2
  80. agno/{document → knowledge}/chunking/agentic.py +2 -2
  81. agno/{document → knowledge}/chunking/document.py +2 -2
  82. agno/{document → knowledge}/chunking/fixed.py +3 -3
  83. agno/{document → knowledge}/chunking/markdown.py +2 -2
  84. agno/{document → knowledge}/chunking/recursive.py +2 -2
  85. agno/{document → knowledge}/chunking/row.py +2 -2
  86. agno/knowledge/chunking/semantic.py +59 -0
  87. agno/knowledge/chunking/strategy.py +121 -0
  88. agno/knowledge/content.py +74 -0
  89. agno/knowledge/document/__init__.py +5 -0
  90. agno/{document → knowledge/document}/base.py +12 -2
  91. agno/knowledge/embedder/__init__.py +5 -0
  92. agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
  93. agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
  94. agno/{embedder → knowledge/embedder}/base.py +6 -0
  95. agno/{embedder → knowledge/embedder}/cohere.py +72 -1
  96. agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
  97. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  98. agno/{embedder → knowledge/embedder}/google.py +74 -1
  99. agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
  100. agno/{embedder → knowledge/embedder}/jina.py +48 -2
  101. agno/knowledge/embedder/langdb.py +22 -0
  102. agno/knowledge/embedder/mistral.py +139 -0
  103. agno/{embedder → knowledge/embedder}/nebius.py +1 -1
  104. agno/{embedder → knowledge/embedder}/ollama.py +54 -3
  105. agno/knowledge/embedder/openai.py +223 -0
  106. agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
  107. agno/{embedder → knowledge/embedder}/together.py +1 -1
  108. agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
  109. agno/knowledge/knowledge.py +1551 -0
  110. agno/knowledge/reader/__init__.py +7 -0
  111. agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
  112. agno/knowledge/reader/base.py +88 -0
  113. agno/{document → knowledge}/reader/csv_reader.py +47 -65
  114. agno/knowledge/reader/docx_reader.py +83 -0
  115. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  116. agno/{document → knowledge}/reader/json_reader.py +30 -9
  117. agno/{document → knowledge}/reader/markdown_reader.py +58 -9
  118. agno/{document → knowledge}/reader/pdf_reader.py +71 -126
  119. agno/knowledge/reader/reader_factory.py +268 -0
  120. agno/knowledge/reader/s3_reader.py +101 -0
  121. agno/{document → knowledge}/reader/text_reader.py +31 -10
  122. agno/knowledge/reader/url_reader.py +128 -0
  123. agno/knowledge/reader/web_search_reader.py +366 -0
  124. agno/{document → knowledge}/reader/website_reader.py +37 -10
  125. agno/knowledge/reader/wikipedia_reader.py +59 -0
  126. agno/knowledge/reader/youtube_reader.py +78 -0
  127. agno/knowledge/remote_content/remote_content.py +88 -0
  128. agno/{reranker → knowledge/reranker}/base.py +1 -1
  129. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  130. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  131. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  132. agno/knowledge/types.py +30 -0
  133. agno/knowledge/utils.py +169 -0
  134. agno/media.py +269 -268
  135. agno/memory/__init__.py +2 -10
  136. agno/memory/manager.py +1003 -148
  137. agno/models/aimlapi/__init__.py +2 -2
  138. agno/models/aimlapi/aimlapi.py +6 -6
  139. agno/models/anthropic/claude.py +128 -72
  140. agno/models/aws/bedrock.py +107 -175
  141. agno/models/aws/claude.py +64 -18
  142. agno/models/azure/ai_foundry.py +73 -23
  143. agno/models/base.py +346 -290
  144. agno/models/cerebras/cerebras.py +84 -27
  145. agno/models/cohere/chat.py +106 -98
  146. agno/models/google/gemini.py +105 -46
  147. agno/models/groq/groq.py +97 -35
  148. agno/models/huggingface/huggingface.py +92 -27
  149. agno/models/ibm/watsonx.py +72 -13
  150. agno/models/litellm/chat.py +85 -13
  151. agno/models/message.py +46 -151
  152. agno/models/meta/llama.py +85 -49
  153. agno/models/metrics.py +120 -0
  154. agno/models/mistral/mistral.py +90 -21
  155. agno/models/ollama/__init__.py +0 -2
  156. agno/models/ollama/chat.py +85 -47
  157. agno/models/openai/chat.py +154 -37
  158. agno/models/openai/responses.py +178 -105
  159. agno/models/perplexity/perplexity.py +26 -2
  160. agno/models/portkey/portkey.py +0 -7
  161. agno/models/response.py +15 -9
  162. agno/models/utils.py +20 -0
  163. agno/models/vercel/__init__.py +2 -2
  164. agno/models/vercel/v0.py +1 -1
  165. agno/models/vllm/__init__.py +2 -2
  166. agno/models/vllm/vllm.py +3 -3
  167. agno/models/xai/xai.py +10 -10
  168. agno/os/__init__.py +3 -0
  169. agno/os/app.py +497 -0
  170. agno/os/auth.py +47 -0
  171. agno/os/config.py +103 -0
  172. agno/os/interfaces/agui/__init__.py +3 -0
  173. agno/os/interfaces/agui/agui.py +31 -0
  174. agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
  175. agno/{app → os/interfaces}/agui/utils.py +65 -28
  176. agno/os/interfaces/base.py +21 -0
  177. agno/os/interfaces/slack/__init__.py +3 -0
  178. agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
  179. agno/os/interfaces/slack/slack.py +32 -0
  180. agno/os/interfaces/whatsapp/__init__.py +3 -0
  181. agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
  182. agno/os/interfaces/whatsapp/whatsapp.py +29 -0
  183. agno/os/mcp.py +235 -0
  184. agno/os/router.py +1400 -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 +393 -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 +850 -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 +410 -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 +178 -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 +536 -0
  201. agno/os/schema.py +945 -0
  202. agno/{app/playground → os}/settings.py +7 -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/agent.py +633 -0
  212. agno/run/base.py +53 -77
  213. agno/run/cancel.py +81 -0
  214. agno/run/team.py +243 -96
  215. agno/run/workflow.py +550 -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 +3260 -4824
  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 +43 -23
  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 +20 -17
  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 +22 -12
  244. agno/tools/daytona.py +13 -16
  245. agno/tools/decorator.py +6 -3
  246. agno/tools/desi_vocal.py +17 -8
  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 +62 -62
  252. agno/tools/eleven_labs.py +36 -29
  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 +30 -30
  257. agno/tools/file.py +9 -8
  258. agno/tools/financial_datasets.py +25 -44
  259. agno/tools/firecrawl.py +17 -18
  260. agno/tools/function.py +127 -18
  261. agno/tools/giphy.py +23 -11
  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 +32 -20
  276. agno/tools/mcp.py +1 -2
  277. agno/tools/mem0.py +18 -12
  278. agno/tools/memori.py +14 -10
  279. agno/tools/mlx_transcribe.py +3 -2
  280. agno/tools/models/azure_openai.py +33 -15
  281. agno/tools/models/gemini.py +59 -32
  282. agno/tools/models/groq.py +30 -23
  283. agno/tools/models/nebius.py +28 -12
  284. agno/tools/models_labs.py +40 -16
  285. agno/tools/moviepy_video.py +7 -6
  286. agno/tools/neo4j.py +10 -8
  287. agno/tools/newspaper.py +7 -2
  288. agno/tools/newspaper4k.py +8 -3
  289. agno/tools/openai.py +58 -32
  290. agno/tools/openbb.py +12 -11
  291. agno/tools/opencv.py +63 -47
  292. agno/tools/openweather.py +14 -12
  293. agno/tools/pandas.py +11 -3
  294. agno/tools/postgres.py +4 -12
  295. agno/tools/pubmed.py +4 -1
  296. agno/tools/python.py +9 -22
  297. agno/tools/reasoning.py +35 -27
  298. agno/tools/reddit.py +11 -26
  299. agno/tools/replicate.py +55 -42
  300. agno/tools/resend.py +4 -1
  301. agno/tools/scrapegraph.py +15 -14
  302. agno/tools/searxng.py +10 -23
  303. agno/tools/serpapi.py +6 -3
  304. agno/tools/serper.py +13 -4
  305. agno/tools/shell.py +9 -2
  306. agno/tools/slack.py +12 -11
  307. agno/tools/sleep.py +3 -2
  308. agno/tools/spider.py +24 -4
  309. agno/tools/sql.py +7 -6
  310. agno/tools/tavily.py +6 -4
  311. agno/tools/telegram.py +12 -4
  312. agno/tools/todoist.py +11 -31
  313. agno/tools/toolkit.py +1 -1
  314. agno/tools/trafilatura.py +22 -6
  315. agno/tools/trello.py +9 -22
  316. agno/tools/twilio.py +10 -3
  317. agno/tools/user_control_flow.py +6 -1
  318. agno/tools/valyu.py +34 -5
  319. agno/tools/visualization.py +19 -28
  320. agno/tools/webbrowser.py +4 -3
  321. agno/tools/webex.py +11 -7
  322. agno/tools/website.py +15 -46
  323. agno/tools/webtools.py +12 -4
  324. agno/tools/whatsapp.py +5 -9
  325. agno/tools/wikipedia.py +20 -13
  326. agno/tools/x.py +14 -13
  327. agno/tools/yfinance.py +13 -40
  328. agno/tools/youtube.py +26 -20
  329. agno/tools/zendesk.py +7 -2
  330. agno/tools/zep.py +10 -7
  331. agno/tools/zoom.py +10 -9
  332. agno/utils/common.py +1 -19
  333. agno/utils/events.py +100 -123
  334. agno/utils/gemini.py +1 -1
  335. agno/utils/knowledge.py +29 -0
  336. agno/utils/log.py +54 -4
  337. agno/utils/mcp.py +68 -10
  338. agno/utils/media.py +39 -0
  339. agno/utils/message.py +12 -1
  340. agno/utils/models/aws_claude.py +1 -1
  341. agno/utils/models/claude.py +6 -12
  342. agno/utils/models/cohere.py +1 -1
  343. agno/utils/models/mistral.py +8 -7
  344. agno/utils/models/schema_utils.py +3 -3
  345. agno/utils/models/watsonx.py +1 -1
  346. agno/utils/openai.py +1 -1
  347. agno/utils/pprint.py +33 -32
  348. agno/utils/print_response/agent.py +779 -0
  349. agno/utils/print_response/team.py +1669 -0
  350. agno/utils/print_response/workflow.py +1451 -0
  351. agno/utils/prompts.py +14 -14
  352. agno/utils/reasoning.py +87 -0
  353. agno/utils/response.py +42 -42
  354. agno/utils/streamlit.py +481 -0
  355. agno/utils/string.py +8 -22
  356. agno/utils/team.py +50 -0
  357. agno/utils/timer.py +2 -2
  358. agno/vectordb/base.py +33 -21
  359. agno/vectordb/cassandra/cassandra.py +287 -23
  360. agno/vectordb/chroma/chromadb.py +482 -59
  361. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  362. agno/vectordb/couchbase/couchbase.py +309 -29
  363. agno/vectordb/lancedb/lance_db.py +360 -21
  364. agno/vectordb/langchaindb/__init__.py +5 -0
  365. agno/vectordb/langchaindb/langchaindb.py +145 -0
  366. agno/vectordb/lightrag/__init__.py +5 -0
  367. agno/vectordb/lightrag/lightrag.py +374 -0
  368. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  369. agno/vectordb/milvus/milvus.py +242 -32
  370. agno/vectordb/mongodb/mongodb.py +200 -24
  371. agno/vectordb/pgvector/pgvector.py +319 -37
  372. agno/vectordb/pineconedb/pineconedb.py +221 -27
  373. agno/vectordb/qdrant/qdrant.py +334 -14
  374. agno/vectordb/singlestore/singlestore.py +286 -29
  375. agno/vectordb/surrealdb/surrealdb.py +187 -7
  376. agno/vectordb/upstashdb/upstashdb.py +342 -26
  377. agno/vectordb/weaviate/weaviate.py +227 -165
  378. agno/workflow/__init__.py +17 -13
  379. agno/workflow/{v2/condition.py → condition.py} +135 -32
  380. agno/workflow/{v2/loop.py → loop.py} +115 -28
  381. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  382. agno/workflow/{v2/router.py → router.py} +133 -32
  383. agno/workflow/{v2/step.py → step.py} +207 -49
  384. agno/workflow/{v2/steps.py → steps.py} +147 -66
  385. agno/workflow/types.py +482 -0
  386. agno/workflow/workflow.py +2410 -696
  387. agno-2.0.0.dist-info/METADATA +494 -0
  388. agno-2.0.0.dist-info/RECORD +515 -0
  389. agno-2.0.0.dist-info/licenses/LICENSE +201 -0
  390. agno/agent/metrics.py +0 -110
  391. agno/api/app.py +0 -35
  392. agno/api/playground.py +0 -92
  393. agno/api/schemas/app.py +0 -12
  394. agno/api/schemas/playground.py +0 -22
  395. agno/api/schemas/user.py +0 -35
  396. agno/api/schemas/workspace.py +0 -46
  397. agno/api/user.py +0 -160
  398. agno/api/workflows.py +0 -33
  399. agno/api/workspace.py +0 -175
  400. agno/app/agui/__init__.py +0 -3
  401. agno/app/agui/app.py +0 -17
  402. agno/app/agui/sync_router.py +0 -120
  403. agno/app/base.py +0 -186
  404. agno/app/discord/__init__.py +0 -3
  405. agno/app/fastapi/__init__.py +0 -3
  406. agno/app/fastapi/app.py +0 -107
  407. agno/app/fastapi/async_router.py +0 -457
  408. agno/app/fastapi/sync_router.py +0 -448
  409. agno/app/playground/app.py +0 -228
  410. agno/app/playground/async_router.py +0 -1053
  411. agno/app/playground/deploy.py +0 -249
  412. agno/app/playground/operator.py +0 -183
  413. agno/app/playground/schemas.py +0 -223
  414. agno/app/playground/serve.py +0 -55
  415. agno/app/playground/sync_router.py +0 -1045
  416. agno/app/playground/utils.py +0 -46
  417. agno/app/settings.py +0 -15
  418. agno/app/slack/__init__.py +0 -3
  419. agno/app/slack/app.py +0 -19
  420. agno/app/slack/sync_router.py +0 -92
  421. agno/app/utils.py +0 -54
  422. agno/app/whatsapp/__init__.py +0 -3
  423. agno/app/whatsapp/app.py +0 -15
  424. agno/app/whatsapp/sync_router.py +0 -197
  425. agno/cli/auth_server.py +0 -249
  426. agno/cli/config.py +0 -274
  427. agno/cli/console.py +0 -88
  428. agno/cli/credentials.py +0 -23
  429. agno/cli/entrypoint.py +0 -571
  430. agno/cli/operator.py +0 -357
  431. agno/cli/settings.py +0 -96
  432. agno/cli/ws/ws_cli.py +0 -817
  433. agno/constants.py +0 -13
  434. agno/document/__init__.py +0 -5
  435. agno/document/chunking/semantic.py +0 -45
  436. agno/document/chunking/strategy.py +0 -31
  437. agno/document/reader/__init__.py +0 -5
  438. agno/document/reader/base.py +0 -47
  439. agno/document/reader/docx_reader.py +0 -60
  440. agno/document/reader/gcs/pdf_reader.py +0 -44
  441. agno/document/reader/s3/pdf_reader.py +0 -59
  442. agno/document/reader/s3/text_reader.py +0 -63
  443. agno/document/reader/url_reader.py +0 -59
  444. agno/document/reader/youtube_reader.py +0 -58
  445. agno/embedder/__init__.py +0 -5
  446. agno/embedder/langdb.py +0 -80
  447. agno/embedder/mistral.py +0 -82
  448. agno/embedder/openai.py +0 -78
  449. agno/file/__init__.py +0 -5
  450. agno/file/file.py +0 -16
  451. agno/file/local/csv.py +0 -32
  452. agno/file/local/txt.py +0 -19
  453. agno/infra/app.py +0 -240
  454. agno/infra/base.py +0 -144
  455. agno/infra/context.py +0 -20
  456. agno/infra/db_app.py +0 -52
  457. agno/infra/resource.py +0 -205
  458. agno/infra/resources.py +0 -55
  459. agno/knowledge/agent.py +0 -702
  460. agno/knowledge/arxiv.py +0 -33
  461. agno/knowledge/combined.py +0 -36
  462. agno/knowledge/csv.py +0 -144
  463. agno/knowledge/csv_url.py +0 -124
  464. agno/knowledge/document.py +0 -223
  465. agno/knowledge/docx.py +0 -137
  466. agno/knowledge/firecrawl.py +0 -34
  467. agno/knowledge/gcs/__init__.py +0 -0
  468. agno/knowledge/gcs/base.py +0 -39
  469. agno/knowledge/gcs/pdf.py +0 -125
  470. agno/knowledge/json.py +0 -137
  471. agno/knowledge/langchain.py +0 -71
  472. agno/knowledge/light_rag.py +0 -273
  473. agno/knowledge/llamaindex.py +0 -66
  474. agno/knowledge/markdown.py +0 -154
  475. agno/knowledge/pdf.py +0 -164
  476. agno/knowledge/pdf_bytes.py +0 -42
  477. agno/knowledge/pdf_url.py +0 -148
  478. agno/knowledge/s3/__init__.py +0 -0
  479. agno/knowledge/s3/base.py +0 -64
  480. agno/knowledge/s3/pdf.py +0 -33
  481. agno/knowledge/s3/text.py +0 -34
  482. agno/knowledge/text.py +0 -141
  483. agno/knowledge/url.py +0 -46
  484. agno/knowledge/website.py +0 -179
  485. agno/knowledge/wikipedia.py +0 -32
  486. agno/knowledge/youtube.py +0 -35
  487. agno/memory/agent.py +0 -423
  488. agno/memory/classifier.py +0 -104
  489. agno/memory/db/__init__.py +0 -5
  490. agno/memory/db/base.py +0 -42
  491. agno/memory/db/mongodb.py +0 -189
  492. agno/memory/db/postgres.py +0 -203
  493. agno/memory/db/sqlite.py +0 -193
  494. agno/memory/memory.py +0 -22
  495. agno/memory/row.py +0 -36
  496. agno/memory/summarizer.py +0 -201
  497. agno/memory/summary.py +0 -19
  498. agno/memory/team.py +0 -415
  499. agno/memory/v2/__init__.py +0 -2
  500. agno/memory/v2/db/__init__.py +0 -1
  501. agno/memory/v2/db/base.py +0 -42
  502. agno/memory/v2/db/firestore.py +0 -339
  503. agno/memory/v2/db/mongodb.py +0 -196
  504. agno/memory/v2/db/postgres.py +0 -214
  505. agno/memory/v2/db/redis.py +0 -187
  506. agno/memory/v2/db/schema.py +0 -54
  507. agno/memory/v2/db/sqlite.py +0 -209
  508. agno/memory/v2/manager.py +0 -437
  509. agno/memory/v2/memory.py +0 -1097
  510. agno/memory/v2/schema.py +0 -55
  511. agno/memory/v2/summarizer.py +0 -215
  512. agno/memory/workflow.py +0 -38
  513. agno/models/ollama/tools.py +0 -430
  514. agno/models/qwen/__init__.py +0 -5
  515. agno/playground/__init__.py +0 -10
  516. agno/playground/deploy.py +0 -3
  517. agno/playground/playground.py +0 -3
  518. agno/playground/serve.py +0 -3
  519. agno/playground/settings.py +0 -3
  520. agno/reranker/__init__.py +0 -0
  521. agno/run/response.py +0 -467
  522. agno/run/v2/__init__.py +0 -0
  523. agno/run/v2/workflow.py +0 -567
  524. agno/storage/__init__.py +0 -0
  525. agno/storage/agent/__init__.py +0 -0
  526. agno/storage/agent/dynamodb.py +0 -1
  527. agno/storage/agent/json.py +0 -1
  528. agno/storage/agent/mongodb.py +0 -1
  529. agno/storage/agent/postgres.py +0 -1
  530. agno/storage/agent/singlestore.py +0 -1
  531. agno/storage/agent/sqlite.py +0 -1
  532. agno/storage/agent/yaml.py +0 -1
  533. agno/storage/base.py +0 -60
  534. agno/storage/dynamodb.py +0 -673
  535. agno/storage/firestore.py +0 -297
  536. agno/storage/gcs_json.py +0 -261
  537. agno/storage/in_memory.py +0 -234
  538. agno/storage/json.py +0 -237
  539. agno/storage/mongodb.py +0 -328
  540. agno/storage/mysql.py +0 -685
  541. agno/storage/postgres.py +0 -682
  542. agno/storage/redis.py +0 -336
  543. agno/storage/session/__init__.py +0 -16
  544. agno/storage/session/agent.py +0 -64
  545. agno/storage/session/team.py +0 -63
  546. agno/storage/session/v2/__init__.py +0 -5
  547. agno/storage/session/workflow.py +0 -61
  548. agno/storage/singlestore.py +0 -606
  549. agno/storage/sqlite.py +0 -646
  550. agno/storage/workflow/__init__.py +0 -0
  551. agno/storage/workflow/mongodb.py +0 -1
  552. agno/storage/workflow/postgres.py +0 -1
  553. agno/storage/workflow/sqlite.py +0 -1
  554. agno/storage/yaml.py +0 -241
  555. agno/tools/thinking.py +0 -73
  556. agno/utils/defaults.py +0 -57
  557. agno/utils/filesystem.py +0 -39
  558. agno/utils/git.py +0 -52
  559. agno/utils/json_io.py +0 -30
  560. agno/utils/load_env.py +0 -19
  561. agno/utils/py_io.py +0 -19
  562. agno/utils/pyproject.py +0 -18
  563. agno/utils/resource_filter.py +0 -31
  564. agno/workflow/v2/__init__.py +0 -21
  565. agno/workflow/v2/types.py +0 -357
  566. agno/workflow/v2/workflow.py +0 -3313
  567. agno/workspace/__init__.py +0 -0
  568. agno/workspace/config.py +0 -325
  569. agno/workspace/enums.py +0 -6
  570. agno/workspace/helpers.py +0 -52
  571. agno/workspace/operator.py +0 -757
  572. agno/workspace/settings.py +0 -158
  573. agno-1.8.2.dist-info/METADATA +0 -982
  574. agno-1.8.2.dist-info/RECORD +0 -566
  575. agno-1.8.2.dist-info/entry_points.txt +0 -3
  576. agno-1.8.2.dist-info/licenses/LICENSE +0 -375
  577. /agno/{app → db/migrations}/__init__.py +0 -0
  578. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  579. /agno/{cli → integrations}/__init__.py +0 -0
  580. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  581. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  582. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  583. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  584. /agno/{app → os/interfaces}/slack/security.py +0 -0
  585. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  586. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  587. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  588. {agno-1.8.2.dist-info → agno-2.0.0.dist-info}/WHEEL +0 -0
  589. {agno-1.8.2.dist-info → agno-2.0.0.dist-info}/top_level.txt +0 -0
@@ -1,249 +0,0 @@
1
- import tarfile
2
- from pathlib import Path
3
- from typing import List, Optional, cast
4
-
5
- from rich import box
6
- from rich.panel import Panel
7
- from rich.text import Text
8
-
9
- from agno.api.playground import deploy_playground_archive
10
- from agno.cli.settings import agno_cli_settings
11
- from agno.utils.log import logger
12
-
13
-
14
- def create_deployment_info(
15
- app: str, root: Path, elapsed_time: str = "[waiting...]", status: Optional[str] = None, error: Optional[str] = None
16
- ) -> Text:
17
- """Create a formatted text display showing deployment information.
18
-
19
- Args:
20
- app (str): The name of the application being deployed
21
- root (Path): The path to the root directory
22
- elapsed_time (str): The elapsed deployment time. Defaults to "[waiting...]"
23
- status (Optional[str]): The current deployment status. Defaults to None
24
- error (Optional[str]): The deployment error message. Defaults to None
25
-
26
- Returns:
27
- Text: A Rich Text object containing formatted deployment information
28
- """
29
- # Base info always shown
30
- elements = [
31
- ("📦 App: ", "bold"),
32
- (f"{app}\n", "cyan"),
33
- ("📂 Root: ", "bold"),
34
- (f"{root}\n", "cyan"),
35
- ("⏱️ Time: ", "bold"),
36
- (f"{elapsed_time}\n", "yellow"),
37
- ]
38
-
39
- # Add either status or error, not both
40
- if error is not None:
41
- elements.extend(
42
- [
43
- ("🚨 Error: ", "bold"),
44
- (f"{error}", "red"),
45
- ]
46
- )
47
- elif status is not None:
48
- elements.extend(
49
- [
50
- ("🚧 Status: ", "bold"),
51
- (f"{status}", "yellow"),
52
- ]
53
- )
54
-
55
- return Text.assemble(*elements)
56
-
57
-
58
- def create_info_panel(deployment_info: Text) -> Panel:
59
- """Create a formatted panel to display deployment information.
60
-
61
- Args:
62
- deployment_info (Text): The Rich Text object containing deployment information
63
-
64
- Returns:
65
- Panel: A Rich Panel object containing the formatted deployment information
66
- """
67
- return Panel(
68
- deployment_info,
69
- title="[bold green]🚀 Deploying Playground App[/bold green]",
70
- border_style="cyan",
71
- box=box.HEAVY,
72
- padding=(1, 2),
73
- )
74
-
75
-
76
- def create_error_panel(deployment_info: Text) -> Panel:
77
- """Create a formatted panel to display deployment error information.
78
-
79
- Args:
80
- deployment_info (Text): The Rich Text object containing deployment error information
81
-
82
- Returns:
83
- Panel: A Rich Panel object containing the formatted deployment error information
84
- """
85
- return Panel(
86
- deployment_info,
87
- title="[bold red]🚨 Deployment Failed[/bold red]",
88
- border_style="red",
89
- box=box.HEAVY,
90
- padding=(1, 2),
91
- )
92
-
93
-
94
- def create_tar_archive(root: Path) -> Path:
95
- """Create a gzipped tar archive of the playground files.
96
-
97
- Args:
98
- root (Path): The path to the directory to be archived
99
-
100
- Returns:
101
- Path: The path to the created tar archive
102
-
103
- Raises:
104
- Exception: If archive creation fails
105
- """
106
- tar_path = root.with_suffix(".tar.gz")
107
- try:
108
- logger.debug(f"Creating playground archive: {tar_path.name}")
109
- with tarfile.open(tar_path, "w:gz") as tar:
110
- tar.add(root, arcname=root.name)
111
- logger.debug(f"Successfully created playground archive: {tar_path.name}")
112
- return tar_path
113
- except Exception as e:
114
- logger.error(f"Failed to create playground archive: {e}")
115
- raise
116
-
117
-
118
- def deploy_archive(name: str, tar_path: Path) -> None:
119
- """Deploying the tar archive to agno-cloud.
120
-
121
- Args:
122
- name (str): The name of the playground app
123
- tar_path (Path): The path to the tar archive to be deployed
124
-
125
- Raises:
126
- Exception: If the deployment process fails
127
- """
128
- try:
129
- logger.debug(f"Deploying playground archive: {tar_path.name}")
130
- deploy_playground_archive(name=name, tar_path=tar_path)
131
- logger.debug(f"Successfully deployed playground archive: {tar_path.name}")
132
- except Exception:
133
- raise
134
-
135
-
136
- def cleanup_archive(tar_path: Path) -> None:
137
- """Delete the temporary tar archive after deployment.
138
-
139
- Args:
140
- tar_path (Path): The path to the tar archive to be deleted
141
-
142
- Raises:
143
- Exception: If the deletion process fails
144
- """
145
- try:
146
- logger.debug(f"Deleting playground archive: {tar_path.name}")
147
- tar_path.unlink()
148
- logger.debug(f"Successfully deleted playground archive: {tar_path.name}")
149
- except Exception as e:
150
- logger.error(f"Failed to delete playground archive: {e}")
151
- raise
152
-
153
-
154
- def deploy_playground_app(
155
- app: str,
156
- name: str,
157
- root: Optional[Path] = None,
158
- ) -> None:
159
- """Deploy a playground application to agno-cloud.
160
-
161
- This function:
162
- 1. Creates a tar archive of the root directory.
163
- 2. Uploades the archive to agno-cloud.
164
- 3. Cleaning up temporary files.
165
- 4. Displaying real-time progress updates.
166
-
167
- Args:
168
- app (str): The application to deploy as a string identifier.
169
- It should be the name of the module containing the Playground app from the root path.
170
- name (str): The name of the playground app.
171
- root (Optional[Path]): The root path containing the application files. Defaults to the current working directory.
172
-
173
- Raises:
174
- Exception: If any step of the deployment process fails
175
- """
176
-
177
- agno_cli_settings.gate_alpha_feature()
178
-
179
- from rich.console import Group
180
- from rich.live import Live
181
- from rich.status import Status
182
-
183
- from agno.utils.timer import Timer
184
-
185
- if app is None:
186
- raise ValueError("PlaygroundApp is required")
187
-
188
- if name is None:
189
- raise ValueError("PlaygroundApp name is required")
190
-
191
- with Live(refresh_per_second=4) as live_display:
192
- response_timer = Timer()
193
- response_timer.start()
194
- root = root or Path.cwd()
195
- root = cast(Path, root)
196
- try:
197
- deployment_info = create_deployment_info(app=app, root=root, status="Initializing...")
198
- panels: List[Panel] = [create_info_panel(deployment_info=deployment_info)]
199
-
200
- status = Status(
201
- "[bold blue]Initializing playground...[/bold blue]",
202
- spinner="aesthetic",
203
- speed=2,
204
- )
205
- panels.append(status) # type: ignore
206
- live_display.update(Group(*panels))
207
-
208
- # Step 1: Create archive
209
- status.update("[bold blue]Creating playground archive...[/bold blue]")
210
- tar_path = create_tar_archive(root=root)
211
- panels[0] = create_info_panel(
212
- create_deployment_info(
213
- app=app, root=root, elapsed_time=f"{response_timer.elapsed:.1f}s", status="Creating archive..."
214
- )
215
- )
216
- live_display.update(Group(*panels))
217
-
218
- # Step 2: Upload archive
219
- status.update("[bold blue]Uploading playground archive...[/bold blue]")
220
- deploy_archive(name=name, tar_path=tar_path)
221
- panels[0] = create_info_panel(
222
- create_deployment_info(
223
- app=app, root=root, elapsed_time=f"{response_timer.elapsed:.1f}s", status="Uploading archive..."
224
- )
225
- )
226
- live_display.update(Group(*panels))
227
-
228
- # Step 3: Cleanup
229
- status.update("[bold blue]Deleting playground archive...[/bold blue]")
230
- cleanup_archive(tar_path)
231
- panels[0] = create_info_panel(
232
- create_deployment_info(
233
- app=app, root=root, elapsed_time=f"{response_timer.elapsed:.1f}s", status="Deleting archive..."
234
- )
235
- )
236
- live_display.update(Group(*panels))
237
-
238
- # Final display update
239
- status.stop()
240
- panels.pop()
241
- live_display.update(Group(*panels))
242
- except Exception as e:
243
- status.update(f"[bold red]Deployment failed: {str(e)}[/bold red]")
244
- panels[0] = create_error_panel(
245
- create_deployment_info(app=app, root=root, elapsed_time=f"{response_timer.elapsed:.1f}s", error=str(e))
246
- )
247
- status.stop()
248
- panels.pop()
249
- live_display.update(Group(*panels))
@@ -1,183 +0,0 @@
1
- from typing import Any, List, Optional, Union, cast
2
-
3
- from agno.agent.agent import Agent, AgentRun, Function, Toolkit
4
- from agno.run.response import RunResponse
5
- from agno.run.team import TeamRunResponse
6
- from agno.storage.session.agent import AgentSession
7
- from agno.storage.session.team import TeamSession
8
- from agno.storage.session.workflow import WorkflowSession
9
- from agno.team.team import Team
10
- from agno.utils.log import logger
11
- from agno.workflow.workflow import Workflow
12
-
13
-
14
- def format_tools(agent_tools):
15
- formatted_tools = []
16
- if agent_tools is not None:
17
- for tool in agent_tools:
18
- if isinstance(tool, dict):
19
- formatted_tools.append(tool)
20
- elif isinstance(tool, Toolkit):
21
- for _, f in tool.functions.items():
22
- formatted_tools.append(f.to_dict())
23
- elif isinstance(tool, Function):
24
- formatted_tools.append(tool.to_dict())
25
- elif callable(tool):
26
- func = Function.from_callable(tool)
27
- formatted_tools.append(func.to_dict())
28
- else:
29
- logger.warning(f"Unknown tool type: {type(tool)}")
30
- return formatted_tools
31
-
32
-
33
- def get_agent_by_id(agent_id: str, agents: Optional[List[Agent]] = None) -> Optional[Agent]:
34
- if agent_id is None or agents is None:
35
- return None
36
-
37
- for agent in agents:
38
- if agent.agent_id == agent_id:
39
- return agent
40
- return None
41
-
42
-
43
- def get_session_title(session: Union[AgentSession, TeamSession]) -> str:
44
- if session is None:
45
- return "Unnamed session"
46
- session_name = session.session_data.get("session_name") if session.session_data is not None else None
47
- if session_name is not None:
48
- return session_name
49
- memory = session.memory
50
- if memory is not None:
51
- # Proxy for knowing it is legacy memory implementation
52
- runs = memory.get("runs")
53
- runs = cast(List[Any], runs)
54
-
55
- for _run in runs:
56
- try:
57
- if "response" in _run:
58
- run_parsed = AgentRun.model_validate(_run)
59
- if run_parsed.message is not None and run_parsed.message.role == "user":
60
- content = run_parsed.message.get_content_string()
61
- if content:
62
- return content
63
- else:
64
- return "No title"
65
- else:
66
- if "agent_id" in _run:
67
- run_response_parsed = RunResponse.from_dict(_run)
68
- else:
69
- run_response_parsed = TeamRunResponse.from_dict(_run) # type: ignore
70
- if run_response_parsed.messages is not None and len(run_response_parsed.messages) > 0:
71
- for msg in run_response_parsed.messages:
72
- if msg.role == "user":
73
- content = msg.get_content_string()
74
- if content:
75
- return content
76
-
77
- except Exception as e:
78
- import traceback
79
-
80
- traceback.print_exc(limit=3)
81
-
82
- logger.error(f"Error parsing chat: {e}")
83
-
84
- return "Unnamed session"
85
-
86
-
87
- def get_session_title_from_workflow_session(workflow_session: WorkflowSession) -> str:
88
- if workflow_session is None:
89
- return "Unnamed session"
90
- session_name = (
91
- workflow_session.session_data.get("session_name") if workflow_session.session_data is not None else None
92
- )
93
- if session_name is not None:
94
- return session_name
95
- if hasattr(workflow_session, "memory"):
96
- memory = workflow_session.memory
97
- if memory is not None:
98
- runs = memory.get("runs")
99
- runs = cast(List[Any], runs)
100
- for _run in runs:
101
- try:
102
- # Try to get content directly from the run first (workflow structure)
103
- content = _run.get("content")
104
- if content:
105
- # Split content by newlines and take first line, but limit to 100 chars
106
- first_line = content.split("\n")[0]
107
- return first_line[:100] + "..." if len(first_line) > 100 else first_line
108
-
109
- # Fallback to response.content structure (if it exists)
110
- response = _run.get("response")
111
- if response:
112
- content = response.get("content")
113
- if content:
114
- # Split content by newlines and take first line, but limit to 100 chars
115
- first_line = content.split("\n")[0]
116
- return first_line[:100] + "..." if len(first_line) > 100 else first_line
117
-
118
- except Exception as e:
119
- logger.error(f"Error parsing workflow session: {e}")
120
- if hasattr(workflow_session, "runs"):
121
- if workflow_session.runs is not None and len(workflow_session.runs) > 0:
122
- for _run in workflow_session.runs:
123
- if _run.content:
124
- return _run.content[:100] + "..." if len(_run.content) > 100 else _run.content
125
- return "Unnamed session"
126
-
127
-
128
- def get_workflow_by_id(workflow_id: str, workflows: Optional[List[Workflow]] = None) -> Optional[Workflow]:
129
- if workflows is None or workflow_id is None:
130
- return None
131
-
132
- for workflow in workflows:
133
- if workflow.workflow_id == workflow_id:
134
- return workflow
135
- return None
136
-
137
-
138
- def get_team_by_id(team_id: str, teams: Optional[List[Team]] = None) -> Optional[Team]:
139
- if teams is None or team_id is None:
140
- return None
141
-
142
- for team in teams:
143
- if team.team_id == team_id:
144
- return team
145
- return None
146
-
147
-
148
- def get_session_title_from_team_session(team_session: TeamSession) -> str:
149
- if team_session is None:
150
- return "Unnamed session"
151
- session_name = team_session.session_data.get("session_name") if team_session.session_data is not None else None
152
- if session_name is not None:
153
- return session_name
154
- memory = team_session.memory
155
- if memory is not None:
156
- runs = memory.get("runs")
157
- runs = cast(List[Any], runs)
158
-
159
- for _run in runs:
160
- try:
161
- if "response" in _run:
162
- run_parsed = AgentRun.model_validate(_run)
163
- if run_parsed.message is not None and run_parsed.message.role == "user":
164
- content = run_parsed.message.get_content_string()
165
- if content:
166
- return content
167
- else:
168
- return "No title"
169
- else:
170
- if "agent_id" in _run:
171
- run_response_parsed = RunResponse.from_dict(_run)
172
- else:
173
- run_response_parsed = TeamRunResponse.from_dict(_run) # type: ignore
174
- if run_response_parsed.messages is not None and len(run_response_parsed.messages) > 0:
175
- for msg in run_response_parsed.messages:
176
- if msg.role == "user":
177
- content = msg.get_content_string()
178
- if content:
179
- return content
180
-
181
- except Exception as e:
182
- logger.error(f"Error parsing chat: {e}")
183
- return "Unnamed session"
@@ -1,223 +0,0 @@
1
- from datetime import datetime
2
- from typing import Any, Callable, Dict, List, Optional, Union
3
- from uuid import uuid4
4
-
5
- from fastapi import UploadFile
6
- from pydantic import BaseModel
7
-
8
- from agno.agent import Agent
9
- from agno.app.playground.operator import format_tools
10
- from agno.memory.agent import AgentMemory
11
- from agno.memory.team import TeamMemory
12
- from agno.memory.v2 import Memory
13
- from agno.team import Team
14
-
15
-
16
- class AgentModel(BaseModel):
17
- name: Optional[str] = None
18
- model: Optional[str] = None
19
- provider: Optional[str] = None
20
-
21
-
22
- class AgentGetResponse(BaseModel):
23
- agent_id: Optional[str] = None
24
- name: Optional[str] = None
25
- model: Optional[AgentModel] = None
26
- add_context: Optional[bool] = None
27
- tools: Optional[List[Dict[str, Any]]] = None
28
- memory: Optional[Dict[str, Any]] = None
29
- storage: Optional[Dict[str, Any]] = None
30
- knowledge: Optional[Dict[str, Any]] = None
31
- description: Optional[str] = None
32
- instructions: Optional[Union[List[str], str, Callable]] = None
33
-
34
- @classmethod
35
- def from_agent(self, agent: Agent, async_mode: bool = False) -> "AgentGetResponse":
36
- if agent.memory:
37
- memory_dict: Optional[Dict[str, Any]] = {}
38
- if isinstance(agent.memory, AgentMemory) and agent.memory.db:
39
- memory_dict = {"name": agent.memory.db.__class__.__name__}
40
- elif isinstance(agent.memory, Memory) and agent.memory.db:
41
- memory_dict = {"name": "Memory"}
42
- if agent.memory.model is not None:
43
- memory_dict["model"] = AgentModel(
44
- name=agent.memory.model.name,
45
- model=agent.memory.model.id,
46
- provider=agent.memory.model.provider,
47
- )
48
- if agent.memory.db is not None:
49
- memory_dict["db"] = agent.memory.db.__dict__() # type: ignore
50
-
51
- else:
52
- memory_dict = None
53
- else:
54
- memory_dict = None
55
- tools = agent.get_tools(session_id=str(uuid4()), async_mode=async_mode)
56
- return AgentGetResponse(
57
- agent_id=agent.agent_id,
58
- name=agent.name,
59
- model=AgentModel(
60
- name=agent.model.name or agent.model.__class__.__name__ if agent.model else None,
61
- model=agent.model.id if agent.model else None,
62
- provider=agent.model.provider or agent.model.__class__.__name__ if agent.model else None,
63
- ),
64
- add_context=agent.add_context,
65
- tools=format_tools(tools) if tools else None,
66
- memory=memory_dict,
67
- storage={"name": agent.storage.__class__.__name__} if agent.storage else None,
68
- knowledge={"name": agent.knowledge.__class__.__name__} if agent.knowledge else None,
69
- description=agent.description,
70
- instructions=agent.instructions,
71
- )
72
-
73
-
74
- class AgentRunRequest(BaseModel):
75
- message: str
76
- agent_id: str
77
- stream: bool = True
78
- monitor: bool = False
79
- session_id: Optional[str] = None
80
- user_id: Optional[str] = None
81
- files: Optional[List[UploadFile]] = None
82
-
83
-
84
- class AgentRenameRequest(BaseModel):
85
- name: str
86
- user_id: str
87
-
88
-
89
- class AgentSessionsResponse(BaseModel):
90
- title: Optional[str] = None
91
- session_id: Optional[str] = None
92
- session_name: Optional[str] = None
93
- created_at: Optional[int] = None
94
- updated_at: Optional[int] = None
95
-
96
-
97
- class MemoryResponse(BaseModel):
98
- memory: str
99
- topics: Optional[List[str]] = None
100
- last_updated: Optional[datetime] = None
101
-
102
-
103
- class WorkflowRenameRequest(BaseModel):
104
- name: str
105
-
106
-
107
- class WorkflowRunRequest(BaseModel):
108
- input: Dict[str, Any]
109
- user_id: Optional[str] = None
110
- session_id: Optional[str] = None
111
- stream: bool = True
112
-
113
-
114
- class WorkflowSessionResponse(BaseModel):
115
- title: Optional[str] = None
116
- session_id: Optional[str] = None
117
- session_name: Optional[str] = None
118
- created_at: Optional[int] = None
119
- updated_at: Optional[int] = None
120
-
121
-
122
- class WorkflowGetResponse(BaseModel):
123
- workflow_id: str
124
- name: Optional[str] = None
125
- description: Optional[str] = None
126
- parameters: Optional[Dict[str, Any]] = None
127
- storage: Optional[str] = None
128
-
129
-
130
- class WorkflowsGetResponse(BaseModel):
131
- workflow_id: str
132
- name: str
133
- description: Optional[str] = None
134
-
135
-
136
- class TeamModel(BaseModel):
137
- name: Optional[str] = None
138
- model: Optional[str] = None
139
- provider: Optional[str] = None
140
-
141
-
142
- class TeamGetResponse(BaseModel):
143
- team_id: Optional[str] = None
144
- name: Optional[str] = None
145
- description: Optional[str] = None
146
- mode: Optional[str] = None
147
- model: Optional[TeamModel] = None
148
- success_criteria: Optional[str] = None
149
- instructions: Optional[Union[List[str], str, Callable]] = None
150
- members: Optional[List[Union[AgentGetResponse, "TeamGetResponse"]]] = None
151
- expected_output: Optional[str] = None
152
- context: Optional[str] = None
153
- enable_agentic_context: Optional[bool] = None
154
- storage: Optional[Dict[str, Any]] = None
155
- memory: Optional[Dict[str, Any]] = None
156
- async_mode: bool = False
157
-
158
- @classmethod
159
- def from_team(self, team: Team, async_mode: bool = False) -> "TeamGetResponse":
160
- import json
161
-
162
- memory_dict: Optional[Dict[str, Any]] = {}
163
- if isinstance(team.memory, Memory):
164
- memory_dict = {"name": "Memory"}
165
- if team.memory.model is not None:
166
- memory_dict["model"] = AgentModel(
167
- name=team.memory.model.name,
168
- model=team.memory.model.id,
169
- provider=team.memory.model.provider,
170
- )
171
- if team.memory.db is not None:
172
- memory_dict["db"] = team.memory.db.__dict__() # type: ignore
173
- elif isinstance(team.memory, TeamMemory):
174
- memory_dict = {"name": team.memory.db.__class__.__name__}
175
- else:
176
- memory_dict = None
177
-
178
- return TeamGetResponse(
179
- team_id=team.team_id,
180
- name=team.name,
181
- model=TeamModel(
182
- name=team.model.name or team.model.__class__.__name__ if team.model else None,
183
- model=team.model.id if team.model else None,
184
- provider=team.model.provider or team.model.__class__.__name__ if team.model else None,
185
- ),
186
- success_criteria=team.success_criteria,
187
- instructions=team.instructions,
188
- description=team.description,
189
- expected_output=team.expected_output,
190
- context=json.dumps(team.context) if isinstance(team.context, dict) else team.context,
191
- enable_agentic_context=team.enable_agentic_context,
192
- mode=team.mode,
193
- storage={"name": team.storage.__class__.__name__} if team.storage else None,
194
- memory=memory_dict,
195
- members=[
196
- AgentGetResponse.from_agent(member, async_mode=async_mode)
197
- if isinstance(member, Agent)
198
- else TeamGetResponse.from_team(member, async_mode=async_mode)
199
- if isinstance(member, Team)
200
- else None
201
- for member in team.members
202
- ],
203
- )
204
-
205
-
206
- class TeamRunRequest(BaseModel):
207
- input: Dict[str, Any]
208
- user_id: Optional[str] = None
209
- session_id: Optional[str] = None
210
- files: Optional[List[UploadFile]] = None
211
-
212
-
213
- class TeamSessionResponse(BaseModel):
214
- title: Optional[str] = None
215
- session_id: Optional[str] = None
216
- session_name: Optional[str] = None
217
- created_at: Optional[int] = None
218
- updated_at: Optional[int] = None
219
-
220
-
221
- class TeamRenameRequest(BaseModel):
222
- name: str
223
- user_id: str