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