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

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