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

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