agno 1.8.0__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 (583) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +19 -27
  3. agno/agent/agent.py +2781 -4126
  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/media.py +2 -2
  137. agno/memory/__init__.py +2 -10
  138. agno/memory/manager.py +1003 -148
  139. agno/models/aimlapi/__init__.py +2 -2
  140. agno/models/aimlapi/aimlapi.py +6 -6
  141. agno/models/anthropic/claude.py +129 -82
  142. agno/models/aws/bedrock.py +107 -175
  143. agno/models/aws/claude.py +64 -18
  144. agno/models/azure/ai_foundry.py +73 -23
  145. agno/models/base.py +347 -287
  146. agno/models/cerebras/cerebras.py +84 -27
  147. agno/models/cohere/chat.py +106 -98
  148. agno/models/dashscope/dashscope.py +14 -5
  149. agno/models/google/gemini.py +123 -53
  150. agno/models/groq/groq.py +97 -35
  151. agno/models/huggingface/huggingface.py +92 -27
  152. agno/models/ibm/watsonx.py +72 -13
  153. agno/models/litellm/chat.py +85 -13
  154. agno/models/message.py +38 -144
  155. agno/models/meta/llama.py +85 -49
  156. agno/models/metrics.py +120 -0
  157. agno/models/mistral/mistral.py +90 -21
  158. agno/models/ollama/__init__.py +0 -2
  159. agno/models/ollama/chat.py +84 -46
  160. agno/models/openai/chat.py +135 -27
  161. agno/models/openai/responses.py +233 -115
  162. agno/models/perplexity/perplexity.py +26 -2
  163. agno/models/portkey/portkey.py +0 -7
  164. agno/models/response.py +14 -8
  165. agno/models/utils.py +20 -0
  166. agno/models/vercel/__init__.py +2 -2
  167. agno/models/vercel/v0.py +1 -1
  168. agno/models/vllm/__init__.py +2 -2
  169. agno/models/vllm/vllm.py +3 -3
  170. agno/models/xai/xai.py +10 -10
  171. agno/os/__init__.py +3 -0
  172. agno/os/app.py +393 -0
  173. agno/os/auth.py +47 -0
  174. agno/os/config.py +103 -0
  175. agno/os/interfaces/agui/__init__.py +3 -0
  176. agno/os/interfaces/agui/agui.py +31 -0
  177. agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
  178. agno/{app → os/interfaces}/agui/utils.py +65 -28
  179. agno/os/interfaces/base.py +21 -0
  180. agno/os/interfaces/slack/__init__.py +3 -0
  181. agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
  182. agno/os/interfaces/slack/slack.py +33 -0
  183. agno/os/interfaces/whatsapp/__init__.py +3 -0
  184. agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
  185. agno/os/interfaces/whatsapp/whatsapp.py +30 -0
  186. agno/os/router.py +843 -0
  187. agno/os/routers/__init__.py +3 -0
  188. agno/os/routers/evals/__init__.py +3 -0
  189. agno/os/routers/evals/evals.py +204 -0
  190. agno/os/routers/evals/schemas.py +142 -0
  191. agno/os/routers/evals/utils.py +161 -0
  192. agno/os/routers/knowledge/__init__.py +3 -0
  193. agno/os/routers/knowledge/knowledge.py +413 -0
  194. agno/os/routers/knowledge/schemas.py +118 -0
  195. agno/os/routers/memory/__init__.py +3 -0
  196. agno/os/routers/memory/memory.py +179 -0
  197. agno/os/routers/memory/schemas.py +58 -0
  198. agno/os/routers/metrics/__init__.py +3 -0
  199. agno/os/routers/metrics/metrics.py +58 -0
  200. agno/os/routers/metrics/schemas.py +47 -0
  201. agno/os/routers/session/__init__.py +3 -0
  202. agno/os/routers/session/session.py +163 -0
  203. agno/os/schema.py +892 -0
  204. agno/{app/playground → os}/settings.py +8 -15
  205. agno/os/utils.py +270 -0
  206. agno/reasoning/azure_ai_foundry.py +4 -4
  207. agno/reasoning/deepseek.py +4 -4
  208. agno/reasoning/default.py +6 -11
  209. agno/reasoning/groq.py +4 -4
  210. agno/reasoning/helpers.py +4 -6
  211. agno/reasoning/ollama.py +4 -4
  212. agno/reasoning/openai.py +4 -4
  213. agno/run/{response.py → agent.py} +144 -72
  214. agno/run/base.py +44 -58
  215. agno/run/cancel.py +83 -0
  216. agno/run/team.py +133 -77
  217. agno/run/workflow.py +537 -12
  218. agno/session/__init__.py +10 -0
  219. agno/session/agent.py +244 -0
  220. agno/session/summary.py +225 -0
  221. agno/session/team.py +262 -0
  222. agno/{storage/session/v2 → session}/workflow.py +47 -24
  223. agno/team/__init__.py +15 -16
  224. agno/team/team.py +2967 -4243
  225. agno/tools/agentql.py +14 -5
  226. agno/tools/airflow.py +9 -4
  227. agno/tools/api.py +7 -3
  228. agno/tools/apify.py +2 -46
  229. agno/tools/arxiv.py +8 -3
  230. agno/tools/aws_lambda.py +7 -5
  231. agno/tools/aws_ses.py +7 -1
  232. agno/tools/baidusearch.py +4 -1
  233. agno/tools/bitbucket.py +4 -4
  234. agno/tools/brandfetch.py +14 -11
  235. agno/tools/bravesearch.py +4 -1
  236. agno/tools/brightdata.py +42 -22
  237. agno/tools/browserbase.py +13 -4
  238. agno/tools/calcom.py +12 -10
  239. agno/tools/calculator.py +10 -27
  240. agno/tools/cartesia.py +18 -13
  241. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  242. agno/tools/confluence.py +71 -18
  243. agno/tools/crawl4ai.py +7 -1
  244. agno/tools/csv_toolkit.py +9 -8
  245. agno/tools/dalle.py +18 -11
  246. agno/tools/daytona.py +13 -16
  247. agno/tools/decorator.py +6 -3
  248. agno/tools/desi_vocal.py +16 -7
  249. agno/tools/discord.py +11 -8
  250. agno/tools/docker.py +30 -42
  251. agno/tools/duckdb.py +34 -53
  252. agno/tools/duckduckgo.py +8 -7
  253. agno/tools/e2b.py +62 -62
  254. agno/tools/eleven_labs.py +35 -28
  255. agno/tools/email.py +4 -1
  256. agno/tools/evm.py +7 -1
  257. agno/tools/exa.py +19 -14
  258. agno/tools/fal.py +29 -29
  259. agno/tools/file.py +9 -8
  260. agno/tools/financial_datasets.py +25 -44
  261. agno/tools/firecrawl.py +22 -22
  262. agno/tools/function.py +68 -17
  263. agno/tools/giphy.py +22 -10
  264. agno/tools/github.py +48 -126
  265. agno/tools/gmail.py +46 -62
  266. agno/tools/google_bigquery.py +7 -6
  267. agno/tools/google_maps.py +11 -26
  268. agno/tools/googlesearch.py +7 -2
  269. agno/tools/googlesheets.py +21 -17
  270. agno/tools/hackernews.py +9 -5
  271. agno/tools/jina.py +5 -4
  272. agno/tools/jira.py +18 -9
  273. agno/tools/knowledge.py +31 -32
  274. agno/tools/linear.py +18 -33
  275. agno/tools/linkup.py +5 -1
  276. agno/tools/local_file_system.py +8 -5
  277. agno/tools/lumalab.py +31 -19
  278. agno/tools/mem0.py +18 -12
  279. agno/tools/memori.py +14 -10
  280. agno/tools/mlx_transcribe.py +3 -2
  281. agno/tools/models/azure_openai.py +32 -14
  282. agno/tools/models/gemini.py +58 -31
  283. agno/tools/models/groq.py +29 -20
  284. agno/tools/models/nebius.py +27 -11
  285. agno/tools/models_labs.py +39 -15
  286. agno/tools/moviepy_video.py +7 -6
  287. agno/tools/neo4j.py +134 -0
  288. agno/tools/newspaper.py +7 -2
  289. agno/tools/newspaper4k.py +8 -3
  290. agno/tools/openai.py +57 -26
  291. agno/tools/openbb.py +12 -11
  292. agno/tools/opencv.py +62 -46
  293. agno/tools/openweather.py +14 -12
  294. agno/tools/pandas.py +11 -3
  295. agno/tools/postgres.py +4 -12
  296. agno/tools/pubmed.py +4 -1
  297. agno/tools/python.py +9 -22
  298. agno/tools/reasoning.py +35 -27
  299. agno/tools/reddit.py +11 -26
  300. agno/tools/replicate.py +54 -41
  301. agno/tools/resend.py +4 -1
  302. agno/tools/scrapegraph.py +15 -14
  303. agno/tools/searxng.py +10 -23
  304. agno/tools/serpapi.py +6 -3
  305. agno/tools/serper.py +13 -4
  306. agno/tools/shell.py +9 -2
  307. agno/tools/slack.py +12 -11
  308. agno/tools/sleep.py +3 -2
  309. agno/tools/spider.py +24 -4
  310. agno/tools/sql.py +7 -6
  311. agno/tools/tavily.py +6 -4
  312. agno/tools/telegram.py +12 -4
  313. agno/tools/todoist.py +11 -31
  314. agno/tools/toolkit.py +1 -1
  315. agno/tools/trafilatura.py +22 -6
  316. agno/tools/trello.py +9 -22
  317. agno/tools/twilio.py +10 -3
  318. agno/tools/user_control_flow.py +6 -1
  319. agno/tools/valyu.py +34 -5
  320. agno/tools/visualization.py +19 -28
  321. agno/tools/webbrowser.py +4 -3
  322. agno/tools/webex.py +11 -7
  323. agno/tools/website.py +15 -46
  324. agno/tools/webtools.py +12 -4
  325. agno/tools/whatsapp.py +5 -9
  326. agno/tools/wikipedia.py +20 -13
  327. agno/tools/x.py +14 -13
  328. agno/tools/yfinance.py +13 -40
  329. agno/tools/youtube.py +26 -20
  330. agno/tools/zendesk.py +7 -2
  331. agno/tools/zep.py +10 -7
  332. agno/tools/zoom.py +10 -9
  333. agno/utils/common.py +1 -19
  334. agno/utils/events.py +95 -118
  335. agno/utils/knowledge.py +29 -0
  336. agno/utils/location.py +2 -2
  337. agno/utils/log.py +2 -2
  338. agno/utils/mcp.py +11 -5
  339. agno/utils/media.py +39 -0
  340. agno/utils/message.py +12 -1
  341. agno/utils/models/claude.py +6 -4
  342. agno/utils/models/mistral.py +8 -7
  343. agno/utils/models/schema_utils.py +3 -3
  344. agno/utils/pprint.py +33 -32
  345. agno/utils/print_response/agent.py +779 -0
  346. agno/utils/print_response/team.py +1565 -0
  347. agno/utils/print_response/workflow.py +1451 -0
  348. agno/utils/prompts.py +14 -14
  349. agno/utils/reasoning.py +87 -0
  350. agno/utils/response.py +42 -42
  351. agno/utils/string.py +8 -22
  352. agno/utils/team.py +50 -0
  353. agno/utils/timer.py +2 -2
  354. agno/vectordb/base.py +33 -21
  355. agno/vectordb/cassandra/cassandra.py +287 -23
  356. agno/vectordb/chroma/chromadb.py +482 -59
  357. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  358. agno/vectordb/couchbase/couchbase.py +309 -29
  359. agno/vectordb/lancedb/lance_db.py +360 -21
  360. agno/vectordb/langchaindb/__init__.py +5 -0
  361. agno/vectordb/langchaindb/langchaindb.py +145 -0
  362. agno/vectordb/lightrag/__init__.py +5 -0
  363. agno/vectordb/lightrag/lightrag.py +374 -0
  364. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  365. agno/vectordb/milvus/milvus.py +242 -32
  366. agno/vectordb/mongodb/mongodb.py +200 -24
  367. agno/vectordb/pgvector/pgvector.py +319 -37
  368. agno/vectordb/pineconedb/pineconedb.py +221 -27
  369. agno/vectordb/qdrant/qdrant.py +356 -14
  370. agno/vectordb/singlestore/singlestore.py +286 -29
  371. agno/vectordb/surrealdb/surrealdb.py +187 -7
  372. agno/vectordb/upstashdb/upstashdb.py +342 -26
  373. agno/vectordb/weaviate/weaviate.py +227 -165
  374. agno/workflow/__init__.py +17 -13
  375. agno/workflow/{v2/condition.py → condition.py} +135 -32
  376. agno/workflow/{v2/loop.py → loop.py} +115 -28
  377. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  378. agno/workflow/{v2/router.py → router.py} +133 -32
  379. agno/workflow/{v2/step.py → step.py} +200 -42
  380. agno/workflow/{v2/steps.py → steps.py} +147 -66
  381. agno/workflow/types.py +482 -0
  382. agno/workflow/workflow.py +2394 -696
  383. agno-2.0.0a1.dist-info/METADATA +355 -0
  384. agno-2.0.0a1.dist-info/RECORD +514 -0
  385. agno/agent/metrics.py +0 -107
  386. agno/api/app.py +0 -35
  387. agno/api/playground.py +0 -92
  388. agno/api/schemas/app.py +0 -12
  389. agno/api/schemas/playground.py +0 -22
  390. agno/api/schemas/user.py +0 -35
  391. agno/api/schemas/workspace.py +0 -46
  392. agno/api/user.py +0 -160
  393. agno/api/workflows.py +0 -33
  394. agno/api/workspace.py +0 -175
  395. agno/app/agui/__init__.py +0 -3
  396. agno/app/agui/app.py +0 -17
  397. agno/app/agui/sync_router.py +0 -120
  398. agno/app/base.py +0 -186
  399. agno/app/discord/__init__.py +0 -3
  400. agno/app/fastapi/__init__.py +0 -3
  401. agno/app/fastapi/app.py +0 -107
  402. agno/app/fastapi/async_router.py +0 -457
  403. agno/app/fastapi/sync_router.py +0 -448
  404. agno/app/playground/app.py +0 -228
  405. agno/app/playground/async_router.py +0 -1050
  406. agno/app/playground/deploy.py +0 -249
  407. agno/app/playground/operator.py +0 -183
  408. agno/app/playground/schemas.py +0 -220
  409. agno/app/playground/serve.py +0 -55
  410. agno/app/playground/sync_router.py +0 -1042
  411. agno/app/playground/utils.py +0 -46
  412. agno/app/settings.py +0 -15
  413. agno/app/slack/__init__.py +0 -3
  414. agno/app/slack/app.py +0 -19
  415. agno/app/slack/sync_router.py +0 -92
  416. agno/app/utils.py +0 -54
  417. agno/app/whatsapp/__init__.py +0 -3
  418. agno/app/whatsapp/app.py +0 -15
  419. agno/app/whatsapp/sync_router.py +0 -197
  420. agno/cli/auth_server.py +0 -249
  421. agno/cli/config.py +0 -274
  422. agno/cli/console.py +0 -88
  423. agno/cli/credentials.py +0 -23
  424. agno/cli/entrypoint.py +0 -571
  425. agno/cli/operator.py +0 -357
  426. agno/cli/settings.py +0 -96
  427. agno/cli/ws/ws_cli.py +0 -817
  428. agno/constants.py +0 -13
  429. agno/document/__init__.py +0 -5
  430. agno/document/chunking/semantic.py +0 -45
  431. agno/document/chunking/strategy.py +0 -31
  432. agno/document/reader/__init__.py +0 -5
  433. agno/document/reader/base.py +0 -47
  434. agno/document/reader/docx_reader.py +0 -60
  435. agno/document/reader/gcs/pdf_reader.py +0 -44
  436. agno/document/reader/s3/pdf_reader.py +0 -59
  437. agno/document/reader/s3/text_reader.py +0 -63
  438. agno/document/reader/url_reader.py +0 -59
  439. agno/document/reader/youtube_reader.py +0 -58
  440. agno/embedder/__init__.py +0 -5
  441. agno/embedder/langdb.py +0 -80
  442. agno/embedder/mistral.py +0 -82
  443. agno/embedder/openai.py +0 -78
  444. agno/file/__init__.py +0 -5
  445. agno/file/file.py +0 -16
  446. agno/file/local/csv.py +0 -32
  447. agno/file/local/txt.py +0 -19
  448. agno/infra/app.py +0 -240
  449. agno/infra/base.py +0 -144
  450. agno/infra/context.py +0 -20
  451. agno/infra/db_app.py +0 -52
  452. agno/infra/resource.py +0 -205
  453. agno/infra/resources.py +0 -55
  454. agno/knowledge/agent.py +0 -698
  455. agno/knowledge/arxiv.py +0 -33
  456. agno/knowledge/combined.py +0 -36
  457. agno/knowledge/csv.py +0 -144
  458. agno/knowledge/csv_url.py +0 -124
  459. agno/knowledge/document.py +0 -223
  460. agno/knowledge/docx.py +0 -137
  461. agno/knowledge/firecrawl.py +0 -34
  462. agno/knowledge/gcs/__init__.py +0 -0
  463. agno/knowledge/gcs/base.py +0 -39
  464. agno/knowledge/gcs/pdf.py +0 -125
  465. agno/knowledge/json.py +0 -137
  466. agno/knowledge/langchain.py +0 -71
  467. agno/knowledge/light_rag.py +0 -273
  468. agno/knowledge/llamaindex.py +0 -66
  469. agno/knowledge/markdown.py +0 -154
  470. agno/knowledge/pdf.py +0 -164
  471. agno/knowledge/pdf_bytes.py +0 -42
  472. agno/knowledge/pdf_url.py +0 -148
  473. agno/knowledge/s3/__init__.py +0 -0
  474. agno/knowledge/s3/base.py +0 -64
  475. agno/knowledge/s3/pdf.py +0 -33
  476. agno/knowledge/s3/text.py +0 -34
  477. agno/knowledge/text.py +0 -141
  478. agno/knowledge/url.py +0 -46
  479. agno/knowledge/website.py +0 -179
  480. agno/knowledge/wikipedia.py +0 -32
  481. agno/knowledge/youtube.py +0 -35
  482. agno/memory/agent.py +0 -423
  483. agno/memory/classifier.py +0 -104
  484. agno/memory/db/__init__.py +0 -5
  485. agno/memory/db/base.py +0 -42
  486. agno/memory/db/mongodb.py +0 -189
  487. agno/memory/db/postgres.py +0 -203
  488. agno/memory/db/sqlite.py +0 -193
  489. agno/memory/memory.py +0 -22
  490. agno/memory/row.py +0 -36
  491. agno/memory/summarizer.py +0 -201
  492. agno/memory/summary.py +0 -19
  493. agno/memory/team.py +0 -415
  494. agno/memory/v2/__init__.py +0 -2
  495. agno/memory/v2/db/__init__.py +0 -1
  496. agno/memory/v2/db/base.py +0 -42
  497. agno/memory/v2/db/firestore.py +0 -339
  498. agno/memory/v2/db/mongodb.py +0 -196
  499. agno/memory/v2/db/postgres.py +0 -214
  500. agno/memory/v2/db/redis.py +0 -187
  501. agno/memory/v2/db/schema.py +0 -54
  502. agno/memory/v2/db/sqlite.py +0 -209
  503. agno/memory/v2/manager.py +0 -437
  504. agno/memory/v2/memory.py +0 -1097
  505. agno/memory/v2/schema.py +0 -55
  506. agno/memory/v2/summarizer.py +0 -215
  507. agno/memory/workflow.py +0 -38
  508. agno/models/ollama/tools.py +0 -430
  509. agno/models/qwen/__init__.py +0 -5
  510. agno/playground/__init__.py +0 -10
  511. agno/playground/deploy.py +0 -3
  512. agno/playground/playground.py +0 -3
  513. agno/playground/serve.py +0 -3
  514. agno/playground/settings.py +0 -3
  515. agno/reranker/__init__.py +0 -0
  516. agno/run/v2/__init__.py +0 -0
  517. agno/run/v2/workflow.py +0 -567
  518. agno/storage/__init__.py +0 -0
  519. agno/storage/agent/__init__.py +0 -0
  520. agno/storage/agent/dynamodb.py +0 -1
  521. agno/storage/agent/json.py +0 -1
  522. agno/storage/agent/mongodb.py +0 -1
  523. agno/storage/agent/postgres.py +0 -1
  524. agno/storage/agent/singlestore.py +0 -1
  525. agno/storage/agent/sqlite.py +0 -1
  526. agno/storage/agent/yaml.py +0 -1
  527. agno/storage/base.py +0 -60
  528. agno/storage/dynamodb.py +0 -673
  529. agno/storage/firestore.py +0 -297
  530. agno/storage/gcs_json.py +0 -261
  531. agno/storage/in_memory.py +0 -234
  532. agno/storage/json.py +0 -237
  533. agno/storage/mongodb.py +0 -328
  534. agno/storage/mysql.py +0 -685
  535. agno/storage/postgres.py +0 -682
  536. agno/storage/redis.py +0 -336
  537. agno/storage/session/__init__.py +0 -16
  538. agno/storage/session/agent.py +0 -64
  539. agno/storage/session/team.py +0 -63
  540. agno/storage/session/v2/__init__.py +0 -5
  541. agno/storage/session/workflow.py +0 -61
  542. agno/storage/singlestore.py +0 -606
  543. agno/storage/sqlite.py +0 -646
  544. agno/storage/workflow/__init__.py +0 -0
  545. agno/storage/workflow/mongodb.py +0 -1
  546. agno/storage/workflow/postgres.py +0 -1
  547. agno/storage/workflow/sqlite.py +0 -1
  548. agno/storage/yaml.py +0 -241
  549. agno/tools/thinking.py +0 -73
  550. agno/utils/defaults.py +0 -57
  551. agno/utils/filesystem.py +0 -39
  552. agno/utils/git.py +0 -52
  553. agno/utils/json_io.py +0 -30
  554. agno/utils/load_env.py +0 -19
  555. agno/utils/py_io.py +0 -19
  556. agno/utils/pyproject.py +0 -18
  557. agno/utils/resource_filter.py +0 -31
  558. agno/workflow/v2/__init__.py +0 -21
  559. agno/workflow/v2/types.py +0 -357
  560. agno/workflow/v2/workflow.py +0 -3312
  561. agno/workspace/__init__.py +0 -0
  562. agno/workspace/config.py +0 -325
  563. agno/workspace/enums.py +0 -6
  564. agno/workspace/helpers.py +0 -52
  565. agno/workspace/operator.py +0 -757
  566. agno/workspace/settings.py +0 -158
  567. agno-1.8.0.dist-info/METADATA +0 -979
  568. agno-1.8.0.dist-info/RECORD +0 -565
  569. agno-1.8.0.dist-info/entry_points.txt +0 -3
  570. /agno/{app → db/migrations}/__init__.py +0 -0
  571. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  572. /agno/{cli → integrations}/__init__.py +0 -0
  573. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  574. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  575. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  576. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  577. /agno/{app → os/interfaces}/slack/security.py +0 -0
  578. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  579. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  580. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  581. {agno-1.8.0.dist-info → agno-2.0.0a1.dist-info}/WHEEL +0 -0
  582. {agno-1.8.0.dist-info → agno-2.0.0a1.dist-info}/licenses/LICENSE +0 -0
  583. {agno-1.8.0.dist-info → agno-2.0.0a1.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,220 +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
-
95
-
96
- class MemoryResponse(BaseModel):
97
- memory: str
98
- topics: Optional[List[str]] = None
99
- last_updated: Optional[datetime] = None
100
-
101
-
102
- class WorkflowRenameRequest(BaseModel):
103
- name: str
104
-
105
-
106
- class WorkflowRunRequest(BaseModel):
107
- input: Dict[str, Any]
108
- user_id: Optional[str] = None
109
- session_id: Optional[str] = None
110
- stream: bool = True
111
-
112
-
113
- class WorkflowSessionResponse(BaseModel):
114
- title: Optional[str] = None
115
- session_id: Optional[str] = None
116
- session_name: Optional[str] = None
117
- created_at: Optional[int] = None
118
-
119
-
120
- class WorkflowGetResponse(BaseModel):
121
- workflow_id: str
122
- name: Optional[str] = None
123
- description: Optional[str] = None
124
- parameters: Optional[Dict[str, Any]] = None
125
- storage: Optional[str] = None
126
-
127
-
128
- class WorkflowsGetResponse(BaseModel):
129
- workflow_id: str
130
- name: str
131
- description: Optional[str] = None
132
-
133
-
134
- class TeamModel(BaseModel):
135
- name: Optional[str] = None
136
- model: Optional[str] = None
137
- provider: Optional[str] = None
138
-
139
-
140
- class TeamGetResponse(BaseModel):
141
- team_id: Optional[str] = None
142
- name: Optional[str] = None
143
- description: Optional[str] = None
144
- mode: Optional[str] = None
145
- model: Optional[TeamModel] = None
146
- success_criteria: Optional[str] = None
147
- instructions: Optional[Union[List[str], str, Callable]] = None
148
- members: Optional[List[Union[AgentGetResponse, "TeamGetResponse"]]] = None
149
- expected_output: Optional[str] = None
150
- context: Optional[str] = None
151
- enable_agentic_context: Optional[bool] = None
152
- storage: Optional[Dict[str, Any]] = None
153
- memory: Optional[Dict[str, Any]] = None
154
- async_mode: bool = False
155
-
156
- @classmethod
157
- def from_team(self, team: Team, async_mode: bool = False) -> "TeamGetResponse":
158
- import json
159
-
160
- memory_dict: Optional[Dict[str, Any]] = {}
161
- if isinstance(team.memory, Memory):
162
- memory_dict = {"name": "Memory"}
163
- if team.memory.model is not None:
164
- memory_dict["model"] = AgentModel(
165
- name=team.memory.model.name,
166
- model=team.memory.model.id,
167
- provider=team.memory.model.provider,
168
- )
169
- if team.memory.db is not None:
170
- memory_dict["db"] = team.memory.db.__dict__() # type: ignore
171
- elif isinstance(team.memory, TeamMemory):
172
- memory_dict = {"name": team.memory.db.__class__.__name__}
173
- else:
174
- memory_dict = None
175
-
176
- return TeamGetResponse(
177
- team_id=team.team_id,
178
- name=team.name,
179
- model=TeamModel(
180
- name=team.model.name or team.model.__class__.__name__ if team.model else None,
181
- model=team.model.id if team.model else None,
182
- provider=team.model.provider or team.model.__class__.__name__ if team.model else None,
183
- ),
184
- success_criteria=team.success_criteria,
185
- instructions=team.instructions,
186
- description=team.description,
187
- expected_output=team.expected_output,
188
- context=json.dumps(team.context) if isinstance(team.context, dict) else team.context,
189
- enable_agentic_context=team.enable_agentic_context,
190
- mode=team.mode,
191
- storage={"name": team.storage.__class__.__name__} if team.storage else None,
192
- memory=memory_dict,
193
- members=[
194
- AgentGetResponse.from_agent(member, async_mode=async_mode)
195
- if isinstance(member, Agent)
196
- else TeamGetResponse.from_team(member, async_mode=async_mode)
197
- if isinstance(member, Team)
198
- else None
199
- for member in team.members
200
- ],
201
- )
202
-
203
-
204
- class TeamRunRequest(BaseModel):
205
- input: Dict[str, Any]
206
- user_id: Optional[str] = None
207
- session_id: Optional[str] = None
208
- files: Optional[List[UploadFile]] = None
209
-
210
-
211
- class TeamSessionResponse(BaseModel):
212
- title: Optional[str] = None
213
- session_id: Optional[str] = None
214
- session_name: Optional[str] = None
215
- created_at: Optional[int] = None
216
-
217
-
218
- class TeamRenameRequest(BaseModel):
219
- name: str
220
- user_id: str