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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (590) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +19 -27
  3. agno/agent/agent.py +3143 -4170
  4. agno/api/agent.py +11 -67
  5. agno/api/api.py +5 -46
  6. agno/api/evals.py +8 -19
  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 +11 -66
  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 +1743 -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 +1432 -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 +882 -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 +1045 -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 +1416 -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 +297 -0
  52. agno/db/postgres/__init__.py +3 -0
  53. agno/db/postgres/postgres.py +1710 -0
  54. agno/db/postgres/schemas.py +124 -0
  55. agno/db/postgres/utils.py +280 -0
  56. agno/db/redis/__init__.py +3 -0
  57. agno/db/redis/redis.py +1367 -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 +1712 -0
  67. agno/db/singlestore/utils.py +326 -0
  68. agno/db/sqlite/__init__.py +3 -0
  69. agno/db/sqlite/schemas.py +119 -0
  70. agno/db/sqlite/sqlite.py +1676 -0
  71. agno/db/sqlite/utils.py +268 -0
  72. agno/db/utils.py +88 -0
  73. agno/eval/__init__.py +14 -0
  74. agno/eval/accuracy.py +154 -48
  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 +15 -11
  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 +1551 -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 +47 -65
  115. agno/knowledge/reader/docx_reader.py +83 -0
  116. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  117. agno/{document → knowledge}/reader/json_reader.py +30 -9
  118. agno/{document → knowledge}/reader/markdown_reader.py +58 -9
  119. agno/{document → knowledge}/reader/pdf_reader.py +71 -126
  120. agno/knowledge/reader/reader_factory.py +268 -0
  121. agno/knowledge/reader/s3_reader.py +101 -0
  122. agno/{document → knowledge}/reader/text_reader.py +31 -10
  123. agno/knowledge/reader/url_reader.py +128 -0
  124. agno/knowledge/reader/web_search_reader.py +366 -0
  125. agno/{document → knowledge}/reader/website_reader.py +37 -10
  126. agno/knowledge/reader/wikipedia_reader.py +59 -0
  127. agno/knowledge/reader/youtube_reader.py +78 -0
  128. agno/knowledge/remote_content/remote_content.py +88 -0
  129. agno/{reranker → knowledge/reranker}/base.py +1 -1
  130. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  131. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  132. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  133. agno/knowledge/types.py +30 -0
  134. agno/knowledge/utils.py +169 -0
  135. agno/media.py +269 -268
  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 +131 -131
  141. agno/models/aws/bedrock.py +110 -182
  142. agno/models/aws/claude.py +64 -18
  143. agno/models/azure/ai_foundry.py +73 -23
  144. agno/models/base.py +346 -290
  145. agno/models/cerebras/cerebras.py +84 -27
  146. agno/models/cohere/chat.py +106 -98
  147. agno/models/google/gemini.py +105 -46
  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 +46 -151
  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 +85 -47
  158. agno/models/openai/chat.py +154 -37
  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 +15 -9
  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 +497 -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 +77 -33
  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 +32 -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 +29 -0
  184. agno/os/mcp.py +235 -0
  185. agno/os/router.py +1400 -0
  186. agno/os/routers/__init__.py +3 -0
  187. agno/os/routers/evals/__init__.py +3 -0
  188. agno/os/routers/evals/evals.py +393 -0
  189. agno/os/routers/evals/schemas.py +142 -0
  190. agno/os/routers/evals/utils.py +161 -0
  191. agno/os/routers/knowledge/__init__.py +3 -0
  192. agno/os/routers/knowledge/knowledge.py +850 -0
  193. agno/os/routers/knowledge/schemas.py +118 -0
  194. agno/os/routers/memory/__init__.py +3 -0
  195. agno/os/routers/memory/memory.py +410 -0
  196. agno/os/routers/memory/schemas.py +58 -0
  197. agno/os/routers/metrics/__init__.py +3 -0
  198. agno/os/routers/metrics/metrics.py +178 -0
  199. agno/os/routers/metrics/schemas.py +47 -0
  200. agno/os/routers/session/__init__.py +3 -0
  201. agno/os/routers/session/session.py +536 -0
  202. agno/os/schema.py +945 -0
  203. agno/{app/playground → os}/settings.py +7 -15
  204. agno/os/utils.py +270 -0
  205. agno/reasoning/azure_ai_foundry.py +4 -4
  206. agno/reasoning/deepseek.py +4 -4
  207. agno/reasoning/default.py +6 -11
  208. agno/reasoning/groq.py +4 -4
  209. agno/reasoning/helpers.py +4 -6
  210. agno/reasoning/ollama.py +4 -4
  211. agno/reasoning/openai.py +4 -4
  212. agno/run/agent.py +633 -0
  213. agno/run/base.py +53 -77
  214. agno/run/cancel.py +81 -0
  215. agno/run/team.py +243 -96
  216. agno/run/workflow.py +550 -12
  217. agno/session/__init__.py +10 -0
  218. agno/session/agent.py +244 -0
  219. agno/session/summary.py +225 -0
  220. agno/session/team.py +262 -0
  221. agno/{storage/session/v2 → session}/workflow.py +47 -24
  222. agno/team/__init__.py +15 -16
  223. agno/team/team.py +3260 -4824
  224. agno/tools/agentql.py +14 -5
  225. agno/tools/airflow.py +9 -4
  226. agno/tools/api.py +7 -3
  227. agno/tools/apify.py +2 -46
  228. agno/tools/arxiv.py +8 -3
  229. agno/tools/aws_lambda.py +7 -5
  230. agno/tools/aws_ses.py +7 -1
  231. agno/tools/baidusearch.py +4 -1
  232. agno/tools/bitbucket.py +4 -4
  233. agno/tools/brandfetch.py +14 -11
  234. agno/tools/bravesearch.py +4 -1
  235. agno/tools/brightdata.py +43 -23
  236. agno/tools/browserbase.py +13 -4
  237. agno/tools/calcom.py +12 -10
  238. agno/tools/calculator.py +10 -27
  239. agno/tools/cartesia.py +20 -17
  240. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  241. agno/tools/confluence.py +8 -8
  242. agno/tools/crawl4ai.py +7 -1
  243. agno/tools/csv_toolkit.py +9 -8
  244. agno/tools/dalle.py +22 -12
  245. agno/tools/daytona.py +13 -16
  246. agno/tools/decorator.py +6 -3
  247. agno/tools/desi_vocal.py +17 -8
  248. agno/tools/discord.py +11 -8
  249. agno/tools/docker.py +30 -42
  250. agno/tools/duckdb.py +34 -53
  251. agno/tools/duckduckgo.py +8 -7
  252. agno/tools/e2b.py +62 -62
  253. agno/tools/eleven_labs.py +36 -29
  254. agno/tools/email.py +4 -1
  255. agno/tools/evm.py +7 -1
  256. agno/tools/exa.py +19 -14
  257. agno/tools/fal.py +30 -30
  258. agno/tools/file.py +9 -8
  259. agno/tools/financial_datasets.py +25 -44
  260. agno/tools/firecrawl.py +22 -22
  261. agno/tools/function.py +127 -18
  262. agno/tools/giphy.py +23 -11
  263. agno/tools/github.py +48 -126
  264. agno/tools/gmail.py +45 -61
  265. agno/tools/google_bigquery.py +7 -6
  266. agno/tools/google_maps.py +11 -26
  267. agno/tools/googlesearch.py +7 -2
  268. agno/tools/googlesheets.py +21 -17
  269. agno/tools/hackernews.py +9 -5
  270. agno/tools/jina.py +5 -4
  271. agno/tools/jira.py +18 -9
  272. agno/tools/knowledge.py +31 -32
  273. agno/tools/linear.py +19 -34
  274. agno/tools/linkup.py +5 -1
  275. agno/tools/local_file_system.py +8 -5
  276. agno/tools/lumalab.py +32 -20
  277. agno/tools/mcp.py +1 -2
  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 +33 -15
  282. agno/tools/models/gemini.py +59 -32
  283. agno/tools/models/groq.py +30 -23
  284. agno/tools/models/nebius.py +28 -12
  285. agno/tools/models_labs.py +40 -16
  286. agno/tools/moviepy_video.py +7 -6
  287. agno/tools/neo4j.py +10 -8
  288. agno/tools/newspaper.py +7 -2
  289. agno/tools/newspaper4k.py +8 -3
  290. agno/tools/openai.py +58 -32
  291. agno/tools/openbb.py +12 -11
  292. agno/tools/opencv.py +63 -47
  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 +55 -42
  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 +100 -123
  335. agno/utils/gemini.py +32 -2
  336. agno/utils/knowledge.py +29 -0
  337. agno/utils/log.py +54 -4
  338. agno/utils/mcp.py +68 -10
  339. agno/utils/media.py +39 -0
  340. agno/utils/message.py +12 -1
  341. agno/utils/models/aws_claude.py +1 -1
  342. agno/utils/models/claude.py +47 -4
  343. agno/utils/models/cohere.py +1 -1
  344. agno/utils/models/mistral.py +8 -7
  345. agno/utils/models/schema_utils.py +3 -3
  346. agno/utils/models/watsonx.py +1 -1
  347. agno/utils/openai.py +1 -1
  348. agno/utils/pprint.py +33 -32
  349. agno/utils/print_response/agent.py +779 -0
  350. agno/utils/print_response/team.py +1669 -0
  351. agno/utils/print_response/workflow.py +1451 -0
  352. agno/utils/prompts.py +14 -14
  353. agno/utils/reasoning.py +87 -0
  354. agno/utils/response.py +42 -42
  355. agno/utils/streamlit.py +481 -0
  356. agno/utils/string.py +8 -22
  357. agno/utils/team.py +50 -0
  358. agno/utils/timer.py +2 -2
  359. agno/vectordb/base.py +33 -21
  360. agno/vectordb/cassandra/cassandra.py +287 -23
  361. agno/vectordb/chroma/chromadb.py +482 -59
  362. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  363. agno/vectordb/couchbase/couchbase.py +309 -29
  364. agno/vectordb/lancedb/lance_db.py +360 -21
  365. agno/vectordb/langchaindb/__init__.py +5 -0
  366. agno/vectordb/langchaindb/langchaindb.py +145 -0
  367. agno/vectordb/lightrag/__init__.py +5 -0
  368. agno/vectordb/lightrag/lightrag.py +374 -0
  369. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  370. agno/vectordb/milvus/milvus.py +242 -32
  371. agno/vectordb/mongodb/mongodb.py +200 -24
  372. agno/vectordb/pgvector/pgvector.py +319 -37
  373. agno/vectordb/pineconedb/pineconedb.py +221 -27
  374. agno/vectordb/qdrant/qdrant.py +334 -14
  375. agno/vectordb/singlestore/singlestore.py +286 -29
  376. agno/vectordb/surrealdb/surrealdb.py +187 -7
  377. agno/vectordb/upstashdb/upstashdb.py +342 -26
  378. agno/vectordb/weaviate/weaviate.py +227 -165
  379. agno/workflow/__init__.py +17 -13
  380. agno/workflow/{v2/condition.py → condition.py} +135 -32
  381. agno/workflow/{v2/loop.py → loop.py} +115 -28
  382. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  383. agno/workflow/{v2/router.py → router.py} +133 -32
  384. agno/workflow/{v2/step.py → step.py} +207 -49
  385. agno/workflow/{v2/steps.py → steps.py} +147 -66
  386. agno/workflow/types.py +482 -0
  387. agno/workflow/workflow.py +2410 -696
  388. agno-2.0.0.dist-info/METADATA +494 -0
  389. agno-2.0.0.dist-info/RECORD +515 -0
  390. agno-2.0.0.dist-info/licenses/LICENSE +201 -0
  391. agno/agent/metrics.py +0 -107
  392. agno/api/app.py +0 -35
  393. agno/api/playground.py +0 -92
  394. agno/api/schemas/app.py +0 -12
  395. agno/api/schemas/playground.py +0 -22
  396. agno/api/schemas/user.py +0 -35
  397. agno/api/schemas/workspace.py +0 -46
  398. agno/api/user.py +0 -160
  399. agno/api/workflows.py +0 -33
  400. agno/api/workspace.py +0 -175
  401. agno/app/agui/__init__.py +0 -3
  402. agno/app/agui/app.py +0 -17
  403. agno/app/agui/sync_router.py +0 -120
  404. agno/app/base.py +0 -186
  405. agno/app/discord/__init__.py +0 -3
  406. agno/app/fastapi/__init__.py +0 -3
  407. agno/app/fastapi/app.py +0 -107
  408. agno/app/fastapi/async_router.py +0 -457
  409. agno/app/fastapi/sync_router.py +0 -448
  410. agno/app/playground/app.py +0 -228
  411. agno/app/playground/async_router.py +0 -1050
  412. agno/app/playground/deploy.py +0 -249
  413. agno/app/playground/operator.py +0 -183
  414. agno/app/playground/schemas.py +0 -220
  415. agno/app/playground/serve.py +0 -55
  416. agno/app/playground/sync_router.py +0 -1042
  417. agno/app/playground/utils.py +0 -46
  418. agno/app/settings.py +0 -15
  419. agno/app/slack/__init__.py +0 -3
  420. agno/app/slack/app.py +0 -19
  421. agno/app/slack/sync_router.py +0 -92
  422. agno/app/utils.py +0 -54
  423. agno/app/whatsapp/__init__.py +0 -3
  424. agno/app/whatsapp/app.py +0 -15
  425. agno/app/whatsapp/sync_router.py +0 -197
  426. agno/cli/auth_server.py +0 -249
  427. agno/cli/config.py +0 -274
  428. agno/cli/console.py +0 -88
  429. agno/cli/credentials.py +0 -23
  430. agno/cli/entrypoint.py +0 -571
  431. agno/cli/operator.py +0 -357
  432. agno/cli/settings.py +0 -96
  433. agno/cli/ws/ws_cli.py +0 -817
  434. agno/constants.py +0 -13
  435. agno/document/__init__.py +0 -5
  436. agno/document/chunking/semantic.py +0 -45
  437. agno/document/chunking/strategy.py +0 -31
  438. agno/document/reader/__init__.py +0 -5
  439. agno/document/reader/base.py +0 -47
  440. agno/document/reader/docx_reader.py +0 -60
  441. agno/document/reader/gcs/pdf_reader.py +0 -44
  442. agno/document/reader/s3/pdf_reader.py +0 -59
  443. agno/document/reader/s3/text_reader.py +0 -63
  444. agno/document/reader/url_reader.py +0 -59
  445. agno/document/reader/youtube_reader.py +0 -58
  446. agno/embedder/__init__.py +0 -5
  447. agno/embedder/langdb.py +0 -80
  448. agno/embedder/mistral.py +0 -82
  449. agno/embedder/openai.py +0 -78
  450. agno/file/__init__.py +0 -5
  451. agno/file/file.py +0 -16
  452. agno/file/local/csv.py +0 -32
  453. agno/file/local/txt.py +0 -19
  454. agno/infra/app.py +0 -240
  455. agno/infra/base.py +0 -144
  456. agno/infra/context.py +0 -20
  457. agno/infra/db_app.py +0 -52
  458. agno/infra/resource.py +0 -205
  459. agno/infra/resources.py +0 -55
  460. agno/knowledge/agent.py +0 -702
  461. agno/knowledge/arxiv.py +0 -33
  462. agno/knowledge/combined.py +0 -36
  463. agno/knowledge/csv.py +0 -144
  464. agno/knowledge/csv_url.py +0 -124
  465. agno/knowledge/document.py +0 -223
  466. agno/knowledge/docx.py +0 -137
  467. agno/knowledge/firecrawl.py +0 -34
  468. agno/knowledge/gcs/__init__.py +0 -0
  469. agno/knowledge/gcs/base.py +0 -39
  470. agno/knowledge/gcs/pdf.py +0 -125
  471. agno/knowledge/json.py +0 -137
  472. agno/knowledge/langchain.py +0 -71
  473. agno/knowledge/light_rag.py +0 -273
  474. agno/knowledge/llamaindex.py +0 -66
  475. agno/knowledge/markdown.py +0 -154
  476. agno/knowledge/pdf.py +0 -164
  477. agno/knowledge/pdf_bytes.py +0 -42
  478. agno/knowledge/pdf_url.py +0 -148
  479. agno/knowledge/s3/__init__.py +0 -0
  480. agno/knowledge/s3/base.py +0 -64
  481. agno/knowledge/s3/pdf.py +0 -33
  482. agno/knowledge/s3/text.py +0 -34
  483. agno/knowledge/text.py +0 -141
  484. agno/knowledge/url.py +0 -46
  485. agno/knowledge/website.py +0 -179
  486. agno/knowledge/wikipedia.py +0 -32
  487. agno/knowledge/youtube.py +0 -35
  488. agno/memory/agent.py +0 -423
  489. agno/memory/classifier.py +0 -104
  490. agno/memory/db/__init__.py +0 -5
  491. agno/memory/db/base.py +0 -42
  492. agno/memory/db/mongodb.py +0 -189
  493. agno/memory/db/postgres.py +0 -203
  494. agno/memory/db/sqlite.py +0 -193
  495. agno/memory/memory.py +0 -22
  496. agno/memory/row.py +0 -36
  497. agno/memory/summarizer.py +0 -201
  498. agno/memory/summary.py +0 -19
  499. agno/memory/team.py +0 -415
  500. agno/memory/v2/__init__.py +0 -2
  501. agno/memory/v2/db/__init__.py +0 -1
  502. agno/memory/v2/db/base.py +0 -42
  503. agno/memory/v2/db/firestore.py +0 -339
  504. agno/memory/v2/db/mongodb.py +0 -196
  505. agno/memory/v2/db/postgres.py +0 -214
  506. agno/memory/v2/db/redis.py +0 -187
  507. agno/memory/v2/db/schema.py +0 -54
  508. agno/memory/v2/db/sqlite.py +0 -209
  509. agno/memory/v2/manager.py +0 -437
  510. agno/memory/v2/memory.py +0 -1097
  511. agno/memory/v2/schema.py +0 -55
  512. agno/memory/v2/summarizer.py +0 -215
  513. agno/memory/workflow.py +0 -38
  514. agno/models/ollama/tools.py +0 -430
  515. agno/models/qwen/__init__.py +0 -5
  516. agno/playground/__init__.py +0 -10
  517. agno/playground/deploy.py +0 -3
  518. agno/playground/playground.py +0 -3
  519. agno/playground/serve.py +0 -3
  520. agno/playground/settings.py +0 -3
  521. agno/reranker/__init__.py +0 -0
  522. agno/run/response.py +0 -467
  523. agno/run/v2/__init__.py +0 -0
  524. agno/run/v2/workflow.py +0 -567
  525. agno/storage/__init__.py +0 -0
  526. agno/storage/agent/__init__.py +0 -0
  527. agno/storage/agent/dynamodb.py +0 -1
  528. agno/storage/agent/json.py +0 -1
  529. agno/storage/agent/mongodb.py +0 -1
  530. agno/storage/agent/postgres.py +0 -1
  531. agno/storage/agent/singlestore.py +0 -1
  532. agno/storage/agent/sqlite.py +0 -1
  533. agno/storage/agent/yaml.py +0 -1
  534. agno/storage/base.py +0 -60
  535. agno/storage/dynamodb.py +0 -673
  536. agno/storage/firestore.py +0 -297
  537. agno/storage/gcs_json.py +0 -261
  538. agno/storage/in_memory.py +0 -234
  539. agno/storage/json.py +0 -237
  540. agno/storage/mongodb.py +0 -328
  541. agno/storage/mysql.py +0 -685
  542. agno/storage/postgres.py +0 -682
  543. agno/storage/redis.py +0 -336
  544. agno/storage/session/__init__.py +0 -16
  545. agno/storage/session/agent.py +0 -64
  546. agno/storage/session/team.py +0 -63
  547. agno/storage/session/v2/__init__.py +0 -5
  548. agno/storage/session/workflow.py +0 -61
  549. agno/storage/singlestore.py +0 -606
  550. agno/storage/sqlite.py +0 -646
  551. agno/storage/workflow/__init__.py +0 -0
  552. agno/storage/workflow/mongodb.py +0 -1
  553. agno/storage/workflow/postgres.py +0 -1
  554. agno/storage/workflow/sqlite.py +0 -1
  555. agno/storage/yaml.py +0 -241
  556. agno/tools/thinking.py +0 -73
  557. agno/utils/defaults.py +0 -57
  558. agno/utils/filesystem.py +0 -39
  559. agno/utils/git.py +0 -52
  560. agno/utils/json_io.py +0 -30
  561. agno/utils/load_env.py +0 -19
  562. agno/utils/py_io.py +0 -19
  563. agno/utils/pyproject.py +0 -18
  564. agno/utils/resource_filter.py +0 -31
  565. agno/workflow/v2/__init__.py +0 -21
  566. agno/workflow/v2/types.py +0 -357
  567. agno/workflow/v2/workflow.py +0 -3312
  568. agno/workspace/__init__.py +0 -0
  569. agno/workspace/config.py +0 -325
  570. agno/workspace/enums.py +0 -6
  571. agno/workspace/helpers.py +0 -52
  572. agno/workspace/operator.py +0 -757
  573. agno/workspace/settings.py +0 -158
  574. agno-1.8.1.dist-info/METADATA +0 -982
  575. agno-1.8.1.dist-info/RECORD +0 -566
  576. agno-1.8.1.dist-info/entry_points.txt +0 -3
  577. agno-1.8.1.dist-info/licenses/LICENSE +0 -375
  578. /agno/{app → db/migrations}/__init__.py +0 -0
  579. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  580. /agno/{cli → integrations}/__init__.py +0 -0
  581. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  582. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  583. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  584. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  585. /agno/{app → os/interfaces}/slack/security.py +0 -0
  586. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  587. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  588. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  589. {agno-1.8.1.dist-info → agno-2.0.0.dist-info}/WHEEL +0 -0
  590. {agno-1.8.1.dist-info → agno-2.0.0.dist-info}/top_level.txt +0 -0
agno/api/agent.py CHANGED
@@ -1,84 +1,28 @@
1
1
  from agno.api.api import api
2
2
  from agno.api.routes import ApiRoutes
3
- from agno.api.schemas.agent import AgentCreate, AgentRunCreate, AgentSessionCreate
4
- from agno.cli.settings import agno_cli_settings
3
+ from agno.api.schemas.agent import AgentRunCreate
5
4
  from agno.utils.log import log_debug
6
5
 
7
6
 
8
- def create_agent_session(session: AgentSessionCreate, monitor: bool = False) -> None:
9
- if not agno_cli_settings.api_enabled:
10
- return
11
-
12
- log_debug("Logging Agent Session")
13
- with api.AuthenticatedClient() as api_client:
14
- try:
15
- api_client.post(
16
- ApiRoutes.AGENT_SESSION_CREATE if monitor else ApiRoutes.AGENT_TELEMETRY_SESSION_CREATE,
17
- json={"session": session.model_dump(exclude_none=True)},
18
- )
19
- except Exception as e:
20
- log_debug(f"Could not create Agent session: {e}")
21
- return
22
-
23
-
24
- def create_agent_run(run: AgentRunCreate, monitor: bool = False) -> None:
25
- if not agno_cli_settings.api_enabled:
26
- return
27
-
28
- with api.AuthenticatedClient() as api_client:
7
+ def create_agent_run(run: AgentRunCreate) -> None:
8
+ """Telemetry recording for Agent runs"""
9
+ with api.Client() as api_client:
29
10
  try:
30
11
  api_client.post(
31
- ApiRoutes.AGENT_RUN_CREATE if monitor else ApiRoutes.AGENT_TELEMETRY_RUN_CREATE,
32
- json={"run": run.model_dump(exclude_none=True)},
12
+ ApiRoutes.RUN_CREATE,
13
+ json=run.model_dump(exclude_none=True),
33
14
  )
34
15
  except Exception as e:
35
16
  log_debug(f"Could not create Agent run: {e}")
36
- return
37
-
38
17
 
39
- async def acreate_agent_run(run: AgentRunCreate, monitor: bool = False) -> None:
40
- if not agno_cli_settings.api_enabled:
41
- return
42
18
 
43
- async with api.AuthenticatedAsyncClient() as api_client:
19
+ async def acreate_agent_run(run: AgentRunCreate) -> None:
20
+ """Telemetry recording for async Agent runs"""
21
+ async with api.AsyncClient() as api_client:
44
22
  try:
45
23
  await api_client.post(
46
- ApiRoutes.AGENT_RUN_CREATE if monitor else ApiRoutes.AGENT_TELEMETRY_RUN_CREATE,
47
- json={"run": run.model_dump(exclude_none=True)},
24
+ ApiRoutes.RUN_CREATE,
25
+ json=run.model_dump(exclude_none=True),
48
26
  )
49
27
  except Exception as e:
50
28
  log_debug(f"Could not create Agent run: {e}")
51
- return
52
-
53
-
54
- def create_agent(agent: AgentCreate) -> None:
55
- if not agno_cli_settings.api_enabled:
56
- return
57
-
58
- with api.AuthenticatedClient() as api_client:
59
- try:
60
- api_client.post(
61
- ApiRoutes.AGENT_CREATE,
62
- json=agent.model_dump(exclude_none=True),
63
- )
64
-
65
- log_debug(f"Created Agent on Platform. ID: {agent.agent_id}")
66
- except Exception as e:
67
- log_debug(f"Could not create Agent: {e}")
68
- return
69
-
70
-
71
- async def acreate_agent(agent: AgentCreate) -> None:
72
- if not agno_cli_settings.api_enabled:
73
- return
74
-
75
- async with api.AuthenticatedAsyncClient() as api_client:
76
- try:
77
- await api_client.post(
78
- ApiRoutes.AGENT_CREATE,
79
- json=agent.model_dump(exclude_none=True),
80
- )
81
- log_debug(f"Created Agent on Platform. ID: {agent.agent_id}")
82
- except Exception as e:
83
- log_debug(f"Could not create Agent: {e}")
84
- return
agno/api/api.py CHANGED
@@ -1,74 +1,33 @@
1
- from os import getenv
2
- from typing import Dict, Optional
1
+ from typing import Dict
3
2
 
4
3
  from httpx import AsyncClient as HttpxAsyncClient
5
4
  from httpx import Client as HttpxClient
6
5
  from httpx import Response
7
6
 
8
- from agno.cli.credentials import read_auth_token
9
- from agno.cli.settings import agno_cli_settings
10
- from agno.constants import AGNO_API_KEY_ENV_VAR
11
- from agno.utils.log import logger
7
+ from agno.api.settings import agno_api_settings
12
8
 
13
9
 
14
10
  class Api:
15
11
  def __init__(self):
16
12
  self.headers: Dict[str, str] = {
17
- "user-agent": f"{agno_cli_settings.app_name}/{agno_cli_settings.app_version}",
13
+ "user-agent": f"{agno_api_settings.app_name}/{agno_api_settings.app_version}",
18
14
  "Content-Type": "application/json",
19
15
  }
20
- self._auth_token: Optional[str] = None
21
- self._authenticated_headers = None
22
-
23
- @property
24
- def auth_token(self) -> Optional[str]:
25
- if self._auth_token is None:
26
- try:
27
- self._auth_token = read_auth_token()
28
- except Exception as e:
29
- logger.debug(f"Failed to read auth token: {e}")
30
- return self._auth_token
31
-
32
- @property
33
- def authenticated_headers(self) -> Dict[str, str]:
34
- if self._authenticated_headers is None:
35
- self._authenticated_headers = self.headers.copy()
36
- token = self.auth_token
37
- if token is not None:
38
- self._authenticated_headers[agno_cli_settings.auth_token_header] = token
39
- agno_api_key = getenv(AGNO_API_KEY_ENV_VAR)
40
- if agno_api_key is not None:
41
- self._authenticated_headers["Authorization"] = f"Bearer {agno_api_key}"
42
- return self._authenticated_headers
43
16
 
44
17
  def Client(self) -> HttpxClient:
45
18
  return HttpxClient(
46
- base_url=agno_cli_settings.api_url,
19
+ base_url=agno_api_settings.api_url,
47
20
  headers=self.headers,
48
21
  timeout=60,
49
22
  )
50
23
 
51
- def AuthenticatedClient(self) -> HttpxClient:
52
- return HttpxClient(
53
- base_url=agno_cli_settings.api_url,
54
- headers=self.authenticated_headers,
55
- timeout=60,
56
- )
57
-
58
24
  def AsyncClient(self) -> HttpxAsyncClient:
59
25
  return HttpxAsyncClient(
60
- base_url=agno_cli_settings.api_url,
26
+ base_url=agno_api_settings.api_url,
61
27
  headers=self.headers,
62
28
  timeout=60,
63
29
  )
64
30
 
65
- def AuthenticatedAsyncClient(self) -> HttpxAsyncClient:
66
- return HttpxAsyncClient(
67
- base_url=agno_cli_settings.api_url,
68
- headers=self.authenticated_headers,
69
- timeout=60,
70
- )
71
-
72
31
 
73
32
  api = Api()
74
33
 
agno/api/evals.py CHANGED
@@ -1,33 +1,22 @@
1
1
  from agno.api.api import api
2
2
  from agno.api.routes import ApiRoutes
3
3
  from agno.api.schemas.evals import EvalRunCreate
4
- from agno.cli.settings import agno_cli_settings
5
4
  from agno.utils.log import log_debug
6
5
 
7
6
 
8
- def create_eval_run(eval_run: EvalRunCreate) -> None:
9
- """Call the API to create an evaluation run."""
10
- if not agno_cli_settings.api_enabled:
11
- return
12
-
13
- log_debug("Calling the API to create an evaluation run")
14
- with api.AuthenticatedClient() as api_client:
7
+ def create_eval_run_telemetry(eval_run: EvalRunCreate) -> None:
8
+ """Telemetry recording for Eval runs"""
9
+ with api.Client() as api_client:
15
10
  try:
16
- api_client.post(ApiRoutes.EVAL_RUN_CREATE, json={"eval_run": eval_run.model_dump(exclude_none=True)})
11
+ api_client.post(ApiRoutes.EVAL_RUN_CREATE, json=eval_run.model_dump(exclude_none=True))
17
12
  except Exception as e:
18
13
  log_debug(f"Could not create evaluation run: {e}")
19
- return
20
-
21
14
 
22
- async def async_create_eval_run(eval_run: EvalRunCreate) -> None:
23
- """Call the API to create an evaluation run."""
24
- if not agno_cli_settings.api_enabled:
25
- return
26
15
 
27
- log_debug("Calling the API to create an evaluation run")
28
- async with api.AuthenticatedAsyncClient() as api_client:
16
+ async def async_create_eval_run_telemetry(eval_run: EvalRunCreate) -> None:
17
+ """Telemetry recording for async Eval runs"""
18
+ async with api.AsyncClient() as api_client:
29
19
  try:
30
- await api_client.post(ApiRoutes.EVAL_RUN_CREATE, json={"eval_run": eval_run.model_dump(exclude_none=True)})
20
+ await api_client.post(ApiRoutes.EVAL_RUN_CREATE, json=eval_run.model_dump(exclude_none=True))
31
21
  except Exception as e:
32
22
  log_debug(f"Could not create evaluation run: {e}")
33
- return
agno/api/os.py ADDED
@@ -0,0 +1,17 @@
1
+ from agno.api.api import api
2
+ from agno.api.routes import ApiRoutes
3
+ from agno.api.schemas.os import OSLaunch
4
+ from agno.utils.log import log_debug
5
+
6
+
7
+ def log_os_telemetry(launch: OSLaunch) -> None:
8
+ """Telemetry recording for OS launches"""
9
+ with api.Client() as api_client:
10
+ try:
11
+ response = api_client.post(
12
+ ApiRoutes.AGENT_OS_LAUNCH,
13
+ json=launch.model_dump(exclude_none=True),
14
+ )
15
+ response.raise_for_status()
16
+ except Exception as e:
17
+ log_debug(f"Could not create OS launch: {e}")
agno/api/routes.py CHANGED
@@ -3,46 +3,11 @@ from dataclasses import dataclass
3
3
 
4
4
  @dataclass
5
5
  class ApiRoutes:
6
- # User paths
7
- USER_HEALTH: str = "/v1/user/health"
8
- USER_SIGN_IN: str = "/v1/user/signin"
9
- USER_CLI_AUTH: str = "/v1/user/cliauth"
10
- USER_AUTHENTICATE: str = "/v1/user/authenticate"
11
- USER_CREATE_ANON: str = "/v1/user/create/anon"
6
+ """API routes for telemetry recordings"""
12
7
 
13
- # Workspace paths
14
- WORKSPACE_CREATE: str = "/v1/workspace/create"
15
- WORKSPACE_UPDATE: str = "/v1/workspace/update"
16
- WORKSPACE_DELETE: str = "/v1/workspace/delete"
17
- WORKSPACE_EVENT_CREATE: str = "/v1/workspace/event/create"
8
+ # Runs
9
+ RUN_CREATE: str = "/telemetry/runs"
10
+ EVAL_RUN_CREATE: str = "/telemetry/evals"
18
11
 
19
- # Team paths
20
- TEAM_READ_ALL: str = "/v1/team/read/all"
21
-
22
- # Agent paths
23
- AGENT_SESSION_CREATE: str = "/v1/agent-sessions"
24
- AGENT_RUN_CREATE: str = "/v1/agent-runs"
25
- AGENT_CREATE: str = "/v2/agents"
26
-
27
- # App paths
28
- APP_CREATE: str = "/v2/apps"
29
- # Team paths
30
- TEAM_RUN_CREATE: str = "/v1/team-runs"
31
- TEAM_SESSION_CREATE: str = "/v1/team-sessions"
32
- TEAM_CREATE: str = "/v2/teams"
33
-
34
- # Workflow paths
35
- WORKFLOW_CREATE: str = "/v2/workflows"
36
- # Telemetry paths
37
- # TODO: Update to use the new telemetry paths
38
- AGENT_TELEMETRY_SESSION_CREATE: str = "/v1/telemetry/agent/session/create"
39
- AGENT_TELEMETRY_RUN_CREATE: str = "/v1/telemetry/agent/run/create"
40
-
41
- TEAM_TELEMETRY_RUN_CREATE: str = "/v1/telemetry/team-runs"
42
-
43
- # Playground paths
44
- PLAYGROUND_ENDPOINT_CREATE: str = "/v1/playground/endpoint/create"
45
- PLAYGROUND_APP_DEPLOY: str = "/v1/playground/app/deploy"
46
-
47
- # Eval paths
48
- EVAL_RUN_CREATE: str = "/v2/eval-runs"
12
+ # OS launch
13
+ AGENT_OS_LAUNCH: str = "/telemetry/os"
@@ -0,0 +1,9 @@
1
+ from enum import Enum
2
+
3
+ from agno.api.schemas.agent import AgentRunCreate
4
+ from agno.api.schemas.evals import EvalRunCreate
5
+ from agno.api.schemas.os import OSLaunch
6
+ from agno.api.schemas.team import TeamRunCreate
7
+ from agno.api.schemas.workflows import WorkflowRunCreate
8
+
9
+ __all__ = ["AgentRunCreate", "OSLaunch", "EvalRunCreate", "TeamRunCreate", "WorkflowRunCreate"]
agno/api/schemas/agent.py CHANGED
@@ -1,32 +1,16 @@
1
1
  from typing import Any, Dict, Optional
2
2
 
3
- from pydantic import BaseModel
3
+ from pydantic import BaseModel, Field
4
4
 
5
-
6
- class AgentSessionCreate(BaseModel):
7
- """Data sent to API to create an Agent Session"""
8
-
9
- session_id: str
10
- agent_data: Optional[Dict[str, Any]] = None
5
+ from agno.api.schemas.utils import TelemetryRunEventType, get_sdk_version
11
6
 
12
7
 
13
8
  class AgentRunCreate(BaseModel):
14
9
  """Data sent to API to create an Agent Run"""
15
10
 
16
11
  session_id: str
17
- team_session_id: Optional[str] = None
18
- workflow_session_id: Optional[str] = None
19
12
  run_id: Optional[str] = None
20
- run_data: Optional[Dict[str, Any]] = None
21
- agent_data: Optional[Dict[str, Any]] = None
22
-
23
-
24
- class AgentCreate(BaseModel):
25
- """Data sent to API to create an Agent"""
13
+ data: Optional[Dict[Any, Any]] = None
26
14
 
27
- agent_id: str
28
- team_id: Optional[str] = None
29
- app_id: Optional[str] = None
30
- workflow_id: Optional[str] = None
31
- name: Optional[str] = None
32
- config: Dict[str, Any]
15
+ sdk_version: str = Field(default_factory=get_sdk_version)
16
+ type: TelemetryRunEventType = TelemetryRunEventType.AGENT
agno/api/schemas/evals.py CHANGED
@@ -1,25 +1,16 @@
1
- from enum import Enum
2
1
  from typing import Any, Dict, Optional
3
2
 
4
- from pydantic import BaseModel
3
+ from pydantic import BaseModel, Field
5
4
 
6
-
7
- class EvalType(str, Enum):
8
- ACCURACY = "accuracy"
9
- PERFORMANCE = "performance"
10
- RELIABILITY = "reliability"
5
+ from agno.api.schemas.utils import get_sdk_version
6
+ from agno.db.schemas.evals import EvalType
11
7
 
12
8
 
13
9
  class EvalRunCreate(BaseModel):
14
- """Data sent to the API to create an evaluation run"""
15
-
16
- agent_id: Optional[str] = None
17
- model_id: Optional[str] = None
18
- model_provider: Optional[str] = None
19
- team_id: Optional[str] = None
20
- name: Optional[str] = None
21
- evaluated_entity_name: Optional[str] = None
10
+ """Data sent to the telemetry API to create an Eval run event"""
22
11
 
23
12
  run_id: str
24
13
  eval_type: EvalType
25
- eval_data: Dict[str, Any]
14
+ data: Optional[Dict[Any, Any]] = None
15
+
16
+ sdk_version: str = Field(default_factory=get_sdk_version)
agno/api/schemas/os.py ADDED
@@ -0,0 +1,14 @@
1
+ from typing import Any, Dict, Optional
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from agno.api.schemas.utils import get_sdk_version
6
+
7
+
8
+ class OSLaunch(BaseModel):
9
+ """Data sent to API to create an OS Launch"""
10
+
11
+ os_id: Optional[str] = None
12
+ data: Optional[Dict[Any, Any]] = None
13
+
14
+ sdk_version: str = Field(default_factory=get_sdk_version)
agno/api/schemas/team.py CHANGED
@@ -1,32 +1,16 @@
1
1
  from typing import Any, Dict, Optional
2
2
 
3
- from pydantic import BaseModel
3
+ from pydantic import BaseModel, Field
4
4
 
5
-
6
- class TeamSessionCreate(BaseModel):
7
- """Data sent to API to create a Team Session"""
8
-
9
- session_id: str
10
- team_data: Optional[Dict[str, Any]] = None
5
+ from agno.api.schemas.utils import TelemetryRunEventType, get_sdk_version
11
6
 
12
7
 
13
8
  class TeamRunCreate(BaseModel):
14
9
  """Data sent to API to create a Team Run"""
15
10
 
16
11
  session_id: str
17
- team_session_id: Optional[str] = None
18
- workflow_session_id: Optional[str] = None
19
12
  run_id: Optional[str] = None
20
- run_data: Optional[Dict[str, Any]] = None
21
- team_data: Optional[Dict[str, Any]] = None
22
-
23
-
24
- class TeamCreate(BaseModel):
25
- """Data sent to API to create aTeam"""
13
+ data: Optional[Dict[Any, Any]] = None
26
14
 
27
- team_id: str
28
- parent_team_id: Optional[str] = None
29
- app_id: Optional[str] = None
30
- workflow_id: Optional[str] = None
31
- name: Optional[str] = None
32
- config: Dict[str, Any]
15
+ sdk_version: str = Field(default_factory=get_sdk_version)
16
+ type: TelemetryRunEventType = TelemetryRunEventType.TEAM
@@ -0,0 +1,21 @@
1
+ from enum import Enum
2
+
3
+
4
+ class TelemetryRunEventType(str, Enum):
5
+ AGENT = "agent"
6
+ EVAL = "eval"
7
+ TEAM = "team"
8
+ WORKFLOW = "workflow"
9
+
10
+
11
+ def get_sdk_version() -> str:
12
+ """Return the installed agno SDK version from package metadata.
13
+
14
+ Falls back to "unknown" if the package metadata isn't available.
15
+ """
16
+ from importlib.metadata import version as pkg_version
17
+
18
+ try:
19
+ return pkg_version("agno")
20
+ except Exception:
21
+ return "unknown"
@@ -1,12 +1,16 @@
1
1
  from typing import Any, Dict, Optional
2
2
 
3
- from pydantic import BaseModel
3
+ from pydantic import BaseModel, Field
4
4
 
5
+ from agno.api.schemas.utils import TelemetryRunEventType, get_sdk_version
5
6
 
6
- class WorkflowCreate(BaseModel):
7
- """Data sent to API to create aWorkflow"""
8
7
 
9
- workflow_id: str
10
- app_id: Optional[str] = None
11
- name: Optional[str] = None
12
- config: Dict[str, Any]
8
+ class WorkflowRunCreate(BaseModel):
9
+ """Data sent to API to create a Workflow Run"""
10
+
11
+ session_id: str
12
+ run_id: Optional[str] = None
13
+ data: Optional[Dict[Any, Any]] = None
14
+
15
+ sdk_version: str = Field(default_factory=get_sdk_version)
16
+ type: TelemetryRunEventType = TelemetryRunEventType.WORKFLOW
agno/api/settings.py ADDED
@@ -0,0 +1,53 @@
1
+ from __future__ import annotations
2
+
3
+ from importlib import metadata
4
+
5
+ from pydantic import field_validator
6
+ from pydantic_core.core_schema import ValidationInfo
7
+ from pydantic_settings import BaseSettings, SettingsConfigDict
8
+
9
+ from agno.utils.log import logger
10
+
11
+
12
+ class AgnoAPISettings(BaseSettings):
13
+ app_name: str = "agno"
14
+ app_version: str = metadata.version("agno")
15
+
16
+ api_runtime: str = "prd"
17
+ alpha_features: bool = False
18
+
19
+ api_url: str = "https://os-api.agno.com"
20
+
21
+ model_config = SettingsConfigDict(env_prefix="AGNO_")
22
+
23
+ @field_validator("api_runtime", mode="before")
24
+ def validate_runtime_env(cls, v):
25
+ """Validate api_runtime."""
26
+
27
+ valid_api_runtimes = ["dev", "stg", "prd"]
28
+ if v.lower() not in valid_api_runtimes:
29
+ raise ValueError(f"Invalid api_runtime: {v}")
30
+
31
+ return v.lower()
32
+
33
+ @field_validator("api_url", mode="before")
34
+ def update_api_url(cls, v, info: ValidationInfo):
35
+ api_runtime = info.data["api_runtime"]
36
+ if api_runtime == "dev":
37
+ from os import getenv
38
+
39
+ if getenv("AGNO_RUNTIME") == "docker":
40
+ return "http://host.docker.internal:7070"
41
+ return "http://localhost:7070"
42
+ elif api_runtime == "stg":
43
+ return "https://api-stg.agno.com"
44
+ else:
45
+ return "https://os-api.agno.com"
46
+
47
+ def gate_alpha_feature(self):
48
+ if not self.alpha_features:
49
+ logger.error("This is an Alpha feature not for general use.\nPlease message the Agno team for access.")
50
+ exit(1)
51
+
52
+
53
+ agno_api_settings = AgnoAPISettings()
agno/api/team.py CHANGED
@@ -1,85 +1,30 @@
1
1
  from agno.api.api import api
2
2
  from agno.api.routes import ApiRoutes
3
- from agno.api.schemas.team import TeamCreate, TeamRunCreate, TeamSessionCreate
4
- from agno.cli.settings import agno_cli_settings
3
+ from agno.api.schemas.team import TeamRunCreate
5
4
  from agno.utils.log import log_debug
6
5
 
7
6
 
8
- def create_team_run(run: TeamRunCreate, monitor: bool = False) -> None:
9
- if not agno_cli_settings.api_enabled:
10
- return
11
-
12
- log_debug("--**-- Logging Team Run")
13
- with api.AuthenticatedClient() as api_client:
7
+ def create_team_run(run: TeamRunCreate) -> None:
8
+ """Telemetry recording for Team runs"""
9
+ with api.Client() as api_client:
14
10
  try:
15
11
  response = api_client.post(
16
- ApiRoutes.TEAM_RUN_CREATE if monitor else ApiRoutes.TEAM_TELEMETRY_RUN_CREATE,
17
- json={"run": run.model_dump(exclude_none=True)},
12
+ ApiRoutes.RUN_CREATE,
13
+ json=run.model_dump(exclude_none=True),
18
14
  )
19
15
  response.raise_for_status()
20
16
  except Exception as e:
21
17
  log_debug(f"Could not create Team run: {e}")
22
- return
23
-
24
18
 
25
- async def acreate_team_run(run: TeamRunCreate, monitor: bool = False) -> None:
26
- if not agno_cli_settings.api_enabled:
27
- return
28
19
 
29
- log_debug("--**-- Logging Team Run")
30
- async with api.AuthenticatedAsyncClient() as api_client:
20
+ async def acreate_team_run(run: TeamRunCreate) -> None:
21
+ """Telemetry recording for async Team runs"""
22
+ async with api.AsyncClient() as api_client:
31
23
  try:
32
24
  response = await api_client.post(
33
- ApiRoutes.TEAM_RUN_CREATE if monitor else ApiRoutes.TEAM_TELEMETRY_RUN_CREATE,
34
- json={"run": run.model_dump(exclude_none=True)},
25
+ ApiRoutes.RUN_CREATE,
26
+ json=run.model_dump(exclude_none=True),
35
27
  )
36
28
  response.raise_for_status()
37
29
  except Exception as e:
38
30
  log_debug(f"Could not create Team run: {e}")
39
-
40
-
41
- def upsert_team_session(session: TeamSessionCreate, monitor: bool = False) -> None:
42
- if not agno_cli_settings.api_enabled:
43
- return
44
-
45
- log_debug("--**-- Logging Team Session")
46
- with api.AuthenticatedClient() as api_client:
47
- try:
48
- if monitor:
49
- api_client.post(
50
- ApiRoutes.TEAM_SESSION_CREATE,
51
- json={"session": session.model_dump(exclude_none=True)},
52
- )
53
- except Exception as e:
54
- log_debug(f"Could not create Agent session: {e}")
55
- return
56
-
57
-
58
- def create_team(team: TeamCreate) -> None:
59
- if not agno_cli_settings.api_enabled:
60
- return
61
-
62
- with api.AuthenticatedClient() as api_client:
63
- try:
64
- api_client.post(
65
- ApiRoutes.TEAM_CREATE,
66
- json=team.model_dump(exclude_none=True),
67
- )
68
- except Exception as e:
69
- log_debug(f"Could not create Team: {e}")
70
-
71
-
72
- async def acreate_team(team: TeamCreate) -> None:
73
- if not agno_cli_settings.api_enabled:
74
- return
75
-
76
- async with api.AuthenticatedAsyncClient() as api_client:
77
- try:
78
- await api_client.post(
79
- ApiRoutes.TEAM_CREATE,
80
- json=team.model_dump(exclude_none=True),
81
- )
82
- except Exception as e:
83
- print(f"Could not create Team: {e}")
84
-
85
- log_debug(f"Could not create Team: {e}")
agno/api/workflow.py ADDED
@@ -0,0 +1,28 @@
1
+ from agno.api.api import api
2
+ from agno.api.routes import ApiRoutes
3
+ from agno.api.schemas.workflows import WorkflowRunCreate
4
+ from agno.utils.log import log_debug
5
+
6
+
7
+ def create_workflow_run(workflow: WorkflowRunCreate) -> None:
8
+ """Telemetry recording for Workflow runs"""
9
+ with api.Client() as api_client:
10
+ try:
11
+ api_client.post(
12
+ ApiRoutes.RUN_CREATE,
13
+ json=workflow.model_dump(exclude_none=True),
14
+ )
15
+ except Exception as e:
16
+ log_debug(f"Could not create Workflow: {e}")
17
+
18
+
19
+ async def acreate_workflow_run(workflow: WorkflowRunCreate) -> None:
20
+ """Telemetry recording for async Workflow runs"""
21
+ async with api.AsyncClient() as api_client:
22
+ try:
23
+ await api_client.post(
24
+ ApiRoutes.RUN_CREATE,
25
+ json=workflow.model_dump(exclude_none=True),
26
+ )
27
+ except Exception as e:
28
+ log_debug(f"Could not create Team: {e}")