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
@@ -1,26 +1,45 @@
1
1
  from dataclasses import dataclass
2
2
  from os import getenv
3
- from typing import Optional
3
+ from typing import Any, Dict, Optional
4
4
 
5
+ from agno.exceptions import ModelAuthenticationError
5
6
  from agno.models.openai.like import OpenAILike
6
7
 
7
8
 
8
9
  @dataclass
9
10
  class Sambanova(OpenAILike):
10
11
  """
11
- A class for interacting with Sambanova models.
12
+ A class for interacting with Sambanova API.
12
13
 
13
14
  Attributes:
14
15
  id (str): The id of the Sambanova model to use. Default is "Meta-Llama-3.1-8B-Instruct".
15
16
  name (str): The name of this chat model instance. Default is "Sambanova"
16
17
  provider (str): The provider of the model. Default is "Sambanova".
17
18
  api_key (str): The api key to authorize request to Sambanova.
18
- base_url (str): The base url to which the requests are sent.
19
+ base_url (str): The base url to which the requests are sent. Defaults to "https://api.sambanova.ai/v1".
19
20
  """
20
21
 
21
22
  id: str = "Meta-Llama-3.1-8B-Instruct"
22
23
  name: str = "Sambanova"
23
24
  provider: str = "Sambanova"
24
25
 
25
- api_key: Optional[str] = getenv("SAMBANOVA_API_KEY")
26
+ api_key: Optional[str] = None
26
27
  base_url: str = "https://api.sambanova.ai/v1"
28
+
29
+ supports_native_structured_outputs: bool = False
30
+
31
+ def _get_client_params(self) -> Dict[str, Any]:
32
+ """
33
+ Returns client parameters for API requests, checking for SAMBANOVA_API_KEY.
34
+
35
+ Returns:
36
+ Dict[str, Any]: A dictionary of client parameters for API requests.
37
+ """
38
+ if not self.api_key:
39
+ self.api_key = getenv("SAMBANOVA_API_KEY")
40
+ if not self.api_key:
41
+ raise ModelAuthenticationError(
42
+ message="SAMBANOVA_API_KEY not set. Please set the SAMBANOVA_API_KEY environment variable.",
43
+ model_name=self.name,
44
+ )
45
+ return super()._get_client_params()
@@ -0,0 +1,5 @@
1
+ from agno.models.siliconflow.siliconflow import Siliconflow
2
+
3
+ __all__ = [
4
+ "Siliconflow",
5
+ ]
@@ -0,0 +1,42 @@
1
+ from dataclasses import dataclass
2
+ from os import getenv
3
+ from typing import Any, Dict, Optional
4
+
5
+ from agno.exceptions import ModelAuthenticationError
6
+ from agno.models.openai.like import OpenAILike
7
+
8
+
9
+ @dataclass
10
+ class Siliconflow(OpenAILike):
11
+ """
12
+ A class for interacting with Siliconflow API.
13
+
14
+ Attributes:
15
+ id (str): The id of the Siliconflow model to use. Default is "Qwen/QwQ-32B".
16
+ name (str): The name of this chat model instance. Default is "Siliconflow".
17
+ provider (str): The provider of the model. Default is "Siliconflow".
18
+ api_key (str): The api key to authorize request to Siliconflow.
19
+ base_url (str): The base url to which the requests are sent. Defaults to "https://api.siliconflow.cn/v1".
20
+ """
21
+
22
+ id: str = "Qwen/QwQ-32B"
23
+ name: str = "Siliconflow"
24
+ provider: str = "Siliconflow"
25
+ api_key: Optional[str] = None
26
+ base_url: str = "https://api.siliconflow.com/v1"
27
+
28
+ def _get_client_params(self) -> Dict[str, Any]:
29
+ """
30
+ Returns client parameters for API requests, checking for SILICONFLOW_API_KEY.
31
+
32
+ Returns:
33
+ Dict[str, Any]: A dictionary of client parameters for API requests.
34
+ """
35
+ if not self.api_key:
36
+ self.api_key = getenv("SILICONFLOW_API_KEY")
37
+ if not self.api_key:
38
+ raise ModelAuthenticationError(
39
+ message="SILICONFLOW_API_KEY not set. Please set the SILICONFLOW_API_KEY environment variable.",
40
+ model_name=self.name,
41
+ )
42
+ return super()._get_client_params()
@@ -1 +1,5 @@
1
1
  from agno.models.together.together import Together
2
+
3
+ __all__ = [
4
+ "Together",
5
+ ]
@@ -1,185 +1,42 @@
1
- import json
2
1
  from dataclasses import dataclass
3
2
  from os import getenv
4
- from typing import Any, Dict, Iterator, List, Optional
3
+ from typing import Any, Dict, Optional
5
4
 
6
- from agno.models.message import Message
7
- from agno.models.openai.chat import Metrics, StreamData
5
+ from agno.exceptions import ModelAuthenticationError
8
6
  from agno.models.openai.like import OpenAILike
9
- from agno.models.response import ModelResponse
10
- from agno.tools.function import FunctionCall
11
- from agno.utils.log import logger
12
- from agno.utils.tools import get_function_call_for_tool_call
13
-
14
- try:
15
- from openai.types.chat.chat_completion_chunk import (
16
- ChoiceDelta,
17
- ChoiceDeltaToolCall,
18
- )
19
- from openai.types.completion_usage import CompletionUsage
20
- except ImportError:
21
- logger.error("`openai` not installed")
22
- raise
23
7
 
24
8
 
25
9
  @dataclass
26
10
  class Together(OpenAILike):
27
11
  """
28
- A class for interacting with Together models.
12
+ A class for interacting with Together API.
29
13
 
30
14
  Attributes:
31
15
  id (str): The id of the Together model to use. Default is "mistralai/Mixtral-8x7B-Instruct-v0.1".
32
16
  name (str): The name of this chat model instance. Default is "Together"
33
17
  provider (str): The provider of the model. Default is "Together".
34
18
  api_key (str): The api key to authorize request to Together.
35
- base_url (str): The base url to which the requests are sent.
19
+ base_url (str): The base url to which the requests are sent. Defaults to "https://api.together.xyz/v1".
36
20
  """
37
21
 
38
22
  id: str = "mistralai/Mixtral-8x7B-Instruct-v0.1"
39
23
  name: str = "Together"
40
- provider: str = "Together " + id
41
- api_key: Optional[str] = getenv("TOGETHER_API_KEY")
24
+ provider: str = "Together"
25
+ api_key: Optional[str] = None
42
26
  base_url: str = "https://api.together.xyz/v1"
43
- monkey_patch: bool = False
44
-
45
- def response_stream(self, messages: List[Message]) -> Iterator[ModelResponse]:
46
- if not self.monkey_patch:
47
- yield from super().response_stream(messages)
48
- return
49
-
50
- logger.debug("---------- Together Response Start ----------")
51
- # -*- Log messages for debugging
52
- self._log_messages(messages)
53
-
54
- stream_data: StreamData = StreamData()
55
- metrics: Metrics = Metrics()
56
- assistant_message_content = ""
57
- response_is_tool_call = False
58
-
59
- # -*- Generate response
60
- metrics.start_response_timer()
61
- for response in self.invoke_stream(messages=messages):
62
- if len(response.choices) > 0:
63
- metrics.completion_tokens += 1
64
- if metrics.completion_tokens == 1:
65
- metrics.time_to_first_token = metrics.response_timer.elapsed
66
-
67
- response_delta: ChoiceDelta = response.choices[0].delta
68
- response_content: Optional[str] = response_delta.content
69
- response_tool_calls: Optional[List[ChoiceDeltaToolCall]] = response_delta.tool_calls
70
-
71
- if response_content is not None:
72
- stream_data.response_content += response_content
73
- yield ModelResponse(content=response_content)
74
-
75
- if response_tool_calls is not None:
76
- if stream_data.response_tool_calls is None:
77
- stream_data.response_tool_calls = []
78
- stream_data.response_tool_calls.extend(response_tool_calls)
79
-
80
- if response.usage:
81
- response_usage: Optional[CompletionUsage] = response.usage
82
- if response_usage:
83
- metrics.input_tokens = response_usage.prompt_tokens
84
- metrics.prompt_tokens = response_usage.prompt_tokens
85
- metrics.output_tokens = response_usage.completion_tokens
86
- metrics.completion_tokens = response_usage.completion_tokens
87
- metrics.total_tokens = response_usage.total_tokens
88
- metrics.stop_response_timer()
89
- logger.debug(f"Time to generate response: {metrics.response_timer.elapsed:.4f}s")
90
-
91
- # -*- Create assistant message
92
- assistant_message = Message(
93
- role="assistant",
94
- content=assistant_message_content,
95
- )
96
- # -*- Check if the response is a tool call
97
- try:
98
- if response_is_tool_call and assistant_message_content != "":
99
- _tool_call_content = assistant_message_content.strip()
100
- _tool_call_list = json.loads(_tool_call_content)
101
- if isinstance(_tool_call_list, list):
102
- # Build tool calls
103
- _tool_calls: List[Dict[str, Any]] = []
104
- logger.debug(f"Building tool calls from {_tool_call_list}")
105
- for _tool_call in _tool_call_list:
106
- tool_call_name = _tool_call.get("name")
107
- tool_call_args = _tool_call.get("arguments")
108
- _function_def = {"name": tool_call_name}
109
- if tool_call_args is not None:
110
- _function_def["arguments"] = json.dumps(tool_call_args)
111
- _tool_calls.append(
112
- {
113
- "type": "function",
114
- "function": _function_def,
115
- }
116
- )
117
- assistant_message.tool_calls = _tool_calls
118
- except Exception:
119
- logger.warning(f"Could not parse tool calls from response: {assistant_message_content}")
120
- pass
121
-
122
- # -*- Update usage metrics
123
- # Add response time to metrics
124
- assistant_message.metrics["time"] = metrics.response_timer.elapsed
125
- if "response_times" not in self.metrics:
126
- self.metrics["response_times"] = []
127
- self.metrics["response_times"].append(metrics.response_timer.elapsed)
128
-
129
- # Add token usage to metrics
130
- logger.debug(f"Estimated completion tokens: {metrics.completion_tokens}")
131
- assistant_message.metrics["completion_tokens"] = metrics.completion_tokens
132
- if "completion_tokens" not in self.metrics:
133
- self.metrics["completion_tokens"] = metrics.completion_tokens
134
- else:
135
- self.metrics["completion_tokens"] += metrics.completion_tokens
136
-
137
- # -*- Add assistant message to messages
138
- messages.append(assistant_message)
139
- assistant_message.log()
140
- metrics.log()
141
-
142
- # -*- Parse and run tool calls
143
- if assistant_message.tool_calls is not None and len(assistant_message.tool_calls) > 0:
144
- tool_role: str = "tool"
145
- function_calls_to_run: List[FunctionCall] = []
146
- function_call_results: List[Message] = []
147
- for tool_call in assistant_message.tool_calls:
148
- _tool_call_id = tool_call.get("id")
149
- _function_call = get_function_call_for_tool_call(tool_call, self._functions)
150
- if _function_call is None:
151
- messages.append(
152
- Message(
153
- role=tool_role,
154
- tool_call_id=_tool_call_id,
155
- content="Could not find function to call.",
156
- )
157
- )
158
- continue
159
- if _function_call.error is not None:
160
- messages.append(
161
- Message(
162
- role=tool_role,
163
- tool_call_id=_tool_call_id,
164
- content=_function_call.error,
165
- )
166
- )
167
- continue
168
- function_calls_to_run.append(_function_call)
169
-
170
- if self.show_tool_calls:
171
- yield ModelResponse(content="\nRunning:")
172
- for _f in function_calls_to_run:
173
- yield ModelResponse(content=f"\n - {_f.get_call_str()}")
174
- yield ModelResponse(content="\n\n")
175
-
176
- for intermediate_model_response in self.run_function_calls(
177
- function_calls=function_calls_to_run, function_call_results=function_call_results, tool_role=tool_role
178
- ):
179
- yield intermediate_model_response
180
27
 
181
- if len(function_call_results) > 0:
182
- messages.extend(function_call_results)
183
- # -*- Yield new response using results of tool calls
184
- yield from self.response_stream(messages=messages)
185
- logger.debug("---------- Together Response End ----------")
28
+ def _get_client_params(self) -> Dict[str, Any]:
29
+ """
30
+ Returns client parameters for API requests, checking for TOGETHER_API_KEY.
31
+
32
+ Returns:
33
+ Dict[str, Any]: A dictionary of client parameters for API requests.
34
+ """
35
+ if not self.api_key:
36
+ self.api_key = getenv("TOGETHER_API_KEY")
37
+ if not self.api_key:
38
+ raise ModelAuthenticationError(
39
+ message="TOGETHER_API_KEY not set. Please set the TOGETHER_API_KEY environment variable.",
40
+ model_name=self.name,
41
+ )
42
+ return super()._get_client_params()
agno/models/utils.py ADDED
@@ -0,0 +1,266 @@
1
+ from typing import Optional, Union
2
+
3
+ from agno.models.base import Model
4
+
5
+
6
+ def _get_model_class(model_id: str, model_provider: str) -> Model:
7
+ if model_provider == "aimlapi":
8
+ from agno.models.aimlapi import AIMLAPI
9
+
10
+ return AIMLAPI(id=model_id)
11
+
12
+ elif model_provider == "anthropic":
13
+ from agno.models.anthropic import Claude
14
+
15
+ return Claude(id=model_id)
16
+
17
+ elif model_provider == "aws-bedrock":
18
+ from agno.models.aws import AwsBedrock
19
+
20
+ return AwsBedrock(id=model_id)
21
+
22
+ elif model_provider == "aws-claude":
23
+ from agno.models.aws import Claude as AWSClaude
24
+
25
+ return AWSClaude(id=model_id)
26
+
27
+ elif model_provider == "azure-ai-foundry":
28
+ from agno.models.azure import AzureAIFoundry
29
+
30
+ return AzureAIFoundry(id=model_id)
31
+
32
+ elif model_provider == "azure-openai":
33
+ from agno.models.azure import AzureOpenAI
34
+
35
+ return AzureOpenAI(id=model_id)
36
+
37
+ elif model_provider == "cerebras":
38
+ from agno.models.cerebras import Cerebras
39
+
40
+ return Cerebras(id=model_id)
41
+
42
+ elif model_provider == "cerebras-openai":
43
+ from agno.models.cerebras import CerebrasOpenAI
44
+
45
+ return CerebrasOpenAI(id=model_id)
46
+
47
+ elif model_provider == "cohere":
48
+ from agno.models.cohere import Cohere
49
+
50
+ return Cohere(id=model_id)
51
+
52
+ elif model_provider == "cometapi":
53
+ from agno.models.cometapi import CometAPI
54
+
55
+ return CometAPI(id=model_id)
56
+
57
+ elif model_provider == "dashscope":
58
+ from agno.models.dashscope import DashScope
59
+
60
+ return DashScope(id=model_id)
61
+
62
+ elif model_provider == "deepinfra":
63
+ from agno.models.deepinfra import DeepInfra
64
+
65
+ return DeepInfra(id=model_id)
66
+
67
+ elif model_provider == "deepseek":
68
+ from agno.models.deepseek import DeepSeek
69
+
70
+ return DeepSeek(id=model_id)
71
+
72
+ elif model_provider == "fireworks":
73
+ from agno.models.fireworks import Fireworks
74
+
75
+ return Fireworks(id=model_id)
76
+
77
+ elif model_provider == "google":
78
+ from agno.models.google import Gemini
79
+
80
+ return Gemini(id=model_id)
81
+
82
+ elif model_provider == "groq":
83
+ from agno.models.groq import Groq
84
+
85
+ return Groq(id=model_id)
86
+
87
+ elif model_provider == "huggingface":
88
+ from agno.models.huggingface import HuggingFace
89
+
90
+ return HuggingFace(id=model_id)
91
+
92
+ elif model_provider == "ibm":
93
+ from agno.models.ibm import WatsonX
94
+
95
+ return WatsonX(id=model_id)
96
+
97
+ elif model_provider == "internlm":
98
+ from agno.models.internlm import InternLM
99
+
100
+ return InternLM(id=model_id)
101
+
102
+ elif model_provider == "langdb":
103
+ from agno.models.langdb import LangDB
104
+
105
+ return LangDB(id=model_id)
106
+
107
+ elif model_provider == "litellm":
108
+ from agno.models.litellm import LiteLLM
109
+
110
+ return LiteLLM(id=model_id)
111
+
112
+ elif model_provider == "litellm-openai":
113
+ from agno.models.litellm import LiteLLMOpenAI
114
+
115
+ return LiteLLMOpenAI(id=model_id)
116
+
117
+ elif model_provider == "llama-cpp":
118
+ from agno.models.llama_cpp import LlamaCpp
119
+
120
+ return LlamaCpp(id=model_id)
121
+
122
+ elif model_provider == "llama-openai":
123
+ from agno.models.meta import LlamaOpenAI
124
+
125
+ return LlamaOpenAI(id=model_id)
126
+
127
+ elif model_provider == "lmstudio":
128
+ from agno.models.lmstudio import LMStudio
129
+
130
+ return LMStudio(id=model_id)
131
+
132
+ elif model_provider == "meta":
133
+ from agno.models.meta import Llama
134
+
135
+ return Llama(id=model_id)
136
+
137
+ elif model_provider == "mistral":
138
+ from agno.models.mistral import MistralChat
139
+
140
+ return MistralChat(id=model_id)
141
+
142
+ elif model_provider == "nebius":
143
+ from agno.models.nebius import Nebius
144
+
145
+ return Nebius(id=model_id)
146
+
147
+ elif model_provider == "nexus":
148
+ from agno.models.nexus import Nexus
149
+
150
+ return Nexus(id=model_id)
151
+
152
+ elif model_provider == "nvidia":
153
+ from agno.models.nvidia import Nvidia
154
+
155
+ return Nvidia(id=model_id)
156
+
157
+ elif model_provider == "ollama":
158
+ from agno.models.ollama import Ollama
159
+
160
+ return Ollama(id=model_id)
161
+
162
+ elif model_provider == "openai":
163
+ from agno.models.openai import OpenAIChat
164
+
165
+ return OpenAIChat(id=model_id)
166
+
167
+ elif model_provider == "openai-responses":
168
+ from agno.models.openai import OpenAIResponses
169
+
170
+ return OpenAIResponses(id=model_id)
171
+
172
+ elif model_provider == "openrouter":
173
+ from agno.models.openrouter import OpenRouter
174
+
175
+ return OpenRouter(id=model_id)
176
+
177
+ elif model_provider == "perplexity":
178
+ from agno.models.perplexity import Perplexity
179
+
180
+ return Perplexity(id=model_id)
181
+
182
+ elif model_provider == "portkey":
183
+ from agno.models.portkey import Portkey
184
+
185
+ return Portkey(id=model_id)
186
+
187
+ elif model_provider == "requesty":
188
+ from agno.models.requesty import Requesty
189
+
190
+ return Requesty(id=model_id)
191
+
192
+ elif model_provider == "sambanova":
193
+ from agno.models.sambanova import Sambanova
194
+
195
+ return Sambanova(id=model_id)
196
+
197
+ elif model_provider == "siliconflow":
198
+ from agno.models.siliconflow import Siliconflow
199
+
200
+ return Siliconflow(id=model_id)
201
+
202
+ elif model_provider == "together":
203
+ from agno.models.together import Together
204
+
205
+ return Together(id=model_id)
206
+
207
+ elif model_provider == "vercel":
208
+ from agno.models.vercel import V0
209
+
210
+ return V0(id=model_id)
211
+
212
+ elif model_provider == "vertexai-claude":
213
+ from agno.models.vertexai.claude import Claude as VertexAIClaude
214
+
215
+ return VertexAIClaude(id=model_id)
216
+
217
+ elif model_provider == "vllm":
218
+ from agno.models.vllm import VLLM
219
+
220
+ return VLLM(id=model_id)
221
+
222
+ elif model_provider == "xai":
223
+ from agno.models.xai import xAI
224
+
225
+ return xAI(id=model_id)
226
+
227
+ else:
228
+ raise ValueError(f"Model provider '{model_provider}' is not supported.")
229
+
230
+
231
+ def _parse_model_string(model_string: str) -> Model:
232
+ if not model_string or not isinstance(model_string, str):
233
+ raise ValueError(f"Model string must be a non-empty string, got: {model_string}")
234
+
235
+ if ":" not in model_string:
236
+ raise ValueError(
237
+ f"Invalid model string format: '{model_string}'. Model strings should be in format '<provider>:<model_id>' e.g. 'openai:gpt-4o'"
238
+ )
239
+
240
+ parts = model_string.split(":", 1)
241
+ if len(parts) != 2:
242
+ raise ValueError(
243
+ f"Invalid model string format: '{model_string}'. Model strings should be in format '<provider>:<model_id>' e.g. 'openai:gpt-4o'"
244
+ )
245
+
246
+ model_provider, model_id = parts
247
+ model_provider = model_provider.strip().lower()
248
+ model_id = model_id.strip()
249
+
250
+ if not model_provider or not model_id:
251
+ raise ValueError(
252
+ f"Invalid model string format: '{model_string}'. Model strings should be in format '<provider>:<model_id>' e.g. 'openai:gpt-4o'"
253
+ )
254
+
255
+ return _get_model_class(model_id, model_provider)
256
+
257
+
258
+ def get_model(model: Union[Model, str, None]) -> Optional[Model]:
259
+ if model is None:
260
+ return None
261
+ elif isinstance(model, Model):
262
+ return model
263
+ elif isinstance(model, str):
264
+ return _parse_model_string(model)
265
+ else:
266
+ raise ValueError("Model must be a Model instance, string, or None")
@@ -0,0 +1,3 @@
1
+ from agno.models.vercel.v0 import V0
2
+
3
+ __all__ = ["V0"]
@@ -0,0 +1,43 @@
1
+ from dataclasses import dataclass
2
+ from os import getenv
3
+ from typing import Any, Dict, Optional
4
+
5
+ from agno.exceptions import ModelAuthenticationError
6
+ from agno.models.openai.like import OpenAILike
7
+
8
+
9
+ @dataclass
10
+ class V0(OpenAILike):
11
+ """
12
+ Class for interacting with the v0 API.
13
+
14
+ Attributes:
15
+ id (str): The ID of the language model. Defaults to "v0-1.0-md".
16
+ name (str): The name of the API. Defaults to "v0".
17
+ provider (str): The provider of the API. Defaults to "v0".
18
+ api_key (Optional[str]): The API key for the v0 API.
19
+ base_url (Optional[str]): The base URL for the v0 API. Defaults to "https://v0.dev/chat/settings/keys".
20
+ """
21
+
22
+ id: str = "v0-1.0-md"
23
+ name: str = "v0"
24
+ provider: str = "Vercel"
25
+
26
+ api_key: Optional[str] = None
27
+ base_url: str = "https://api.v0.dev/v1/"
28
+
29
+ def _get_client_params(self) -> Dict[str, Any]:
30
+ """
31
+ Returns client parameters for API requests, checking for V0_API_KEY.
32
+
33
+ Returns:
34
+ Dict[str, Any]: A dictionary of client parameters for API requests.
35
+ """
36
+ if not self.api_key:
37
+ self.api_key = getenv("V0_API_KEY")
38
+ if not self.api_key:
39
+ raise ModelAuthenticationError(
40
+ message="V0_API_KEY not set. Please set the V0_API_KEY environment variable.",
41
+ model_name=self.name,
42
+ )
43
+ return super()._get_client_params()
@@ -1 +0,0 @@
1
- from agno.models.vertexai.gemini import Gemini