agno 0.1.2__py3-none-any.whl → 2.3.13__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (723) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +44 -5
  3. agno/agent/agent.py +10531 -2975
  4. agno/api/agent.py +14 -53
  5. agno/api/api.py +7 -46
  6. agno/api/evals.py +22 -0
  7. agno/api/os.py +17 -0
  8. agno/api/routes.py +6 -25
  9. agno/api/schemas/__init__.py +9 -0
  10. agno/api/schemas/agent.py +6 -9
  11. agno/api/schemas/evals.py +16 -0
  12. agno/api/schemas/os.py +14 -0
  13. agno/api/schemas/team.py +10 -10
  14. agno/api/schemas/utils.py +21 -0
  15. agno/api/schemas/workflows.py +16 -0
  16. agno/api/settings.py +53 -0
  17. agno/api/team.py +22 -26
  18. agno/api/workflow.py +28 -0
  19. agno/cloud/aws/base.py +214 -0
  20. agno/cloud/aws/s3/__init__.py +2 -0
  21. agno/cloud/aws/s3/api_client.py +43 -0
  22. agno/cloud/aws/s3/bucket.py +195 -0
  23. agno/cloud/aws/s3/object.py +57 -0
  24. agno/compression/__init__.py +3 -0
  25. agno/compression/manager.py +247 -0
  26. agno/culture/__init__.py +3 -0
  27. agno/culture/manager.py +956 -0
  28. agno/db/__init__.py +24 -0
  29. agno/db/async_postgres/__init__.py +3 -0
  30. agno/db/base.py +946 -0
  31. agno/db/dynamo/__init__.py +3 -0
  32. agno/db/dynamo/dynamo.py +2781 -0
  33. agno/db/dynamo/schemas.py +442 -0
  34. agno/db/dynamo/utils.py +743 -0
  35. agno/db/firestore/__init__.py +3 -0
  36. agno/db/firestore/firestore.py +2379 -0
  37. agno/db/firestore/schemas.py +181 -0
  38. agno/db/firestore/utils.py +376 -0
  39. agno/db/gcs_json/__init__.py +3 -0
  40. agno/db/gcs_json/gcs_json_db.py +1791 -0
  41. agno/db/gcs_json/utils.py +228 -0
  42. agno/db/in_memory/__init__.py +3 -0
  43. agno/db/in_memory/in_memory_db.py +1312 -0
  44. agno/db/in_memory/utils.py +230 -0
  45. agno/db/json/__init__.py +3 -0
  46. agno/db/json/json_db.py +1777 -0
  47. agno/db/json/utils.py +230 -0
  48. agno/db/migrations/manager.py +199 -0
  49. agno/db/migrations/v1_to_v2.py +635 -0
  50. agno/db/migrations/versions/v2_3_0.py +938 -0
  51. agno/db/mongo/__init__.py +17 -0
  52. agno/db/mongo/async_mongo.py +2760 -0
  53. agno/db/mongo/mongo.py +2597 -0
  54. agno/db/mongo/schemas.py +119 -0
  55. agno/db/mongo/utils.py +276 -0
  56. agno/db/mysql/__init__.py +4 -0
  57. agno/db/mysql/async_mysql.py +2912 -0
  58. agno/db/mysql/mysql.py +2923 -0
  59. agno/db/mysql/schemas.py +186 -0
  60. agno/db/mysql/utils.py +488 -0
  61. agno/db/postgres/__init__.py +4 -0
  62. agno/db/postgres/async_postgres.py +2579 -0
  63. agno/db/postgres/postgres.py +2870 -0
  64. agno/db/postgres/schemas.py +187 -0
  65. agno/db/postgres/utils.py +442 -0
  66. agno/db/redis/__init__.py +3 -0
  67. agno/db/redis/redis.py +2141 -0
  68. agno/db/redis/schemas.py +159 -0
  69. agno/db/redis/utils.py +346 -0
  70. agno/db/schemas/__init__.py +4 -0
  71. agno/db/schemas/culture.py +120 -0
  72. agno/db/schemas/evals.py +34 -0
  73. agno/db/schemas/knowledge.py +40 -0
  74. agno/db/schemas/memory.py +61 -0
  75. agno/db/singlestore/__init__.py +3 -0
  76. agno/db/singlestore/schemas.py +179 -0
  77. agno/db/singlestore/singlestore.py +2877 -0
  78. agno/db/singlestore/utils.py +384 -0
  79. agno/db/sqlite/__init__.py +4 -0
  80. agno/db/sqlite/async_sqlite.py +2911 -0
  81. agno/db/sqlite/schemas.py +181 -0
  82. agno/db/sqlite/sqlite.py +2908 -0
  83. agno/db/sqlite/utils.py +429 -0
  84. agno/db/surrealdb/__init__.py +3 -0
  85. agno/db/surrealdb/metrics.py +292 -0
  86. agno/db/surrealdb/models.py +334 -0
  87. agno/db/surrealdb/queries.py +71 -0
  88. agno/db/surrealdb/surrealdb.py +1908 -0
  89. agno/db/surrealdb/utils.py +147 -0
  90. agno/db/utils.py +118 -0
  91. agno/eval/__init__.py +24 -0
  92. agno/eval/accuracy.py +666 -276
  93. agno/eval/agent_as_judge.py +861 -0
  94. agno/eval/base.py +29 -0
  95. agno/eval/performance.py +779 -0
  96. agno/eval/reliability.py +241 -62
  97. agno/eval/utils.py +120 -0
  98. agno/exceptions.py +143 -1
  99. agno/filters.py +354 -0
  100. agno/guardrails/__init__.py +6 -0
  101. agno/guardrails/base.py +19 -0
  102. agno/guardrails/openai.py +144 -0
  103. agno/guardrails/pii.py +94 -0
  104. agno/guardrails/prompt_injection.py +52 -0
  105. agno/hooks/__init__.py +3 -0
  106. agno/hooks/decorator.py +164 -0
  107. agno/integrations/discord/__init__.py +3 -0
  108. agno/integrations/discord/client.py +203 -0
  109. agno/knowledge/__init__.py +5 -1
  110. agno/{document → knowledge}/chunking/agentic.py +22 -14
  111. agno/{document → knowledge}/chunking/document.py +2 -2
  112. agno/{document → knowledge}/chunking/fixed.py +7 -6
  113. agno/knowledge/chunking/markdown.py +151 -0
  114. agno/{document → knowledge}/chunking/recursive.py +15 -3
  115. agno/knowledge/chunking/row.py +39 -0
  116. agno/knowledge/chunking/semantic.py +91 -0
  117. agno/knowledge/chunking/strategy.py +165 -0
  118. agno/knowledge/content.py +74 -0
  119. agno/knowledge/document/__init__.py +5 -0
  120. agno/{document → knowledge/document}/base.py +12 -2
  121. agno/knowledge/embedder/__init__.py +5 -0
  122. agno/knowledge/embedder/aws_bedrock.py +343 -0
  123. agno/knowledge/embedder/azure_openai.py +210 -0
  124. agno/{embedder → knowledge/embedder}/base.py +8 -0
  125. agno/knowledge/embedder/cohere.py +323 -0
  126. agno/knowledge/embedder/fastembed.py +62 -0
  127. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  128. agno/knowledge/embedder/google.py +258 -0
  129. agno/knowledge/embedder/huggingface.py +94 -0
  130. agno/knowledge/embedder/jina.py +182 -0
  131. agno/knowledge/embedder/langdb.py +22 -0
  132. agno/knowledge/embedder/mistral.py +206 -0
  133. agno/knowledge/embedder/nebius.py +13 -0
  134. agno/knowledge/embedder/ollama.py +154 -0
  135. agno/knowledge/embedder/openai.py +195 -0
  136. agno/knowledge/embedder/sentence_transformer.py +63 -0
  137. agno/{embedder → knowledge/embedder}/together.py +1 -1
  138. agno/knowledge/embedder/vllm.py +262 -0
  139. agno/knowledge/embedder/voyageai.py +165 -0
  140. agno/knowledge/knowledge.py +3006 -0
  141. agno/knowledge/reader/__init__.py +7 -0
  142. agno/knowledge/reader/arxiv_reader.py +81 -0
  143. agno/knowledge/reader/base.py +95 -0
  144. agno/knowledge/reader/csv_reader.py +164 -0
  145. agno/knowledge/reader/docx_reader.py +82 -0
  146. agno/knowledge/reader/field_labeled_csv_reader.py +290 -0
  147. agno/knowledge/reader/firecrawl_reader.py +201 -0
  148. agno/knowledge/reader/json_reader.py +88 -0
  149. agno/knowledge/reader/markdown_reader.py +137 -0
  150. agno/knowledge/reader/pdf_reader.py +431 -0
  151. agno/knowledge/reader/pptx_reader.py +101 -0
  152. agno/knowledge/reader/reader_factory.py +313 -0
  153. agno/knowledge/reader/s3_reader.py +89 -0
  154. agno/knowledge/reader/tavily_reader.py +193 -0
  155. agno/knowledge/reader/text_reader.py +127 -0
  156. agno/knowledge/reader/web_search_reader.py +325 -0
  157. agno/knowledge/reader/website_reader.py +455 -0
  158. agno/knowledge/reader/wikipedia_reader.py +91 -0
  159. agno/knowledge/reader/youtube_reader.py +78 -0
  160. agno/knowledge/remote_content/remote_content.py +88 -0
  161. agno/knowledge/reranker/__init__.py +3 -0
  162. agno/{reranker → knowledge/reranker}/base.py +1 -1
  163. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  164. agno/knowledge/reranker/infinity.py +195 -0
  165. agno/knowledge/reranker/sentence_transformer.py +54 -0
  166. agno/knowledge/types.py +39 -0
  167. agno/knowledge/utils.py +234 -0
  168. agno/media.py +439 -95
  169. agno/memory/__init__.py +16 -3
  170. agno/memory/manager.py +1474 -123
  171. agno/memory/strategies/__init__.py +15 -0
  172. agno/memory/strategies/base.py +66 -0
  173. agno/memory/strategies/summarize.py +196 -0
  174. agno/memory/strategies/types.py +37 -0
  175. agno/models/aimlapi/__init__.py +5 -0
  176. agno/models/aimlapi/aimlapi.py +62 -0
  177. agno/models/anthropic/__init__.py +4 -0
  178. agno/models/anthropic/claude.py +960 -496
  179. agno/models/aws/__init__.py +15 -0
  180. agno/models/aws/bedrock.py +686 -451
  181. agno/models/aws/claude.py +190 -183
  182. agno/models/azure/__init__.py +18 -1
  183. agno/models/azure/ai_foundry.py +489 -0
  184. agno/models/azure/openai_chat.py +89 -40
  185. agno/models/base.py +2477 -550
  186. agno/models/cerebras/__init__.py +12 -0
  187. agno/models/cerebras/cerebras.py +565 -0
  188. agno/models/cerebras/cerebras_openai.py +131 -0
  189. agno/models/cohere/__init__.py +4 -0
  190. agno/models/cohere/chat.py +306 -492
  191. agno/models/cometapi/__init__.py +5 -0
  192. agno/models/cometapi/cometapi.py +74 -0
  193. agno/models/dashscope/__init__.py +5 -0
  194. agno/models/dashscope/dashscope.py +90 -0
  195. agno/models/deepinfra/__init__.py +5 -0
  196. agno/models/deepinfra/deepinfra.py +45 -0
  197. agno/models/deepseek/__init__.py +4 -0
  198. agno/models/deepseek/deepseek.py +110 -9
  199. agno/models/fireworks/__init__.py +4 -0
  200. agno/models/fireworks/fireworks.py +19 -22
  201. agno/models/google/__init__.py +3 -7
  202. agno/models/google/gemini.py +1717 -662
  203. agno/models/google/utils.py +22 -0
  204. agno/models/groq/__init__.py +4 -0
  205. agno/models/groq/groq.py +391 -666
  206. agno/models/huggingface/__init__.py +4 -0
  207. agno/models/huggingface/huggingface.py +266 -538
  208. agno/models/ibm/__init__.py +5 -0
  209. agno/models/ibm/watsonx.py +432 -0
  210. agno/models/internlm/__init__.py +3 -0
  211. agno/models/internlm/internlm.py +20 -3
  212. agno/models/langdb/__init__.py +1 -0
  213. agno/models/langdb/langdb.py +60 -0
  214. agno/models/litellm/__init__.py +14 -0
  215. agno/models/litellm/chat.py +503 -0
  216. agno/models/litellm/litellm_openai.py +42 -0
  217. agno/models/llama_cpp/__init__.py +5 -0
  218. agno/models/llama_cpp/llama_cpp.py +22 -0
  219. agno/models/lmstudio/__init__.py +5 -0
  220. agno/models/lmstudio/lmstudio.py +25 -0
  221. agno/models/message.py +361 -39
  222. agno/models/meta/__init__.py +12 -0
  223. agno/models/meta/llama.py +502 -0
  224. agno/models/meta/llama_openai.py +79 -0
  225. agno/models/metrics.py +120 -0
  226. agno/models/mistral/__init__.py +4 -0
  227. agno/models/mistral/mistral.py +293 -393
  228. agno/models/nebius/__init__.py +3 -0
  229. agno/models/nebius/nebius.py +53 -0
  230. agno/models/nexus/__init__.py +3 -0
  231. agno/models/nexus/nexus.py +22 -0
  232. agno/models/nvidia/__init__.py +4 -0
  233. agno/models/nvidia/nvidia.py +22 -3
  234. agno/models/ollama/__init__.py +4 -2
  235. agno/models/ollama/chat.py +257 -492
  236. agno/models/openai/__init__.py +7 -0
  237. agno/models/openai/chat.py +725 -770
  238. agno/models/openai/like.py +16 -2
  239. agno/models/openai/responses.py +1121 -0
  240. agno/models/openrouter/__init__.py +4 -0
  241. agno/models/openrouter/openrouter.py +62 -5
  242. agno/models/perplexity/__init__.py +5 -0
  243. agno/models/perplexity/perplexity.py +203 -0
  244. agno/models/portkey/__init__.py +3 -0
  245. agno/models/portkey/portkey.py +82 -0
  246. agno/models/requesty/__init__.py +5 -0
  247. agno/models/requesty/requesty.py +69 -0
  248. agno/models/response.py +177 -7
  249. agno/models/sambanova/__init__.py +4 -0
  250. agno/models/sambanova/sambanova.py +23 -4
  251. agno/models/siliconflow/__init__.py +5 -0
  252. agno/models/siliconflow/siliconflow.py +42 -0
  253. agno/models/together/__init__.py +4 -0
  254. agno/models/together/together.py +21 -164
  255. agno/models/utils.py +266 -0
  256. agno/models/vercel/__init__.py +3 -0
  257. agno/models/vercel/v0.py +43 -0
  258. agno/models/vertexai/__init__.py +0 -1
  259. agno/models/vertexai/claude.py +190 -0
  260. agno/models/vllm/__init__.py +3 -0
  261. agno/models/vllm/vllm.py +83 -0
  262. agno/models/xai/__init__.py +2 -0
  263. agno/models/xai/xai.py +111 -7
  264. agno/os/__init__.py +3 -0
  265. agno/os/app.py +1027 -0
  266. agno/os/auth.py +244 -0
  267. agno/os/config.py +126 -0
  268. agno/os/interfaces/__init__.py +1 -0
  269. agno/os/interfaces/a2a/__init__.py +3 -0
  270. agno/os/interfaces/a2a/a2a.py +42 -0
  271. agno/os/interfaces/a2a/router.py +249 -0
  272. agno/os/interfaces/a2a/utils.py +924 -0
  273. agno/os/interfaces/agui/__init__.py +3 -0
  274. agno/os/interfaces/agui/agui.py +47 -0
  275. agno/os/interfaces/agui/router.py +147 -0
  276. agno/os/interfaces/agui/utils.py +574 -0
  277. agno/os/interfaces/base.py +25 -0
  278. agno/os/interfaces/slack/__init__.py +3 -0
  279. agno/os/interfaces/slack/router.py +148 -0
  280. agno/os/interfaces/slack/security.py +30 -0
  281. agno/os/interfaces/slack/slack.py +47 -0
  282. agno/os/interfaces/whatsapp/__init__.py +3 -0
  283. agno/os/interfaces/whatsapp/router.py +210 -0
  284. agno/os/interfaces/whatsapp/security.py +55 -0
  285. agno/os/interfaces/whatsapp/whatsapp.py +36 -0
  286. agno/os/mcp.py +293 -0
  287. agno/os/middleware/__init__.py +9 -0
  288. agno/os/middleware/jwt.py +797 -0
  289. agno/os/router.py +258 -0
  290. agno/os/routers/__init__.py +3 -0
  291. agno/os/routers/agents/__init__.py +3 -0
  292. agno/os/routers/agents/router.py +599 -0
  293. agno/os/routers/agents/schema.py +261 -0
  294. agno/os/routers/evals/__init__.py +3 -0
  295. agno/os/routers/evals/evals.py +450 -0
  296. agno/os/routers/evals/schemas.py +174 -0
  297. agno/os/routers/evals/utils.py +231 -0
  298. agno/os/routers/health.py +31 -0
  299. agno/os/routers/home.py +52 -0
  300. agno/os/routers/knowledge/__init__.py +3 -0
  301. agno/os/routers/knowledge/knowledge.py +1008 -0
  302. agno/os/routers/knowledge/schemas.py +178 -0
  303. agno/os/routers/memory/__init__.py +3 -0
  304. agno/os/routers/memory/memory.py +661 -0
  305. agno/os/routers/memory/schemas.py +88 -0
  306. agno/os/routers/metrics/__init__.py +3 -0
  307. agno/os/routers/metrics/metrics.py +190 -0
  308. agno/os/routers/metrics/schemas.py +47 -0
  309. agno/os/routers/session/__init__.py +3 -0
  310. agno/os/routers/session/session.py +997 -0
  311. agno/os/routers/teams/__init__.py +3 -0
  312. agno/os/routers/teams/router.py +512 -0
  313. agno/os/routers/teams/schema.py +257 -0
  314. agno/os/routers/traces/__init__.py +3 -0
  315. agno/os/routers/traces/schemas.py +414 -0
  316. agno/os/routers/traces/traces.py +499 -0
  317. agno/os/routers/workflows/__init__.py +3 -0
  318. agno/os/routers/workflows/router.py +624 -0
  319. agno/os/routers/workflows/schema.py +75 -0
  320. agno/os/schema.py +534 -0
  321. agno/os/scopes.py +469 -0
  322. agno/{playground → os}/settings.py +7 -15
  323. agno/os/utils.py +973 -0
  324. agno/reasoning/anthropic.py +80 -0
  325. agno/reasoning/azure_ai_foundry.py +67 -0
  326. agno/reasoning/deepseek.py +63 -0
  327. agno/reasoning/default.py +97 -0
  328. agno/reasoning/gemini.py +73 -0
  329. agno/reasoning/groq.py +71 -0
  330. agno/reasoning/helpers.py +24 -1
  331. agno/reasoning/ollama.py +67 -0
  332. agno/reasoning/openai.py +86 -0
  333. agno/reasoning/step.py +2 -1
  334. agno/reasoning/vertexai.py +76 -0
  335. agno/run/__init__.py +6 -0
  336. agno/run/agent.py +822 -0
  337. agno/run/base.py +247 -0
  338. agno/run/cancel.py +81 -0
  339. agno/run/requirement.py +181 -0
  340. agno/run/team.py +767 -0
  341. agno/run/workflow.py +708 -0
  342. agno/session/__init__.py +10 -0
  343. agno/session/agent.py +260 -0
  344. agno/session/summary.py +265 -0
  345. agno/session/team.py +342 -0
  346. agno/session/workflow.py +501 -0
  347. agno/table.py +10 -0
  348. agno/team/__init__.py +37 -0
  349. agno/team/team.py +9536 -0
  350. agno/tools/__init__.py +7 -0
  351. agno/tools/agentql.py +120 -0
  352. agno/tools/airflow.py +22 -12
  353. agno/tools/api.py +122 -0
  354. agno/tools/apify.py +276 -83
  355. agno/tools/{arxiv_toolkit.py → arxiv.py} +20 -12
  356. agno/tools/aws_lambda.py +28 -7
  357. agno/tools/aws_ses.py +66 -0
  358. agno/tools/baidusearch.py +11 -4
  359. agno/tools/bitbucket.py +292 -0
  360. agno/tools/brandfetch.py +213 -0
  361. agno/tools/bravesearch.py +106 -0
  362. agno/tools/brightdata.py +367 -0
  363. agno/tools/browserbase.py +209 -0
  364. agno/tools/calcom.py +32 -23
  365. agno/tools/calculator.py +24 -37
  366. agno/tools/cartesia.py +187 -0
  367. agno/tools/{clickup_tool.py → clickup.py} +17 -28
  368. agno/tools/confluence.py +91 -26
  369. agno/tools/crawl4ai.py +139 -43
  370. agno/tools/csv_toolkit.py +28 -22
  371. agno/tools/dalle.py +36 -22
  372. agno/tools/daytona.py +475 -0
  373. agno/tools/decorator.py +169 -14
  374. agno/tools/desi_vocal.py +23 -11
  375. agno/tools/discord.py +32 -29
  376. agno/tools/docker.py +716 -0
  377. agno/tools/duckdb.py +76 -81
  378. agno/tools/duckduckgo.py +43 -40
  379. agno/tools/e2b.py +703 -0
  380. agno/tools/eleven_labs.py +65 -54
  381. agno/tools/email.py +13 -5
  382. agno/tools/evm.py +129 -0
  383. agno/tools/exa.py +324 -42
  384. agno/tools/fal.py +39 -35
  385. agno/tools/file.py +196 -30
  386. agno/tools/file_generation.py +356 -0
  387. agno/tools/financial_datasets.py +288 -0
  388. agno/tools/firecrawl.py +108 -33
  389. agno/tools/function.py +960 -122
  390. agno/tools/giphy.py +34 -12
  391. agno/tools/github.py +1294 -97
  392. agno/tools/gmail.py +922 -0
  393. agno/tools/google_bigquery.py +117 -0
  394. agno/tools/google_drive.py +271 -0
  395. agno/tools/google_maps.py +253 -0
  396. agno/tools/googlecalendar.py +607 -107
  397. agno/tools/googlesheets.py +377 -0
  398. agno/tools/hackernews.py +20 -12
  399. agno/tools/jina.py +24 -14
  400. agno/tools/jira.py +48 -19
  401. agno/tools/knowledge.py +218 -0
  402. agno/tools/linear.py +82 -43
  403. agno/tools/linkup.py +58 -0
  404. agno/tools/local_file_system.py +15 -7
  405. agno/tools/lumalab.py +41 -26
  406. agno/tools/mcp/__init__.py +10 -0
  407. agno/tools/mcp/mcp.py +331 -0
  408. agno/tools/mcp/multi_mcp.py +347 -0
  409. agno/tools/mcp/params.py +24 -0
  410. agno/tools/mcp_toolbox.py +284 -0
  411. agno/tools/mem0.py +193 -0
  412. agno/tools/memory.py +419 -0
  413. agno/tools/mlx_transcribe.py +11 -9
  414. agno/tools/models/azure_openai.py +190 -0
  415. agno/tools/models/gemini.py +203 -0
  416. agno/tools/models/groq.py +158 -0
  417. agno/tools/models/morph.py +186 -0
  418. agno/tools/models/nebius.py +124 -0
  419. agno/tools/models_labs.py +163 -82
  420. agno/tools/moviepy_video.py +18 -13
  421. agno/tools/nano_banana.py +151 -0
  422. agno/tools/neo4j.py +134 -0
  423. agno/tools/newspaper.py +15 -4
  424. agno/tools/newspaper4k.py +19 -6
  425. agno/tools/notion.py +204 -0
  426. agno/tools/openai.py +181 -17
  427. agno/tools/openbb.py +27 -20
  428. agno/tools/opencv.py +321 -0
  429. agno/tools/openweather.py +233 -0
  430. agno/tools/oxylabs.py +385 -0
  431. agno/tools/pandas.py +25 -15
  432. agno/tools/parallel.py +314 -0
  433. agno/tools/postgres.py +238 -185
  434. agno/tools/pubmed.py +125 -13
  435. agno/tools/python.py +48 -35
  436. agno/tools/reasoning.py +283 -0
  437. agno/tools/reddit.py +207 -29
  438. agno/tools/redshift.py +406 -0
  439. agno/tools/replicate.py +69 -26
  440. agno/tools/resend.py +11 -6
  441. agno/tools/scrapegraph.py +179 -19
  442. agno/tools/searxng.py +23 -31
  443. agno/tools/serpapi.py +15 -10
  444. agno/tools/serper.py +255 -0
  445. agno/tools/shell.py +23 -12
  446. agno/tools/shopify.py +1519 -0
  447. agno/tools/slack.py +56 -14
  448. agno/tools/sleep.py +8 -6
  449. agno/tools/spider.py +35 -11
  450. agno/tools/spotify.py +919 -0
  451. agno/tools/sql.py +34 -19
  452. agno/tools/tavily.py +158 -8
  453. agno/tools/telegram.py +18 -8
  454. agno/tools/todoist.py +218 -0
  455. agno/tools/toolkit.py +134 -9
  456. agno/tools/trafilatura.py +388 -0
  457. agno/tools/trello.py +25 -28
  458. agno/tools/twilio.py +18 -9
  459. agno/tools/user_control_flow.py +78 -0
  460. agno/tools/valyu.py +228 -0
  461. agno/tools/visualization.py +467 -0
  462. agno/tools/webbrowser.py +28 -0
  463. agno/tools/webex.py +76 -0
  464. agno/tools/website.py +23 -19
  465. agno/tools/webtools.py +45 -0
  466. agno/tools/whatsapp.py +286 -0
  467. agno/tools/wikipedia.py +28 -19
  468. agno/tools/workflow.py +285 -0
  469. agno/tools/{twitter.py → x.py} +142 -46
  470. agno/tools/yfinance.py +41 -39
  471. agno/tools/youtube.py +34 -17
  472. agno/tools/zendesk.py +15 -5
  473. agno/tools/zep.py +454 -0
  474. agno/tools/zoom.py +86 -37
  475. agno/tracing/__init__.py +12 -0
  476. agno/tracing/exporter.py +157 -0
  477. agno/tracing/schemas.py +276 -0
  478. agno/tracing/setup.py +111 -0
  479. agno/utils/agent.py +938 -0
  480. agno/utils/audio.py +37 -1
  481. agno/utils/certs.py +27 -0
  482. agno/utils/code_execution.py +11 -0
  483. agno/utils/common.py +103 -20
  484. agno/utils/cryptography.py +22 -0
  485. agno/utils/dttm.py +33 -0
  486. agno/utils/events.py +700 -0
  487. agno/utils/functions.py +107 -37
  488. agno/utils/gemini.py +426 -0
  489. agno/utils/hooks.py +171 -0
  490. agno/utils/http.py +185 -0
  491. agno/utils/json_schema.py +159 -37
  492. agno/utils/knowledge.py +36 -0
  493. agno/utils/location.py +19 -0
  494. agno/utils/log.py +221 -8
  495. agno/utils/mcp.py +214 -0
  496. agno/utils/media.py +335 -14
  497. agno/utils/merge_dict.py +22 -1
  498. agno/utils/message.py +77 -2
  499. agno/utils/models/ai_foundry.py +50 -0
  500. agno/utils/models/claude.py +373 -0
  501. agno/utils/models/cohere.py +94 -0
  502. agno/utils/models/llama.py +85 -0
  503. agno/utils/models/mistral.py +100 -0
  504. agno/utils/models/openai_responses.py +140 -0
  505. agno/utils/models/schema_utils.py +153 -0
  506. agno/utils/models/watsonx.py +41 -0
  507. agno/utils/openai.py +257 -0
  508. agno/utils/pickle.py +1 -1
  509. agno/utils/pprint.py +124 -8
  510. agno/utils/print_response/agent.py +930 -0
  511. agno/utils/print_response/team.py +1914 -0
  512. agno/utils/print_response/workflow.py +1668 -0
  513. agno/utils/prompts.py +111 -0
  514. agno/utils/reasoning.py +108 -0
  515. agno/utils/response.py +163 -0
  516. agno/utils/serialize.py +32 -0
  517. agno/utils/shell.py +4 -4
  518. agno/utils/streamlit.py +487 -0
  519. agno/utils/string.py +204 -51
  520. agno/utils/team.py +139 -0
  521. agno/utils/timer.py +9 -2
  522. agno/utils/tokens.py +657 -0
  523. agno/utils/tools.py +19 -1
  524. agno/utils/whatsapp.py +305 -0
  525. agno/utils/yaml_io.py +3 -3
  526. agno/vectordb/__init__.py +2 -0
  527. agno/vectordb/base.py +87 -9
  528. agno/vectordb/cassandra/__init__.py +5 -1
  529. agno/vectordb/cassandra/cassandra.py +383 -27
  530. agno/vectordb/chroma/__init__.py +4 -0
  531. agno/vectordb/chroma/chromadb.py +748 -83
  532. agno/vectordb/clickhouse/__init__.py +7 -1
  533. agno/vectordb/clickhouse/clickhousedb.py +554 -53
  534. agno/vectordb/couchbase/__init__.py +3 -0
  535. agno/vectordb/couchbase/couchbase.py +1446 -0
  536. agno/vectordb/lancedb/__init__.py +5 -0
  537. agno/vectordb/lancedb/lance_db.py +730 -98
  538. agno/vectordb/langchaindb/__init__.py +5 -0
  539. agno/vectordb/langchaindb/langchaindb.py +163 -0
  540. agno/vectordb/lightrag/__init__.py +5 -0
  541. agno/vectordb/lightrag/lightrag.py +388 -0
  542. agno/vectordb/llamaindex/__init__.py +3 -0
  543. agno/vectordb/llamaindex/llamaindexdb.py +166 -0
  544. agno/vectordb/milvus/__init__.py +3 -0
  545. agno/vectordb/milvus/milvus.py +966 -78
  546. agno/vectordb/mongodb/__init__.py +9 -1
  547. agno/vectordb/mongodb/mongodb.py +1175 -172
  548. agno/vectordb/pgvector/__init__.py +8 -0
  549. agno/vectordb/pgvector/pgvector.py +599 -115
  550. agno/vectordb/pineconedb/__init__.py +5 -1
  551. agno/vectordb/pineconedb/pineconedb.py +406 -43
  552. agno/vectordb/qdrant/__init__.py +4 -0
  553. agno/vectordb/qdrant/qdrant.py +914 -61
  554. agno/vectordb/redis/__init__.py +9 -0
  555. agno/vectordb/redis/redisdb.py +682 -0
  556. agno/vectordb/singlestore/__init__.py +8 -1
  557. agno/vectordb/singlestore/singlestore.py +771 -0
  558. agno/vectordb/surrealdb/__init__.py +3 -0
  559. agno/vectordb/surrealdb/surrealdb.py +663 -0
  560. agno/vectordb/upstashdb/__init__.py +5 -0
  561. agno/vectordb/upstashdb/upstashdb.py +718 -0
  562. agno/vectordb/weaviate/__init__.py +8 -0
  563. agno/vectordb/weaviate/index.py +15 -0
  564. agno/vectordb/weaviate/weaviate.py +1009 -0
  565. agno/workflow/__init__.py +23 -1
  566. agno/workflow/agent.py +299 -0
  567. agno/workflow/condition.py +759 -0
  568. agno/workflow/loop.py +756 -0
  569. agno/workflow/parallel.py +853 -0
  570. agno/workflow/router.py +723 -0
  571. agno/workflow/step.py +1564 -0
  572. agno/workflow/steps.py +613 -0
  573. agno/workflow/types.py +556 -0
  574. agno/workflow/workflow.py +4327 -514
  575. agno-2.3.13.dist-info/METADATA +639 -0
  576. agno-2.3.13.dist-info/RECORD +613 -0
  577. {agno-0.1.2.dist-info → agno-2.3.13.dist-info}/WHEEL +1 -1
  578. agno-2.3.13.dist-info/licenses/LICENSE +201 -0
  579. agno/api/playground.py +0 -91
  580. agno/api/schemas/playground.py +0 -22
  581. agno/api/schemas/user.py +0 -22
  582. agno/api/schemas/workspace.py +0 -46
  583. agno/api/user.py +0 -160
  584. agno/api/workspace.py +0 -151
  585. agno/cli/auth_server.py +0 -118
  586. agno/cli/config.py +0 -275
  587. agno/cli/console.py +0 -88
  588. agno/cli/credentials.py +0 -23
  589. agno/cli/entrypoint.py +0 -571
  590. agno/cli/operator.py +0 -355
  591. agno/cli/settings.py +0 -85
  592. agno/cli/ws/ws_cli.py +0 -817
  593. agno/constants.py +0 -13
  594. agno/document/__init__.py +0 -1
  595. agno/document/chunking/semantic.py +0 -47
  596. agno/document/chunking/strategy.py +0 -31
  597. agno/document/reader/__init__.py +0 -1
  598. agno/document/reader/arxiv_reader.py +0 -41
  599. agno/document/reader/base.py +0 -22
  600. agno/document/reader/csv_reader.py +0 -84
  601. agno/document/reader/docx_reader.py +0 -46
  602. agno/document/reader/firecrawl_reader.py +0 -99
  603. agno/document/reader/json_reader.py +0 -43
  604. agno/document/reader/pdf_reader.py +0 -219
  605. agno/document/reader/s3/pdf_reader.py +0 -46
  606. agno/document/reader/s3/text_reader.py +0 -51
  607. agno/document/reader/text_reader.py +0 -41
  608. agno/document/reader/website_reader.py +0 -175
  609. agno/document/reader/youtube_reader.py +0 -50
  610. agno/embedder/__init__.py +0 -1
  611. agno/embedder/azure_openai.py +0 -86
  612. agno/embedder/cohere.py +0 -72
  613. agno/embedder/fastembed.py +0 -37
  614. agno/embedder/google.py +0 -73
  615. agno/embedder/huggingface.py +0 -54
  616. agno/embedder/mistral.py +0 -80
  617. agno/embedder/ollama.py +0 -57
  618. agno/embedder/openai.py +0 -74
  619. agno/embedder/sentence_transformer.py +0 -38
  620. agno/embedder/voyageai.py +0 -64
  621. agno/eval/perf.py +0 -201
  622. agno/file/__init__.py +0 -1
  623. agno/file/file.py +0 -16
  624. agno/file/local/csv.py +0 -32
  625. agno/file/local/txt.py +0 -19
  626. agno/infra/app.py +0 -240
  627. agno/infra/base.py +0 -144
  628. agno/infra/context.py +0 -20
  629. agno/infra/db_app.py +0 -52
  630. agno/infra/resource.py +0 -205
  631. agno/infra/resources.py +0 -55
  632. agno/knowledge/agent.py +0 -230
  633. agno/knowledge/arxiv.py +0 -22
  634. agno/knowledge/combined.py +0 -22
  635. agno/knowledge/csv.py +0 -28
  636. agno/knowledge/csv_url.py +0 -19
  637. agno/knowledge/document.py +0 -20
  638. agno/knowledge/docx.py +0 -30
  639. agno/knowledge/json.py +0 -28
  640. agno/knowledge/langchain.py +0 -71
  641. agno/knowledge/llamaindex.py +0 -66
  642. agno/knowledge/pdf.py +0 -28
  643. agno/knowledge/pdf_url.py +0 -26
  644. agno/knowledge/s3/base.py +0 -60
  645. agno/knowledge/s3/pdf.py +0 -21
  646. agno/knowledge/s3/text.py +0 -23
  647. agno/knowledge/text.py +0 -30
  648. agno/knowledge/website.py +0 -88
  649. agno/knowledge/wikipedia.py +0 -31
  650. agno/knowledge/youtube.py +0 -22
  651. agno/memory/agent.py +0 -392
  652. agno/memory/classifier.py +0 -104
  653. agno/memory/db/__init__.py +0 -1
  654. agno/memory/db/base.py +0 -42
  655. agno/memory/db/mongodb.py +0 -189
  656. agno/memory/db/postgres.py +0 -203
  657. agno/memory/db/sqlite.py +0 -193
  658. agno/memory/memory.py +0 -15
  659. agno/memory/row.py +0 -36
  660. agno/memory/summarizer.py +0 -192
  661. agno/memory/summary.py +0 -19
  662. agno/memory/workflow.py +0 -38
  663. agno/models/google/gemini_openai.py +0 -26
  664. agno/models/ollama/hermes.py +0 -221
  665. agno/models/ollama/tools.py +0 -362
  666. agno/models/vertexai/gemini.py +0 -595
  667. agno/playground/__init__.py +0 -3
  668. agno/playground/async_router.py +0 -421
  669. agno/playground/deploy.py +0 -249
  670. agno/playground/operator.py +0 -92
  671. agno/playground/playground.py +0 -91
  672. agno/playground/schemas.py +0 -76
  673. agno/playground/serve.py +0 -55
  674. agno/playground/sync_router.py +0 -405
  675. agno/reasoning/agent.py +0 -68
  676. agno/run/response.py +0 -112
  677. agno/storage/agent/__init__.py +0 -0
  678. agno/storage/agent/base.py +0 -38
  679. agno/storage/agent/dynamodb.py +0 -350
  680. agno/storage/agent/json.py +0 -92
  681. agno/storage/agent/mongodb.py +0 -228
  682. agno/storage/agent/postgres.py +0 -367
  683. agno/storage/agent/session.py +0 -79
  684. agno/storage/agent/singlestore.py +0 -303
  685. agno/storage/agent/sqlite.py +0 -357
  686. agno/storage/agent/yaml.py +0 -93
  687. agno/storage/workflow/__init__.py +0 -0
  688. agno/storage/workflow/base.py +0 -40
  689. agno/storage/workflow/mongodb.py +0 -233
  690. agno/storage/workflow/postgres.py +0 -366
  691. agno/storage/workflow/session.py +0 -60
  692. agno/storage/workflow/sqlite.py +0 -359
  693. agno/tools/googlesearch.py +0 -88
  694. agno/utils/defaults.py +0 -57
  695. agno/utils/filesystem.py +0 -39
  696. agno/utils/git.py +0 -52
  697. agno/utils/json_io.py +0 -30
  698. agno/utils/load_env.py +0 -19
  699. agno/utils/py_io.py +0 -19
  700. agno/utils/pyproject.py +0 -18
  701. agno/utils/resource_filter.py +0 -31
  702. agno/vectordb/singlestore/s2vectordb.py +0 -390
  703. agno/vectordb/singlestore/s2vectordb2.py +0 -355
  704. agno/workspace/__init__.py +0 -0
  705. agno/workspace/config.py +0 -325
  706. agno/workspace/enums.py +0 -6
  707. agno/workspace/helpers.py +0 -48
  708. agno/workspace/operator.py +0 -758
  709. agno/workspace/settings.py +0 -63
  710. agno-0.1.2.dist-info/LICENSE +0 -375
  711. agno-0.1.2.dist-info/METADATA +0 -502
  712. agno-0.1.2.dist-info/RECORD +0 -352
  713. agno-0.1.2.dist-info/entry_points.txt +0 -3
  714. /agno/{cli → db/migrations}/__init__.py +0 -0
  715. /agno/{cli/ws → db/migrations/versions}/__init__.py +0 -0
  716. /agno/{document/chunking/__init__.py → db/schemas/metrics.py} +0 -0
  717. /agno/{document/reader/s3 → integrations}/__init__.py +0 -0
  718. /agno/{file/local → knowledge/chunking}/__init__.py +0 -0
  719. /agno/{infra → knowledge/remote_content}/__init__.py +0 -0
  720. /agno/{knowledge/s3 → tools/models}/__init__.py +0 -0
  721. /agno/{reranker → utils/models}/__init__.py +0 -0
  722. /agno/{storage → utils/print_response}/__init__.py +0 -0
  723. {agno-0.1.2.dist-info → agno-2.3.13.dist-info}/top_level.txt +0 -0
agno/utils/events.py ADDED
@@ -0,0 +1,700 @@
1
+ from typing import Any, Dict, List, Optional, Union
2
+
3
+ from agno.media import Audio, Image
4
+ from agno.models.message import Citations
5
+ from agno.models.response import ToolExecution
6
+ from agno.reasoning.step import ReasoningStep
7
+ from agno.run.agent import (
8
+ MemoryUpdateCompletedEvent,
9
+ MemoryUpdateStartedEvent,
10
+ OutputModelResponseCompletedEvent,
11
+ OutputModelResponseStartedEvent,
12
+ ParserModelResponseCompletedEvent,
13
+ ParserModelResponseStartedEvent,
14
+ PostHookCompletedEvent,
15
+ PostHookStartedEvent,
16
+ PreHookCompletedEvent,
17
+ PreHookStartedEvent,
18
+ ReasoningCompletedEvent,
19
+ ReasoningStartedEvent,
20
+ ReasoningStepEvent,
21
+ RunCancelledEvent,
22
+ RunCompletedEvent,
23
+ RunContentCompletedEvent,
24
+ RunContentEvent,
25
+ RunContinuedEvent,
26
+ RunErrorEvent,
27
+ RunEvent,
28
+ RunInput,
29
+ RunOutput,
30
+ RunOutputEvent,
31
+ RunPausedEvent,
32
+ RunStartedEvent,
33
+ SessionSummaryCompletedEvent,
34
+ SessionSummaryStartedEvent,
35
+ ToolCallCompletedEvent,
36
+ ToolCallStartedEvent,
37
+ )
38
+ from agno.run.requirement import RunRequirement
39
+ from agno.run.team import MemoryUpdateCompletedEvent as TeamMemoryUpdateCompletedEvent
40
+ from agno.run.team import MemoryUpdateStartedEvent as TeamMemoryUpdateStartedEvent
41
+ from agno.run.team import OutputModelResponseCompletedEvent as TeamOutputModelResponseCompletedEvent
42
+ from agno.run.team import OutputModelResponseStartedEvent as TeamOutputModelResponseStartedEvent
43
+ from agno.run.team import ParserModelResponseCompletedEvent as TeamParserModelResponseCompletedEvent
44
+ from agno.run.team import ParserModelResponseStartedEvent as TeamParserModelResponseStartedEvent
45
+ from agno.run.team import PostHookCompletedEvent as TeamPostHookCompletedEvent
46
+ from agno.run.team import PostHookStartedEvent as TeamPostHookStartedEvent
47
+ from agno.run.team import PreHookCompletedEvent as TeamPreHookCompletedEvent
48
+ from agno.run.team import PreHookStartedEvent as TeamPreHookStartedEvent
49
+ from agno.run.team import ReasoningCompletedEvent as TeamReasoningCompletedEvent
50
+ from agno.run.team import ReasoningStartedEvent as TeamReasoningStartedEvent
51
+ from agno.run.team import ReasoningStepEvent as TeamReasoningStepEvent
52
+ from agno.run.team import RunCancelledEvent as TeamRunCancelledEvent
53
+ from agno.run.team import RunCompletedEvent as TeamRunCompletedEvent
54
+ from agno.run.team import RunContentCompletedEvent as TeamRunContentCompletedEvent
55
+ from agno.run.team import RunContentEvent as TeamRunContentEvent
56
+ from agno.run.team import RunErrorEvent as TeamRunErrorEvent
57
+ from agno.run.team import RunStartedEvent as TeamRunStartedEvent
58
+ from agno.run.team import SessionSummaryCompletedEvent as TeamSessionSummaryCompletedEvent
59
+ from agno.run.team import SessionSummaryStartedEvent as TeamSessionSummaryStartedEvent
60
+ from agno.run.team import TeamRunEvent, TeamRunInput, TeamRunOutput, TeamRunOutputEvent
61
+ from agno.run.team import ToolCallCompletedEvent as TeamToolCallCompletedEvent
62
+ from agno.run.team import ToolCallStartedEvent as TeamToolCallStartedEvent
63
+ from agno.session.summary import SessionSummary
64
+
65
+
66
+ def create_team_run_started_event(from_run_response: TeamRunOutput) -> TeamRunStartedEvent:
67
+ return TeamRunStartedEvent(
68
+ session_id=from_run_response.session_id,
69
+ team_id=from_run_response.team_id, # type: ignore
70
+ team_name=from_run_response.team_name, # type: ignore
71
+ run_id=from_run_response.run_id,
72
+ model=from_run_response.model, # type: ignore
73
+ model_provider=from_run_response.model_provider, # type: ignore
74
+ )
75
+
76
+
77
+ def create_run_started_event(from_run_response: RunOutput) -> RunStartedEvent:
78
+ return RunStartedEvent(
79
+ session_id=from_run_response.session_id,
80
+ agent_id=from_run_response.agent_id, # type: ignore
81
+ agent_name=from_run_response.agent_name, # type: ignore
82
+ run_id=from_run_response.run_id,
83
+ model=from_run_response.model, # type: ignore
84
+ model_provider=from_run_response.model_provider, # type: ignore
85
+ )
86
+
87
+
88
+ def create_team_run_completed_event(from_run_response: TeamRunOutput) -> TeamRunCompletedEvent:
89
+ return TeamRunCompletedEvent(
90
+ session_id=from_run_response.session_id,
91
+ team_id=from_run_response.team_id, # type: ignore
92
+ team_name=from_run_response.team_name, # type: ignore
93
+ run_id=from_run_response.run_id,
94
+ content=from_run_response.content, # type: ignore
95
+ content_type=from_run_response.content_type, # type: ignore
96
+ reasoning_content=from_run_response.reasoning_content, # type: ignore
97
+ citations=from_run_response.citations, # type: ignore
98
+ model_provider_data=from_run_response.model_provider_data, # type: ignore
99
+ images=from_run_response.images, # type: ignore
100
+ videos=from_run_response.videos, # type: ignore
101
+ audio=from_run_response.audio, # type: ignore
102
+ response_audio=from_run_response.response_audio, # type: ignore
103
+ references=from_run_response.references, # type: ignore
104
+ additional_input=from_run_response.additional_input, # type: ignore
105
+ reasoning_steps=from_run_response.reasoning_steps, # type: ignore
106
+ reasoning_messages=from_run_response.reasoning_messages, # type: ignore
107
+ member_responses=from_run_response.member_responses, # type: ignore
108
+ metadata=from_run_response.metadata, # type: ignore
109
+ metrics=from_run_response.metrics, # type: ignore
110
+ session_state=from_run_response.session_state, # type: ignore
111
+ )
112
+
113
+
114
+ def create_run_completed_event(from_run_response: RunOutput) -> RunCompletedEvent:
115
+ return RunCompletedEvent(
116
+ session_id=from_run_response.session_id,
117
+ agent_id=from_run_response.agent_id, # type: ignore
118
+ agent_name=from_run_response.agent_name, # type: ignore
119
+ run_id=from_run_response.run_id,
120
+ content=from_run_response.content, # type: ignore
121
+ content_type=from_run_response.content_type, # type: ignore
122
+ reasoning_content=from_run_response.reasoning_content, # type: ignore
123
+ citations=from_run_response.citations, # type: ignore
124
+ model_provider_data=from_run_response.model_provider_data, # type: ignore
125
+ images=from_run_response.images, # type: ignore
126
+ videos=from_run_response.videos, # type: ignore
127
+ audio=from_run_response.audio, # type: ignore
128
+ response_audio=from_run_response.response_audio, # type: ignore
129
+ references=from_run_response.references, # type: ignore
130
+ additional_input=from_run_response.additional_input, # type: ignore
131
+ reasoning_steps=from_run_response.reasoning_steps, # type: ignore
132
+ reasoning_messages=from_run_response.reasoning_messages, # type: ignore
133
+ metadata=from_run_response.metadata, # type: ignore
134
+ metrics=from_run_response.metrics, # type: ignore
135
+ session_state=from_run_response.session_state, # type: ignore
136
+ )
137
+
138
+
139
+ def create_run_paused_event(
140
+ from_run_response: RunOutput,
141
+ tools: Optional[List[ToolExecution]] = None,
142
+ requirements: Optional[List[RunRequirement]] = None,
143
+ ) -> RunPausedEvent:
144
+ return RunPausedEvent(
145
+ session_id=from_run_response.session_id,
146
+ agent_id=from_run_response.agent_id, # type: ignore
147
+ agent_name=from_run_response.agent_name, # type: ignore
148
+ run_id=from_run_response.run_id,
149
+ tools=tools,
150
+ requirements=requirements,
151
+ content=from_run_response.content,
152
+ )
153
+
154
+
155
+ def create_run_continued_event(from_run_response: RunOutput) -> RunContinuedEvent:
156
+ return RunContinuedEvent(
157
+ session_id=from_run_response.session_id,
158
+ agent_id=from_run_response.agent_id, # type: ignore
159
+ agent_name=from_run_response.agent_name, # type: ignore
160
+ run_id=from_run_response.run_id,
161
+ )
162
+
163
+
164
+ def create_team_run_error_event(from_run_response: TeamRunOutput, error: str) -> TeamRunErrorEvent:
165
+ return TeamRunErrorEvent(
166
+ session_id=from_run_response.session_id,
167
+ team_id=from_run_response.team_id, # type: ignore
168
+ team_name=from_run_response.team_name, # type: ignore
169
+ run_id=from_run_response.run_id,
170
+ content=error,
171
+ )
172
+
173
+
174
+ def create_run_error_event(from_run_response: RunOutput, error: str) -> RunErrorEvent:
175
+ return RunErrorEvent(
176
+ session_id=from_run_response.session_id,
177
+ agent_id=from_run_response.agent_id, # type: ignore
178
+ agent_name=from_run_response.agent_name, # type: ignore
179
+ run_id=from_run_response.run_id,
180
+ content=error,
181
+ )
182
+
183
+
184
+ def create_team_run_cancelled_event(from_run_response: TeamRunOutput, reason: str) -> TeamRunCancelledEvent:
185
+ return TeamRunCancelledEvent(
186
+ session_id=from_run_response.session_id,
187
+ team_id=from_run_response.team_id, # type: ignore
188
+ team_name=from_run_response.team_name, # type: ignore
189
+ run_id=from_run_response.run_id,
190
+ reason=reason,
191
+ )
192
+
193
+
194
+ def create_run_cancelled_event(from_run_response: RunOutput, reason: str) -> RunCancelledEvent:
195
+ return RunCancelledEvent(
196
+ session_id=from_run_response.session_id,
197
+ agent_id=from_run_response.agent_id, # type: ignore
198
+ agent_name=from_run_response.agent_name, # type: ignore
199
+ run_id=from_run_response.run_id,
200
+ reason=reason,
201
+ )
202
+
203
+
204
+ def create_pre_hook_started_event(
205
+ from_run_response: RunOutput, pre_hook_name: Optional[str] = None, run_input: Optional[RunInput] = None
206
+ ) -> PreHookStartedEvent:
207
+ from copy import deepcopy
208
+
209
+ return PreHookStartedEvent(
210
+ session_id=from_run_response.session_id,
211
+ agent_id=from_run_response.agent_id, # type: ignore
212
+ agent_name=from_run_response.agent_name, # type: ignore
213
+ run_id=from_run_response.run_id,
214
+ pre_hook_name=pre_hook_name,
215
+ run_input=deepcopy(run_input),
216
+ )
217
+
218
+
219
+ def create_team_pre_hook_started_event(
220
+ from_run_response: TeamRunOutput, pre_hook_name: Optional[str] = None, run_input: Optional[TeamRunInput] = None
221
+ ) -> TeamPreHookStartedEvent:
222
+ from copy import deepcopy
223
+
224
+ return TeamPreHookStartedEvent(
225
+ session_id=from_run_response.session_id,
226
+ team_id=from_run_response.team_id, # type: ignore
227
+ team_name=from_run_response.team_name, # type: ignore
228
+ run_id=from_run_response.run_id,
229
+ pre_hook_name=pre_hook_name,
230
+ run_input=deepcopy(run_input),
231
+ )
232
+
233
+
234
+ def create_pre_hook_completed_event(
235
+ from_run_response: RunOutput, pre_hook_name: Optional[str] = None, run_input: Optional[RunInput] = None
236
+ ) -> PreHookCompletedEvent:
237
+ from copy import deepcopy
238
+
239
+ return PreHookCompletedEvent(
240
+ session_id=from_run_response.session_id,
241
+ agent_id=from_run_response.agent_id, # type: ignore
242
+ agent_name=from_run_response.agent_name, # type: ignore
243
+ run_id=from_run_response.run_id,
244
+ pre_hook_name=pre_hook_name,
245
+ run_input=deepcopy(run_input),
246
+ )
247
+
248
+
249
+ def create_team_pre_hook_completed_event(
250
+ from_run_response: TeamRunOutput, pre_hook_name: Optional[str] = None, run_input: Optional[TeamRunInput] = None
251
+ ) -> TeamPreHookCompletedEvent:
252
+ from copy import deepcopy
253
+
254
+ return TeamPreHookCompletedEvent(
255
+ session_id=from_run_response.session_id,
256
+ team_id=from_run_response.team_id, # type: ignore
257
+ team_name=from_run_response.team_name, # type: ignore
258
+ run_id=from_run_response.run_id,
259
+ pre_hook_name=pre_hook_name,
260
+ run_input=deepcopy(run_input),
261
+ )
262
+
263
+
264
+ def create_post_hook_started_event(
265
+ from_run_response: RunOutput, post_hook_name: Optional[str] = None
266
+ ) -> PostHookStartedEvent:
267
+ return PostHookStartedEvent(
268
+ session_id=from_run_response.session_id,
269
+ agent_id=from_run_response.agent_id, # type: ignore
270
+ agent_name=from_run_response.agent_name, # type: ignore
271
+ run_id=from_run_response.run_id,
272
+ post_hook_name=post_hook_name,
273
+ )
274
+
275
+
276
+ def create_team_post_hook_started_event(
277
+ from_run_response: TeamRunOutput, post_hook_name: Optional[str] = None
278
+ ) -> TeamPostHookStartedEvent:
279
+ return TeamPostHookStartedEvent(
280
+ session_id=from_run_response.session_id,
281
+ team_id=from_run_response.team_id, # type: ignore
282
+ team_name=from_run_response.team_name, # type: ignore
283
+ run_id=from_run_response.run_id,
284
+ post_hook_name=post_hook_name,
285
+ )
286
+
287
+
288
+ def create_post_hook_completed_event(
289
+ from_run_response: RunOutput, post_hook_name: Optional[str] = None
290
+ ) -> PostHookCompletedEvent:
291
+ return PostHookCompletedEvent(
292
+ session_id=from_run_response.session_id,
293
+ agent_id=from_run_response.agent_id, # type: ignore
294
+ agent_name=from_run_response.agent_name, # type: ignore
295
+ run_id=from_run_response.run_id,
296
+ post_hook_name=post_hook_name,
297
+ )
298
+
299
+
300
+ def create_team_post_hook_completed_event(
301
+ from_run_response: TeamRunOutput, post_hook_name: Optional[str] = None
302
+ ) -> TeamPostHookCompletedEvent:
303
+ return TeamPostHookCompletedEvent(
304
+ session_id=from_run_response.session_id,
305
+ team_id=from_run_response.team_id, # type: ignore
306
+ team_name=from_run_response.team_name, # type: ignore
307
+ run_id=from_run_response.run_id,
308
+ post_hook_name=post_hook_name,
309
+ )
310
+
311
+
312
+ def create_memory_update_started_event(from_run_response: RunOutput) -> MemoryUpdateStartedEvent:
313
+ return MemoryUpdateStartedEvent(
314
+ session_id=from_run_response.session_id,
315
+ agent_id=from_run_response.agent_id, # type: ignore
316
+ agent_name=from_run_response.agent_name, # type: ignore
317
+ run_id=from_run_response.run_id,
318
+ )
319
+
320
+
321
+ def create_team_memory_update_started_event(from_run_response: TeamRunOutput) -> TeamMemoryUpdateStartedEvent:
322
+ return TeamMemoryUpdateStartedEvent(
323
+ session_id=from_run_response.session_id,
324
+ team_id=from_run_response.team_id, # type: ignore
325
+ team_name=from_run_response.team_name, # type: ignore
326
+ run_id=from_run_response.run_id,
327
+ )
328
+
329
+
330
+ def create_memory_update_completed_event(from_run_response: RunOutput) -> MemoryUpdateCompletedEvent:
331
+ return MemoryUpdateCompletedEvent(
332
+ session_id=from_run_response.session_id,
333
+ agent_id=from_run_response.agent_id, # type: ignore
334
+ agent_name=from_run_response.agent_name, # type: ignore
335
+ run_id=from_run_response.run_id,
336
+ )
337
+
338
+
339
+ def create_team_memory_update_completed_event(from_run_response: TeamRunOutput) -> TeamMemoryUpdateCompletedEvent:
340
+ return TeamMemoryUpdateCompletedEvent(
341
+ session_id=from_run_response.session_id,
342
+ team_id=from_run_response.team_id, # type: ignore
343
+ team_name=from_run_response.team_name, # type: ignore
344
+ run_id=from_run_response.run_id,
345
+ )
346
+
347
+
348
+ def create_team_session_summary_started_event(
349
+ from_run_response: TeamRunOutput,
350
+ ) -> TeamSessionSummaryStartedEvent:
351
+ return TeamSessionSummaryStartedEvent(
352
+ session_id=from_run_response.session_id,
353
+ team_id=from_run_response.team_id, # type: ignore
354
+ team_name=from_run_response.team_name, # type: ignore
355
+ run_id=from_run_response.run_id,
356
+ )
357
+
358
+
359
+ def create_team_session_summary_completed_event(
360
+ from_run_response: TeamRunOutput, session_summary: Optional[SessionSummary] = None
361
+ ) -> TeamSessionSummaryCompletedEvent:
362
+ return TeamSessionSummaryCompletedEvent(
363
+ session_id=from_run_response.session_id,
364
+ team_id=from_run_response.team_id, # type: ignore
365
+ team_name=from_run_response.team_name, # type: ignore
366
+ run_id=from_run_response.run_id,
367
+ session_summary=session_summary,
368
+ )
369
+
370
+
371
+ def create_session_summary_started_event(from_run_response: RunOutput) -> SessionSummaryStartedEvent:
372
+ return SessionSummaryStartedEvent(
373
+ session_id=from_run_response.session_id,
374
+ agent_id=from_run_response.agent_id, # type: ignore
375
+ agent_name=from_run_response.agent_name, # type: ignore
376
+ run_id=from_run_response.run_id,
377
+ )
378
+
379
+
380
+ def create_session_summary_completed_event(
381
+ from_run_response: RunOutput, session_summary: Optional[SessionSummary] = None
382
+ ) -> SessionSummaryCompletedEvent:
383
+ return SessionSummaryCompletedEvent(
384
+ session_id=from_run_response.session_id,
385
+ agent_id=from_run_response.agent_id, # type: ignore
386
+ agent_name=from_run_response.agent_name, # type: ignore
387
+ run_id=from_run_response.run_id,
388
+ session_summary=session_summary,
389
+ )
390
+
391
+
392
+ def create_reasoning_started_event(from_run_response: RunOutput) -> ReasoningStartedEvent:
393
+ return ReasoningStartedEvent(
394
+ session_id=from_run_response.session_id,
395
+ agent_id=from_run_response.agent_id, # type: ignore
396
+ agent_name=from_run_response.agent_name, # type: ignore
397
+ run_id=from_run_response.run_id,
398
+ )
399
+
400
+
401
+ def create_team_reasoning_started_event(from_run_response: TeamRunOutput) -> TeamReasoningStartedEvent:
402
+ return TeamReasoningStartedEvent(
403
+ session_id=from_run_response.session_id,
404
+ team_id=from_run_response.team_id, # type: ignore
405
+ team_name=from_run_response.team_name, # type: ignore
406
+ run_id=from_run_response.run_id,
407
+ )
408
+
409
+
410
+ def create_reasoning_step_event(
411
+ from_run_response: RunOutput, reasoning_step: ReasoningStep, reasoning_content: str
412
+ ) -> ReasoningStepEvent:
413
+ return ReasoningStepEvent(
414
+ session_id=from_run_response.session_id,
415
+ agent_id=from_run_response.agent_id, # type: ignore
416
+ agent_name=from_run_response.agent_name, # type: ignore
417
+ run_id=from_run_response.run_id,
418
+ content=reasoning_step,
419
+ content_type=reasoning_step.__class__.__name__,
420
+ reasoning_content=reasoning_content,
421
+ )
422
+
423
+
424
+ def create_team_reasoning_step_event(
425
+ from_run_response: TeamRunOutput, reasoning_step: ReasoningStep, reasoning_content: str
426
+ ) -> TeamReasoningStepEvent:
427
+ return TeamReasoningStepEvent(
428
+ session_id=from_run_response.session_id,
429
+ team_id=from_run_response.team_id, # type: ignore
430
+ team_name=from_run_response.team_name, # type: ignore
431
+ run_id=from_run_response.run_id,
432
+ content=reasoning_step,
433
+ content_type=reasoning_step.__class__.__name__,
434
+ reasoning_content=reasoning_content,
435
+ )
436
+
437
+
438
+ def create_reasoning_completed_event(
439
+ from_run_response: RunOutput, content: Optional[Any] = None, content_type: Optional[str] = None
440
+ ) -> ReasoningCompletedEvent:
441
+ return ReasoningCompletedEvent(
442
+ session_id=from_run_response.session_id,
443
+ agent_id=from_run_response.agent_id, # type: ignore
444
+ agent_name=from_run_response.agent_name, # type: ignore
445
+ run_id=from_run_response.run_id,
446
+ content=content,
447
+ content_type=content_type or "str",
448
+ )
449
+
450
+
451
+ def create_team_reasoning_completed_event(
452
+ from_run_response: TeamRunOutput, content: Optional[Any] = None, content_type: Optional[str] = None
453
+ ) -> TeamReasoningCompletedEvent:
454
+ return TeamReasoningCompletedEvent(
455
+ session_id=from_run_response.session_id,
456
+ team_id=from_run_response.team_id, # type: ignore
457
+ team_name=from_run_response.team_name, # type: ignore
458
+ run_id=from_run_response.run_id,
459
+ content=content,
460
+ content_type=content_type or "str",
461
+ )
462
+
463
+
464
+ def create_tool_call_started_event(from_run_response: RunOutput, tool: ToolExecution) -> ToolCallStartedEvent:
465
+ return ToolCallStartedEvent(
466
+ session_id=from_run_response.session_id,
467
+ agent_id=from_run_response.agent_id, # type: ignore
468
+ agent_name=from_run_response.agent_name, # type: ignore
469
+ run_id=from_run_response.run_id,
470
+ tool=tool,
471
+ )
472
+
473
+
474
+ def create_team_tool_call_started_event(
475
+ from_run_response: TeamRunOutput, tool: ToolExecution
476
+ ) -> TeamToolCallStartedEvent:
477
+ return TeamToolCallStartedEvent(
478
+ session_id=from_run_response.session_id,
479
+ team_id=from_run_response.team_id, # type: ignore
480
+ team_name=from_run_response.team_name, # type: ignore
481
+ run_id=from_run_response.run_id,
482
+ tool=tool,
483
+ )
484
+
485
+
486
+ def create_tool_call_completed_event(
487
+ from_run_response: RunOutput, tool: ToolExecution, content: Optional[Any] = None
488
+ ) -> ToolCallCompletedEvent:
489
+ return ToolCallCompletedEvent(
490
+ session_id=from_run_response.session_id,
491
+ agent_id=from_run_response.agent_id, # type: ignore
492
+ agent_name=from_run_response.agent_name, # type: ignore
493
+ run_id=from_run_response.run_id,
494
+ tool=tool,
495
+ content=content,
496
+ images=from_run_response.images,
497
+ videos=from_run_response.videos,
498
+ audio=from_run_response.audio,
499
+ )
500
+
501
+
502
+ def create_team_tool_call_completed_event(
503
+ from_run_response: TeamRunOutput, tool: ToolExecution, content: Optional[Any] = None
504
+ ) -> TeamToolCallCompletedEvent:
505
+ return TeamToolCallCompletedEvent(
506
+ session_id=from_run_response.session_id,
507
+ team_id=from_run_response.team_id, # type: ignore
508
+ team_name=from_run_response.team_name, # type: ignore
509
+ run_id=from_run_response.run_id,
510
+ tool=tool,
511
+ content=content,
512
+ images=from_run_response.images,
513
+ videos=from_run_response.videos,
514
+ audio=from_run_response.audio,
515
+ )
516
+
517
+
518
+ def create_run_output_content_event(
519
+ from_run_response: RunOutput,
520
+ content: Optional[Any] = None,
521
+ content_type: Optional[str] = None,
522
+ reasoning_content: Optional[str] = None,
523
+ redacted_reasoning_content: Optional[str] = None,
524
+ model_provider_data: Optional[Dict[str, Any]] = None,
525
+ citations: Optional[Citations] = None,
526
+ response_audio: Optional[Audio] = None,
527
+ image: Optional[Image] = None,
528
+ ) -> RunContentEvent:
529
+ thinking_combined = (reasoning_content or "") + (redacted_reasoning_content or "")
530
+
531
+ return RunContentEvent(
532
+ session_id=from_run_response.session_id,
533
+ agent_id=from_run_response.agent_id, # type: ignore
534
+ agent_name=from_run_response.agent_name, # type: ignore
535
+ run_id=from_run_response.run_id,
536
+ content=content,
537
+ content_type=content_type or "str",
538
+ reasoning_content=thinking_combined,
539
+ citations=citations,
540
+ response_audio=response_audio,
541
+ image=image,
542
+ references=from_run_response.references,
543
+ additional_input=from_run_response.additional_input,
544
+ reasoning_steps=from_run_response.reasoning_steps,
545
+ reasoning_messages=from_run_response.reasoning_messages,
546
+ model_provider_data=model_provider_data,
547
+ )
548
+
549
+
550
+ def create_team_run_output_content_event(
551
+ from_run_response: TeamRunOutput,
552
+ content: Optional[Any] = None,
553
+ content_type: Optional[str] = None,
554
+ reasoning_content: Optional[str] = None,
555
+ redacted_reasoning_content: Optional[str] = None,
556
+ citations: Optional[Citations] = None,
557
+ model_provider_data: Optional[Dict[str, Any]] = None,
558
+ response_audio: Optional[Audio] = None,
559
+ image: Optional[Image] = None,
560
+ ) -> TeamRunContentEvent:
561
+ thinking_combined = (reasoning_content or "") + (redacted_reasoning_content or "")
562
+
563
+ return TeamRunContentEvent(
564
+ session_id=from_run_response.session_id,
565
+ team_id=from_run_response.team_id, # type: ignore
566
+ team_name=from_run_response.team_name, # type: ignore
567
+ run_id=from_run_response.run_id,
568
+ content=content,
569
+ content_type=content_type or "str",
570
+ reasoning_content=thinking_combined,
571
+ citations=citations,
572
+ model_provider_data=model_provider_data,
573
+ response_audio=response_audio,
574
+ image=image,
575
+ references=from_run_response.references, # type: ignore
576
+ additional_input=from_run_response.additional_input, # type: ignore
577
+ reasoning_steps=from_run_response.reasoning_steps, # type: ignore
578
+ reasoning_messages=from_run_response.reasoning_messages, # type: ignore
579
+ )
580
+
581
+
582
+ def create_run_content_completed_event(
583
+ from_run_response: RunOutput,
584
+ ) -> RunContentCompletedEvent:
585
+ return RunContentCompletedEvent(
586
+ session_id=from_run_response.session_id,
587
+ agent_id=from_run_response.agent_id, # type: ignore
588
+ agent_name=from_run_response.agent_name, # type: ignore
589
+ run_id=from_run_response.run_id,
590
+ )
591
+
592
+
593
+ def create_team_run_content_completed_event(
594
+ from_run_response: TeamRunOutput,
595
+ ) -> TeamRunContentCompletedEvent:
596
+ return TeamRunContentCompletedEvent(
597
+ session_id=from_run_response.session_id,
598
+ team_id=from_run_response.team_id, # type: ignore
599
+ team_name=from_run_response.team_name, # type: ignore
600
+ run_id=from_run_response.run_id,
601
+ )
602
+
603
+
604
+ def create_parser_model_response_started_event(
605
+ from_run_response: RunOutput,
606
+ ) -> ParserModelResponseStartedEvent:
607
+ return ParserModelResponseStartedEvent(
608
+ session_id=from_run_response.session_id,
609
+ agent_id=from_run_response.agent_id, # type: ignore
610
+ agent_name=from_run_response.agent_name, # type: ignore
611
+ run_id=from_run_response.run_id,
612
+ )
613
+
614
+
615
+ def create_parser_model_response_completed_event(
616
+ from_run_response: RunOutput,
617
+ ) -> ParserModelResponseCompletedEvent:
618
+ return ParserModelResponseCompletedEvent(
619
+ session_id=from_run_response.session_id,
620
+ agent_id=from_run_response.agent_id, # type: ignore
621
+ agent_name=from_run_response.agent_name, # type: ignore
622
+ run_id=from_run_response.run_id,
623
+ )
624
+
625
+
626
+ def create_team_parser_model_response_started_event(
627
+ from_run_response: TeamRunOutput,
628
+ ) -> TeamParserModelResponseStartedEvent:
629
+ return TeamParserModelResponseStartedEvent(
630
+ session_id=from_run_response.session_id,
631
+ team_id=from_run_response.team_id, # type: ignore
632
+ team_name=from_run_response.team_name, # type: ignore
633
+ run_id=from_run_response.run_id,
634
+ )
635
+
636
+
637
+ def create_team_parser_model_response_completed_event(
638
+ from_run_response: TeamRunOutput,
639
+ ) -> TeamParserModelResponseCompletedEvent:
640
+ return TeamParserModelResponseCompletedEvent(
641
+ session_id=from_run_response.session_id,
642
+ team_id=from_run_response.team_id, # type: ignore
643
+ team_name=from_run_response.team_name, # type: ignore
644
+ run_id=from_run_response.run_id,
645
+ )
646
+
647
+
648
+ def create_output_model_response_started_event(from_run_response: RunOutput) -> OutputModelResponseStartedEvent:
649
+ return OutputModelResponseStartedEvent(
650
+ session_id=from_run_response.session_id,
651
+ agent_id=from_run_response.agent_id, # type: ignore
652
+ agent_name=from_run_response.agent_name, # type: ignore
653
+ run_id=from_run_response.run_id,
654
+ )
655
+
656
+
657
+ def create_output_model_response_completed_event(from_run_response: RunOutput) -> OutputModelResponseCompletedEvent:
658
+ return OutputModelResponseCompletedEvent(
659
+ session_id=from_run_response.session_id,
660
+ agent_id=from_run_response.agent_id, # type: ignore
661
+ agent_name=from_run_response.agent_name, # type: ignore
662
+ run_id=from_run_response.run_id,
663
+ )
664
+
665
+
666
+ def create_team_output_model_response_started_event(
667
+ from_run_response: TeamRunOutput,
668
+ ) -> TeamOutputModelResponseStartedEvent:
669
+ return TeamOutputModelResponseStartedEvent(
670
+ session_id=from_run_response.session_id,
671
+ team_id=from_run_response.team_id, # type: ignore
672
+ team_name=from_run_response.team_name, # type: ignore
673
+ run_id=from_run_response.run_id,
674
+ )
675
+
676
+
677
+ def create_team_output_model_response_completed_event(
678
+ from_run_response: TeamRunOutput,
679
+ ) -> TeamOutputModelResponseCompletedEvent:
680
+ return TeamOutputModelResponseCompletedEvent(
681
+ session_id=from_run_response.session_id,
682
+ team_id=from_run_response.team_id, # type: ignore
683
+ team_name=from_run_response.team_name, # type: ignore
684
+ run_id=from_run_response.run_id,
685
+ )
686
+
687
+
688
+ def handle_event(
689
+ event: Union[RunOutputEvent, TeamRunOutputEvent],
690
+ run_response: Union[RunOutput, TeamRunOutput],
691
+ events_to_skip: Optional[List[Union[RunEvent, TeamRunEvent]]] = None,
692
+ store_events: bool = False,
693
+ ) -> Union[RunOutputEvent, TeamRunOutputEvent]:
694
+ # We only store events that are not run_response_content events
695
+ events_to_skip = [event.value for event in events_to_skip] if events_to_skip else []
696
+ if store_events and event.event not in events_to_skip:
697
+ if run_response.events is None:
698
+ run_response.events = []
699
+ run_response.events.append(event) # type: ignore
700
+ return event