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

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