agno 2.2.13__py3-none-any.whl → 2.4.3__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 (383) hide show
  1. agno/agent/__init__.py +6 -0
  2. agno/agent/agent.py +5252 -3145
  3. agno/agent/remote.py +525 -0
  4. agno/api/api.py +2 -0
  5. agno/client/__init__.py +3 -0
  6. agno/client/a2a/__init__.py +10 -0
  7. agno/client/a2a/client.py +554 -0
  8. agno/client/a2a/schemas.py +112 -0
  9. agno/client/a2a/utils.py +369 -0
  10. agno/client/os.py +2669 -0
  11. agno/compression/__init__.py +3 -0
  12. agno/compression/manager.py +247 -0
  13. agno/culture/manager.py +2 -2
  14. agno/db/base.py +927 -6
  15. agno/db/dynamo/dynamo.py +788 -2
  16. agno/db/dynamo/schemas.py +128 -0
  17. agno/db/dynamo/utils.py +26 -3
  18. agno/db/firestore/firestore.py +674 -50
  19. agno/db/firestore/schemas.py +41 -0
  20. agno/db/firestore/utils.py +25 -10
  21. agno/db/gcs_json/gcs_json_db.py +506 -3
  22. agno/db/gcs_json/utils.py +14 -2
  23. agno/db/in_memory/in_memory_db.py +203 -4
  24. agno/db/in_memory/utils.py +14 -2
  25. agno/db/json/json_db.py +498 -2
  26. agno/db/json/utils.py +14 -2
  27. agno/db/migrations/manager.py +199 -0
  28. agno/db/migrations/utils.py +19 -0
  29. agno/db/migrations/v1_to_v2.py +54 -16
  30. agno/db/migrations/versions/__init__.py +0 -0
  31. agno/db/migrations/versions/v2_3_0.py +977 -0
  32. agno/db/mongo/async_mongo.py +1013 -39
  33. agno/db/mongo/mongo.py +684 -4
  34. agno/db/mongo/schemas.py +48 -0
  35. agno/db/mongo/utils.py +17 -0
  36. agno/db/mysql/__init__.py +2 -1
  37. agno/db/mysql/async_mysql.py +2958 -0
  38. agno/db/mysql/mysql.py +722 -53
  39. agno/db/mysql/schemas.py +77 -11
  40. agno/db/mysql/utils.py +151 -8
  41. agno/db/postgres/async_postgres.py +1254 -137
  42. agno/db/postgres/postgres.py +2316 -93
  43. agno/db/postgres/schemas.py +153 -21
  44. agno/db/postgres/utils.py +22 -7
  45. agno/db/redis/redis.py +531 -3
  46. agno/db/redis/schemas.py +36 -0
  47. agno/db/redis/utils.py +31 -15
  48. agno/db/schemas/evals.py +1 -0
  49. agno/db/schemas/memory.py +20 -9
  50. agno/db/singlestore/schemas.py +70 -1
  51. agno/db/singlestore/singlestore.py +737 -74
  52. agno/db/singlestore/utils.py +13 -3
  53. agno/db/sqlite/async_sqlite.py +1069 -89
  54. agno/db/sqlite/schemas.py +133 -1
  55. agno/db/sqlite/sqlite.py +2203 -165
  56. agno/db/sqlite/utils.py +21 -11
  57. agno/db/surrealdb/models.py +25 -0
  58. agno/db/surrealdb/surrealdb.py +603 -1
  59. agno/db/utils.py +60 -0
  60. agno/eval/__init__.py +26 -3
  61. agno/eval/accuracy.py +25 -12
  62. agno/eval/agent_as_judge.py +871 -0
  63. agno/eval/base.py +29 -0
  64. agno/eval/performance.py +10 -4
  65. agno/eval/reliability.py +22 -13
  66. agno/eval/utils.py +2 -1
  67. agno/exceptions.py +42 -0
  68. agno/hooks/__init__.py +3 -0
  69. agno/hooks/decorator.py +164 -0
  70. agno/integrations/discord/client.py +13 -2
  71. agno/knowledge/__init__.py +4 -0
  72. agno/knowledge/chunking/code.py +90 -0
  73. agno/knowledge/chunking/document.py +65 -4
  74. agno/knowledge/chunking/fixed.py +4 -1
  75. agno/knowledge/chunking/markdown.py +102 -11
  76. agno/knowledge/chunking/recursive.py +2 -2
  77. agno/knowledge/chunking/semantic.py +130 -48
  78. agno/knowledge/chunking/strategy.py +18 -0
  79. agno/knowledge/embedder/azure_openai.py +0 -1
  80. agno/knowledge/embedder/google.py +1 -1
  81. agno/knowledge/embedder/mistral.py +1 -1
  82. agno/knowledge/embedder/nebius.py +1 -1
  83. agno/knowledge/embedder/openai.py +16 -12
  84. agno/knowledge/filesystem.py +412 -0
  85. agno/knowledge/knowledge.py +4261 -1199
  86. agno/knowledge/protocol.py +134 -0
  87. agno/knowledge/reader/arxiv_reader.py +3 -2
  88. agno/knowledge/reader/base.py +9 -7
  89. agno/knowledge/reader/csv_reader.py +91 -42
  90. agno/knowledge/reader/docx_reader.py +9 -10
  91. agno/knowledge/reader/excel_reader.py +225 -0
  92. agno/knowledge/reader/field_labeled_csv_reader.py +38 -48
  93. agno/knowledge/reader/firecrawl_reader.py +3 -2
  94. agno/knowledge/reader/json_reader.py +16 -22
  95. agno/knowledge/reader/markdown_reader.py +15 -14
  96. agno/knowledge/reader/pdf_reader.py +33 -28
  97. agno/knowledge/reader/pptx_reader.py +9 -10
  98. agno/knowledge/reader/reader_factory.py +135 -1
  99. agno/knowledge/reader/s3_reader.py +8 -16
  100. agno/knowledge/reader/tavily_reader.py +3 -3
  101. agno/knowledge/reader/text_reader.py +15 -14
  102. agno/knowledge/reader/utils/__init__.py +17 -0
  103. agno/knowledge/reader/utils/spreadsheet.py +114 -0
  104. agno/knowledge/reader/web_search_reader.py +8 -65
  105. agno/knowledge/reader/website_reader.py +16 -13
  106. agno/knowledge/reader/wikipedia_reader.py +36 -3
  107. agno/knowledge/reader/youtube_reader.py +3 -2
  108. agno/knowledge/remote_content/__init__.py +33 -0
  109. agno/knowledge/remote_content/config.py +266 -0
  110. agno/knowledge/remote_content/remote_content.py +105 -17
  111. agno/knowledge/utils.py +76 -22
  112. agno/learn/__init__.py +71 -0
  113. agno/learn/config.py +463 -0
  114. agno/learn/curate.py +185 -0
  115. agno/learn/machine.py +725 -0
  116. agno/learn/schemas.py +1114 -0
  117. agno/learn/stores/__init__.py +38 -0
  118. agno/learn/stores/decision_log.py +1156 -0
  119. agno/learn/stores/entity_memory.py +3275 -0
  120. agno/learn/stores/learned_knowledge.py +1583 -0
  121. agno/learn/stores/protocol.py +117 -0
  122. agno/learn/stores/session_context.py +1217 -0
  123. agno/learn/stores/user_memory.py +1495 -0
  124. agno/learn/stores/user_profile.py +1220 -0
  125. agno/learn/utils.py +209 -0
  126. agno/media.py +22 -6
  127. agno/memory/__init__.py +14 -1
  128. agno/memory/manager.py +223 -8
  129. agno/memory/strategies/__init__.py +15 -0
  130. agno/memory/strategies/base.py +66 -0
  131. agno/memory/strategies/summarize.py +196 -0
  132. agno/memory/strategies/types.py +37 -0
  133. agno/models/aimlapi/aimlapi.py +17 -0
  134. agno/models/anthropic/claude.py +434 -59
  135. agno/models/aws/bedrock.py +121 -20
  136. agno/models/aws/claude.py +131 -274
  137. agno/models/azure/ai_foundry.py +10 -6
  138. agno/models/azure/openai_chat.py +33 -10
  139. agno/models/base.py +1162 -561
  140. agno/models/cerebras/cerebras.py +120 -24
  141. agno/models/cerebras/cerebras_openai.py +21 -2
  142. agno/models/cohere/chat.py +65 -6
  143. agno/models/cometapi/cometapi.py +18 -1
  144. agno/models/dashscope/dashscope.py +2 -3
  145. agno/models/deepinfra/deepinfra.py +18 -1
  146. agno/models/deepseek/deepseek.py +69 -3
  147. agno/models/fireworks/fireworks.py +18 -1
  148. agno/models/google/gemini.py +959 -89
  149. agno/models/google/utils.py +22 -0
  150. agno/models/groq/groq.py +48 -18
  151. agno/models/huggingface/huggingface.py +17 -6
  152. agno/models/ibm/watsonx.py +16 -6
  153. agno/models/internlm/internlm.py +18 -1
  154. agno/models/langdb/langdb.py +13 -1
  155. agno/models/litellm/chat.py +88 -9
  156. agno/models/litellm/litellm_openai.py +18 -1
  157. agno/models/message.py +24 -5
  158. agno/models/meta/llama.py +40 -13
  159. agno/models/meta/llama_openai.py +22 -21
  160. agno/models/metrics.py +12 -0
  161. agno/models/mistral/mistral.py +8 -4
  162. agno/models/n1n/__init__.py +3 -0
  163. agno/models/n1n/n1n.py +57 -0
  164. agno/models/nebius/nebius.py +6 -7
  165. agno/models/nvidia/nvidia.py +20 -3
  166. agno/models/ollama/__init__.py +2 -0
  167. agno/models/ollama/chat.py +17 -6
  168. agno/models/ollama/responses.py +100 -0
  169. agno/models/openai/__init__.py +2 -0
  170. agno/models/openai/chat.py +117 -26
  171. agno/models/openai/open_responses.py +46 -0
  172. agno/models/openai/responses.py +110 -32
  173. agno/models/openrouter/__init__.py +2 -0
  174. agno/models/openrouter/openrouter.py +67 -2
  175. agno/models/openrouter/responses.py +146 -0
  176. agno/models/perplexity/perplexity.py +19 -1
  177. agno/models/portkey/portkey.py +7 -6
  178. agno/models/requesty/requesty.py +19 -2
  179. agno/models/response.py +20 -2
  180. agno/models/sambanova/sambanova.py +20 -3
  181. agno/models/siliconflow/siliconflow.py +19 -2
  182. agno/models/together/together.py +20 -3
  183. agno/models/vercel/v0.py +20 -3
  184. agno/models/vertexai/claude.py +124 -4
  185. agno/models/vllm/vllm.py +19 -14
  186. agno/models/xai/xai.py +19 -2
  187. agno/os/app.py +467 -137
  188. agno/os/auth.py +253 -5
  189. agno/os/config.py +22 -0
  190. agno/os/interfaces/a2a/a2a.py +7 -6
  191. agno/os/interfaces/a2a/router.py +635 -26
  192. agno/os/interfaces/a2a/utils.py +32 -33
  193. agno/os/interfaces/agui/agui.py +5 -3
  194. agno/os/interfaces/agui/router.py +26 -16
  195. agno/os/interfaces/agui/utils.py +97 -57
  196. agno/os/interfaces/base.py +7 -7
  197. agno/os/interfaces/slack/router.py +16 -7
  198. agno/os/interfaces/slack/slack.py +7 -7
  199. agno/os/interfaces/whatsapp/router.py +35 -7
  200. agno/os/interfaces/whatsapp/security.py +3 -1
  201. agno/os/interfaces/whatsapp/whatsapp.py +11 -8
  202. agno/os/managers.py +326 -0
  203. agno/os/mcp.py +652 -79
  204. agno/os/middleware/__init__.py +4 -0
  205. agno/os/middleware/jwt.py +718 -115
  206. agno/os/middleware/trailing_slash.py +27 -0
  207. agno/os/router.py +105 -1558
  208. agno/os/routers/agents/__init__.py +3 -0
  209. agno/os/routers/agents/router.py +655 -0
  210. agno/os/routers/agents/schema.py +288 -0
  211. agno/os/routers/components/__init__.py +3 -0
  212. agno/os/routers/components/components.py +475 -0
  213. agno/os/routers/database.py +155 -0
  214. agno/os/routers/evals/evals.py +111 -18
  215. agno/os/routers/evals/schemas.py +38 -5
  216. agno/os/routers/evals/utils.py +80 -11
  217. agno/os/routers/health.py +3 -3
  218. agno/os/routers/knowledge/knowledge.py +284 -35
  219. agno/os/routers/knowledge/schemas.py +14 -2
  220. agno/os/routers/memory/memory.py +274 -11
  221. agno/os/routers/memory/schemas.py +44 -3
  222. agno/os/routers/metrics/metrics.py +30 -15
  223. agno/os/routers/metrics/schemas.py +10 -6
  224. agno/os/routers/registry/__init__.py +3 -0
  225. agno/os/routers/registry/registry.py +337 -0
  226. agno/os/routers/session/session.py +143 -14
  227. agno/os/routers/teams/__init__.py +3 -0
  228. agno/os/routers/teams/router.py +550 -0
  229. agno/os/routers/teams/schema.py +280 -0
  230. agno/os/routers/traces/__init__.py +3 -0
  231. agno/os/routers/traces/schemas.py +414 -0
  232. agno/os/routers/traces/traces.py +549 -0
  233. agno/os/routers/workflows/__init__.py +3 -0
  234. agno/os/routers/workflows/router.py +757 -0
  235. agno/os/routers/workflows/schema.py +139 -0
  236. agno/os/schema.py +157 -584
  237. agno/os/scopes.py +469 -0
  238. agno/os/settings.py +3 -0
  239. agno/os/utils.py +574 -185
  240. agno/reasoning/anthropic.py +85 -1
  241. agno/reasoning/azure_ai_foundry.py +93 -1
  242. agno/reasoning/deepseek.py +102 -2
  243. agno/reasoning/default.py +6 -7
  244. agno/reasoning/gemini.py +87 -3
  245. agno/reasoning/groq.py +109 -2
  246. agno/reasoning/helpers.py +6 -7
  247. agno/reasoning/manager.py +1238 -0
  248. agno/reasoning/ollama.py +93 -1
  249. agno/reasoning/openai.py +115 -1
  250. agno/reasoning/vertexai.py +85 -1
  251. agno/registry/__init__.py +3 -0
  252. agno/registry/registry.py +68 -0
  253. agno/remote/__init__.py +3 -0
  254. agno/remote/base.py +581 -0
  255. agno/run/__init__.py +2 -4
  256. agno/run/agent.py +134 -19
  257. agno/run/base.py +49 -1
  258. agno/run/cancel.py +65 -52
  259. agno/run/cancellation_management/__init__.py +9 -0
  260. agno/run/cancellation_management/base.py +78 -0
  261. agno/run/cancellation_management/in_memory_cancellation_manager.py +100 -0
  262. agno/run/cancellation_management/redis_cancellation_manager.py +236 -0
  263. agno/run/requirement.py +181 -0
  264. agno/run/team.py +111 -19
  265. agno/run/workflow.py +2 -1
  266. agno/session/agent.py +57 -92
  267. agno/session/summary.py +1 -1
  268. agno/session/team.py +62 -115
  269. agno/session/workflow.py +353 -57
  270. agno/skills/__init__.py +17 -0
  271. agno/skills/agent_skills.py +377 -0
  272. agno/skills/errors.py +32 -0
  273. agno/skills/loaders/__init__.py +4 -0
  274. agno/skills/loaders/base.py +27 -0
  275. agno/skills/loaders/local.py +216 -0
  276. agno/skills/skill.py +65 -0
  277. agno/skills/utils.py +107 -0
  278. agno/skills/validator.py +277 -0
  279. agno/table.py +10 -0
  280. agno/team/__init__.py +5 -1
  281. agno/team/remote.py +447 -0
  282. agno/team/team.py +3769 -2202
  283. agno/tools/brandfetch.py +27 -18
  284. agno/tools/browserbase.py +225 -16
  285. agno/tools/crawl4ai.py +3 -0
  286. agno/tools/duckduckgo.py +25 -71
  287. agno/tools/exa.py +0 -21
  288. agno/tools/file.py +14 -13
  289. agno/tools/file_generation.py +12 -6
  290. agno/tools/firecrawl.py +15 -7
  291. agno/tools/function.py +94 -113
  292. agno/tools/google_bigquery.py +11 -2
  293. agno/tools/google_drive.py +4 -3
  294. agno/tools/knowledge.py +9 -4
  295. agno/tools/mcp/mcp.py +301 -18
  296. agno/tools/mcp/multi_mcp.py +269 -14
  297. agno/tools/mem0.py +11 -10
  298. agno/tools/memory.py +47 -46
  299. agno/tools/mlx_transcribe.py +10 -7
  300. agno/tools/models/nebius.py +5 -5
  301. agno/tools/models_labs.py +20 -10
  302. agno/tools/nano_banana.py +151 -0
  303. agno/tools/parallel.py +0 -7
  304. agno/tools/postgres.py +76 -36
  305. agno/tools/python.py +14 -6
  306. agno/tools/reasoning.py +30 -23
  307. agno/tools/redshift.py +406 -0
  308. agno/tools/shopify.py +1519 -0
  309. agno/tools/spotify.py +919 -0
  310. agno/tools/tavily.py +4 -1
  311. agno/tools/toolkit.py +253 -18
  312. agno/tools/websearch.py +93 -0
  313. agno/tools/website.py +1 -1
  314. agno/tools/wikipedia.py +1 -1
  315. agno/tools/workflow.py +56 -48
  316. agno/tools/yfinance.py +12 -11
  317. agno/tracing/__init__.py +12 -0
  318. agno/tracing/exporter.py +161 -0
  319. agno/tracing/schemas.py +276 -0
  320. agno/tracing/setup.py +112 -0
  321. agno/utils/agent.py +251 -10
  322. agno/utils/cryptography.py +22 -0
  323. agno/utils/dttm.py +33 -0
  324. agno/utils/events.py +264 -7
  325. agno/utils/hooks.py +111 -3
  326. agno/utils/http.py +161 -2
  327. agno/utils/mcp.py +49 -8
  328. agno/utils/media.py +22 -1
  329. agno/utils/models/ai_foundry.py +9 -2
  330. agno/utils/models/claude.py +20 -5
  331. agno/utils/models/cohere.py +9 -2
  332. agno/utils/models/llama.py +9 -2
  333. agno/utils/models/mistral.py +4 -2
  334. agno/utils/os.py +0 -0
  335. agno/utils/print_response/agent.py +99 -16
  336. agno/utils/print_response/team.py +223 -24
  337. agno/utils/print_response/workflow.py +0 -2
  338. agno/utils/prompts.py +8 -6
  339. agno/utils/remote.py +23 -0
  340. agno/utils/response.py +1 -13
  341. agno/utils/string.py +91 -2
  342. agno/utils/team.py +62 -12
  343. agno/utils/tokens.py +657 -0
  344. agno/vectordb/base.py +15 -2
  345. agno/vectordb/cassandra/cassandra.py +1 -1
  346. agno/vectordb/chroma/__init__.py +2 -1
  347. agno/vectordb/chroma/chromadb.py +468 -23
  348. agno/vectordb/clickhouse/clickhousedb.py +1 -1
  349. agno/vectordb/couchbase/couchbase.py +6 -2
  350. agno/vectordb/lancedb/lance_db.py +7 -38
  351. agno/vectordb/lightrag/lightrag.py +7 -6
  352. agno/vectordb/milvus/milvus.py +118 -84
  353. agno/vectordb/mongodb/__init__.py +2 -1
  354. agno/vectordb/mongodb/mongodb.py +14 -31
  355. agno/vectordb/pgvector/pgvector.py +120 -66
  356. agno/vectordb/pineconedb/pineconedb.py +2 -19
  357. agno/vectordb/qdrant/__init__.py +2 -1
  358. agno/vectordb/qdrant/qdrant.py +33 -56
  359. agno/vectordb/redis/__init__.py +2 -1
  360. agno/vectordb/redis/redisdb.py +19 -31
  361. agno/vectordb/singlestore/singlestore.py +17 -9
  362. agno/vectordb/surrealdb/surrealdb.py +2 -38
  363. agno/vectordb/weaviate/__init__.py +2 -1
  364. agno/vectordb/weaviate/weaviate.py +7 -3
  365. agno/workflow/__init__.py +5 -1
  366. agno/workflow/agent.py +2 -2
  367. agno/workflow/condition.py +12 -10
  368. agno/workflow/loop.py +28 -9
  369. agno/workflow/parallel.py +21 -13
  370. agno/workflow/remote.py +362 -0
  371. agno/workflow/router.py +12 -9
  372. agno/workflow/step.py +261 -36
  373. agno/workflow/steps.py +12 -8
  374. agno/workflow/types.py +40 -77
  375. agno/workflow/workflow.py +939 -213
  376. {agno-2.2.13.dist-info → agno-2.4.3.dist-info}/METADATA +134 -181
  377. agno-2.4.3.dist-info/RECORD +677 -0
  378. {agno-2.2.13.dist-info → agno-2.4.3.dist-info}/WHEEL +1 -1
  379. agno/tools/googlesearch.py +0 -98
  380. agno/tools/memori.py +0 -339
  381. agno-2.2.13.dist-info/RECORD +0 -575
  382. {agno-2.2.13.dist-info → agno-2.4.3.dist-info}/licenses/LICENSE +0 -0
  383. {agno-2.2.13.dist-info → agno-2.4.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,288 @@
1
+ from typing import Any, Dict, Optional
2
+ from uuid import uuid4
3
+
4
+ from pydantic import BaseModel
5
+
6
+ from agno.agent import Agent
7
+ from agno.models.message import Message
8
+ from agno.os.schema import ModelResponse
9
+ from agno.os.utils import (
10
+ format_tools,
11
+ )
12
+ from agno.run import RunContext
13
+ from agno.run.agent import RunOutput
14
+ from agno.session import AgentSession
15
+ from agno.utils.agent import aexecute_instructions, aexecute_system_message
16
+
17
+
18
+ class AgentResponse(BaseModel):
19
+ id: Optional[str] = None
20
+ name: Optional[str] = None
21
+ db_id: Optional[str] = None
22
+ description: Optional[str] = None
23
+ role: Optional[str] = None
24
+ model: Optional[ModelResponse] = None
25
+ tools: Optional[Dict[str, Any]] = None
26
+ sessions: Optional[Dict[str, Any]] = None
27
+ knowledge: Optional[Dict[str, Any]] = None
28
+ memory: Optional[Dict[str, Any]] = None
29
+ reasoning: Optional[Dict[str, Any]] = None
30
+ default_tools: Optional[Dict[str, Any]] = None
31
+ system_message: Optional[Dict[str, Any]] = None
32
+ extra_messages: Optional[Dict[str, Any]] = None
33
+ response_settings: Optional[Dict[str, Any]] = None
34
+ introduction: Optional[str] = None
35
+ streaming: Optional[Dict[str, Any]] = None
36
+ metadata: Optional[Dict[str, Any]] = None
37
+ input_schema: Optional[Dict[str, Any]] = None
38
+
39
+ @classmethod
40
+ async def from_agent(cls, agent: Agent) -> "AgentResponse":
41
+ def filter_meaningful_config(d: Dict[str, Any], defaults: Dict[str, Any]) -> Optional[Dict[str, Any]]:
42
+ """Filter out fields that match their default values, keeping only meaningful user configurations"""
43
+ filtered = {}
44
+ for key, value in d.items():
45
+ if value is None:
46
+ continue
47
+ # Skip if value matches the default exactly
48
+ if key in defaults and value == defaults[key]:
49
+ continue
50
+ # Keep non-default values
51
+ filtered[key] = value
52
+ return filtered if filtered else None
53
+
54
+ # Define default values for filtering
55
+ agent_defaults = {
56
+ # Sessions defaults
57
+ "add_history_to_context": False,
58
+ "num_history_runs": 3,
59
+ "enable_session_summaries": False,
60
+ "search_session_history": False,
61
+ "cache_session": False,
62
+ # Knowledge defaults
63
+ "add_references": False,
64
+ "references_format": "json",
65
+ "enable_agentic_knowledge_filters": False,
66
+ # Memory defaults
67
+ "enable_agentic_memory": False,
68
+ "update_memory_on_run": False,
69
+ # Reasoning defaults
70
+ "reasoning": False,
71
+ "reasoning_min_steps": 1,
72
+ "reasoning_max_steps": 10,
73
+ # Default tools defaults
74
+ "read_chat_history": False,
75
+ "search_knowledge": True,
76
+ "update_knowledge": False,
77
+ "read_tool_call_history": False,
78
+ # System message defaults
79
+ "system_message_role": "system",
80
+ "build_context": True,
81
+ "markdown": False,
82
+ "add_name_to_context": False,
83
+ "add_datetime_to_context": False,
84
+ "add_location_to_context": False,
85
+ "resolve_in_context": True,
86
+ # Extra messages defaults
87
+ "user_message_role": "user",
88
+ "build_user_context": True,
89
+ # Response settings defaults
90
+ "retries": 0,
91
+ "delay_between_retries": 1,
92
+ "exponential_backoff": False,
93
+ "parse_response": True,
94
+ "use_json_mode": False,
95
+ # Streaming defaults
96
+ "stream_events": False,
97
+ }
98
+
99
+ session_id = str(uuid4())
100
+ run_id = str(uuid4())
101
+ agent_tools = await agent.aget_tools(
102
+ session=AgentSession(session_id=session_id, session_data={}),
103
+ run_response=RunOutput(run_id=run_id, session_id=session_id),
104
+ run_context=RunContext(run_id=run_id, session_id=session_id, user_id=agent.user_id),
105
+ check_mcp_tools=False,
106
+ )
107
+ formatted_tools = format_tools(agent_tools) if agent_tools else None
108
+
109
+ additional_input = agent.additional_input
110
+ if additional_input and isinstance(additional_input[0], Message):
111
+ additional_input = [message.to_dict() for message in additional_input] # type: ignore
112
+
113
+ input_schema_dict = None
114
+ if agent.input_schema is not None:
115
+ if isinstance(agent.input_schema, dict):
116
+ input_schema_dict = agent.input_schema
117
+ else:
118
+ try:
119
+ input_schema_dict = agent.input_schema.model_json_schema()
120
+ except Exception:
121
+ pass
122
+
123
+ # Build model only if it has at least one non-null field
124
+ model_name = agent.model.name if (agent.model and agent.model.name) else None
125
+ model_provider = agent.model.provider if (agent.model and agent.model.provider) else None
126
+ model_id = agent.model.id if (agent.model and agent.model.id) else None
127
+ _agent_model_data: Dict[str, Any] = {}
128
+ if model_name is not None:
129
+ _agent_model_data["name"] = model_name
130
+ if model_id is not None:
131
+ _agent_model_data["model"] = model_id
132
+ if model_provider is not None:
133
+ _agent_model_data["provider"] = model_provider
134
+
135
+ session_table = agent.db.session_table_name if agent.db else None
136
+ knowledge_table = agent.db.knowledge_table_name if agent.db and agent.knowledge else None
137
+
138
+ tools_info = {
139
+ "tools": formatted_tools,
140
+ "tool_call_limit": agent.tool_call_limit,
141
+ "tool_choice": agent.tool_choice,
142
+ }
143
+
144
+ sessions_info = {
145
+ "session_table": session_table,
146
+ "add_history_to_context": agent.add_history_to_context,
147
+ "enable_session_summaries": agent.enable_session_summaries,
148
+ "num_history_runs": agent.num_history_runs,
149
+ "search_session_history": agent.search_session_history,
150
+ "num_history_sessions": agent.num_history_sessions,
151
+ "cache_session": agent.cache_session,
152
+ }
153
+
154
+ contents_db = getattr(agent.knowledge, "contents_db", None) if agent.knowledge else None
155
+ knowledge_info = {
156
+ "db_id": contents_db.id if contents_db else None,
157
+ "knowledge_table": knowledge_table,
158
+ "enable_agentic_knowledge_filters": agent.enable_agentic_knowledge_filters,
159
+ "knowledge_filters": agent.knowledge_filters,
160
+ "references_format": agent.references_format,
161
+ }
162
+
163
+ memory_info: Optional[Dict[str, Any]] = None
164
+ if agent.memory_manager is not None:
165
+ memory_info = {
166
+ "enable_agentic_memory": agent.enable_agentic_memory,
167
+ "update_memory_on_run": agent.update_memory_on_run,
168
+ "enable_user_memories": agent.enable_user_memories, # Soon to be deprecated. Use update_memory_on_run
169
+ "metadata": agent.metadata,
170
+ "memory_table": agent.db.memory_table_name if agent.db and agent.update_memory_on_run else None,
171
+ }
172
+
173
+ if agent.memory_manager.model is not None:
174
+ memory_info["model"] = ModelResponse(
175
+ name=agent.memory_manager.model.name,
176
+ model=agent.memory_manager.model.id,
177
+ provider=agent.memory_manager.model.provider,
178
+ ).model_dump()
179
+
180
+ reasoning_info: Dict[str, Any] = {
181
+ "reasoning": agent.reasoning,
182
+ "reasoning_agent_id": agent.reasoning_agent.id if agent.reasoning_agent else None,
183
+ "reasoning_min_steps": agent.reasoning_min_steps,
184
+ "reasoning_max_steps": agent.reasoning_max_steps,
185
+ }
186
+
187
+ if agent.reasoning_model:
188
+ reasoning_info["reasoning_model"] = ModelResponse(
189
+ name=agent.reasoning_model.name,
190
+ model=agent.reasoning_model.id,
191
+ provider=agent.reasoning_model.provider,
192
+ ).model_dump()
193
+
194
+ default_tools_info = {
195
+ "read_chat_history": agent.read_chat_history,
196
+ "search_knowledge": agent.search_knowledge,
197
+ "update_knowledge": agent.update_knowledge,
198
+ "read_tool_call_history": agent.read_tool_call_history,
199
+ }
200
+
201
+ instructions = agent.instructions if agent.instructions else None
202
+ if instructions and callable(instructions):
203
+ instructions = await aexecute_instructions(instructions=instructions, agent=agent)
204
+
205
+ system_message = agent.system_message if agent.system_message else None
206
+ if system_message and callable(system_message):
207
+ system_message = await aexecute_system_message(system_message=system_message, agent=agent)
208
+
209
+ system_message_info = {
210
+ "system_message": str(system_message) if system_message else None,
211
+ "system_message_role": agent.system_message_role,
212
+ "build_context": agent.build_context,
213
+ "description": agent.description,
214
+ "instructions": instructions,
215
+ "expected_output": agent.expected_output,
216
+ "additional_context": agent.additional_context,
217
+ "markdown": agent.markdown,
218
+ "add_name_to_context": agent.add_name_to_context,
219
+ "add_datetime_to_context": agent.add_datetime_to_context,
220
+ "add_location_to_context": agent.add_location_to_context,
221
+ "timezone_identifier": agent.timezone_identifier,
222
+ "resolve_in_context": agent.resolve_in_context,
223
+ }
224
+
225
+ extra_messages_info = {
226
+ "additional_input": additional_input, # type: ignore
227
+ "user_message_role": agent.user_message_role,
228
+ "build_user_context": agent.build_user_context,
229
+ }
230
+
231
+ # Handle output_schema name for both Pydantic models and JSON schemas
232
+ output_schema_name = None
233
+ if agent.output_schema is not None:
234
+ if isinstance(agent.output_schema, dict):
235
+ if "json_schema" in agent.output_schema:
236
+ output_schema_name = agent.output_schema["json_schema"].get("name", "JSONSchema")
237
+ elif "schema" in agent.output_schema and isinstance(agent.output_schema["schema"], dict):
238
+ output_schema_name = agent.output_schema["schema"].get("title", "JSONSchema")
239
+ else:
240
+ output_schema_name = agent.output_schema.get("title", "JSONSchema")
241
+ elif hasattr(agent.output_schema, "__name__"):
242
+ output_schema_name = agent.output_schema.__name__
243
+
244
+ response_settings_info: Dict[str, Any] = {
245
+ "retries": agent.retries,
246
+ "delay_between_retries": agent.delay_between_retries,
247
+ "exponential_backoff": agent.exponential_backoff,
248
+ "output_schema_name": output_schema_name,
249
+ "parser_model_prompt": agent.parser_model_prompt,
250
+ "parse_response": agent.parse_response,
251
+ "structured_outputs": agent.structured_outputs,
252
+ "use_json_mode": agent.use_json_mode,
253
+ "save_response_to_file": agent.save_response_to_file,
254
+ }
255
+
256
+ if agent.parser_model:
257
+ response_settings_info["parser_model"] = ModelResponse(
258
+ name=agent.parser_model.name,
259
+ model=agent.parser_model.id,
260
+ provider=agent.parser_model.provider,
261
+ ).model_dump()
262
+
263
+ streaming_info = {
264
+ "stream": agent.stream,
265
+ "stream_events": agent.stream_events,
266
+ }
267
+
268
+ return AgentResponse(
269
+ id=agent.id,
270
+ name=agent.name,
271
+ db_id=agent.db.id if agent.db else None,
272
+ description=agent.description,
273
+ role=agent.role,
274
+ model=ModelResponse(**_agent_model_data) if _agent_model_data else None,
275
+ tools=filter_meaningful_config(tools_info, {}),
276
+ sessions=filter_meaningful_config(sessions_info, agent_defaults),
277
+ knowledge=filter_meaningful_config(knowledge_info, agent_defaults),
278
+ memory=filter_meaningful_config(memory_info, agent_defaults) if memory_info else None,
279
+ reasoning=filter_meaningful_config(reasoning_info, agent_defaults),
280
+ default_tools=filter_meaningful_config(default_tools_info, agent_defaults),
281
+ system_message=filter_meaningful_config(system_message_info, agent_defaults),
282
+ extra_messages=filter_meaningful_config(extra_messages_info, agent_defaults),
283
+ response_settings=filter_meaningful_config(response_settings_info, agent_defaults),
284
+ streaming=filter_meaningful_config(streaming_info, agent_defaults),
285
+ introduction=agent.introduction,
286
+ metadata=agent.metadata,
287
+ input_schema=input_schema_dict,
288
+ )
@@ -0,0 +1,3 @@
1
+ from agno.os.routers.components.components import get_components_router
2
+
3
+ __all__ = ["get_components_router"]