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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (580) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +19 -27
  3. agno/agent/agent.py +2778 -4123
  4. agno/api/agent.py +9 -65
  5. agno/api/api.py +5 -46
  6. agno/api/evals.py +6 -17
  7. agno/api/os.py +17 -0
  8. agno/api/routes.py +6 -41
  9. agno/api/schemas/__init__.py +9 -0
  10. agno/api/schemas/agent.py +5 -21
  11. agno/api/schemas/evals.py +7 -16
  12. agno/api/schemas/os.py +14 -0
  13. agno/api/schemas/team.py +5 -21
  14. agno/api/schemas/utils.py +21 -0
  15. agno/api/schemas/workflows.py +11 -7
  16. agno/api/settings.py +53 -0
  17. agno/api/team.py +9 -64
  18. agno/api/workflow.py +28 -0
  19. agno/cloud/aws/base.py +214 -0
  20. agno/cloud/aws/s3/__init__.py +2 -0
  21. agno/cloud/aws/s3/api_client.py +43 -0
  22. agno/cloud/aws/s3/bucket.py +195 -0
  23. agno/cloud/aws/s3/object.py +57 -0
  24. agno/db/__init__.py +24 -0
  25. agno/db/base.py +245 -0
  26. agno/db/dynamo/__init__.py +3 -0
  27. agno/db/dynamo/dynamo.py +1749 -0
  28. agno/db/dynamo/schemas.py +278 -0
  29. agno/db/dynamo/utils.py +684 -0
  30. agno/db/firestore/__init__.py +3 -0
  31. agno/db/firestore/firestore.py +1438 -0
  32. agno/db/firestore/schemas.py +130 -0
  33. agno/db/firestore/utils.py +278 -0
  34. agno/db/gcs_json/__init__.py +3 -0
  35. agno/db/gcs_json/gcs_json_db.py +1001 -0
  36. agno/db/gcs_json/utils.py +194 -0
  37. agno/db/in_memory/__init__.py +3 -0
  38. agno/db/in_memory/in_memory_db.py +888 -0
  39. agno/db/in_memory/utils.py +172 -0
  40. agno/db/json/__init__.py +3 -0
  41. agno/db/json/json_db.py +1051 -0
  42. agno/db/json/utils.py +196 -0
  43. agno/db/migrations/v1_to_v2.py +162 -0
  44. agno/db/mongo/__init__.py +3 -0
  45. agno/db/mongo/mongo.py +1417 -0
  46. agno/db/mongo/schemas.py +77 -0
  47. agno/db/mongo/utils.py +204 -0
  48. agno/db/mysql/__init__.py +3 -0
  49. agno/db/mysql/mysql.py +1719 -0
  50. agno/db/mysql/schemas.py +124 -0
  51. agno/db/mysql/utils.py +298 -0
  52. agno/db/postgres/__init__.py +3 -0
  53. agno/db/postgres/postgres.py +1720 -0
  54. agno/db/postgres/schemas.py +124 -0
  55. agno/db/postgres/utils.py +281 -0
  56. agno/db/redis/__init__.py +3 -0
  57. agno/db/redis/redis.py +1371 -0
  58. agno/db/redis/schemas.py +109 -0
  59. agno/db/redis/utils.py +288 -0
  60. agno/db/schemas/__init__.py +3 -0
  61. agno/db/schemas/evals.py +33 -0
  62. agno/db/schemas/knowledge.py +40 -0
  63. agno/db/schemas/memory.py +46 -0
  64. agno/db/singlestore/__init__.py +3 -0
  65. agno/db/singlestore/schemas.py +116 -0
  66. agno/db/singlestore/singlestore.py +1722 -0
  67. agno/db/singlestore/utils.py +327 -0
  68. agno/db/sqlite/__init__.py +3 -0
  69. agno/db/sqlite/schemas.py +119 -0
  70. agno/db/sqlite/sqlite.py +1680 -0
  71. agno/db/sqlite/utils.py +269 -0
  72. agno/db/utils.py +88 -0
  73. agno/eval/__init__.py +14 -0
  74. agno/eval/accuracy.py +142 -43
  75. agno/eval/performance.py +88 -23
  76. agno/eval/reliability.py +73 -20
  77. agno/eval/utils.py +23 -13
  78. agno/integrations/discord/__init__.py +3 -0
  79. agno/{app → integrations}/discord/client.py +10 -10
  80. agno/knowledge/__init__.py +2 -2
  81. agno/{document → knowledge}/chunking/agentic.py +2 -2
  82. agno/{document → knowledge}/chunking/document.py +2 -2
  83. agno/{document → knowledge}/chunking/fixed.py +3 -3
  84. agno/{document → knowledge}/chunking/markdown.py +2 -2
  85. agno/{document → knowledge}/chunking/recursive.py +2 -2
  86. agno/{document → knowledge}/chunking/row.py +2 -2
  87. agno/knowledge/chunking/semantic.py +59 -0
  88. agno/knowledge/chunking/strategy.py +121 -0
  89. agno/knowledge/content.py +74 -0
  90. agno/knowledge/document/__init__.py +5 -0
  91. agno/{document → knowledge/document}/base.py +12 -2
  92. agno/knowledge/embedder/__init__.py +5 -0
  93. agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
  94. agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
  95. agno/{embedder → knowledge/embedder}/base.py +6 -0
  96. agno/{embedder → knowledge/embedder}/cohere.py +72 -1
  97. agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
  98. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  99. agno/{embedder → knowledge/embedder}/google.py +74 -1
  100. agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
  101. agno/{embedder → knowledge/embedder}/jina.py +48 -2
  102. agno/knowledge/embedder/langdb.py +22 -0
  103. agno/knowledge/embedder/mistral.py +139 -0
  104. agno/{embedder → knowledge/embedder}/nebius.py +1 -1
  105. agno/{embedder → knowledge/embedder}/ollama.py +54 -3
  106. agno/knowledge/embedder/openai.py +223 -0
  107. agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
  108. agno/{embedder → knowledge/embedder}/together.py +1 -1
  109. agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
  110. agno/knowledge/knowledge.py +1515 -0
  111. agno/knowledge/reader/__init__.py +7 -0
  112. agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
  113. agno/knowledge/reader/base.py +88 -0
  114. agno/{document → knowledge}/reader/csv_reader.py +68 -15
  115. agno/knowledge/reader/docx_reader.py +83 -0
  116. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  117. agno/knowledge/reader/gcs_reader.py +67 -0
  118. agno/{document → knowledge}/reader/json_reader.py +30 -9
  119. agno/{document → knowledge}/reader/markdown_reader.py +36 -9
  120. agno/{document → knowledge}/reader/pdf_reader.py +79 -21
  121. agno/knowledge/reader/reader_factory.py +275 -0
  122. agno/knowledge/reader/s3_reader.py +171 -0
  123. agno/{document → knowledge}/reader/text_reader.py +31 -10
  124. agno/knowledge/reader/url_reader.py +84 -0
  125. agno/knowledge/reader/web_search_reader.py +389 -0
  126. agno/{document → knowledge}/reader/website_reader.py +37 -10
  127. agno/knowledge/reader/wikipedia_reader.py +59 -0
  128. agno/knowledge/reader/youtube_reader.py +78 -0
  129. agno/knowledge/remote_content/remote_content.py +88 -0
  130. agno/{reranker → knowledge/reranker}/base.py +1 -1
  131. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  132. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  133. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  134. agno/knowledge/types.py +30 -0
  135. agno/knowledge/utils.py +169 -0
  136. agno/memory/__init__.py +2 -10
  137. agno/memory/manager.py +1003 -148
  138. agno/models/aimlapi/__init__.py +2 -2
  139. agno/models/aimlapi/aimlapi.py +6 -6
  140. agno/models/anthropic/claude.py +129 -82
  141. agno/models/aws/bedrock.py +107 -175
  142. agno/models/aws/claude.py +64 -18
  143. agno/models/azure/ai_foundry.py +73 -23
  144. agno/models/base.py +347 -287
  145. agno/models/cerebras/cerebras.py +84 -27
  146. agno/models/cohere/chat.py +106 -98
  147. agno/models/google/gemini.py +100 -42
  148. agno/models/groq/groq.py +97 -35
  149. agno/models/huggingface/huggingface.py +92 -27
  150. agno/models/ibm/watsonx.py +72 -13
  151. agno/models/litellm/chat.py +85 -13
  152. agno/models/message.py +38 -144
  153. agno/models/meta/llama.py +85 -49
  154. agno/models/metrics.py +120 -0
  155. agno/models/mistral/mistral.py +90 -21
  156. agno/models/ollama/__init__.py +0 -2
  157. agno/models/ollama/chat.py +84 -46
  158. agno/models/openai/chat.py +121 -23
  159. agno/models/openai/responses.py +178 -105
  160. agno/models/perplexity/perplexity.py +26 -2
  161. agno/models/portkey/portkey.py +0 -7
  162. agno/models/response.py +14 -8
  163. agno/models/utils.py +20 -0
  164. agno/models/vercel/__init__.py +2 -2
  165. agno/models/vercel/v0.py +1 -1
  166. agno/models/vllm/__init__.py +2 -2
  167. agno/models/vllm/vllm.py +3 -3
  168. agno/models/xai/xai.py +10 -10
  169. agno/os/__init__.py +3 -0
  170. agno/os/app.py +393 -0
  171. agno/os/auth.py +47 -0
  172. agno/os/config.py +103 -0
  173. agno/os/interfaces/agui/__init__.py +3 -0
  174. agno/os/interfaces/agui/agui.py +31 -0
  175. agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
  176. agno/{app → os/interfaces}/agui/utils.py +65 -28
  177. agno/os/interfaces/base.py +21 -0
  178. agno/os/interfaces/slack/__init__.py +3 -0
  179. agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
  180. agno/os/interfaces/slack/slack.py +33 -0
  181. agno/os/interfaces/whatsapp/__init__.py +3 -0
  182. agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
  183. agno/os/interfaces/whatsapp/whatsapp.py +30 -0
  184. agno/os/router.py +843 -0
  185. agno/os/routers/__init__.py +3 -0
  186. agno/os/routers/evals/__init__.py +3 -0
  187. agno/os/routers/evals/evals.py +204 -0
  188. agno/os/routers/evals/schemas.py +142 -0
  189. agno/os/routers/evals/utils.py +161 -0
  190. agno/os/routers/knowledge/__init__.py +3 -0
  191. agno/os/routers/knowledge/knowledge.py +413 -0
  192. agno/os/routers/knowledge/schemas.py +118 -0
  193. agno/os/routers/memory/__init__.py +3 -0
  194. agno/os/routers/memory/memory.py +179 -0
  195. agno/os/routers/memory/schemas.py +58 -0
  196. agno/os/routers/metrics/__init__.py +3 -0
  197. agno/os/routers/metrics/metrics.py +58 -0
  198. agno/os/routers/metrics/schemas.py +47 -0
  199. agno/os/routers/session/__init__.py +3 -0
  200. agno/os/routers/session/session.py +163 -0
  201. agno/os/schema.py +892 -0
  202. agno/{app/playground → os}/settings.py +8 -15
  203. agno/os/utils.py +270 -0
  204. agno/reasoning/azure_ai_foundry.py +4 -4
  205. agno/reasoning/deepseek.py +4 -4
  206. agno/reasoning/default.py +6 -11
  207. agno/reasoning/groq.py +4 -4
  208. agno/reasoning/helpers.py +4 -6
  209. agno/reasoning/ollama.py +4 -4
  210. agno/reasoning/openai.py +4 -4
  211. agno/run/{response.py → agent.py} +144 -72
  212. agno/run/base.py +44 -58
  213. agno/run/cancel.py +83 -0
  214. agno/run/team.py +133 -77
  215. agno/run/workflow.py +537 -12
  216. agno/session/__init__.py +10 -0
  217. agno/session/agent.py +244 -0
  218. agno/session/summary.py +225 -0
  219. agno/session/team.py +262 -0
  220. agno/{storage/session/v2 → session}/workflow.py +47 -24
  221. agno/team/__init__.py +15 -16
  222. agno/team/team.py +2961 -4253
  223. agno/tools/agentql.py +14 -5
  224. agno/tools/airflow.py +9 -4
  225. agno/tools/api.py +7 -3
  226. agno/tools/apify.py +2 -46
  227. agno/tools/arxiv.py +8 -3
  228. agno/tools/aws_lambda.py +7 -5
  229. agno/tools/aws_ses.py +7 -1
  230. agno/tools/baidusearch.py +4 -1
  231. agno/tools/bitbucket.py +4 -4
  232. agno/tools/brandfetch.py +14 -11
  233. agno/tools/bravesearch.py +4 -1
  234. agno/tools/brightdata.py +42 -22
  235. agno/tools/browserbase.py +13 -4
  236. agno/tools/calcom.py +12 -10
  237. agno/tools/calculator.py +10 -27
  238. agno/tools/cartesia.py +18 -13
  239. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  240. agno/tools/confluence.py +8 -8
  241. agno/tools/crawl4ai.py +7 -1
  242. agno/tools/csv_toolkit.py +9 -8
  243. agno/tools/dalle.py +18 -11
  244. agno/tools/daytona.py +13 -16
  245. agno/tools/decorator.py +6 -3
  246. agno/tools/desi_vocal.py +16 -7
  247. agno/tools/discord.py +11 -8
  248. agno/tools/docker.py +30 -42
  249. agno/tools/duckdb.py +34 -53
  250. agno/tools/duckduckgo.py +8 -7
  251. agno/tools/e2b.py +61 -61
  252. agno/tools/eleven_labs.py +35 -28
  253. agno/tools/email.py +4 -1
  254. agno/tools/evm.py +7 -1
  255. agno/tools/exa.py +19 -14
  256. agno/tools/fal.py +29 -29
  257. agno/tools/file.py +9 -8
  258. agno/tools/financial_datasets.py +25 -44
  259. agno/tools/firecrawl.py +22 -22
  260. agno/tools/function.py +68 -17
  261. agno/tools/giphy.py +22 -10
  262. agno/tools/github.py +48 -126
  263. agno/tools/gmail.py +45 -61
  264. agno/tools/google_bigquery.py +7 -6
  265. agno/tools/google_maps.py +11 -26
  266. agno/tools/googlesearch.py +7 -2
  267. agno/tools/googlesheets.py +21 -17
  268. agno/tools/hackernews.py +9 -5
  269. agno/tools/jina.py +5 -4
  270. agno/tools/jira.py +18 -9
  271. agno/tools/knowledge.py +31 -32
  272. agno/tools/linear.py +18 -33
  273. agno/tools/linkup.py +5 -1
  274. agno/tools/local_file_system.py +8 -5
  275. agno/tools/lumalab.py +31 -19
  276. agno/tools/mem0.py +18 -12
  277. agno/tools/memori.py +14 -10
  278. agno/tools/mlx_transcribe.py +3 -2
  279. agno/tools/models/azure_openai.py +32 -14
  280. agno/tools/models/gemini.py +58 -31
  281. agno/tools/models/groq.py +29 -20
  282. agno/tools/models/nebius.py +27 -11
  283. agno/tools/models_labs.py +39 -15
  284. agno/tools/moviepy_video.py +7 -6
  285. agno/tools/neo4j.py +10 -8
  286. agno/tools/newspaper.py +7 -2
  287. agno/tools/newspaper4k.py +8 -3
  288. agno/tools/openai.py +57 -26
  289. agno/tools/openbb.py +12 -11
  290. agno/tools/opencv.py +62 -46
  291. agno/tools/openweather.py +14 -12
  292. agno/tools/pandas.py +11 -3
  293. agno/tools/postgres.py +4 -12
  294. agno/tools/pubmed.py +4 -1
  295. agno/tools/python.py +9 -22
  296. agno/tools/reasoning.py +35 -27
  297. agno/tools/reddit.py +11 -26
  298. agno/tools/replicate.py +54 -41
  299. agno/tools/resend.py +4 -1
  300. agno/tools/scrapegraph.py +15 -14
  301. agno/tools/searxng.py +10 -23
  302. agno/tools/serpapi.py +6 -3
  303. agno/tools/serper.py +13 -4
  304. agno/tools/shell.py +9 -2
  305. agno/tools/slack.py +12 -11
  306. agno/tools/sleep.py +3 -2
  307. agno/tools/spider.py +24 -4
  308. agno/tools/sql.py +7 -6
  309. agno/tools/tavily.py +6 -4
  310. agno/tools/telegram.py +12 -4
  311. agno/tools/todoist.py +11 -31
  312. agno/tools/toolkit.py +1 -1
  313. agno/tools/trafilatura.py +22 -6
  314. agno/tools/trello.py +9 -22
  315. agno/tools/twilio.py +10 -3
  316. agno/tools/user_control_flow.py +6 -1
  317. agno/tools/valyu.py +34 -5
  318. agno/tools/visualization.py +19 -28
  319. agno/tools/webbrowser.py +4 -3
  320. agno/tools/webex.py +11 -7
  321. agno/tools/website.py +15 -46
  322. agno/tools/webtools.py +12 -4
  323. agno/tools/whatsapp.py +5 -9
  324. agno/tools/wikipedia.py +20 -13
  325. agno/tools/x.py +14 -13
  326. agno/tools/yfinance.py +13 -40
  327. agno/tools/youtube.py +26 -20
  328. agno/tools/zendesk.py +7 -2
  329. agno/tools/zep.py +10 -7
  330. agno/tools/zoom.py +10 -9
  331. agno/utils/common.py +1 -19
  332. agno/utils/events.py +95 -118
  333. agno/utils/knowledge.py +29 -0
  334. agno/utils/log.py +2 -2
  335. agno/utils/mcp.py +11 -5
  336. agno/utils/media.py +39 -0
  337. agno/utils/message.py +12 -1
  338. agno/utils/models/claude.py +6 -4
  339. agno/utils/models/mistral.py +8 -7
  340. agno/utils/models/schema_utils.py +3 -3
  341. agno/utils/pprint.py +33 -32
  342. agno/utils/print_response/agent.py +779 -0
  343. agno/utils/print_response/team.py +1565 -0
  344. agno/utils/print_response/workflow.py +1451 -0
  345. agno/utils/prompts.py +14 -14
  346. agno/utils/reasoning.py +87 -0
  347. agno/utils/response.py +42 -42
  348. agno/utils/string.py +8 -22
  349. agno/utils/team.py +50 -0
  350. agno/utils/timer.py +2 -2
  351. agno/vectordb/base.py +33 -21
  352. agno/vectordb/cassandra/cassandra.py +287 -23
  353. agno/vectordb/chroma/chromadb.py +482 -59
  354. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  355. agno/vectordb/couchbase/couchbase.py +309 -29
  356. agno/vectordb/lancedb/lance_db.py +360 -21
  357. agno/vectordb/langchaindb/__init__.py +5 -0
  358. agno/vectordb/langchaindb/langchaindb.py +145 -0
  359. agno/vectordb/lightrag/__init__.py +5 -0
  360. agno/vectordb/lightrag/lightrag.py +374 -0
  361. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  362. agno/vectordb/milvus/milvus.py +242 -32
  363. agno/vectordb/mongodb/mongodb.py +200 -24
  364. agno/vectordb/pgvector/pgvector.py +319 -37
  365. agno/vectordb/pineconedb/pineconedb.py +221 -27
  366. agno/vectordb/qdrant/qdrant.py +334 -14
  367. agno/vectordb/singlestore/singlestore.py +286 -29
  368. agno/vectordb/surrealdb/surrealdb.py +187 -7
  369. agno/vectordb/upstashdb/upstashdb.py +342 -26
  370. agno/vectordb/weaviate/weaviate.py +227 -165
  371. agno/workflow/__init__.py +17 -13
  372. agno/workflow/{v2/condition.py → condition.py} +135 -32
  373. agno/workflow/{v2/loop.py → loop.py} +115 -28
  374. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  375. agno/workflow/{v2/router.py → router.py} +133 -32
  376. agno/workflow/{v2/step.py → step.py} +200 -42
  377. agno/workflow/{v2/steps.py → steps.py} +147 -66
  378. agno/workflow/types.py +482 -0
  379. agno/workflow/workflow.py +2394 -696
  380. agno-2.0.0a1.dist-info/METADATA +355 -0
  381. agno-2.0.0a1.dist-info/RECORD +514 -0
  382. agno/agent/metrics.py +0 -107
  383. agno/api/app.py +0 -35
  384. agno/api/playground.py +0 -92
  385. agno/api/schemas/app.py +0 -12
  386. agno/api/schemas/playground.py +0 -22
  387. agno/api/schemas/user.py +0 -35
  388. agno/api/schemas/workspace.py +0 -46
  389. agno/api/user.py +0 -160
  390. agno/api/workflows.py +0 -33
  391. agno/api/workspace.py +0 -175
  392. agno/app/agui/__init__.py +0 -3
  393. agno/app/agui/app.py +0 -17
  394. agno/app/agui/sync_router.py +0 -120
  395. agno/app/base.py +0 -186
  396. agno/app/discord/__init__.py +0 -3
  397. agno/app/fastapi/__init__.py +0 -3
  398. agno/app/fastapi/app.py +0 -107
  399. agno/app/fastapi/async_router.py +0 -457
  400. agno/app/fastapi/sync_router.py +0 -448
  401. agno/app/playground/app.py +0 -228
  402. agno/app/playground/async_router.py +0 -1050
  403. agno/app/playground/deploy.py +0 -249
  404. agno/app/playground/operator.py +0 -183
  405. agno/app/playground/schemas.py +0 -220
  406. agno/app/playground/serve.py +0 -55
  407. agno/app/playground/sync_router.py +0 -1042
  408. agno/app/playground/utils.py +0 -46
  409. agno/app/settings.py +0 -15
  410. agno/app/slack/__init__.py +0 -3
  411. agno/app/slack/app.py +0 -19
  412. agno/app/slack/sync_router.py +0 -92
  413. agno/app/utils.py +0 -54
  414. agno/app/whatsapp/__init__.py +0 -3
  415. agno/app/whatsapp/app.py +0 -15
  416. agno/app/whatsapp/sync_router.py +0 -197
  417. agno/cli/auth_server.py +0 -249
  418. agno/cli/config.py +0 -274
  419. agno/cli/console.py +0 -88
  420. agno/cli/credentials.py +0 -23
  421. agno/cli/entrypoint.py +0 -571
  422. agno/cli/operator.py +0 -357
  423. agno/cli/settings.py +0 -96
  424. agno/cli/ws/ws_cli.py +0 -817
  425. agno/constants.py +0 -13
  426. agno/document/__init__.py +0 -5
  427. agno/document/chunking/semantic.py +0 -45
  428. agno/document/chunking/strategy.py +0 -31
  429. agno/document/reader/__init__.py +0 -5
  430. agno/document/reader/base.py +0 -47
  431. agno/document/reader/docx_reader.py +0 -60
  432. agno/document/reader/gcs/pdf_reader.py +0 -44
  433. agno/document/reader/s3/pdf_reader.py +0 -59
  434. agno/document/reader/s3/text_reader.py +0 -63
  435. agno/document/reader/url_reader.py +0 -59
  436. agno/document/reader/youtube_reader.py +0 -58
  437. agno/embedder/__init__.py +0 -5
  438. agno/embedder/langdb.py +0 -80
  439. agno/embedder/mistral.py +0 -82
  440. agno/embedder/openai.py +0 -78
  441. agno/file/__init__.py +0 -5
  442. agno/file/file.py +0 -16
  443. agno/file/local/csv.py +0 -32
  444. agno/file/local/txt.py +0 -19
  445. agno/infra/app.py +0 -240
  446. agno/infra/base.py +0 -144
  447. agno/infra/context.py +0 -20
  448. agno/infra/db_app.py +0 -52
  449. agno/infra/resource.py +0 -205
  450. agno/infra/resources.py +0 -55
  451. agno/knowledge/agent.py +0 -702
  452. agno/knowledge/arxiv.py +0 -33
  453. agno/knowledge/combined.py +0 -36
  454. agno/knowledge/csv.py +0 -144
  455. agno/knowledge/csv_url.py +0 -124
  456. agno/knowledge/document.py +0 -223
  457. agno/knowledge/docx.py +0 -137
  458. agno/knowledge/firecrawl.py +0 -34
  459. agno/knowledge/gcs/__init__.py +0 -0
  460. agno/knowledge/gcs/base.py +0 -39
  461. agno/knowledge/gcs/pdf.py +0 -125
  462. agno/knowledge/json.py +0 -137
  463. agno/knowledge/langchain.py +0 -71
  464. agno/knowledge/light_rag.py +0 -273
  465. agno/knowledge/llamaindex.py +0 -66
  466. agno/knowledge/markdown.py +0 -154
  467. agno/knowledge/pdf.py +0 -164
  468. agno/knowledge/pdf_bytes.py +0 -42
  469. agno/knowledge/pdf_url.py +0 -148
  470. agno/knowledge/s3/__init__.py +0 -0
  471. agno/knowledge/s3/base.py +0 -64
  472. agno/knowledge/s3/pdf.py +0 -33
  473. agno/knowledge/s3/text.py +0 -34
  474. agno/knowledge/text.py +0 -141
  475. agno/knowledge/url.py +0 -46
  476. agno/knowledge/website.py +0 -179
  477. agno/knowledge/wikipedia.py +0 -32
  478. agno/knowledge/youtube.py +0 -35
  479. agno/memory/agent.py +0 -423
  480. agno/memory/classifier.py +0 -104
  481. agno/memory/db/__init__.py +0 -5
  482. agno/memory/db/base.py +0 -42
  483. agno/memory/db/mongodb.py +0 -189
  484. agno/memory/db/postgres.py +0 -203
  485. agno/memory/db/sqlite.py +0 -193
  486. agno/memory/memory.py +0 -22
  487. agno/memory/row.py +0 -36
  488. agno/memory/summarizer.py +0 -201
  489. agno/memory/summary.py +0 -19
  490. agno/memory/team.py +0 -415
  491. agno/memory/v2/__init__.py +0 -2
  492. agno/memory/v2/db/__init__.py +0 -1
  493. agno/memory/v2/db/base.py +0 -42
  494. agno/memory/v2/db/firestore.py +0 -339
  495. agno/memory/v2/db/mongodb.py +0 -196
  496. agno/memory/v2/db/postgres.py +0 -214
  497. agno/memory/v2/db/redis.py +0 -187
  498. agno/memory/v2/db/schema.py +0 -54
  499. agno/memory/v2/db/sqlite.py +0 -209
  500. agno/memory/v2/manager.py +0 -437
  501. agno/memory/v2/memory.py +0 -1097
  502. agno/memory/v2/schema.py +0 -55
  503. agno/memory/v2/summarizer.py +0 -215
  504. agno/memory/workflow.py +0 -38
  505. agno/models/ollama/tools.py +0 -430
  506. agno/models/qwen/__init__.py +0 -5
  507. agno/playground/__init__.py +0 -10
  508. agno/playground/deploy.py +0 -3
  509. agno/playground/playground.py +0 -3
  510. agno/playground/serve.py +0 -3
  511. agno/playground/settings.py +0 -3
  512. agno/reranker/__init__.py +0 -0
  513. agno/run/v2/__init__.py +0 -0
  514. agno/run/v2/workflow.py +0 -567
  515. agno/storage/__init__.py +0 -0
  516. agno/storage/agent/__init__.py +0 -0
  517. agno/storage/agent/dynamodb.py +0 -1
  518. agno/storage/agent/json.py +0 -1
  519. agno/storage/agent/mongodb.py +0 -1
  520. agno/storage/agent/postgres.py +0 -1
  521. agno/storage/agent/singlestore.py +0 -1
  522. agno/storage/agent/sqlite.py +0 -1
  523. agno/storage/agent/yaml.py +0 -1
  524. agno/storage/base.py +0 -60
  525. agno/storage/dynamodb.py +0 -673
  526. agno/storage/firestore.py +0 -297
  527. agno/storage/gcs_json.py +0 -261
  528. agno/storage/in_memory.py +0 -234
  529. agno/storage/json.py +0 -237
  530. agno/storage/mongodb.py +0 -328
  531. agno/storage/mysql.py +0 -685
  532. agno/storage/postgres.py +0 -682
  533. agno/storage/redis.py +0 -336
  534. agno/storage/session/__init__.py +0 -16
  535. agno/storage/session/agent.py +0 -64
  536. agno/storage/session/team.py +0 -63
  537. agno/storage/session/v2/__init__.py +0 -5
  538. agno/storage/session/workflow.py +0 -61
  539. agno/storage/singlestore.py +0 -606
  540. agno/storage/sqlite.py +0 -646
  541. agno/storage/workflow/__init__.py +0 -0
  542. agno/storage/workflow/mongodb.py +0 -1
  543. agno/storage/workflow/postgres.py +0 -1
  544. agno/storage/workflow/sqlite.py +0 -1
  545. agno/storage/yaml.py +0 -241
  546. agno/tools/thinking.py +0 -73
  547. agno/utils/defaults.py +0 -57
  548. agno/utils/filesystem.py +0 -39
  549. agno/utils/git.py +0 -52
  550. agno/utils/json_io.py +0 -30
  551. agno/utils/load_env.py +0 -19
  552. agno/utils/py_io.py +0 -19
  553. agno/utils/pyproject.py +0 -18
  554. agno/utils/resource_filter.py +0 -31
  555. agno/workflow/v2/__init__.py +0 -21
  556. agno/workflow/v2/types.py +0 -357
  557. agno/workflow/v2/workflow.py +0 -3312
  558. agno/workspace/__init__.py +0 -0
  559. agno/workspace/config.py +0 -325
  560. agno/workspace/enums.py +0 -6
  561. agno/workspace/helpers.py +0 -52
  562. agno/workspace/operator.py +0 -757
  563. agno/workspace/settings.py +0 -158
  564. agno-1.8.1.dist-info/METADATA +0 -982
  565. agno-1.8.1.dist-info/RECORD +0 -566
  566. agno-1.8.1.dist-info/entry_points.txt +0 -3
  567. /agno/{app → db/migrations}/__init__.py +0 -0
  568. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  569. /agno/{cli → integrations}/__init__.py +0 -0
  570. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  571. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  572. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  573. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  574. /agno/{app → os/interfaces}/slack/security.py +0 -0
  575. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  576. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  577. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  578. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/WHEEL +0 -0
  579. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/licenses/LICENSE +0 -0
  580. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/top_level.txt +0 -0
agno/api/app.py DELETED
@@ -1,35 +0,0 @@
1
- from agno.api.api import api
2
- from agno.api.routes import ApiRoutes
3
- from agno.api.schemas.app import AppCreate
4
- from agno.cli.settings import agno_cli_settings
5
- from agno.utils.log import log_debug
6
-
7
-
8
- def create_app(app: AppCreate) -> None:
9
- if not agno_cli_settings.api_enabled:
10
- return
11
-
12
- with api.AuthenticatedClient() as api_client:
13
- try:
14
- api_client.post(
15
- ApiRoutes.APP_CREATE,
16
- json=app.model_dump(exclude_none=True),
17
- )
18
-
19
- except Exception as e:
20
- log_debug(f"Could not create App: {e}")
21
-
22
-
23
- async def acreate_app(app: AppCreate) -> None:
24
- if not agno_cli_settings.api_enabled:
25
- return
26
-
27
- async with api.AuthenticatedAsyncClient() as api_client:
28
- try:
29
- await api_client.post(
30
- ApiRoutes.APP_CREATE,
31
- json=app.model_dump(exclude_none=True),
32
- )
33
-
34
- except Exception as e:
35
- log_debug(f"Could not create App: {e}")
agno/api/playground.py DELETED
@@ -1,92 +0,0 @@
1
- from os import getenv
2
- from pathlib import Path
3
- from typing import Dict, List, Union
4
-
5
- from httpx import Client as HttpxClient
6
- from httpx import Response
7
-
8
- from agno.api.api import api, invalid_response
9
- from agno.api.routes import ApiRoutes
10
- from agno.api.schemas.playground import PlaygroundEndpointCreate
11
- from agno.cli.credentials import read_auth_token
12
- from agno.cli.settings import agno_cli_settings
13
- from agno.constants import AGNO_API_KEY_ENV_VAR
14
- from agno.utils.log import logger
15
-
16
-
17
- def create_playground_endpoint(playground: PlaygroundEndpointCreate) -> bool:
18
- logger.debug("--**-- Creating Playground Endpoint")
19
- with api.AuthenticatedClient() as api_client:
20
- try:
21
- r: Response = api_client.post(
22
- ApiRoutes.PLAYGROUND_ENDPOINT_CREATE,
23
- json={"playground": playground.model_dump(exclude_none=True)},
24
- )
25
- if invalid_response(r):
26
- return False
27
-
28
- response_json: Union[Dict, List] = r.json()
29
- if response_json is None:
30
- return False
31
-
32
- # logger.debug(f"Response: {response_json}")
33
- return True
34
- except Exception as e:
35
- logger.debug(f"Could not create Playground Endpoint: {e}")
36
- return False
37
-
38
-
39
- def deploy_playground_archive(name: str, tar_path: Path) -> bool:
40
- """Deploy a playground archive.
41
-
42
- Args:
43
- name (str): Name of the archive
44
- tar_path (Path): Path to the tar file
45
-
46
- Returns:
47
- bool: True if deployment was successful
48
-
49
- Raises:
50
- ValueError: If tar_path is invalid or file is too large
51
- RuntimeError: If deployment fails
52
- """
53
- logger.debug("--**-- Deploying Playground App")
54
-
55
- # Validate input
56
- if not tar_path.exists():
57
- raise ValueError(f"Tar file not found: {tar_path}")
58
-
59
- # Check file size (e.g., 100MB limit)
60
- max_size = 100 * 1024 * 1024 # 100MB
61
- if tar_path.stat().st_size > max_size:
62
- raise ValueError(f"Tar file too large: {tar_path.stat().st_size} bytes (max {max_size} bytes)")
63
-
64
- # Build headers
65
- headers = {}
66
- token = read_auth_token()
67
- if token := read_auth_token():
68
- headers[agno_cli_settings.auth_token_header] = token
69
- if agno_api_key := getenv(AGNO_API_KEY_ENV_VAR):
70
- headers["Authorization"] = f"Bearer {agno_api_key}"
71
-
72
- try:
73
- with (
74
- HttpxClient(base_url=agno_cli_settings.api_url, headers=headers) as api_client,
75
- open(tar_path, "rb") as file,
76
- ):
77
- files = {"file": (tar_path.name, file, "application/gzip")}
78
- r: Response = api_client.post(
79
- ApiRoutes.PLAYGROUND_APP_DEPLOY,
80
- files=files,
81
- data={"name": name},
82
- )
83
-
84
- if invalid_response(r):
85
- raise RuntimeError(f"Deployment failed with status {r.status_code}: {r.text}")
86
-
87
- response_json: Dict = r.json()
88
- logger.debug(f"Response: {response_json}")
89
- return True
90
-
91
- except Exception as e:
92
- raise RuntimeError(f"Failed to deploy playground app: {str(e)}") from e
agno/api/schemas/app.py DELETED
@@ -1,12 +0,0 @@
1
- from typing import Any, Dict, Optional
2
-
3
- from pydantic import BaseModel
4
-
5
-
6
- class AppCreate(BaseModel):
7
- """Data sent to API to create an App"""
8
-
9
- app_id: Optional[str] = None
10
- name: Optional[str] = None
11
- description: Optional[str] = None
12
- config: Dict[str, Any]
@@ -1,22 +0,0 @@
1
- from typing import Any, Dict, Optional
2
- from uuid import UUID
3
-
4
- from pydantic import BaseModel, ConfigDict
5
-
6
-
7
- class PlaygroundEndpointCreate(BaseModel):
8
- """Data sent to API to create a playground endpoint"""
9
-
10
- endpoint: str
11
- playground_data: Optional[Dict[str, Any]] = None
12
-
13
-
14
- class PlaygroundEndpointSchema(BaseModel):
15
- """Schema for a playground endpoint returned by API"""
16
-
17
- id_workspace: Optional[UUID] = None
18
- id_playground_endpoint: Optional[UUID] = None
19
- endpoint: str
20
- playground_data: Optional[Dict[str, Any]] = None
21
-
22
- model_config = ConfigDict(from_attributes=True)
agno/api/schemas/user.py DELETED
@@ -1,35 +0,0 @@
1
- from typing import Any, Dict, Optional
2
-
3
- from pydantic import BaseModel
4
-
5
-
6
- class UserSchema(BaseModel):
7
- """Schema for user data returned by the API."""
8
-
9
- id_user: str
10
- email: Optional[str] = None
11
- username: Optional[str] = None
12
- name: Optional[str] = None
13
- email_verified: Optional[bool] = False
14
- is_active: Optional[bool] = True
15
- is_machine: Optional[bool] = False
16
- user_data: Optional[Dict[str, Any]] = None
17
-
18
-
19
- class EmailPasswordAuthSchema(BaseModel):
20
- email: str
21
- password: str
22
- auth_source: str = "cli"
23
-
24
-
25
- class TeamSchema(BaseModel):
26
- """Schema for team data returned by the API."""
27
-
28
- id_team: str
29
- name: str
30
- url: str
31
-
32
-
33
- class TeamIdentifier(BaseModel):
34
- id_team: Optional[str] = None
35
- team_url: Optional[str] = None
@@ -1,46 +0,0 @@
1
- from typing import Any, Dict, Optional
2
-
3
- from pydantic import BaseModel
4
-
5
-
6
- class WorkspaceCreate(BaseModel):
7
- ws_name: str
8
- git_url: Optional[str] = None
9
- visibility: Optional[str] = None
10
- ws_data: Optional[Dict[str, Any]] = None
11
-
12
-
13
- class WorkspaceUpdate(BaseModel):
14
- id_workspace: str
15
- ws_name: Optional[str] = None
16
- git_url: Optional[str] = None
17
- visibility: Optional[str] = None
18
- ws_data: Optional[Dict[str, Any]] = None
19
- is_active: Optional[bool] = None
20
-
21
-
22
- class WorkspaceDelete(BaseModel):
23
- id_workspace: str
24
- ws_name: Optional[str] = None
25
-
26
-
27
- class WorkspaceEvent(BaseModel):
28
- id_workspace: str
29
- event_type: str
30
- event_status: str
31
- event_data: Optional[Dict[str, Any]] = None
32
-
33
-
34
- class WorkspaceSchema(BaseModel):
35
- """Workspace data returned by the API."""
36
-
37
- id_workspace: Optional[str] = None
38
- ws_name: Optional[str] = None
39
- is_active: Optional[bool] = None
40
- git_url: Optional[str] = None
41
- ws_data: Optional[Dict[str, Any]] = None
42
-
43
-
44
- class WorkspaceIdentifier(BaseModel):
45
- ws_key: Optional[str] = None
46
- id_workspace: Optional[str] = None
agno/api/user.py DELETED
@@ -1,160 +0,0 @@
1
- from typing import Dict, List, Optional, Union
2
-
3
- from httpx import Response, codes
4
-
5
- from agno.api.api import api, invalid_response
6
- from agno.api.routes import ApiRoutes
7
- from agno.api.schemas.user import EmailPasswordAuthSchema, UserSchema
8
- from agno.cli.config import AgnoCliConfig
9
- from agno.cli.settings import agno_cli_settings
10
- from agno.utils.log import logger
11
-
12
-
13
- def user_ping() -> bool:
14
- if not agno_cli_settings.api_enabled:
15
- return False
16
-
17
- logger.debug("--**-- Ping user api")
18
- with api.Client() as api_client:
19
- try:
20
- r: Response = api_client.get(ApiRoutes.USER_HEALTH)
21
- if invalid_response(r):
22
- return False
23
-
24
- if r.status_code == codes.OK:
25
- return True
26
- except Exception as e:
27
- logger.debug(f"Could not ping user api: {e}")
28
- return False
29
-
30
-
31
- def authenticate_and_get_user(auth_token: str, existing_user: Optional[UserSchema] = None) -> Optional[UserSchema]:
32
- if not agno_cli_settings.api_enabled:
33
- return None
34
-
35
- from agno.cli.credentials import read_auth_token
36
-
37
- logger.debug("--**-- Getting user")
38
- auth_header = {agno_cli_settings.auth_token_header: auth_token}
39
- anon_user = None
40
- if existing_user is not None:
41
- if existing_user.email == "anon":
42
- logger.debug(f"Claiming anonymous user: {existing_user.id_user}")
43
- anon_user = {
44
- "email": existing_user.email,
45
- "id_user": existing_user.id_user,
46
- "auth_token": read_auth_token() or "",
47
- }
48
- with api.Client() as api_client:
49
- try:
50
- r: Response = api_client.post(ApiRoutes.USER_CLI_AUTH, headers=auth_header, json=anon_user)
51
- if invalid_response(r):
52
- return None
53
-
54
- user_data = r.json()
55
- if not isinstance(user_data, dict):
56
- return None
57
-
58
- return UserSchema.model_validate(user_data)
59
-
60
- except Exception as e:
61
- logger.debug(f"Could not authenticate user: {e}")
62
- return None
63
-
64
-
65
- def sign_in_user(sign_in_data: EmailPasswordAuthSchema) -> Optional[UserSchema]:
66
- if not agno_cli_settings.api_enabled:
67
- return None
68
-
69
- from agno.cli.credentials import save_auth_token
70
-
71
- logger.debug("--**-- Signing in user")
72
- with api.Client() as api_client:
73
- try:
74
- r: Response = api_client.post(ApiRoutes.USER_SIGN_IN, json=sign_in_data.model_dump())
75
- if invalid_response(r):
76
- return None
77
-
78
- agno_auth_token = r.headers.get(agno_cli_settings.auth_token_header)
79
- if agno_auth_token is None:
80
- logger.error("Could not authenticate user")
81
- return None
82
-
83
- user_data = r.json()
84
- if not isinstance(user_data, dict):
85
- return None
86
-
87
- current_user: UserSchema = UserSchema.model_validate(user_data)
88
-
89
- if current_user is not None:
90
- save_auth_token(agno_auth_token)
91
- return current_user
92
- except Exception as e:
93
- logger.debug(f"Could not sign in user: {e}")
94
- return None
95
-
96
-
97
- def user_is_authenticated() -> bool:
98
- if not agno_cli_settings.api_enabled:
99
- return False
100
-
101
- logger.debug("--**-- Checking if user is authenticated")
102
- agno_config: Optional[AgnoCliConfig] = AgnoCliConfig.from_saved_config()
103
- if agno_config is None:
104
- return False
105
- user: Optional[UserSchema] = agno_config.user
106
- if user is None:
107
- return False
108
-
109
- with api.AuthenticatedClient() as api_client:
110
- try:
111
- r: Response = api_client.post(
112
- ApiRoutes.USER_AUTHENTICATE, json=user.model_dump(include={"id_user", "email"})
113
- )
114
- if invalid_response(r):
115
- return False
116
-
117
- response_json: Union[Dict, List] = r.json()
118
- if response_json is None or not isinstance(response_json, dict):
119
- logger.error("Could not parse response")
120
- return False
121
- if response_json.get("status") == "success":
122
- return True
123
- except Exception as e:
124
- logger.debug(f"Could not check if user is authenticated: {e}")
125
- return False
126
-
127
-
128
- def create_anon_user() -> Optional[UserSchema]:
129
- if not agno_cli_settings.api_enabled:
130
- return None
131
-
132
- from agno.cli.credentials import save_auth_token
133
-
134
- logger.debug("--**-- Creating anon user")
135
- with api.Client() as api_client:
136
- try:
137
- r: Response = api_client.post(
138
- ApiRoutes.USER_CREATE_ANON,
139
- json={"user": {"email": "anon", "username": "anon", "is_machine": True}},
140
- timeout=2.0,
141
- )
142
- if invalid_response(r):
143
- return None
144
-
145
- agno_auth_token = r.headers.get(agno_cli_settings.auth_token_header)
146
- if agno_auth_token is None:
147
- logger.debug("Could not create anon user")
148
- return None
149
-
150
- user_data = r.json()
151
- if not isinstance(user_data, dict):
152
- return None
153
-
154
- current_user: UserSchema = UserSchema.model_validate(user_data)
155
- if current_user is not None:
156
- save_auth_token(agno_auth_token)
157
- return current_user
158
- except Exception as e:
159
- logger.debug(f"Could not create anon user: {e}")
160
- return None
agno/api/workflows.py DELETED
@@ -1,33 +0,0 @@
1
- from agno.api.api import api
2
- from agno.api.routes import ApiRoutes
3
- from agno.api.schemas.workflows import WorkflowCreate
4
- from agno.cli.settings import agno_cli_settings
5
- from agno.utils.log import log_debug
6
-
7
-
8
- def create_workflow(workflow: WorkflowCreate) -> None:
9
- if not agno_cli_settings.api_enabled:
10
- return
11
-
12
- with api.AuthenticatedClient() as api_client:
13
- try:
14
- api_client.post(
15
- ApiRoutes.WORKFLOW_CREATE,
16
- json=workflow.model_dump(exclude_none=True),
17
- )
18
- except Exception as e:
19
- log_debug(f"Could not create Workflow: {e}")
20
-
21
-
22
- async def acreate_workflow(workflow: WorkflowCreate) -> None:
23
- if not agno_cli_settings.api_enabled:
24
- return
25
-
26
- async with api.AuthenticatedAsyncClient() as api_client:
27
- try:
28
- await api_client.post(
29
- ApiRoutes.WORKFLOW_CREATE,
30
- json=workflow.model_dump(exclude_none=True),
31
- )
32
- except Exception as e:
33
- log_debug(f"Could not create Team: {e}")
agno/api/workspace.py DELETED
@@ -1,175 +0,0 @@
1
- from typing import Dict, List, Optional, Union
2
-
3
- from httpx import Response
4
-
5
- from agno.api.api import api, invalid_response
6
- from agno.api.routes import ApiRoutes
7
- from agno.api.schemas.user import TeamIdentifier, TeamSchema, UserSchema
8
- from agno.api.schemas.workspace import (
9
- WorkspaceCreate,
10
- WorkspaceEvent,
11
- WorkspaceSchema,
12
- WorkspaceUpdate,
13
- )
14
- from agno.cli.settings import agno_cli_settings
15
- from agno.utils.log import logger
16
-
17
-
18
- def get_teams_for_user(user: UserSchema) -> Optional[List[TeamSchema]]:
19
- logger.debug("--**-- Reading teams for user")
20
- with api.AuthenticatedClient() as api_client:
21
- try:
22
- r: Response = api_client.post(
23
- ApiRoutes.TEAM_READ_ALL,
24
- json={
25
- "user": user.model_dump(include={"id_user", "email"}),
26
- },
27
- timeout=2.0,
28
- )
29
- if invalid_response(r):
30
- return None
31
-
32
- response_json: Optional[List[Dict]] = r.json()
33
- if response_json is None:
34
- return None
35
-
36
- teams: List[TeamSchema] = [TeamSchema.model_validate(team) for team in response_json]
37
- return teams
38
- except Exception as e:
39
- logger.debug(f"Could not read teams: {e}")
40
- return None
41
-
42
-
43
- def create_workspace_for_user(
44
- user: UserSchema, workspace: WorkspaceCreate, team: Optional[TeamIdentifier] = None
45
- ) -> Optional[WorkspaceSchema]:
46
- logger.debug("--**-- Creating workspace")
47
- with api.AuthenticatedClient() as api_client:
48
- try:
49
- payload = {
50
- "user": user.model_dump(include={"id_user", "email"}),
51
- "workspace": workspace.model_dump(exclude_none=True),
52
- }
53
- if team is not None:
54
- payload["team"] = team.model_dump(exclude_none=True)
55
-
56
- r: Response = api_client.post(
57
- ApiRoutes.WORKSPACE_CREATE,
58
- json=payload,
59
- timeout=2.0,
60
- )
61
- if invalid_response(r):
62
- try:
63
- error_msg = r.json().get("detail", "Permission denied")
64
- except Exception:
65
- error_msg = f"Could not create workspace: {r.text}"
66
- logger.error(error_msg)
67
- return None
68
-
69
- response_json: Union[Dict, List] = r.json()
70
- if response_json is None:
71
- return None
72
-
73
- created_workspace: WorkspaceSchema = WorkspaceSchema.model_validate(response_json)
74
- if created_workspace is not None:
75
- return created_workspace
76
- except Exception as e:
77
- logger.debug(f"Could not create workspace: {e}")
78
- return None
79
-
80
-
81
- def update_workspace_for_user(user: UserSchema, workspace: WorkspaceUpdate) -> Optional[WorkspaceSchema]:
82
- logger.debug("--**-- Updating workspace for user")
83
- with api.AuthenticatedClient() as api_client:
84
- try:
85
- payload = {
86
- "user": user.model_dump(include={"id_user", "email"}),
87
- "workspace": workspace.model_dump(exclude_none=True),
88
- }
89
-
90
- r: Response = api_client.post(
91
- ApiRoutes.WORKSPACE_UPDATE,
92
- json=payload,
93
- )
94
- if invalid_response(r):
95
- try:
96
- error_msg = r.json().get("detail", "Could not update workspace")
97
- except Exception:
98
- error_msg = f"Could not update workspace: {r.text}"
99
- logger.error(error_msg)
100
- return None
101
-
102
- response_json: Union[Dict, List] = r.json()
103
- if response_json is None:
104
- return None
105
-
106
- updated_workspace: WorkspaceSchema = WorkspaceSchema.model_validate(response_json)
107
- if updated_workspace is not None:
108
- return updated_workspace
109
- except Exception as e:
110
- logger.debug(f"Could not update workspace: {e}")
111
- return None
112
-
113
-
114
- def update_workspace_for_team(
115
- user: UserSchema, workspace: WorkspaceUpdate, team: TeamIdentifier
116
- ) -> Optional[WorkspaceSchema]:
117
- logger.debug("--**-- Updating workspace for team")
118
- with api.AuthenticatedClient() as api_client:
119
- try:
120
- payload = {
121
- "user": user.model_dump(include={"id_user", "email"}),
122
- "team_workspace": workspace.model_dump(exclude_none=True).update({"id_team": team.id_team}),
123
- }
124
-
125
- r: Response = api_client.post(
126
- ApiRoutes.WORKSPACE_UPDATE,
127
- json=payload,
128
- )
129
- if invalid_response(r):
130
- try:
131
- error_msg = r.json().get("detail", "Could not update workspace")
132
- except Exception:
133
- error_msg = f"Could not update workspace: {r.text}"
134
- logger.error(error_msg)
135
- return None
136
-
137
- response_json: Union[Dict, List] = r.json()
138
- if response_json is None:
139
- return None
140
-
141
- updated_workspace: WorkspaceSchema = WorkspaceSchema.model_validate(response_json)
142
- if updated_workspace is not None:
143
- return updated_workspace
144
- except Exception as e:
145
- logger.debug(f"Could not update workspace: {e}")
146
- return None
147
-
148
-
149
- def log_workspace_event(user: UserSchema, workspace_event: WorkspaceEvent) -> bool:
150
- if not agno_cli_settings.api_enabled:
151
- return False
152
-
153
- logger.debug("--**-- Log workspace event")
154
- with api.AuthenticatedClient() as api_client:
155
- try:
156
- r: Response = api_client.post(
157
- ApiRoutes.WORKSPACE_EVENT_CREATE,
158
- json={
159
- "user": user.model_dump(include={"id_user", "email"}),
160
- "event": workspace_event.model_dump(exclude_none=True),
161
- },
162
- )
163
- if invalid_response(r):
164
- return False
165
-
166
- response_json: Union[Dict, List] = r.json()
167
- if response_json is None:
168
- return False
169
-
170
- if isinstance(response_json, dict) and response_json.get("status") == "success":
171
- return True
172
- return False
173
- except Exception as e:
174
- logger.debug(f"Could not log workspace event: {e}")
175
- return False
agno/app/agui/__init__.py DELETED
@@ -1,3 +0,0 @@
1
- from agno.app.agui.app import AGUIApp
2
-
3
- __all__ = ["AGUIApp"]
agno/app/agui/app.py DELETED
@@ -1,17 +0,0 @@
1
- """Main class for the AG-UI app, used to expose an Agno Agent or Team in an AG-UI compatible format."""
2
-
3
- from fastapi.routing import APIRouter
4
-
5
- from agno.app.agui.async_router import get_async_agui_router
6
- from agno.app.agui.sync_router import get_sync_agui_router
7
- from agno.app.base import BaseAPIApp
8
-
9
-
10
- class AGUIApp(BaseAPIApp):
11
- type = "agui"
12
-
13
- def get_router(self) -> APIRouter:
14
- return get_sync_agui_router(agent=self.agent, team=self.team)
15
-
16
- def get_async_router(self) -> APIRouter:
17
- return get_async_agui_router(agent=self.agent, team=self.team)