agno 0.1.2__py3-none-any.whl → 2.3.13__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 (723) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +44 -5
  3. agno/agent/agent.py +10531 -2975
  4. agno/api/agent.py +14 -53
  5. agno/api/api.py +7 -46
  6. agno/api/evals.py +22 -0
  7. agno/api/os.py +17 -0
  8. agno/api/routes.py +6 -25
  9. agno/api/schemas/__init__.py +9 -0
  10. agno/api/schemas/agent.py +6 -9
  11. agno/api/schemas/evals.py +16 -0
  12. agno/api/schemas/os.py +14 -0
  13. agno/api/schemas/team.py +10 -10
  14. agno/api/schemas/utils.py +21 -0
  15. agno/api/schemas/workflows.py +16 -0
  16. agno/api/settings.py +53 -0
  17. agno/api/team.py +22 -26
  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/compression/__init__.py +3 -0
  25. agno/compression/manager.py +247 -0
  26. agno/culture/__init__.py +3 -0
  27. agno/culture/manager.py +956 -0
  28. agno/db/__init__.py +24 -0
  29. agno/db/async_postgres/__init__.py +3 -0
  30. agno/db/base.py +946 -0
  31. agno/db/dynamo/__init__.py +3 -0
  32. agno/db/dynamo/dynamo.py +2781 -0
  33. agno/db/dynamo/schemas.py +442 -0
  34. agno/db/dynamo/utils.py +743 -0
  35. agno/db/firestore/__init__.py +3 -0
  36. agno/db/firestore/firestore.py +2379 -0
  37. agno/db/firestore/schemas.py +181 -0
  38. agno/db/firestore/utils.py +376 -0
  39. agno/db/gcs_json/__init__.py +3 -0
  40. agno/db/gcs_json/gcs_json_db.py +1791 -0
  41. agno/db/gcs_json/utils.py +228 -0
  42. agno/db/in_memory/__init__.py +3 -0
  43. agno/db/in_memory/in_memory_db.py +1312 -0
  44. agno/db/in_memory/utils.py +230 -0
  45. agno/db/json/__init__.py +3 -0
  46. agno/db/json/json_db.py +1777 -0
  47. agno/db/json/utils.py +230 -0
  48. agno/db/migrations/manager.py +199 -0
  49. agno/db/migrations/v1_to_v2.py +635 -0
  50. agno/db/migrations/versions/v2_3_0.py +938 -0
  51. agno/db/mongo/__init__.py +17 -0
  52. agno/db/mongo/async_mongo.py +2760 -0
  53. agno/db/mongo/mongo.py +2597 -0
  54. agno/db/mongo/schemas.py +119 -0
  55. agno/db/mongo/utils.py +276 -0
  56. agno/db/mysql/__init__.py +4 -0
  57. agno/db/mysql/async_mysql.py +2912 -0
  58. agno/db/mysql/mysql.py +2923 -0
  59. agno/db/mysql/schemas.py +186 -0
  60. agno/db/mysql/utils.py +488 -0
  61. agno/db/postgres/__init__.py +4 -0
  62. agno/db/postgres/async_postgres.py +2579 -0
  63. agno/db/postgres/postgres.py +2870 -0
  64. agno/db/postgres/schemas.py +187 -0
  65. agno/db/postgres/utils.py +442 -0
  66. agno/db/redis/__init__.py +3 -0
  67. agno/db/redis/redis.py +2141 -0
  68. agno/db/redis/schemas.py +159 -0
  69. agno/db/redis/utils.py +346 -0
  70. agno/db/schemas/__init__.py +4 -0
  71. agno/db/schemas/culture.py +120 -0
  72. agno/db/schemas/evals.py +34 -0
  73. agno/db/schemas/knowledge.py +40 -0
  74. agno/db/schemas/memory.py +61 -0
  75. agno/db/singlestore/__init__.py +3 -0
  76. agno/db/singlestore/schemas.py +179 -0
  77. agno/db/singlestore/singlestore.py +2877 -0
  78. agno/db/singlestore/utils.py +384 -0
  79. agno/db/sqlite/__init__.py +4 -0
  80. agno/db/sqlite/async_sqlite.py +2911 -0
  81. agno/db/sqlite/schemas.py +181 -0
  82. agno/db/sqlite/sqlite.py +2908 -0
  83. agno/db/sqlite/utils.py +429 -0
  84. agno/db/surrealdb/__init__.py +3 -0
  85. agno/db/surrealdb/metrics.py +292 -0
  86. agno/db/surrealdb/models.py +334 -0
  87. agno/db/surrealdb/queries.py +71 -0
  88. agno/db/surrealdb/surrealdb.py +1908 -0
  89. agno/db/surrealdb/utils.py +147 -0
  90. agno/db/utils.py +118 -0
  91. agno/eval/__init__.py +24 -0
  92. agno/eval/accuracy.py +666 -276
  93. agno/eval/agent_as_judge.py +861 -0
  94. agno/eval/base.py +29 -0
  95. agno/eval/performance.py +779 -0
  96. agno/eval/reliability.py +241 -62
  97. agno/eval/utils.py +120 -0
  98. agno/exceptions.py +143 -1
  99. agno/filters.py +354 -0
  100. agno/guardrails/__init__.py +6 -0
  101. agno/guardrails/base.py +19 -0
  102. agno/guardrails/openai.py +144 -0
  103. agno/guardrails/pii.py +94 -0
  104. agno/guardrails/prompt_injection.py +52 -0
  105. agno/hooks/__init__.py +3 -0
  106. agno/hooks/decorator.py +164 -0
  107. agno/integrations/discord/__init__.py +3 -0
  108. agno/integrations/discord/client.py +203 -0
  109. agno/knowledge/__init__.py +5 -1
  110. agno/{document → knowledge}/chunking/agentic.py +22 -14
  111. agno/{document → knowledge}/chunking/document.py +2 -2
  112. agno/{document → knowledge}/chunking/fixed.py +7 -6
  113. agno/knowledge/chunking/markdown.py +151 -0
  114. agno/{document → knowledge}/chunking/recursive.py +15 -3
  115. agno/knowledge/chunking/row.py +39 -0
  116. agno/knowledge/chunking/semantic.py +91 -0
  117. agno/knowledge/chunking/strategy.py +165 -0
  118. agno/knowledge/content.py +74 -0
  119. agno/knowledge/document/__init__.py +5 -0
  120. agno/{document → knowledge/document}/base.py +12 -2
  121. agno/knowledge/embedder/__init__.py +5 -0
  122. agno/knowledge/embedder/aws_bedrock.py +343 -0
  123. agno/knowledge/embedder/azure_openai.py +210 -0
  124. agno/{embedder → knowledge/embedder}/base.py +8 -0
  125. agno/knowledge/embedder/cohere.py +323 -0
  126. agno/knowledge/embedder/fastembed.py +62 -0
  127. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  128. agno/knowledge/embedder/google.py +258 -0
  129. agno/knowledge/embedder/huggingface.py +94 -0
  130. agno/knowledge/embedder/jina.py +182 -0
  131. agno/knowledge/embedder/langdb.py +22 -0
  132. agno/knowledge/embedder/mistral.py +206 -0
  133. agno/knowledge/embedder/nebius.py +13 -0
  134. agno/knowledge/embedder/ollama.py +154 -0
  135. agno/knowledge/embedder/openai.py +195 -0
  136. agno/knowledge/embedder/sentence_transformer.py +63 -0
  137. agno/{embedder → knowledge/embedder}/together.py +1 -1
  138. agno/knowledge/embedder/vllm.py +262 -0
  139. agno/knowledge/embedder/voyageai.py +165 -0
  140. agno/knowledge/knowledge.py +3006 -0
  141. agno/knowledge/reader/__init__.py +7 -0
  142. agno/knowledge/reader/arxiv_reader.py +81 -0
  143. agno/knowledge/reader/base.py +95 -0
  144. agno/knowledge/reader/csv_reader.py +164 -0
  145. agno/knowledge/reader/docx_reader.py +82 -0
  146. agno/knowledge/reader/field_labeled_csv_reader.py +290 -0
  147. agno/knowledge/reader/firecrawl_reader.py +201 -0
  148. agno/knowledge/reader/json_reader.py +88 -0
  149. agno/knowledge/reader/markdown_reader.py +137 -0
  150. agno/knowledge/reader/pdf_reader.py +431 -0
  151. agno/knowledge/reader/pptx_reader.py +101 -0
  152. agno/knowledge/reader/reader_factory.py +313 -0
  153. agno/knowledge/reader/s3_reader.py +89 -0
  154. agno/knowledge/reader/tavily_reader.py +193 -0
  155. agno/knowledge/reader/text_reader.py +127 -0
  156. agno/knowledge/reader/web_search_reader.py +325 -0
  157. agno/knowledge/reader/website_reader.py +455 -0
  158. agno/knowledge/reader/wikipedia_reader.py +91 -0
  159. agno/knowledge/reader/youtube_reader.py +78 -0
  160. agno/knowledge/remote_content/remote_content.py +88 -0
  161. agno/knowledge/reranker/__init__.py +3 -0
  162. agno/{reranker → knowledge/reranker}/base.py +1 -1
  163. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  164. agno/knowledge/reranker/infinity.py +195 -0
  165. agno/knowledge/reranker/sentence_transformer.py +54 -0
  166. agno/knowledge/types.py +39 -0
  167. agno/knowledge/utils.py +234 -0
  168. agno/media.py +439 -95
  169. agno/memory/__init__.py +16 -3
  170. agno/memory/manager.py +1474 -123
  171. agno/memory/strategies/__init__.py +15 -0
  172. agno/memory/strategies/base.py +66 -0
  173. agno/memory/strategies/summarize.py +196 -0
  174. agno/memory/strategies/types.py +37 -0
  175. agno/models/aimlapi/__init__.py +5 -0
  176. agno/models/aimlapi/aimlapi.py +62 -0
  177. agno/models/anthropic/__init__.py +4 -0
  178. agno/models/anthropic/claude.py +960 -496
  179. agno/models/aws/__init__.py +15 -0
  180. agno/models/aws/bedrock.py +686 -451
  181. agno/models/aws/claude.py +190 -183
  182. agno/models/azure/__init__.py +18 -1
  183. agno/models/azure/ai_foundry.py +489 -0
  184. agno/models/azure/openai_chat.py +89 -40
  185. agno/models/base.py +2477 -550
  186. agno/models/cerebras/__init__.py +12 -0
  187. agno/models/cerebras/cerebras.py +565 -0
  188. agno/models/cerebras/cerebras_openai.py +131 -0
  189. agno/models/cohere/__init__.py +4 -0
  190. agno/models/cohere/chat.py +306 -492
  191. agno/models/cometapi/__init__.py +5 -0
  192. agno/models/cometapi/cometapi.py +74 -0
  193. agno/models/dashscope/__init__.py +5 -0
  194. agno/models/dashscope/dashscope.py +90 -0
  195. agno/models/deepinfra/__init__.py +5 -0
  196. agno/models/deepinfra/deepinfra.py +45 -0
  197. agno/models/deepseek/__init__.py +4 -0
  198. agno/models/deepseek/deepseek.py +110 -9
  199. agno/models/fireworks/__init__.py +4 -0
  200. agno/models/fireworks/fireworks.py +19 -22
  201. agno/models/google/__init__.py +3 -7
  202. agno/models/google/gemini.py +1717 -662
  203. agno/models/google/utils.py +22 -0
  204. agno/models/groq/__init__.py +4 -0
  205. agno/models/groq/groq.py +391 -666
  206. agno/models/huggingface/__init__.py +4 -0
  207. agno/models/huggingface/huggingface.py +266 -538
  208. agno/models/ibm/__init__.py +5 -0
  209. agno/models/ibm/watsonx.py +432 -0
  210. agno/models/internlm/__init__.py +3 -0
  211. agno/models/internlm/internlm.py +20 -3
  212. agno/models/langdb/__init__.py +1 -0
  213. agno/models/langdb/langdb.py +60 -0
  214. agno/models/litellm/__init__.py +14 -0
  215. agno/models/litellm/chat.py +503 -0
  216. agno/models/litellm/litellm_openai.py +42 -0
  217. agno/models/llama_cpp/__init__.py +5 -0
  218. agno/models/llama_cpp/llama_cpp.py +22 -0
  219. agno/models/lmstudio/__init__.py +5 -0
  220. agno/models/lmstudio/lmstudio.py +25 -0
  221. agno/models/message.py +361 -39
  222. agno/models/meta/__init__.py +12 -0
  223. agno/models/meta/llama.py +502 -0
  224. agno/models/meta/llama_openai.py +79 -0
  225. agno/models/metrics.py +120 -0
  226. agno/models/mistral/__init__.py +4 -0
  227. agno/models/mistral/mistral.py +293 -393
  228. agno/models/nebius/__init__.py +3 -0
  229. agno/models/nebius/nebius.py +53 -0
  230. agno/models/nexus/__init__.py +3 -0
  231. agno/models/nexus/nexus.py +22 -0
  232. agno/models/nvidia/__init__.py +4 -0
  233. agno/models/nvidia/nvidia.py +22 -3
  234. agno/models/ollama/__init__.py +4 -2
  235. agno/models/ollama/chat.py +257 -492
  236. agno/models/openai/__init__.py +7 -0
  237. agno/models/openai/chat.py +725 -770
  238. agno/models/openai/like.py +16 -2
  239. agno/models/openai/responses.py +1121 -0
  240. agno/models/openrouter/__init__.py +4 -0
  241. agno/models/openrouter/openrouter.py +62 -5
  242. agno/models/perplexity/__init__.py +5 -0
  243. agno/models/perplexity/perplexity.py +203 -0
  244. agno/models/portkey/__init__.py +3 -0
  245. agno/models/portkey/portkey.py +82 -0
  246. agno/models/requesty/__init__.py +5 -0
  247. agno/models/requesty/requesty.py +69 -0
  248. agno/models/response.py +177 -7
  249. agno/models/sambanova/__init__.py +4 -0
  250. agno/models/sambanova/sambanova.py +23 -4
  251. agno/models/siliconflow/__init__.py +5 -0
  252. agno/models/siliconflow/siliconflow.py +42 -0
  253. agno/models/together/__init__.py +4 -0
  254. agno/models/together/together.py +21 -164
  255. agno/models/utils.py +266 -0
  256. agno/models/vercel/__init__.py +3 -0
  257. agno/models/vercel/v0.py +43 -0
  258. agno/models/vertexai/__init__.py +0 -1
  259. agno/models/vertexai/claude.py +190 -0
  260. agno/models/vllm/__init__.py +3 -0
  261. agno/models/vllm/vllm.py +83 -0
  262. agno/models/xai/__init__.py +2 -0
  263. agno/models/xai/xai.py +111 -7
  264. agno/os/__init__.py +3 -0
  265. agno/os/app.py +1027 -0
  266. agno/os/auth.py +244 -0
  267. agno/os/config.py +126 -0
  268. agno/os/interfaces/__init__.py +1 -0
  269. agno/os/interfaces/a2a/__init__.py +3 -0
  270. agno/os/interfaces/a2a/a2a.py +42 -0
  271. agno/os/interfaces/a2a/router.py +249 -0
  272. agno/os/interfaces/a2a/utils.py +924 -0
  273. agno/os/interfaces/agui/__init__.py +3 -0
  274. agno/os/interfaces/agui/agui.py +47 -0
  275. agno/os/interfaces/agui/router.py +147 -0
  276. agno/os/interfaces/agui/utils.py +574 -0
  277. agno/os/interfaces/base.py +25 -0
  278. agno/os/interfaces/slack/__init__.py +3 -0
  279. agno/os/interfaces/slack/router.py +148 -0
  280. agno/os/interfaces/slack/security.py +30 -0
  281. agno/os/interfaces/slack/slack.py +47 -0
  282. agno/os/interfaces/whatsapp/__init__.py +3 -0
  283. agno/os/interfaces/whatsapp/router.py +210 -0
  284. agno/os/interfaces/whatsapp/security.py +55 -0
  285. agno/os/interfaces/whatsapp/whatsapp.py +36 -0
  286. agno/os/mcp.py +293 -0
  287. agno/os/middleware/__init__.py +9 -0
  288. agno/os/middleware/jwt.py +797 -0
  289. agno/os/router.py +258 -0
  290. agno/os/routers/__init__.py +3 -0
  291. agno/os/routers/agents/__init__.py +3 -0
  292. agno/os/routers/agents/router.py +599 -0
  293. agno/os/routers/agents/schema.py +261 -0
  294. agno/os/routers/evals/__init__.py +3 -0
  295. agno/os/routers/evals/evals.py +450 -0
  296. agno/os/routers/evals/schemas.py +174 -0
  297. agno/os/routers/evals/utils.py +231 -0
  298. agno/os/routers/health.py +31 -0
  299. agno/os/routers/home.py +52 -0
  300. agno/os/routers/knowledge/__init__.py +3 -0
  301. agno/os/routers/knowledge/knowledge.py +1008 -0
  302. agno/os/routers/knowledge/schemas.py +178 -0
  303. agno/os/routers/memory/__init__.py +3 -0
  304. agno/os/routers/memory/memory.py +661 -0
  305. agno/os/routers/memory/schemas.py +88 -0
  306. agno/os/routers/metrics/__init__.py +3 -0
  307. agno/os/routers/metrics/metrics.py +190 -0
  308. agno/os/routers/metrics/schemas.py +47 -0
  309. agno/os/routers/session/__init__.py +3 -0
  310. agno/os/routers/session/session.py +997 -0
  311. agno/os/routers/teams/__init__.py +3 -0
  312. agno/os/routers/teams/router.py +512 -0
  313. agno/os/routers/teams/schema.py +257 -0
  314. agno/os/routers/traces/__init__.py +3 -0
  315. agno/os/routers/traces/schemas.py +414 -0
  316. agno/os/routers/traces/traces.py +499 -0
  317. agno/os/routers/workflows/__init__.py +3 -0
  318. agno/os/routers/workflows/router.py +624 -0
  319. agno/os/routers/workflows/schema.py +75 -0
  320. agno/os/schema.py +534 -0
  321. agno/os/scopes.py +469 -0
  322. agno/{playground → os}/settings.py +7 -15
  323. agno/os/utils.py +973 -0
  324. agno/reasoning/anthropic.py +80 -0
  325. agno/reasoning/azure_ai_foundry.py +67 -0
  326. agno/reasoning/deepseek.py +63 -0
  327. agno/reasoning/default.py +97 -0
  328. agno/reasoning/gemini.py +73 -0
  329. agno/reasoning/groq.py +71 -0
  330. agno/reasoning/helpers.py +24 -1
  331. agno/reasoning/ollama.py +67 -0
  332. agno/reasoning/openai.py +86 -0
  333. agno/reasoning/step.py +2 -1
  334. agno/reasoning/vertexai.py +76 -0
  335. agno/run/__init__.py +6 -0
  336. agno/run/agent.py +822 -0
  337. agno/run/base.py +247 -0
  338. agno/run/cancel.py +81 -0
  339. agno/run/requirement.py +181 -0
  340. agno/run/team.py +767 -0
  341. agno/run/workflow.py +708 -0
  342. agno/session/__init__.py +10 -0
  343. agno/session/agent.py +260 -0
  344. agno/session/summary.py +265 -0
  345. agno/session/team.py +342 -0
  346. agno/session/workflow.py +501 -0
  347. agno/table.py +10 -0
  348. agno/team/__init__.py +37 -0
  349. agno/team/team.py +9536 -0
  350. agno/tools/__init__.py +7 -0
  351. agno/tools/agentql.py +120 -0
  352. agno/tools/airflow.py +22 -12
  353. agno/tools/api.py +122 -0
  354. agno/tools/apify.py +276 -83
  355. agno/tools/{arxiv_toolkit.py → arxiv.py} +20 -12
  356. agno/tools/aws_lambda.py +28 -7
  357. agno/tools/aws_ses.py +66 -0
  358. agno/tools/baidusearch.py +11 -4
  359. agno/tools/bitbucket.py +292 -0
  360. agno/tools/brandfetch.py +213 -0
  361. agno/tools/bravesearch.py +106 -0
  362. agno/tools/brightdata.py +367 -0
  363. agno/tools/browserbase.py +209 -0
  364. agno/tools/calcom.py +32 -23
  365. agno/tools/calculator.py +24 -37
  366. agno/tools/cartesia.py +187 -0
  367. agno/tools/{clickup_tool.py → clickup.py} +17 -28
  368. agno/tools/confluence.py +91 -26
  369. agno/tools/crawl4ai.py +139 -43
  370. agno/tools/csv_toolkit.py +28 -22
  371. agno/tools/dalle.py +36 -22
  372. agno/tools/daytona.py +475 -0
  373. agno/tools/decorator.py +169 -14
  374. agno/tools/desi_vocal.py +23 -11
  375. agno/tools/discord.py +32 -29
  376. agno/tools/docker.py +716 -0
  377. agno/tools/duckdb.py +76 -81
  378. agno/tools/duckduckgo.py +43 -40
  379. agno/tools/e2b.py +703 -0
  380. agno/tools/eleven_labs.py +65 -54
  381. agno/tools/email.py +13 -5
  382. agno/tools/evm.py +129 -0
  383. agno/tools/exa.py +324 -42
  384. agno/tools/fal.py +39 -35
  385. agno/tools/file.py +196 -30
  386. agno/tools/file_generation.py +356 -0
  387. agno/tools/financial_datasets.py +288 -0
  388. agno/tools/firecrawl.py +108 -33
  389. agno/tools/function.py +960 -122
  390. agno/tools/giphy.py +34 -12
  391. agno/tools/github.py +1294 -97
  392. agno/tools/gmail.py +922 -0
  393. agno/tools/google_bigquery.py +117 -0
  394. agno/tools/google_drive.py +271 -0
  395. agno/tools/google_maps.py +253 -0
  396. agno/tools/googlecalendar.py +607 -107
  397. agno/tools/googlesheets.py +377 -0
  398. agno/tools/hackernews.py +20 -12
  399. agno/tools/jina.py +24 -14
  400. agno/tools/jira.py +48 -19
  401. agno/tools/knowledge.py +218 -0
  402. agno/tools/linear.py +82 -43
  403. agno/tools/linkup.py +58 -0
  404. agno/tools/local_file_system.py +15 -7
  405. agno/tools/lumalab.py +41 -26
  406. agno/tools/mcp/__init__.py +10 -0
  407. agno/tools/mcp/mcp.py +331 -0
  408. agno/tools/mcp/multi_mcp.py +347 -0
  409. agno/tools/mcp/params.py +24 -0
  410. agno/tools/mcp_toolbox.py +284 -0
  411. agno/tools/mem0.py +193 -0
  412. agno/tools/memory.py +419 -0
  413. agno/tools/mlx_transcribe.py +11 -9
  414. agno/tools/models/azure_openai.py +190 -0
  415. agno/tools/models/gemini.py +203 -0
  416. agno/tools/models/groq.py +158 -0
  417. agno/tools/models/morph.py +186 -0
  418. agno/tools/models/nebius.py +124 -0
  419. agno/tools/models_labs.py +163 -82
  420. agno/tools/moviepy_video.py +18 -13
  421. agno/tools/nano_banana.py +151 -0
  422. agno/tools/neo4j.py +134 -0
  423. agno/tools/newspaper.py +15 -4
  424. agno/tools/newspaper4k.py +19 -6
  425. agno/tools/notion.py +204 -0
  426. agno/tools/openai.py +181 -17
  427. agno/tools/openbb.py +27 -20
  428. agno/tools/opencv.py +321 -0
  429. agno/tools/openweather.py +233 -0
  430. agno/tools/oxylabs.py +385 -0
  431. agno/tools/pandas.py +25 -15
  432. agno/tools/parallel.py +314 -0
  433. agno/tools/postgres.py +238 -185
  434. agno/tools/pubmed.py +125 -13
  435. agno/tools/python.py +48 -35
  436. agno/tools/reasoning.py +283 -0
  437. agno/tools/reddit.py +207 -29
  438. agno/tools/redshift.py +406 -0
  439. agno/tools/replicate.py +69 -26
  440. agno/tools/resend.py +11 -6
  441. agno/tools/scrapegraph.py +179 -19
  442. agno/tools/searxng.py +23 -31
  443. agno/tools/serpapi.py +15 -10
  444. agno/tools/serper.py +255 -0
  445. agno/tools/shell.py +23 -12
  446. agno/tools/shopify.py +1519 -0
  447. agno/tools/slack.py +56 -14
  448. agno/tools/sleep.py +8 -6
  449. agno/tools/spider.py +35 -11
  450. agno/tools/spotify.py +919 -0
  451. agno/tools/sql.py +34 -19
  452. agno/tools/tavily.py +158 -8
  453. agno/tools/telegram.py +18 -8
  454. agno/tools/todoist.py +218 -0
  455. agno/tools/toolkit.py +134 -9
  456. agno/tools/trafilatura.py +388 -0
  457. agno/tools/trello.py +25 -28
  458. agno/tools/twilio.py +18 -9
  459. agno/tools/user_control_flow.py +78 -0
  460. agno/tools/valyu.py +228 -0
  461. agno/tools/visualization.py +467 -0
  462. agno/tools/webbrowser.py +28 -0
  463. agno/tools/webex.py +76 -0
  464. agno/tools/website.py +23 -19
  465. agno/tools/webtools.py +45 -0
  466. agno/tools/whatsapp.py +286 -0
  467. agno/tools/wikipedia.py +28 -19
  468. agno/tools/workflow.py +285 -0
  469. agno/tools/{twitter.py → x.py} +142 -46
  470. agno/tools/yfinance.py +41 -39
  471. agno/tools/youtube.py +34 -17
  472. agno/tools/zendesk.py +15 -5
  473. agno/tools/zep.py +454 -0
  474. agno/tools/zoom.py +86 -37
  475. agno/tracing/__init__.py +12 -0
  476. agno/tracing/exporter.py +157 -0
  477. agno/tracing/schemas.py +276 -0
  478. agno/tracing/setup.py +111 -0
  479. agno/utils/agent.py +938 -0
  480. agno/utils/audio.py +37 -1
  481. agno/utils/certs.py +27 -0
  482. agno/utils/code_execution.py +11 -0
  483. agno/utils/common.py +103 -20
  484. agno/utils/cryptography.py +22 -0
  485. agno/utils/dttm.py +33 -0
  486. agno/utils/events.py +700 -0
  487. agno/utils/functions.py +107 -37
  488. agno/utils/gemini.py +426 -0
  489. agno/utils/hooks.py +171 -0
  490. agno/utils/http.py +185 -0
  491. agno/utils/json_schema.py +159 -37
  492. agno/utils/knowledge.py +36 -0
  493. agno/utils/location.py +19 -0
  494. agno/utils/log.py +221 -8
  495. agno/utils/mcp.py +214 -0
  496. agno/utils/media.py +335 -14
  497. agno/utils/merge_dict.py +22 -1
  498. agno/utils/message.py +77 -2
  499. agno/utils/models/ai_foundry.py +50 -0
  500. agno/utils/models/claude.py +373 -0
  501. agno/utils/models/cohere.py +94 -0
  502. agno/utils/models/llama.py +85 -0
  503. agno/utils/models/mistral.py +100 -0
  504. agno/utils/models/openai_responses.py +140 -0
  505. agno/utils/models/schema_utils.py +153 -0
  506. agno/utils/models/watsonx.py +41 -0
  507. agno/utils/openai.py +257 -0
  508. agno/utils/pickle.py +1 -1
  509. agno/utils/pprint.py +124 -8
  510. agno/utils/print_response/agent.py +930 -0
  511. agno/utils/print_response/team.py +1914 -0
  512. agno/utils/print_response/workflow.py +1668 -0
  513. agno/utils/prompts.py +111 -0
  514. agno/utils/reasoning.py +108 -0
  515. agno/utils/response.py +163 -0
  516. agno/utils/serialize.py +32 -0
  517. agno/utils/shell.py +4 -4
  518. agno/utils/streamlit.py +487 -0
  519. agno/utils/string.py +204 -51
  520. agno/utils/team.py +139 -0
  521. agno/utils/timer.py +9 -2
  522. agno/utils/tokens.py +657 -0
  523. agno/utils/tools.py +19 -1
  524. agno/utils/whatsapp.py +305 -0
  525. agno/utils/yaml_io.py +3 -3
  526. agno/vectordb/__init__.py +2 -0
  527. agno/vectordb/base.py +87 -9
  528. agno/vectordb/cassandra/__init__.py +5 -1
  529. agno/vectordb/cassandra/cassandra.py +383 -27
  530. agno/vectordb/chroma/__init__.py +4 -0
  531. agno/vectordb/chroma/chromadb.py +748 -83
  532. agno/vectordb/clickhouse/__init__.py +7 -1
  533. agno/vectordb/clickhouse/clickhousedb.py +554 -53
  534. agno/vectordb/couchbase/__init__.py +3 -0
  535. agno/vectordb/couchbase/couchbase.py +1446 -0
  536. agno/vectordb/lancedb/__init__.py +5 -0
  537. agno/vectordb/lancedb/lance_db.py +730 -98
  538. agno/vectordb/langchaindb/__init__.py +5 -0
  539. agno/vectordb/langchaindb/langchaindb.py +163 -0
  540. agno/vectordb/lightrag/__init__.py +5 -0
  541. agno/vectordb/lightrag/lightrag.py +388 -0
  542. agno/vectordb/llamaindex/__init__.py +3 -0
  543. agno/vectordb/llamaindex/llamaindexdb.py +166 -0
  544. agno/vectordb/milvus/__init__.py +3 -0
  545. agno/vectordb/milvus/milvus.py +966 -78
  546. agno/vectordb/mongodb/__init__.py +9 -1
  547. agno/vectordb/mongodb/mongodb.py +1175 -172
  548. agno/vectordb/pgvector/__init__.py +8 -0
  549. agno/vectordb/pgvector/pgvector.py +599 -115
  550. agno/vectordb/pineconedb/__init__.py +5 -1
  551. agno/vectordb/pineconedb/pineconedb.py +406 -43
  552. agno/vectordb/qdrant/__init__.py +4 -0
  553. agno/vectordb/qdrant/qdrant.py +914 -61
  554. agno/vectordb/redis/__init__.py +9 -0
  555. agno/vectordb/redis/redisdb.py +682 -0
  556. agno/vectordb/singlestore/__init__.py +8 -1
  557. agno/vectordb/singlestore/singlestore.py +771 -0
  558. agno/vectordb/surrealdb/__init__.py +3 -0
  559. agno/vectordb/surrealdb/surrealdb.py +663 -0
  560. agno/vectordb/upstashdb/__init__.py +5 -0
  561. agno/vectordb/upstashdb/upstashdb.py +718 -0
  562. agno/vectordb/weaviate/__init__.py +8 -0
  563. agno/vectordb/weaviate/index.py +15 -0
  564. agno/vectordb/weaviate/weaviate.py +1009 -0
  565. agno/workflow/__init__.py +23 -1
  566. agno/workflow/agent.py +299 -0
  567. agno/workflow/condition.py +759 -0
  568. agno/workflow/loop.py +756 -0
  569. agno/workflow/parallel.py +853 -0
  570. agno/workflow/router.py +723 -0
  571. agno/workflow/step.py +1564 -0
  572. agno/workflow/steps.py +613 -0
  573. agno/workflow/types.py +556 -0
  574. agno/workflow/workflow.py +4327 -514
  575. agno-2.3.13.dist-info/METADATA +639 -0
  576. agno-2.3.13.dist-info/RECORD +613 -0
  577. {agno-0.1.2.dist-info → agno-2.3.13.dist-info}/WHEEL +1 -1
  578. agno-2.3.13.dist-info/licenses/LICENSE +201 -0
  579. agno/api/playground.py +0 -91
  580. agno/api/schemas/playground.py +0 -22
  581. agno/api/schemas/user.py +0 -22
  582. agno/api/schemas/workspace.py +0 -46
  583. agno/api/user.py +0 -160
  584. agno/api/workspace.py +0 -151
  585. agno/cli/auth_server.py +0 -118
  586. agno/cli/config.py +0 -275
  587. agno/cli/console.py +0 -88
  588. agno/cli/credentials.py +0 -23
  589. agno/cli/entrypoint.py +0 -571
  590. agno/cli/operator.py +0 -355
  591. agno/cli/settings.py +0 -85
  592. agno/cli/ws/ws_cli.py +0 -817
  593. agno/constants.py +0 -13
  594. agno/document/__init__.py +0 -1
  595. agno/document/chunking/semantic.py +0 -47
  596. agno/document/chunking/strategy.py +0 -31
  597. agno/document/reader/__init__.py +0 -1
  598. agno/document/reader/arxiv_reader.py +0 -41
  599. agno/document/reader/base.py +0 -22
  600. agno/document/reader/csv_reader.py +0 -84
  601. agno/document/reader/docx_reader.py +0 -46
  602. agno/document/reader/firecrawl_reader.py +0 -99
  603. agno/document/reader/json_reader.py +0 -43
  604. agno/document/reader/pdf_reader.py +0 -219
  605. agno/document/reader/s3/pdf_reader.py +0 -46
  606. agno/document/reader/s3/text_reader.py +0 -51
  607. agno/document/reader/text_reader.py +0 -41
  608. agno/document/reader/website_reader.py +0 -175
  609. agno/document/reader/youtube_reader.py +0 -50
  610. agno/embedder/__init__.py +0 -1
  611. agno/embedder/azure_openai.py +0 -86
  612. agno/embedder/cohere.py +0 -72
  613. agno/embedder/fastembed.py +0 -37
  614. agno/embedder/google.py +0 -73
  615. agno/embedder/huggingface.py +0 -54
  616. agno/embedder/mistral.py +0 -80
  617. agno/embedder/ollama.py +0 -57
  618. agno/embedder/openai.py +0 -74
  619. agno/embedder/sentence_transformer.py +0 -38
  620. agno/embedder/voyageai.py +0 -64
  621. agno/eval/perf.py +0 -201
  622. agno/file/__init__.py +0 -1
  623. agno/file/file.py +0 -16
  624. agno/file/local/csv.py +0 -32
  625. agno/file/local/txt.py +0 -19
  626. agno/infra/app.py +0 -240
  627. agno/infra/base.py +0 -144
  628. agno/infra/context.py +0 -20
  629. agno/infra/db_app.py +0 -52
  630. agno/infra/resource.py +0 -205
  631. agno/infra/resources.py +0 -55
  632. agno/knowledge/agent.py +0 -230
  633. agno/knowledge/arxiv.py +0 -22
  634. agno/knowledge/combined.py +0 -22
  635. agno/knowledge/csv.py +0 -28
  636. agno/knowledge/csv_url.py +0 -19
  637. agno/knowledge/document.py +0 -20
  638. agno/knowledge/docx.py +0 -30
  639. agno/knowledge/json.py +0 -28
  640. agno/knowledge/langchain.py +0 -71
  641. agno/knowledge/llamaindex.py +0 -66
  642. agno/knowledge/pdf.py +0 -28
  643. agno/knowledge/pdf_url.py +0 -26
  644. agno/knowledge/s3/base.py +0 -60
  645. agno/knowledge/s3/pdf.py +0 -21
  646. agno/knowledge/s3/text.py +0 -23
  647. agno/knowledge/text.py +0 -30
  648. agno/knowledge/website.py +0 -88
  649. agno/knowledge/wikipedia.py +0 -31
  650. agno/knowledge/youtube.py +0 -22
  651. agno/memory/agent.py +0 -392
  652. agno/memory/classifier.py +0 -104
  653. agno/memory/db/__init__.py +0 -1
  654. agno/memory/db/base.py +0 -42
  655. agno/memory/db/mongodb.py +0 -189
  656. agno/memory/db/postgres.py +0 -203
  657. agno/memory/db/sqlite.py +0 -193
  658. agno/memory/memory.py +0 -15
  659. agno/memory/row.py +0 -36
  660. agno/memory/summarizer.py +0 -192
  661. agno/memory/summary.py +0 -19
  662. agno/memory/workflow.py +0 -38
  663. agno/models/google/gemini_openai.py +0 -26
  664. agno/models/ollama/hermes.py +0 -221
  665. agno/models/ollama/tools.py +0 -362
  666. agno/models/vertexai/gemini.py +0 -595
  667. agno/playground/__init__.py +0 -3
  668. agno/playground/async_router.py +0 -421
  669. agno/playground/deploy.py +0 -249
  670. agno/playground/operator.py +0 -92
  671. agno/playground/playground.py +0 -91
  672. agno/playground/schemas.py +0 -76
  673. agno/playground/serve.py +0 -55
  674. agno/playground/sync_router.py +0 -405
  675. agno/reasoning/agent.py +0 -68
  676. agno/run/response.py +0 -112
  677. agno/storage/agent/__init__.py +0 -0
  678. agno/storage/agent/base.py +0 -38
  679. agno/storage/agent/dynamodb.py +0 -350
  680. agno/storage/agent/json.py +0 -92
  681. agno/storage/agent/mongodb.py +0 -228
  682. agno/storage/agent/postgres.py +0 -367
  683. agno/storage/agent/session.py +0 -79
  684. agno/storage/agent/singlestore.py +0 -303
  685. agno/storage/agent/sqlite.py +0 -357
  686. agno/storage/agent/yaml.py +0 -93
  687. agno/storage/workflow/__init__.py +0 -0
  688. agno/storage/workflow/base.py +0 -40
  689. agno/storage/workflow/mongodb.py +0 -233
  690. agno/storage/workflow/postgres.py +0 -366
  691. agno/storage/workflow/session.py +0 -60
  692. agno/storage/workflow/sqlite.py +0 -359
  693. agno/tools/googlesearch.py +0 -88
  694. agno/utils/defaults.py +0 -57
  695. agno/utils/filesystem.py +0 -39
  696. agno/utils/git.py +0 -52
  697. agno/utils/json_io.py +0 -30
  698. agno/utils/load_env.py +0 -19
  699. agno/utils/py_io.py +0 -19
  700. agno/utils/pyproject.py +0 -18
  701. agno/utils/resource_filter.py +0 -31
  702. agno/vectordb/singlestore/s2vectordb.py +0 -390
  703. agno/vectordb/singlestore/s2vectordb2.py +0 -355
  704. agno/workspace/__init__.py +0 -0
  705. agno/workspace/config.py +0 -325
  706. agno/workspace/enums.py +0 -6
  707. agno/workspace/helpers.py +0 -48
  708. agno/workspace/operator.py +0 -758
  709. agno/workspace/settings.py +0 -63
  710. agno-0.1.2.dist-info/LICENSE +0 -375
  711. agno-0.1.2.dist-info/METADATA +0 -502
  712. agno-0.1.2.dist-info/RECORD +0 -352
  713. agno-0.1.2.dist-info/entry_points.txt +0 -3
  714. /agno/{cli → db/migrations}/__init__.py +0 -0
  715. /agno/{cli/ws → db/migrations/versions}/__init__.py +0 -0
  716. /agno/{document/chunking/__init__.py → db/schemas/metrics.py} +0 -0
  717. /agno/{document/reader/s3 → integrations}/__init__.py +0 -0
  718. /agno/{file/local → knowledge/chunking}/__init__.py +0 -0
  719. /agno/{infra → knowledge/remote_content}/__init__.py +0 -0
  720. /agno/{knowledge/s3 → tools/models}/__init__.py +0 -0
  721. /agno/{reranker → utils/models}/__init__.py +0 -0
  722. /agno/{storage → utils/print_response}/__init__.py +0 -0
  723. {agno-0.1.2.dist-info → agno-2.3.13.dist-info}/top_level.txt +0 -0
agno/api/agent.py CHANGED
@@ -1,67 +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 AgentRunCreate, AgentSessionCreate
4
- from agno.cli.settings import agno_cli_settings
5
- from agno.utils.log import logger
3
+ from agno.api.schemas.agent import AgentRunCreate
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
- logger.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
- logger.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
- logger.debug("--**-- Logging Agent Run")
29
- 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:
30
10
  try:
31
11
  api_client.post(
32
- ApiRoutes.AGENT_RUN_CREATE if monitor else ApiRoutes.AGENT_TELEMETRY_RUN_CREATE,
33
- json={"run": run.model_dump(exclude_none=True)},
12
+ ApiRoutes.RUN_CREATE,
13
+ json=run.model_dump(exclude_none=True),
34
14
  )
35
15
  except Exception as e:
36
- logger.debug(f"Could not create Agent run: {e}")
37
- return
38
-
39
-
40
- async def acreate_agent_session(session: AgentSessionCreate, monitor: bool = False) -> None:
41
- if not agno_cli_settings.api_enabled:
42
- return
43
-
44
- logger.debug("--**-- Logging Agent Session (Async)")
45
- async with api.AuthenticatedAsyncClient() as api_client:
46
- try:
47
- await api_client.post(
48
- ApiRoutes.AGENT_SESSION_CREATE if monitor else ApiRoutes.AGENT_TELEMETRY_SESSION_CREATE,
49
- json={"session": session.model_dump(exclude_none=True)},
50
- )
51
- except Exception as e:
52
- logger.debug(f"Could not create Agent session: {e}")
53
-
16
+ log_debug(f"Could not create Agent run: {e}")
54
17
 
55
- async def acreate_agent_run(run: AgentRunCreate, monitor: bool = False) -> None:
56
- if not agno_cli_settings.api_enabled:
57
- return
58
18
 
59
- logger.debug("--**-- Logging Agent Run (Async)")
60
- 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:
61
22
  try:
62
23
  await api_client.post(
63
- ApiRoutes.AGENT_RUN_CREATE if monitor else ApiRoutes.AGENT_TELEMETRY_RUN_CREATE,
64
- json={"run": run.model_dump(exclude_none=True)},
24
+ ApiRoutes.RUN_CREATE,
25
+ json=run.model_dump(exclude_none=True),
65
26
  )
66
27
  except Exception as e:
67
- logger.debug(f"Could not create Agent run: {e}")
28
+ log_debug(f"Could not create Agent run: {e}")
agno/api/api.py CHANGED
@@ -1,72 +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
- )
50
-
51
- def AuthenticatedClient(self) -> HttpxClient:
52
- return HttpxClient(
53
- base_url=agno_cli_settings.api_url,
54
- headers=self.authenticated_headers,
55
- timeout=60,
22
+ http2=True,
56
23
  )
57
24
 
58
25
  def AsyncClient(self) -> HttpxAsyncClient:
59
26
  return HttpxAsyncClient(
60
- base_url=agno_cli_settings.api_url,
27
+ base_url=agno_api_settings.api_url,
61
28
  headers=self.headers,
62
29
  timeout=60,
63
- )
64
-
65
- def AuthenticatedAsyncClient(self) -> HttpxAsyncClient:
66
- return HttpxAsyncClient(
67
- base_url=agno_cli_settings.api_url,
68
- headers=self.authenticated_headers,
69
- timeout=60,
30
+ http2=True,
70
31
  )
71
32
 
72
33
 
agno/api/evals.py ADDED
@@ -0,0 +1,22 @@
1
+ from agno.api.api import api
2
+ from agno.api.routes import ApiRoutes
3
+ from agno.api.schemas.evals import EvalRunCreate
4
+ from agno.utils.log import log_debug
5
+
6
+
7
+ def create_eval_run_telemetry(eval_run: EvalRunCreate) -> None:
8
+ """Telemetry recording for Eval runs"""
9
+ with api.Client() as api_client:
10
+ try:
11
+ api_client.post(ApiRoutes.EVAL_RUN_CREATE, json=eval_run.model_dump(exclude_none=True))
12
+ except Exception as e:
13
+ log_debug(f"Could not create evaluation run: {e}")
14
+
15
+
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:
19
+ try:
20
+ await api_client.post(ApiRoutes.EVAL_RUN_CREATE, json=eval_run.model_dump(exclude_none=True))
21
+ except Exception as e:
22
+ log_debug(f"Could not create evaluation run: {e}")
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 register OS launch for telemetry: {e}")
agno/api/routes.py CHANGED
@@ -3,30 +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/session/create"
24
- AGENT_RUN_CREATE: str = "/v1/agent/run/create"
25
-
26
- # Telemetry paths
27
- AGENT_TELEMETRY_SESSION_CREATE: str = "/v1/telemetry/agent/session/create"
28
- AGENT_TELEMETRY_RUN_CREATE: str = "/v1/telemetry/agent/run/create"
29
-
30
- # Playground paths
31
- PLAYGROUND_ENDPOINT_CREATE: str = "/v1/playground/endpoint/create"
32
- PLAYGROUND_APP_DEPLOY: str = "/v1/playground/app/deploy"
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,13 +1,8 @@
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):
@@ -15,5 +10,7 @@ class AgentRunCreate(BaseModel):
15
10
 
16
11
  session_id: str
17
12
  run_id: Optional[str] = None
18
- run_data: Optional[Dict[str, Any]] = None
19
- agent_data: Optional[Dict[str, Any]] = None
13
+ data: Optional[Dict[Any, Any]] = None
14
+
15
+ sdk_version: str = Field(default_factory=get_sdk_version)
16
+ type: TelemetryRunEventType = TelemetryRunEventType.AGENT
@@ -0,0 +1,16 @@
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
+ from agno.db.schemas.evals import EvalType
7
+
8
+
9
+ class EvalRunCreate(BaseModel):
10
+ """Data sent to the telemetry API to create an Eval run event"""
11
+
12
+ run_id: str
13
+ eval_type: EvalType
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,16 +1,16 @@
1
- from typing import Optional
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 TeamSchema(BaseModel):
7
- """Schema for team data returned by the API."""
8
7
 
9
- id_team: str
10
- name: str
11
- url: str
8
+ class TeamRunCreate(BaseModel):
9
+ """Data sent to API to create a Team Run"""
12
10
 
11
+ session_id: str
12
+ run_id: Optional[str] = None
13
+ data: Optional[Dict[Any, Any]] = None
13
14
 
14
- class TeamIdentifier(BaseModel):
15
- id_team: Optional[str] = None
16
- team_url: Optional[str] = None
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"
@@ -0,0 +1,16 @@
1
+ from typing import Any, Dict, Optional
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from agno.api.schemas.utils import TelemetryRunEventType, get_sdk_version
6
+
7
+
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,34 +1,30 @@
1
- from typing import Dict, List, Optional
2
-
3
- from httpx import Response
4
-
5
- from agno.api.api import api, invalid_response
1
+ from agno.api.api import api
6
2
  from agno.api.routes import ApiRoutes
7
- from agno.api.schemas.team import TeamSchema
8
- from agno.api.schemas.user import UserSchema
9
- from agno.utils.log import logger
3
+ from agno.api.schemas.team import TeamRunCreate
4
+ from agno.utils.log import log_debug
10
5
 
11
6
 
12
- def get_teams_for_user(user: UserSchema) -> Optional[List[TeamSchema]]:
13
- logger.debug("--**-- Reading teams for user")
14
- 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:
15
10
  try:
16
- r: Response = api_client.post(
17
- ApiRoutes.TEAM_READ_ALL,
18
- json={
19
- "user": user.model_dump(include={"id_user", "email"}),
20
- },
21
- timeout=2.0,
11
+ response = api_client.post(
12
+ ApiRoutes.RUN_CREATE,
13
+ json=run.model_dump(exclude_none=True),
22
14
  )
23
- if invalid_response(r):
24
- return None
15
+ response.raise_for_status()
16
+ except Exception as e:
17
+ log_debug(f"Could not create Team run: {e}")
25
18
 
26
- response_json: Optional[List[Dict]] = r.json()
27
- if response_json is None:
28
- return None
29
19
 
30
- teams: List[TeamSchema] = [TeamSchema.model_validate(team) for team in response_json]
31
- return teams
20
+ async def acreate_team_run(run: TeamRunCreate) -> None:
21
+ """Telemetry recording for async Team runs"""
22
+ async with api.AsyncClient() as api_client:
23
+ try:
24
+ response = await api_client.post(
25
+ ApiRoutes.RUN_CREATE,
26
+ json=run.model_dump(exclude_none=True),
27
+ )
28
+ response.raise_for_status()
32
29
  except Exception as e:
33
- logger.debug(f"Could not read teams: {e}")
34
- return None
30
+ log_debug(f"Could not create Team run: {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}")