agno 1.8.2__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 (589) hide show
  1. agno/agent/__init__.py +19 -27
  2. agno/agent/agent.py +3143 -4170
  3. agno/api/agent.py +11 -67
  4. agno/api/api.py +5 -46
  5. agno/api/evals.py +8 -19
  6. agno/api/os.py +17 -0
  7. agno/api/routes.py +6 -41
  8. agno/api/schemas/__init__.py +9 -0
  9. agno/api/schemas/agent.py +5 -21
  10. agno/api/schemas/evals.py +7 -16
  11. agno/api/schemas/os.py +14 -0
  12. agno/api/schemas/team.py +5 -21
  13. agno/api/schemas/utils.py +21 -0
  14. agno/api/schemas/workflows.py +11 -7
  15. agno/api/settings.py +53 -0
  16. agno/api/team.py +11 -66
  17. agno/api/workflow.py +28 -0
  18. agno/cloud/aws/base.py +214 -0
  19. agno/cloud/aws/s3/__init__.py +2 -0
  20. agno/cloud/aws/s3/api_client.py +43 -0
  21. agno/cloud/aws/s3/bucket.py +195 -0
  22. agno/cloud/aws/s3/object.py +57 -0
  23. agno/db/__init__.py +24 -0
  24. agno/db/base.py +245 -0
  25. agno/db/dynamo/__init__.py +3 -0
  26. agno/db/dynamo/dynamo.py +1743 -0
  27. agno/db/dynamo/schemas.py +278 -0
  28. agno/db/dynamo/utils.py +684 -0
  29. agno/db/firestore/__init__.py +3 -0
  30. agno/db/firestore/firestore.py +1432 -0
  31. agno/db/firestore/schemas.py +130 -0
  32. agno/db/firestore/utils.py +278 -0
  33. agno/db/gcs_json/__init__.py +3 -0
  34. agno/db/gcs_json/gcs_json_db.py +1001 -0
  35. agno/db/gcs_json/utils.py +194 -0
  36. agno/db/in_memory/__init__.py +3 -0
  37. agno/db/in_memory/in_memory_db.py +882 -0
  38. agno/db/in_memory/utils.py +172 -0
  39. agno/db/json/__init__.py +3 -0
  40. agno/db/json/json_db.py +1045 -0
  41. agno/db/json/utils.py +196 -0
  42. agno/db/migrations/v1_to_v2.py +162 -0
  43. agno/db/mongo/__init__.py +3 -0
  44. agno/db/mongo/mongo.py +1416 -0
  45. agno/db/mongo/schemas.py +77 -0
  46. agno/db/mongo/utils.py +204 -0
  47. agno/db/mysql/__init__.py +3 -0
  48. agno/db/mysql/mysql.py +1719 -0
  49. agno/db/mysql/schemas.py +124 -0
  50. agno/db/mysql/utils.py +297 -0
  51. agno/db/postgres/__init__.py +3 -0
  52. agno/db/postgres/postgres.py +1710 -0
  53. agno/db/postgres/schemas.py +124 -0
  54. agno/db/postgres/utils.py +280 -0
  55. agno/db/redis/__init__.py +3 -0
  56. agno/db/redis/redis.py +1367 -0
  57. agno/db/redis/schemas.py +109 -0
  58. agno/db/redis/utils.py +288 -0
  59. agno/db/schemas/__init__.py +3 -0
  60. agno/db/schemas/evals.py +33 -0
  61. agno/db/schemas/knowledge.py +40 -0
  62. agno/db/schemas/memory.py +46 -0
  63. agno/db/singlestore/__init__.py +3 -0
  64. agno/db/singlestore/schemas.py +116 -0
  65. agno/db/singlestore/singlestore.py +1712 -0
  66. agno/db/singlestore/utils.py +326 -0
  67. agno/db/sqlite/__init__.py +3 -0
  68. agno/db/sqlite/schemas.py +119 -0
  69. agno/db/sqlite/sqlite.py +1676 -0
  70. agno/db/sqlite/utils.py +268 -0
  71. agno/db/utils.py +88 -0
  72. agno/eval/__init__.py +14 -0
  73. agno/eval/accuracy.py +154 -48
  74. agno/eval/performance.py +88 -23
  75. agno/eval/reliability.py +73 -20
  76. agno/eval/utils.py +23 -13
  77. agno/integrations/discord/__init__.py +3 -0
  78. agno/{app → integrations}/discord/client.py +10 -10
  79. agno/knowledge/__init__.py +2 -2
  80. agno/{document → knowledge}/chunking/agentic.py +2 -2
  81. agno/{document → knowledge}/chunking/document.py +2 -2
  82. agno/{document → knowledge}/chunking/fixed.py +3 -3
  83. agno/{document → knowledge}/chunking/markdown.py +2 -2
  84. agno/{document → knowledge}/chunking/recursive.py +2 -2
  85. agno/{document → knowledge}/chunking/row.py +2 -2
  86. agno/knowledge/chunking/semantic.py +59 -0
  87. agno/knowledge/chunking/strategy.py +121 -0
  88. agno/knowledge/content.py +74 -0
  89. agno/knowledge/document/__init__.py +5 -0
  90. agno/{document → knowledge/document}/base.py +12 -2
  91. agno/knowledge/embedder/__init__.py +5 -0
  92. agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
  93. agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
  94. agno/{embedder → knowledge/embedder}/base.py +6 -0
  95. agno/{embedder → knowledge/embedder}/cohere.py +72 -1
  96. agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
  97. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  98. agno/{embedder → knowledge/embedder}/google.py +74 -1
  99. agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
  100. agno/{embedder → knowledge/embedder}/jina.py +48 -2
  101. agno/knowledge/embedder/langdb.py +22 -0
  102. agno/knowledge/embedder/mistral.py +139 -0
  103. agno/{embedder → knowledge/embedder}/nebius.py +1 -1
  104. agno/{embedder → knowledge/embedder}/ollama.py +54 -3
  105. agno/knowledge/embedder/openai.py +223 -0
  106. agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
  107. agno/{embedder → knowledge/embedder}/together.py +1 -1
  108. agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
  109. agno/knowledge/knowledge.py +1551 -0
  110. agno/knowledge/reader/__init__.py +7 -0
  111. agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
  112. agno/knowledge/reader/base.py +88 -0
  113. agno/{document → knowledge}/reader/csv_reader.py +47 -65
  114. agno/knowledge/reader/docx_reader.py +83 -0
  115. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  116. agno/{document → knowledge}/reader/json_reader.py +30 -9
  117. agno/{document → knowledge}/reader/markdown_reader.py +58 -9
  118. agno/{document → knowledge}/reader/pdf_reader.py +71 -126
  119. agno/knowledge/reader/reader_factory.py +268 -0
  120. agno/knowledge/reader/s3_reader.py +101 -0
  121. agno/{document → knowledge}/reader/text_reader.py +31 -10
  122. agno/knowledge/reader/url_reader.py +128 -0
  123. agno/knowledge/reader/web_search_reader.py +366 -0
  124. agno/{document → knowledge}/reader/website_reader.py +37 -10
  125. agno/knowledge/reader/wikipedia_reader.py +59 -0
  126. agno/knowledge/reader/youtube_reader.py +78 -0
  127. agno/knowledge/remote_content/remote_content.py +88 -0
  128. agno/{reranker → knowledge/reranker}/base.py +1 -1
  129. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  130. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  131. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  132. agno/knowledge/types.py +30 -0
  133. agno/knowledge/utils.py +169 -0
  134. agno/media.py +269 -268
  135. agno/memory/__init__.py +2 -10
  136. agno/memory/manager.py +1003 -148
  137. agno/models/aimlapi/__init__.py +2 -2
  138. agno/models/aimlapi/aimlapi.py +6 -6
  139. agno/models/anthropic/claude.py +128 -72
  140. agno/models/aws/bedrock.py +107 -175
  141. agno/models/aws/claude.py +64 -18
  142. agno/models/azure/ai_foundry.py +73 -23
  143. agno/models/base.py +346 -290
  144. agno/models/cerebras/cerebras.py +84 -27
  145. agno/models/cohere/chat.py +106 -98
  146. agno/models/google/gemini.py +105 -46
  147. agno/models/groq/groq.py +97 -35
  148. agno/models/huggingface/huggingface.py +92 -27
  149. agno/models/ibm/watsonx.py +72 -13
  150. agno/models/litellm/chat.py +85 -13
  151. agno/models/message.py +46 -151
  152. agno/models/meta/llama.py +85 -49
  153. agno/models/metrics.py +120 -0
  154. agno/models/mistral/mistral.py +90 -21
  155. agno/models/ollama/__init__.py +0 -2
  156. agno/models/ollama/chat.py +85 -47
  157. agno/models/openai/chat.py +154 -37
  158. agno/models/openai/responses.py +178 -105
  159. agno/models/perplexity/perplexity.py +26 -2
  160. agno/models/portkey/portkey.py +0 -7
  161. agno/models/response.py +15 -9
  162. agno/models/utils.py +20 -0
  163. agno/models/vercel/__init__.py +2 -2
  164. agno/models/vercel/v0.py +1 -1
  165. agno/models/vllm/__init__.py +2 -2
  166. agno/models/vllm/vllm.py +3 -3
  167. agno/models/xai/xai.py +10 -10
  168. agno/os/__init__.py +3 -0
  169. agno/os/app.py +497 -0
  170. agno/os/auth.py +47 -0
  171. agno/os/config.py +103 -0
  172. agno/os/interfaces/agui/__init__.py +3 -0
  173. agno/os/interfaces/agui/agui.py +31 -0
  174. agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
  175. agno/{app → os/interfaces}/agui/utils.py +65 -28
  176. agno/os/interfaces/base.py +21 -0
  177. agno/os/interfaces/slack/__init__.py +3 -0
  178. agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
  179. agno/os/interfaces/slack/slack.py +32 -0
  180. agno/os/interfaces/whatsapp/__init__.py +3 -0
  181. agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
  182. agno/os/interfaces/whatsapp/whatsapp.py +29 -0
  183. agno/os/mcp.py +235 -0
  184. agno/os/router.py +1400 -0
  185. agno/os/routers/__init__.py +3 -0
  186. agno/os/routers/evals/__init__.py +3 -0
  187. agno/os/routers/evals/evals.py +393 -0
  188. agno/os/routers/evals/schemas.py +142 -0
  189. agno/os/routers/evals/utils.py +161 -0
  190. agno/os/routers/knowledge/__init__.py +3 -0
  191. agno/os/routers/knowledge/knowledge.py +850 -0
  192. agno/os/routers/knowledge/schemas.py +118 -0
  193. agno/os/routers/memory/__init__.py +3 -0
  194. agno/os/routers/memory/memory.py +410 -0
  195. agno/os/routers/memory/schemas.py +58 -0
  196. agno/os/routers/metrics/__init__.py +3 -0
  197. agno/os/routers/metrics/metrics.py +178 -0
  198. agno/os/routers/metrics/schemas.py +47 -0
  199. agno/os/routers/session/__init__.py +3 -0
  200. agno/os/routers/session/session.py +536 -0
  201. agno/os/schema.py +945 -0
  202. agno/{app/playground → os}/settings.py +7 -15
  203. agno/os/utils.py +270 -0
  204. agno/reasoning/azure_ai_foundry.py +4 -4
  205. agno/reasoning/deepseek.py +4 -4
  206. agno/reasoning/default.py +6 -11
  207. agno/reasoning/groq.py +4 -4
  208. agno/reasoning/helpers.py +4 -6
  209. agno/reasoning/ollama.py +4 -4
  210. agno/reasoning/openai.py +4 -4
  211. agno/run/agent.py +633 -0
  212. agno/run/base.py +53 -77
  213. agno/run/cancel.py +81 -0
  214. agno/run/team.py +243 -96
  215. agno/run/workflow.py +550 -12
  216. agno/session/__init__.py +10 -0
  217. agno/session/agent.py +244 -0
  218. agno/session/summary.py +225 -0
  219. agno/session/team.py +262 -0
  220. agno/{storage/session/v2 → session}/workflow.py +47 -24
  221. agno/team/__init__.py +15 -16
  222. agno/team/team.py +3260 -4824
  223. agno/tools/agentql.py +14 -5
  224. agno/tools/airflow.py +9 -4
  225. agno/tools/api.py +7 -3
  226. agno/tools/apify.py +2 -46
  227. agno/tools/arxiv.py +8 -3
  228. agno/tools/aws_lambda.py +7 -5
  229. agno/tools/aws_ses.py +7 -1
  230. agno/tools/baidusearch.py +4 -1
  231. agno/tools/bitbucket.py +4 -4
  232. agno/tools/brandfetch.py +14 -11
  233. agno/tools/bravesearch.py +4 -1
  234. agno/tools/brightdata.py +43 -23
  235. agno/tools/browserbase.py +13 -4
  236. agno/tools/calcom.py +12 -10
  237. agno/tools/calculator.py +10 -27
  238. agno/tools/cartesia.py +20 -17
  239. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  240. agno/tools/confluence.py +8 -8
  241. agno/tools/crawl4ai.py +7 -1
  242. agno/tools/csv_toolkit.py +9 -8
  243. agno/tools/dalle.py +22 -12
  244. agno/tools/daytona.py +13 -16
  245. agno/tools/decorator.py +6 -3
  246. agno/tools/desi_vocal.py +17 -8
  247. agno/tools/discord.py +11 -8
  248. agno/tools/docker.py +30 -42
  249. agno/tools/duckdb.py +34 -53
  250. agno/tools/duckduckgo.py +8 -7
  251. agno/tools/e2b.py +62 -62
  252. agno/tools/eleven_labs.py +36 -29
  253. agno/tools/email.py +4 -1
  254. agno/tools/evm.py +7 -1
  255. agno/tools/exa.py +19 -14
  256. agno/tools/fal.py +30 -30
  257. agno/tools/file.py +9 -8
  258. agno/tools/financial_datasets.py +25 -44
  259. agno/tools/firecrawl.py +17 -18
  260. agno/tools/function.py +127 -18
  261. agno/tools/giphy.py +23 -11
  262. agno/tools/github.py +48 -126
  263. agno/tools/gmail.py +45 -61
  264. agno/tools/google_bigquery.py +7 -6
  265. agno/tools/google_maps.py +11 -26
  266. agno/tools/googlesearch.py +7 -2
  267. agno/tools/googlesheets.py +21 -17
  268. agno/tools/hackernews.py +9 -5
  269. agno/tools/jina.py +5 -4
  270. agno/tools/jira.py +18 -9
  271. agno/tools/knowledge.py +31 -32
  272. agno/tools/linear.py +18 -33
  273. agno/tools/linkup.py +5 -1
  274. agno/tools/local_file_system.py +8 -5
  275. agno/tools/lumalab.py +32 -20
  276. agno/tools/mcp.py +1 -2
  277. agno/tools/mem0.py +18 -12
  278. agno/tools/memori.py +14 -10
  279. agno/tools/mlx_transcribe.py +3 -2
  280. agno/tools/models/azure_openai.py +33 -15
  281. agno/tools/models/gemini.py +59 -32
  282. agno/tools/models/groq.py +30 -23
  283. agno/tools/models/nebius.py +28 -12
  284. agno/tools/models_labs.py +40 -16
  285. agno/tools/moviepy_video.py +7 -6
  286. agno/tools/neo4j.py +10 -8
  287. agno/tools/newspaper.py +7 -2
  288. agno/tools/newspaper4k.py +8 -3
  289. agno/tools/openai.py +58 -32
  290. agno/tools/openbb.py +12 -11
  291. agno/tools/opencv.py +63 -47
  292. agno/tools/openweather.py +14 -12
  293. agno/tools/pandas.py +11 -3
  294. agno/tools/postgres.py +4 -12
  295. agno/tools/pubmed.py +4 -1
  296. agno/tools/python.py +9 -22
  297. agno/tools/reasoning.py +35 -27
  298. agno/tools/reddit.py +11 -26
  299. agno/tools/replicate.py +55 -42
  300. agno/tools/resend.py +4 -1
  301. agno/tools/scrapegraph.py +15 -14
  302. agno/tools/searxng.py +10 -23
  303. agno/tools/serpapi.py +6 -3
  304. agno/tools/serper.py +13 -4
  305. agno/tools/shell.py +9 -2
  306. agno/tools/slack.py +12 -11
  307. agno/tools/sleep.py +3 -2
  308. agno/tools/spider.py +24 -4
  309. agno/tools/sql.py +7 -6
  310. agno/tools/tavily.py +6 -4
  311. agno/tools/telegram.py +12 -4
  312. agno/tools/todoist.py +11 -31
  313. agno/tools/toolkit.py +1 -1
  314. agno/tools/trafilatura.py +22 -6
  315. agno/tools/trello.py +9 -22
  316. agno/tools/twilio.py +10 -3
  317. agno/tools/user_control_flow.py +6 -1
  318. agno/tools/valyu.py +34 -5
  319. agno/tools/visualization.py +19 -28
  320. agno/tools/webbrowser.py +4 -3
  321. agno/tools/webex.py +11 -7
  322. agno/tools/website.py +15 -46
  323. agno/tools/webtools.py +12 -4
  324. agno/tools/whatsapp.py +5 -9
  325. agno/tools/wikipedia.py +20 -13
  326. agno/tools/x.py +14 -13
  327. agno/tools/yfinance.py +13 -40
  328. agno/tools/youtube.py +26 -20
  329. agno/tools/zendesk.py +7 -2
  330. agno/tools/zep.py +10 -7
  331. agno/tools/zoom.py +10 -9
  332. agno/utils/common.py +1 -19
  333. agno/utils/events.py +100 -123
  334. agno/utils/gemini.py +1 -1
  335. agno/utils/knowledge.py +29 -0
  336. agno/utils/log.py +54 -4
  337. agno/utils/mcp.py +68 -10
  338. agno/utils/media.py +39 -0
  339. agno/utils/message.py +12 -1
  340. agno/utils/models/aws_claude.py +1 -1
  341. agno/utils/models/claude.py +6 -12
  342. agno/utils/models/cohere.py +1 -1
  343. agno/utils/models/mistral.py +8 -7
  344. agno/utils/models/schema_utils.py +3 -3
  345. agno/utils/models/watsonx.py +1 -1
  346. agno/utils/openai.py +1 -1
  347. agno/utils/pprint.py +33 -32
  348. agno/utils/print_response/agent.py +779 -0
  349. agno/utils/print_response/team.py +1669 -0
  350. agno/utils/print_response/workflow.py +1451 -0
  351. agno/utils/prompts.py +14 -14
  352. agno/utils/reasoning.py +87 -0
  353. agno/utils/response.py +42 -42
  354. agno/utils/streamlit.py +481 -0
  355. agno/utils/string.py +8 -22
  356. agno/utils/team.py +50 -0
  357. agno/utils/timer.py +2 -2
  358. agno/vectordb/base.py +33 -21
  359. agno/vectordb/cassandra/cassandra.py +287 -23
  360. agno/vectordb/chroma/chromadb.py +482 -59
  361. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  362. agno/vectordb/couchbase/couchbase.py +309 -29
  363. agno/vectordb/lancedb/lance_db.py +360 -21
  364. agno/vectordb/langchaindb/__init__.py +5 -0
  365. agno/vectordb/langchaindb/langchaindb.py +145 -0
  366. agno/vectordb/lightrag/__init__.py +5 -0
  367. agno/vectordb/lightrag/lightrag.py +374 -0
  368. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  369. agno/vectordb/milvus/milvus.py +242 -32
  370. agno/vectordb/mongodb/mongodb.py +200 -24
  371. agno/vectordb/pgvector/pgvector.py +319 -37
  372. agno/vectordb/pineconedb/pineconedb.py +221 -27
  373. agno/vectordb/qdrant/qdrant.py +334 -14
  374. agno/vectordb/singlestore/singlestore.py +286 -29
  375. agno/vectordb/surrealdb/surrealdb.py +187 -7
  376. agno/vectordb/upstashdb/upstashdb.py +342 -26
  377. agno/vectordb/weaviate/weaviate.py +227 -165
  378. agno/workflow/__init__.py +17 -13
  379. agno/workflow/{v2/condition.py → condition.py} +135 -32
  380. agno/workflow/{v2/loop.py → loop.py} +115 -28
  381. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  382. agno/workflow/{v2/router.py → router.py} +133 -32
  383. agno/workflow/{v2/step.py → step.py} +207 -49
  384. agno/workflow/{v2/steps.py → steps.py} +147 -66
  385. agno/workflow/types.py +482 -0
  386. agno/workflow/workflow.py +2410 -696
  387. agno-2.0.0.dist-info/METADATA +494 -0
  388. agno-2.0.0.dist-info/RECORD +515 -0
  389. agno-2.0.0.dist-info/licenses/LICENSE +201 -0
  390. agno/agent/metrics.py +0 -110
  391. agno/api/app.py +0 -35
  392. agno/api/playground.py +0 -92
  393. agno/api/schemas/app.py +0 -12
  394. agno/api/schemas/playground.py +0 -22
  395. agno/api/schemas/user.py +0 -35
  396. agno/api/schemas/workspace.py +0 -46
  397. agno/api/user.py +0 -160
  398. agno/api/workflows.py +0 -33
  399. agno/api/workspace.py +0 -175
  400. agno/app/agui/__init__.py +0 -3
  401. agno/app/agui/app.py +0 -17
  402. agno/app/agui/sync_router.py +0 -120
  403. agno/app/base.py +0 -186
  404. agno/app/discord/__init__.py +0 -3
  405. agno/app/fastapi/__init__.py +0 -3
  406. agno/app/fastapi/app.py +0 -107
  407. agno/app/fastapi/async_router.py +0 -457
  408. agno/app/fastapi/sync_router.py +0 -448
  409. agno/app/playground/app.py +0 -228
  410. agno/app/playground/async_router.py +0 -1053
  411. agno/app/playground/deploy.py +0 -249
  412. agno/app/playground/operator.py +0 -183
  413. agno/app/playground/schemas.py +0 -223
  414. agno/app/playground/serve.py +0 -55
  415. agno/app/playground/sync_router.py +0 -1045
  416. agno/app/playground/utils.py +0 -46
  417. agno/app/settings.py +0 -15
  418. agno/app/slack/__init__.py +0 -3
  419. agno/app/slack/app.py +0 -19
  420. agno/app/slack/sync_router.py +0 -92
  421. agno/app/utils.py +0 -54
  422. agno/app/whatsapp/__init__.py +0 -3
  423. agno/app/whatsapp/app.py +0 -15
  424. agno/app/whatsapp/sync_router.py +0 -197
  425. agno/cli/auth_server.py +0 -249
  426. agno/cli/config.py +0 -274
  427. agno/cli/console.py +0 -88
  428. agno/cli/credentials.py +0 -23
  429. agno/cli/entrypoint.py +0 -571
  430. agno/cli/operator.py +0 -357
  431. agno/cli/settings.py +0 -96
  432. agno/cli/ws/ws_cli.py +0 -817
  433. agno/constants.py +0 -13
  434. agno/document/__init__.py +0 -5
  435. agno/document/chunking/semantic.py +0 -45
  436. agno/document/chunking/strategy.py +0 -31
  437. agno/document/reader/__init__.py +0 -5
  438. agno/document/reader/base.py +0 -47
  439. agno/document/reader/docx_reader.py +0 -60
  440. agno/document/reader/gcs/pdf_reader.py +0 -44
  441. agno/document/reader/s3/pdf_reader.py +0 -59
  442. agno/document/reader/s3/text_reader.py +0 -63
  443. agno/document/reader/url_reader.py +0 -59
  444. agno/document/reader/youtube_reader.py +0 -58
  445. agno/embedder/__init__.py +0 -5
  446. agno/embedder/langdb.py +0 -80
  447. agno/embedder/mistral.py +0 -82
  448. agno/embedder/openai.py +0 -78
  449. agno/file/__init__.py +0 -5
  450. agno/file/file.py +0 -16
  451. agno/file/local/csv.py +0 -32
  452. agno/file/local/txt.py +0 -19
  453. agno/infra/app.py +0 -240
  454. agno/infra/base.py +0 -144
  455. agno/infra/context.py +0 -20
  456. agno/infra/db_app.py +0 -52
  457. agno/infra/resource.py +0 -205
  458. agno/infra/resources.py +0 -55
  459. agno/knowledge/agent.py +0 -702
  460. agno/knowledge/arxiv.py +0 -33
  461. agno/knowledge/combined.py +0 -36
  462. agno/knowledge/csv.py +0 -144
  463. agno/knowledge/csv_url.py +0 -124
  464. agno/knowledge/document.py +0 -223
  465. agno/knowledge/docx.py +0 -137
  466. agno/knowledge/firecrawl.py +0 -34
  467. agno/knowledge/gcs/__init__.py +0 -0
  468. agno/knowledge/gcs/base.py +0 -39
  469. agno/knowledge/gcs/pdf.py +0 -125
  470. agno/knowledge/json.py +0 -137
  471. agno/knowledge/langchain.py +0 -71
  472. agno/knowledge/light_rag.py +0 -273
  473. agno/knowledge/llamaindex.py +0 -66
  474. agno/knowledge/markdown.py +0 -154
  475. agno/knowledge/pdf.py +0 -164
  476. agno/knowledge/pdf_bytes.py +0 -42
  477. agno/knowledge/pdf_url.py +0 -148
  478. agno/knowledge/s3/__init__.py +0 -0
  479. agno/knowledge/s3/base.py +0 -64
  480. agno/knowledge/s3/pdf.py +0 -33
  481. agno/knowledge/s3/text.py +0 -34
  482. agno/knowledge/text.py +0 -141
  483. agno/knowledge/url.py +0 -46
  484. agno/knowledge/website.py +0 -179
  485. agno/knowledge/wikipedia.py +0 -32
  486. agno/knowledge/youtube.py +0 -35
  487. agno/memory/agent.py +0 -423
  488. agno/memory/classifier.py +0 -104
  489. agno/memory/db/__init__.py +0 -5
  490. agno/memory/db/base.py +0 -42
  491. agno/memory/db/mongodb.py +0 -189
  492. agno/memory/db/postgres.py +0 -203
  493. agno/memory/db/sqlite.py +0 -193
  494. agno/memory/memory.py +0 -22
  495. agno/memory/row.py +0 -36
  496. agno/memory/summarizer.py +0 -201
  497. agno/memory/summary.py +0 -19
  498. agno/memory/team.py +0 -415
  499. agno/memory/v2/__init__.py +0 -2
  500. agno/memory/v2/db/__init__.py +0 -1
  501. agno/memory/v2/db/base.py +0 -42
  502. agno/memory/v2/db/firestore.py +0 -339
  503. agno/memory/v2/db/mongodb.py +0 -196
  504. agno/memory/v2/db/postgres.py +0 -214
  505. agno/memory/v2/db/redis.py +0 -187
  506. agno/memory/v2/db/schema.py +0 -54
  507. agno/memory/v2/db/sqlite.py +0 -209
  508. agno/memory/v2/manager.py +0 -437
  509. agno/memory/v2/memory.py +0 -1097
  510. agno/memory/v2/schema.py +0 -55
  511. agno/memory/v2/summarizer.py +0 -215
  512. agno/memory/workflow.py +0 -38
  513. agno/models/ollama/tools.py +0 -430
  514. agno/models/qwen/__init__.py +0 -5
  515. agno/playground/__init__.py +0 -10
  516. agno/playground/deploy.py +0 -3
  517. agno/playground/playground.py +0 -3
  518. agno/playground/serve.py +0 -3
  519. agno/playground/settings.py +0 -3
  520. agno/reranker/__init__.py +0 -0
  521. agno/run/response.py +0 -467
  522. agno/run/v2/__init__.py +0 -0
  523. agno/run/v2/workflow.py +0 -567
  524. agno/storage/__init__.py +0 -0
  525. agno/storage/agent/__init__.py +0 -0
  526. agno/storage/agent/dynamodb.py +0 -1
  527. agno/storage/agent/json.py +0 -1
  528. agno/storage/agent/mongodb.py +0 -1
  529. agno/storage/agent/postgres.py +0 -1
  530. agno/storage/agent/singlestore.py +0 -1
  531. agno/storage/agent/sqlite.py +0 -1
  532. agno/storage/agent/yaml.py +0 -1
  533. agno/storage/base.py +0 -60
  534. agno/storage/dynamodb.py +0 -673
  535. agno/storage/firestore.py +0 -297
  536. agno/storage/gcs_json.py +0 -261
  537. agno/storage/in_memory.py +0 -234
  538. agno/storage/json.py +0 -237
  539. agno/storage/mongodb.py +0 -328
  540. agno/storage/mysql.py +0 -685
  541. agno/storage/postgres.py +0 -682
  542. agno/storage/redis.py +0 -336
  543. agno/storage/session/__init__.py +0 -16
  544. agno/storage/session/agent.py +0 -64
  545. agno/storage/session/team.py +0 -63
  546. agno/storage/session/v2/__init__.py +0 -5
  547. agno/storage/session/workflow.py +0 -61
  548. agno/storage/singlestore.py +0 -606
  549. agno/storage/sqlite.py +0 -646
  550. agno/storage/workflow/__init__.py +0 -0
  551. agno/storage/workflow/mongodb.py +0 -1
  552. agno/storage/workflow/postgres.py +0 -1
  553. agno/storage/workflow/sqlite.py +0 -1
  554. agno/storage/yaml.py +0 -241
  555. agno/tools/thinking.py +0 -73
  556. agno/utils/defaults.py +0 -57
  557. agno/utils/filesystem.py +0 -39
  558. agno/utils/git.py +0 -52
  559. agno/utils/json_io.py +0 -30
  560. agno/utils/load_env.py +0 -19
  561. agno/utils/py_io.py +0 -19
  562. agno/utils/pyproject.py +0 -18
  563. agno/utils/resource_filter.py +0 -31
  564. agno/workflow/v2/__init__.py +0 -21
  565. agno/workflow/v2/types.py +0 -357
  566. agno/workflow/v2/workflow.py +0 -3313
  567. agno/workspace/__init__.py +0 -0
  568. agno/workspace/config.py +0 -325
  569. agno/workspace/enums.py +0 -6
  570. agno/workspace/helpers.py +0 -52
  571. agno/workspace/operator.py +0 -757
  572. agno/workspace/settings.py +0 -158
  573. agno-1.8.2.dist-info/METADATA +0 -982
  574. agno-1.8.2.dist-info/RECORD +0 -566
  575. agno-1.8.2.dist-info/entry_points.txt +0 -3
  576. agno-1.8.2.dist-info/licenses/LICENSE +0 -375
  577. /agno/{app → db/migrations}/__init__.py +0 -0
  578. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  579. /agno/{cli → integrations}/__init__.py +0 -0
  580. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  581. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  582. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  583. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  584. /agno/{app → os/interfaces}/slack/security.py +0 -0
  585. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  586. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  587. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  588. {agno-1.8.2.dist-info → agno-2.0.0.dist-info}/WHEEL +0 -0
  589. {agno-1.8.2.dist-info → agno-2.0.0.dist-info}/top_level.txt +0 -0
@@ -6,32 +6,23 @@ from pydantic import Field, field_validator
6
6
  from pydantic_settings import BaseSettings
7
7
 
8
8
 
9
- class PlaygroundSettings(BaseSettings):
10
- """Playground API settings that can be set using environment variables.
9
+ class AgnoAPISettings(BaseSettings):
10
+ """App settings for API-based apps that can be set using environment variables.
11
11
 
12
12
  Reference: https://pydantic-docs.helpmanual.io/usage/settings/
13
13
  """
14
14
 
15
15
  env: str = "dev"
16
- title: str = "agno-playground"
17
16
 
18
17
  # Set to False to disable docs server at /docs and /redoc
19
18
  docs_enabled: bool = True
20
19
 
21
- secret_key: Optional[str] = None
20
+ # Authentication settings
21
+ os_security_key: Optional[str] = Field(default=None, description="Bearer token for API authentication")
22
22
 
23
23
  # Cors origin list to allow requests from.
24
24
  # This list is set using the set_cors_origin_list validator
25
- cors_origin_list: Optional[List[str]] = Field(None, validate_default=True)
26
-
27
- @field_validator("env", mode="before")
28
- def validate_playground_env(cls, env):
29
- """Validate playground_env."""
30
-
31
- valid_runtime_envs = ["dev", "stg", "prd"]
32
- if env not in valid_runtime_envs:
33
- raise ValueError(f"Invalid Playground Env: {env}")
34
- return env
25
+ cors_origin_list: Optional[List[str]] = Field(default=None, validate_default=True)
35
26
 
36
27
  @field_validator("cors_origin_list", mode="before")
37
28
  def set_cors_origin_list(cls, cors_origin_list):
@@ -44,7 +35,8 @@ class PlaygroundSettings(BaseSettings):
44
35
  "https://agno.com",
45
36
  "https://www.agno.com",
46
37
  "https://app.agno.com",
47
- "https://app-stg.agno.com",
38
+ "https://os-stg.agno.com",
39
+ "https://os.agno.com",
48
40
  ]
49
41
  )
50
42
 
agno/os/utils.py ADDED
@@ -0,0 +1,270 @@
1
+ from typing import Any, Callable, Dict, List, Optional, Union
2
+ from uuid import uuid4
3
+
4
+ from fastapi import HTTPException, UploadFile
5
+
6
+ from agno.agent.agent import Agent
7
+ from agno.db.base import BaseDb
8
+ from agno.knowledge.knowledge import Knowledge
9
+ from agno.media import Audio, Image, Video
10
+ from agno.media import File as FileMedia
11
+ from agno.team.team import Team
12
+ from agno.tools import Toolkit
13
+ from agno.tools.function import Function
14
+ from agno.utils.log import logger
15
+ from agno.workflow.workflow import Workflow
16
+
17
+
18
+ def get_db(dbs: dict[str, BaseDb], db_id: Optional[str] = None) -> BaseDb:
19
+ """Return the database with the given ID, or the first database if no ID is provided."""
20
+
21
+ # Raise if multiple databases are provided but no db_id is provided
22
+ if not db_id and len(dbs) > 1:
23
+ raise HTTPException(
24
+ status_code=400, detail="The db_id query parameter is required when using multiple databases"
25
+ )
26
+
27
+ # Get and return the database with the given ID, or raise if not found
28
+ if db_id:
29
+ db = dbs.get(db_id)
30
+ if not db:
31
+ raise HTTPException(status_code=404, detail=f"Database with id '{db_id}' not found")
32
+ else:
33
+ db = next(iter(dbs.values()))
34
+ return db
35
+
36
+
37
+ def get_knowledge_instance_by_db_id(knowledge_instances: List[Knowledge], db_id: Optional[str] = None) -> Knowledge:
38
+ """Return the knowledge instance with the given ID, or the first knowledge instance if no ID is provided."""
39
+ if not db_id and len(knowledge_instances) == 1:
40
+ return next(iter(knowledge_instances))
41
+
42
+ if not db_id:
43
+ raise HTTPException(
44
+ status_code=400, detail="The db_id query parameter is required when using multiple databases"
45
+ )
46
+
47
+ for knowledge in knowledge_instances:
48
+ if knowledge.contents_db and knowledge.contents_db.id == db_id:
49
+ return knowledge
50
+
51
+ raise HTTPException(status_code=404, detail=f"Knowledge instance with id '{db_id}' not found")
52
+
53
+
54
+ def get_run_input(run_dict: Dict[str, Any], is_workflow_run: bool = False) -> str:
55
+ """Get the run input from the given run dictionary"""
56
+
57
+ if is_workflow_run:
58
+ step_executor_runs = run_dict.get("step_executor_runs", [])
59
+ if step_executor_runs:
60
+ for message in step_executor_runs[0].get("messages", []):
61
+ if message.get("role") == "user":
62
+ return message.get("content", "")
63
+
64
+ if run_dict.get("messages") is not None:
65
+ for message in run_dict["messages"]:
66
+ if message.get("role") == "user":
67
+ return message.get("content", "")
68
+
69
+ return ""
70
+
71
+
72
+ def get_session_name(session: Dict[str, Any]) -> str:
73
+ """Get the session name from the given session dictionary"""
74
+
75
+ # If session_data.session_name is set, return that
76
+ session_data = session.get("session_data")
77
+ if session_data is not None and session_data.get("session_name") is not None:
78
+ return session_data["session_name"]
79
+
80
+ # Otherwise use the original user message
81
+ else:
82
+ runs = session.get("runs", [])
83
+
84
+ # For teams, identify the first Team run and avoid using the first member's run
85
+ if session.get("session_type") == "team":
86
+ run = runs[0] if not runs[0].get("agent_id") else runs[1]
87
+
88
+ # For workflows, pass along the first step_executor_run
89
+ elif session.get("session_type") == "workflow":
90
+ try:
91
+ run = session["runs"][0]["step_executor_runs"][0]
92
+ except (KeyError, IndexError, TypeError):
93
+ return ""
94
+
95
+ # For agents, use the first run
96
+ else:
97
+ run = runs[0]
98
+
99
+ if not isinstance(run, dict):
100
+ run = run.to_dict()
101
+
102
+ if run and run.get("messages"):
103
+ for message in run["messages"]:
104
+ if message["role"] == "user":
105
+ return message["content"]
106
+ return ""
107
+
108
+
109
+ def process_image(file: UploadFile) -> Image:
110
+ content = file.file.read()
111
+ if not content:
112
+ raise HTTPException(status_code=400, detail="Empty file")
113
+ return Image(content=content)
114
+
115
+
116
+ def process_audio(file: UploadFile) -> Audio:
117
+ content = file.file.read()
118
+ if not content:
119
+ raise HTTPException(status_code=400, detail="Empty file")
120
+ format = None
121
+ if file.filename and "." in file.filename:
122
+ format = file.filename.split(".")[-1].lower()
123
+ elif file.content_type:
124
+ format = file.content_type.split("/")[-1]
125
+
126
+ return Audio(content=content, format=format)
127
+
128
+
129
+ def process_video(file: UploadFile) -> Video:
130
+ content = file.file.read()
131
+ if not content:
132
+ raise HTTPException(status_code=400, detail="Empty file")
133
+ return Video(content=content, format=file.content_type)
134
+
135
+
136
+ def process_document(file: UploadFile) -> Optional[FileMedia]:
137
+ try:
138
+ content = file.file.read()
139
+ if not content:
140
+ raise HTTPException(status_code=400, detail="Empty file")
141
+
142
+ return FileMedia(content=content)
143
+ except Exception as e:
144
+ logger.error(f"Error processing document {file.filename}: {e}")
145
+ return None
146
+
147
+
148
+ def format_tools(agent_tools: List[Union[Dict[str, Any], Toolkit, Function, Callable]]):
149
+ formatted_tools = []
150
+ if agent_tools is not None:
151
+ for tool in agent_tools:
152
+ if isinstance(tool, dict):
153
+ formatted_tools.append(tool)
154
+ elif isinstance(tool, Toolkit):
155
+ for _, f in tool.functions.items():
156
+ formatted_tools.append(f.to_dict())
157
+ elif isinstance(tool, Function):
158
+ formatted_tools.append(tool.to_dict())
159
+ elif callable(tool):
160
+ func = Function.from_callable(tool)
161
+ formatted_tools.append(func.to_dict())
162
+ else:
163
+ logger.warning(f"Unknown tool type: {type(tool)}")
164
+ return formatted_tools
165
+
166
+
167
+ def format_team_tools(team_tools: List[Function]):
168
+ return [tool.to_dict() for tool in team_tools]
169
+
170
+
171
+ def get_agent_by_id(agent_id: str, agents: Optional[List[Agent]] = None) -> Optional[Agent]:
172
+ if agent_id is None or agents is None:
173
+ return None
174
+
175
+ for agent in agents:
176
+ if agent.id == agent_id:
177
+ return agent
178
+ return None
179
+
180
+
181
+ def get_team_by_id(team_id: str, teams: Optional[List[Team]] = None) -> Optional[Team]:
182
+ if team_id is None or teams is None:
183
+ return None
184
+
185
+ for team in teams:
186
+ if team.id == team_id:
187
+ return team
188
+ return None
189
+
190
+
191
+ def get_workflow_by_id(workflow_id: str, workflows: Optional[List[Workflow]] = None) -> Optional[Workflow]:
192
+ if workflow_id is None or workflows is None:
193
+ return None
194
+
195
+ for workflow in workflows:
196
+ if workflow.id == workflow_id:
197
+ return workflow
198
+ return None
199
+
200
+
201
+ def get_workflow_input_schema_dict(workflow: Workflow) -> Optional[Dict[str, Any]]:
202
+ """Get input schema as dictionary for API responses"""
203
+
204
+ # Priority 1: Explicit input_schema (Pydantic model)
205
+ if workflow.input_schema is not None:
206
+ try:
207
+ return workflow.input_schema.model_json_schema()
208
+ except Exception:
209
+ return None
210
+
211
+ # Priority 2: Auto-generate from custom kwargs
212
+ if workflow.steps and callable(workflow.steps):
213
+ custom_params = workflow.run_parameters
214
+ if custom_params and len(custom_params) > 1: # More than just 'message'
215
+ return _generate_schema_from_params(custom_params)
216
+
217
+ # Priority 3: No schema (expects string message)
218
+ return None
219
+
220
+
221
+ def _generate_schema_from_params(params: Dict[str, Any]) -> Dict[str, Any]:
222
+ """Convert function parameters to JSON schema"""
223
+ properties: Dict[str, Any] = {}
224
+ required: List[str] = []
225
+
226
+ for param_name, param_info in params.items():
227
+ # Skip the default 'message' parameter for custom kwargs workflows
228
+ if param_name == "message":
229
+ continue
230
+
231
+ # Map Python types to JSON schema types
232
+ param_type = param_info.get("annotation", "str")
233
+ default_value = param_info.get("default")
234
+ is_required = param_info.get("required", False)
235
+
236
+ # Convert Python type annotations to JSON schema types
237
+ if param_type == "str":
238
+ properties[param_name] = {"type": "string"}
239
+ elif param_type == "bool":
240
+ properties[param_name] = {"type": "boolean"}
241
+ elif param_type == "int":
242
+ properties[param_name] = {"type": "integer"}
243
+ elif param_type == "float":
244
+ properties[param_name] = {"type": "number"}
245
+ elif "List" in str(param_type):
246
+ properties[param_name] = {"type": "array", "items": {"type": "string"}}
247
+ else:
248
+ properties[param_name] = {"type": "string"} # fallback
249
+
250
+ # Add default value if present
251
+ if default_value is not None:
252
+ properties[param_name]["default"] = default_value
253
+
254
+ # Add to required if no default value
255
+ if is_required and default_value is None:
256
+ required.append(param_name)
257
+
258
+ schema = {"type": "object", "properties": properties}
259
+
260
+ if required:
261
+ schema["required"] = required
262
+
263
+ return schema
264
+
265
+
266
+ def generate_id(name: Optional[str] = None) -> str:
267
+ if name:
268
+ return name.lower().replace(" ", "-").replace("_", "-")
269
+ else:
270
+ return str(uuid4())
@@ -17,10 +17,10 @@ def is_ai_foundry_reasoning_model(reasoning_model: Model) -> bool:
17
17
 
18
18
 
19
19
  def get_ai_foundry_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
20
- from agno.run.response import RunResponse
20
+ from agno.run.agent import RunOutput
21
21
 
22
22
  try:
23
- reasoning_agent_response: RunResponse = reasoning_agent.run(messages=messages)
23
+ reasoning_agent_response: RunOutput = reasoning_agent.run(messages=messages)
24
24
  except Exception as e:
25
25
  logger.warning(f"Reasoning error: {e}")
26
26
  return None
@@ -43,10 +43,10 @@ def get_ai_foundry_reasoning(reasoning_agent: "Agent", messages: List[Message])
43
43
 
44
44
 
45
45
  async def aget_ai_foundry_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
46
- from agno.run.response import RunResponse
46
+ from agno.run.agent import RunOutput
47
47
 
48
48
  try:
49
- reasoning_agent_response: RunResponse = await reasoning_agent.arun(messages=messages)
49
+ reasoning_agent_response: RunOutput = await reasoning_agent.arun(messages=messages)
50
50
  except Exception as e:
51
51
  logger.warning(f"Reasoning error: {e}")
52
52
  return None
@@ -12,7 +12,7 @@ def is_deepseek_reasoning_model(reasoning_model: Model) -> bool:
12
12
 
13
13
 
14
14
  def get_deepseek_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
15
- from agno.run.response import RunResponse
15
+ from agno.run.agent import RunOutput
16
16
 
17
17
  # Update system message role to "system"
18
18
  for message in messages:
@@ -20,7 +20,7 @@ def get_deepseek_reasoning(reasoning_agent: "Agent", messages: List[Message]) ->
20
20
  message.role = "system"
21
21
 
22
22
  try:
23
- reasoning_agent_response: RunResponse = reasoning_agent.run(messages=messages)
23
+ reasoning_agent_response: RunOutput = reasoning_agent.run(messages=messages)
24
24
  except Exception as e:
25
25
  logger.warning(f"Reasoning error: {e}")
26
26
  return None
@@ -38,7 +38,7 @@ def get_deepseek_reasoning(reasoning_agent: "Agent", messages: List[Message]) ->
38
38
 
39
39
 
40
40
  async def aget_deepseek_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
41
- from agno.run.response import RunResponse
41
+ from agno.run.agent import RunOutput
42
42
 
43
43
  # Update system message role to "system"
44
44
  for message in messages:
@@ -46,7 +46,7 @@ async def aget_deepseek_reasoning(reasoning_agent: "Agent", messages: List[Messa
46
46
  message.role = "system"
47
47
 
48
48
  try:
49
- reasoning_agent_response: RunResponse = await reasoning_agent.arun(messages=messages)
49
+ reasoning_agent_response: RunOutput = await reasoning_agent.arun(messages=messages)
50
50
  except Exception as e:
51
51
  logger.warning(f"Reasoning error: {e}")
52
52
  return None
agno/reasoning/default.py CHANGED
@@ -5,8 +5,8 @@ from typing import Any, Callable, Dict, List, Literal, Optional, Union
5
5
 
6
6
  from agno.models.base import Model
7
7
  from agno.reasoning.step import ReasoningSteps
8
+ from agno.tools import Toolkit
8
9
  from agno.tools.function import Function
9
- from agno.tools.toolkit import Toolkit
10
10
 
11
11
 
12
12
  def get_default_reasoning_agent(
@@ -15,13 +15,12 @@ def get_default_reasoning_agent(
15
15
  max_steps: int,
16
16
  tools: Optional[List[Union[Toolkit, Callable, Function, Dict]]] = None,
17
17
  use_json_mode: bool = False,
18
- monitoring: bool = False,
19
18
  telemetry: bool = True,
20
19
  debug_mode: bool = False,
21
20
  debug_level: Literal[1, 2] = 1,
22
21
  session_state: Optional[Dict[str, Any]] = None,
23
- context: Optional[Dict[str, Any]] = None,
24
- extra_data: Optional[Dict[str, Any]] = None,
22
+ dependencies: Optional[Dict[str, Any]] = None,
23
+ metadata: Optional[Dict[str, Any]] = None,
25
24
  ) -> Optional["Agent"]: # type: ignore # noqa: F821
26
25
  from agno.agent import Agent
27
26
 
@@ -83,18 +82,14 @@ def get_default_reasoning_agent(
83
82
  - Only create a single instance of ReasoningSteps for your response.\
84
83
  """),
85
84
  tools=tools,
86
- show_tool_calls=False,
87
- response_model=ReasoningSteps,
85
+ output_schema=ReasoningSteps,
88
86
  use_json_mode=use_json_mode,
89
- monitoring=monitoring,
90
87
  telemetry=telemetry,
91
88
  debug_mode=debug_mode,
92
89
  debug_level=debug_level,
93
90
  session_state=session_state,
94
- context=context,
95
- extra_data=extra_data,
91
+ dependencies=dependencies,
92
+ metadata=metadata,
96
93
  )
97
94
 
98
- agent.model.show_tool_calls = False # type: ignore
99
-
100
95
  return agent
agno/reasoning/groq.py CHANGED
@@ -12,7 +12,7 @@ def is_groq_reasoning_model(reasoning_model: Model) -> bool:
12
12
 
13
13
 
14
14
  def get_groq_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
15
- from agno.run.response import RunResponse
15
+ from agno.run.agent import RunOutput
16
16
 
17
17
  # Update system message role to "system"
18
18
  for message in messages:
@@ -20,7 +20,7 @@ def get_groq_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Opt
20
20
  message.role = "system"
21
21
 
22
22
  try:
23
- reasoning_agent_response: RunResponse = reasoning_agent.run(messages=messages)
23
+ reasoning_agent_response: RunOutput = reasoning_agent.run(messages=messages)
24
24
  except Exception as e:
25
25
  logger.warning(f"Reasoning error: {e}")
26
26
  return None
@@ -42,7 +42,7 @@ def get_groq_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Opt
42
42
 
43
43
 
44
44
  async def aget_groq_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
45
- from agno.run.response import RunResponse
45
+ from agno.run.agent import RunOutput
46
46
 
47
47
  # Update system message role to "system"
48
48
  for message in messages:
@@ -50,7 +50,7 @@ async def aget_groq_reasoning(reasoning_agent: "Agent", messages: List[Message])
50
50
  message.role = "system"
51
51
 
52
52
  try:
53
- reasoning_agent_response: RunResponse = await reasoning_agent.arun(messages=messages)
53
+ reasoning_agent_response: RunOutput = await reasoning_agent.arun(messages=messages)
54
54
  except Exception as e:
55
55
  logger.warning(f"Reasoning error: {e}")
56
56
  return None
agno/reasoning/helpers.py CHANGED
@@ -9,25 +9,23 @@ from agno.utils.log import logger
9
9
 
10
10
  def get_reasoning_agent(
11
11
  reasoning_model: Model,
12
- monitoring: bool = False,
13
12
  telemetry: bool = False,
14
13
  debug_mode: bool = False,
15
14
  debug_level: Literal[1, 2] = 1,
16
15
  session_state: Optional[Dict[str, Any]] = None,
17
- context: Optional[Dict[str, Any]] = None,
18
- extra_data: Optional[Dict[str, Any]] = None,
16
+ dependencies: Optional[Dict[str, Any]] = None,
17
+ metadata: Optional[Dict[str, Any]] = None,
19
18
  ) -> "Agent": # type: ignore # noqa: F821
20
19
  from agno.agent import Agent
21
20
 
22
21
  return Agent(
23
22
  model=reasoning_model,
24
- monitoring=monitoring,
25
23
  telemetry=telemetry,
26
24
  debug_mode=debug_mode,
27
25
  debug_level=debug_level,
28
26
  session_state=session_state,
29
- context=context,
30
- extra_data=extra_data,
27
+ dependencies=dependencies,
28
+ metadata=metadata,
31
29
  )
32
30
 
33
31
 
agno/reasoning/ollama.py CHANGED
@@ -17,10 +17,10 @@ def is_ollama_reasoning_model(reasoning_model: Model) -> bool:
17
17
 
18
18
 
19
19
  def get_ollama_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
20
- from agno.run.response import RunResponse
20
+ from agno.run.agent import RunOutput
21
21
 
22
22
  try:
23
- reasoning_agent_response: RunResponse = reasoning_agent.run(messages=messages)
23
+ reasoning_agent_response: RunOutput = reasoning_agent.run(messages=messages)
24
24
  except Exception as e:
25
25
  logger.warning(f"Reasoning error: {e}")
26
26
  return None
@@ -43,10 +43,10 @@ def get_ollama_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> O
43
43
 
44
44
 
45
45
  async def aget_ollama_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
46
- from agno.run.response import RunResponse
46
+ from agno.run.agent import RunOutput
47
47
 
48
48
  try:
49
- reasoning_agent_response: RunResponse = await reasoning_agent.arun(messages=messages)
49
+ reasoning_agent_response: RunOutput = await reasoning_agent.arun(messages=messages)
50
50
  except Exception as e:
51
51
  logger.warning(f"Reasoning error: {e}")
52
52
  return None
agno/reasoning/openai.py CHANGED
@@ -26,10 +26,10 @@ def is_openai_reasoning_model(reasoning_model: Model) -> bool:
26
26
 
27
27
 
28
28
  def get_openai_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
29
- from agno.run.response import RunResponse
29
+ from agno.run.agent import RunOutput
30
30
 
31
31
  try:
32
- reasoning_agent_response: RunResponse = reasoning_agent.run(messages=messages)
32
+ reasoning_agent_response: RunOutput = reasoning_agent.run(messages=messages)
33
33
  except Exception as e:
34
34
  logger.warning(f"Reasoning error: {e}")
35
35
  return None
@@ -52,7 +52,7 @@ def get_openai_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> O
52
52
 
53
53
 
54
54
  async def aget_openai_reasoning(reasoning_agent: "Agent", messages: List[Message]) -> Optional[Message]: # type: ignore # noqa: F821
55
- from agno.run.response import RunResponse
55
+ from agno.run.agent import RunOutput
56
56
 
57
57
  # Update system message role to "system"
58
58
  for message in messages:
@@ -60,7 +60,7 @@ async def aget_openai_reasoning(reasoning_agent: "Agent", messages: List[Message
60
60
  message.role = "system"
61
61
 
62
62
  try:
63
- reasoning_agent_response: RunResponse = await reasoning_agent.arun(messages=messages)
63
+ reasoning_agent_response: RunOutput = await reasoning_agent.arun(messages=messages)
64
64
  except Exception as e:
65
65
  logger.warning(f"Reasoning error: {e}")
66
66
  return None