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

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