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,54 +0,0 @@
1
- import json
2
- from dataclasses import dataclass
3
- from os import getenv
4
- from typing import Any, Dict, List, Optional, Tuple
5
-
6
- from agno.embedder.base import Embedder
7
- from agno.utils.log import logger
8
-
9
- try:
10
- from huggingface_hub import InferenceClient, SentenceSimilarityInput
11
- except ImportError:
12
- logger.error("`huggingface-hub` not installed, please run `pip install huggingface-hub`")
13
- raise
14
-
15
-
16
- @dataclass
17
- class HuggingfaceCustomEmbedder(Embedder):
18
- """Huggingface Custom Embedder"""
19
-
20
- id: str = "jinaai/jina-embeddings-v2-base-code"
21
- api_key: Optional[str] = getenv("HUGGINGFACE_API_KEY")
22
- client_params: Optional[Dict[str, Any]] = None
23
- huggingface_client: Optional[InferenceClient] = None
24
-
25
- @property
26
- def client(self) -> InferenceClient:
27
- if self.huggingface_client:
28
- return self.huggingface_client
29
- _client_params: Dict[str, Any] = {}
30
- if self.api_key:
31
- _client_params["api_key"] = self.api_key
32
- if self.client_params:
33
- _client_params.update(self.client_params)
34
- return InferenceClient(**_client_params)
35
-
36
- def _response(self, text: str):
37
- _request_params: SentenceSimilarityInput = {
38
- "json": {"inputs": text},
39
- "model": self.id,
40
- }
41
- return self.client.post(**_request_params)
42
-
43
- def get_embedding(self, text: str) -> List[float]:
44
- response = self._response(text=text)
45
- try:
46
- decoded_string = response.decode("utf-8")
47
- return json.loads(decoded_string)
48
-
49
- except Exception as e:
50
- logger.warning(e)
51
- return []
52
-
53
- def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict]]:
54
- return self.get_embedding(text=text), None
agno/embedder/mistral.py DELETED
@@ -1,80 +0,0 @@
1
- from dataclasses import dataclass
2
- from os import getenv
3
- from typing import Any, Dict, List, Optional, Tuple
4
-
5
- from agno.embedder.base import Embedder
6
- from agno.utils.log import logger
7
-
8
- try:
9
- from mistralai import Mistral
10
- from mistralai.models.embeddingresponse import EmbeddingResponse
11
- except ImportError:
12
- raise ImportError("`mistralai` not installed")
13
-
14
-
15
- @dataclass
16
- class MistralEmbedder(Embedder):
17
- id: str = "mistral-embed"
18
- dimensions: int = 1024
19
- # -*- Request parameters
20
- request_params: Optional[Dict[str, Any]] = None
21
- # -*- Client parameters
22
- api_key: Optional[str] = getenv("MISTRAL_API_KEY")
23
- endpoint: Optional[str] = None
24
- max_retries: Optional[int] = None
25
- timeout: Optional[int] = None
26
- client_params: Optional[Dict[str, Any]] = None
27
- # -*- Provide the Mistral Client manually
28
- mistral_client: Optional[Mistral] = None
29
-
30
- @property
31
- def client(self) -> Mistral:
32
- if self.mistral_client:
33
- return self.mistral_client
34
-
35
- _client_params: Dict[str, Any] = {}
36
- if self.api_key:
37
- _client_params["api_key"] = self.api_key
38
- if self.endpoint:
39
- _client_params["endpoint"] = self.endpoint
40
- if self.max_retries:
41
- _client_params["max_retries"] = self.max_retries
42
- if self.timeout:
43
- _client_params["timeout"] = self.timeout
44
- if self.client_params:
45
- _client_params.update(self.client_params)
46
- return Mistral(**_client_params)
47
-
48
- def _response(self, text: str) -> EmbeddingResponse:
49
- _request_params: Dict[str, Any] = {
50
- "inputs": text,
51
- "model": self.id,
52
- }
53
- if self.request_params:
54
- _request_params.update(self.request_params)
55
- response = self.client.embeddings.create(**_request_params)
56
- if response is None:
57
- raise ValueError("Failed to get embedding response")
58
- return response
59
-
60
- def get_embedding(self, text: str) -> List[float]:
61
- try:
62
- response: EmbeddingResponse = self._response(text=text)
63
- if response.data and response.data[0].embedding:
64
- return response.data[0].embedding
65
- return []
66
- except Exception as e:
67
- logger.warning(f"Error getting embedding: {e}")
68
- return []
69
-
70
- def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Dict[str, Any]]:
71
- try:
72
- response: EmbeddingResponse = self._response(text=text)
73
- embedding: List[float] = (
74
- response.data[0].embedding if (response.data and response.data[0].embedding) else []
75
- )
76
- usage: Dict[str, Any] = response.usage.model_dump() if response.usage else {}
77
- return embedding, usage
78
- except Exception as e:
79
- logger.warning(f"Error getting embedding and usage: {e}")
80
- return [], {}
agno/embedder/ollama.py DELETED
@@ -1,57 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Any, Dict, List, Optional, Tuple
3
-
4
- from agno.embedder.base import Embedder
5
- from agno.utils.log import logger
6
-
7
- try:
8
- from ollama import Client as OllamaClient
9
- except (ModuleNotFoundError, ImportError):
10
- raise ImportError("`ollama` not installed. Please install using `pip install ollama`")
11
-
12
-
13
- @dataclass
14
- class OllamaEmbedder(Embedder):
15
- id: str = "openhermes"
16
- dimensions: int = 4096
17
- host: Optional[str] = None
18
- timeout: Optional[Any] = None
19
- options: Optional[Any] = None
20
- client_kwargs: Optional[Dict[str, Any]] = None
21
- ollama_client: Optional[OllamaClient] = None
22
-
23
- @property
24
- def client(self) -> OllamaClient:
25
- if self.ollama_client:
26
- return self.ollama_client
27
-
28
- _ollama_params: Dict[str, Any] = {}
29
- if self.host:
30
- _ollama_params["host"] = self.host
31
- if self.timeout:
32
- _ollama_params["timeout"] = self.timeout
33
- if self.client_kwargs:
34
- _ollama_params.update(self.client_kwargs)
35
- return OllamaClient(**_ollama_params)
36
-
37
- def _response(self, text: str) -> Dict[str, Any]:
38
- kwargs: Dict[str, Any] = {}
39
- if self.options is not None:
40
- kwargs["options"] = self.options
41
-
42
- return self.client.embeddings(prompt=text, model=self.id, **kwargs) # type: ignore
43
-
44
- def get_embedding(self, text: str) -> List[float]:
45
- try:
46
- response = self._response(text=text)
47
- if response is None:
48
- return []
49
- return response.get("embedding", [])
50
- except Exception as e:
51
- logger.warning(e)
52
- return []
53
-
54
- def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict]]:
55
- embedding = self.get_embedding(text=text)
56
- usage = None
57
- return embedding, usage
agno/embedder/openai.py DELETED
@@ -1,74 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Any, Dict, List, Optional, Tuple
3
-
4
- from typing_extensions import Literal
5
-
6
- from agno.embedder.base import Embedder
7
- from agno.utils.log import logger
8
-
9
- try:
10
- from openai import OpenAI as OpenAIClient
11
- from openai.types.create_embedding_response import CreateEmbeddingResponse
12
- except ImportError:
13
- raise ImportError("`openai` not installed")
14
-
15
-
16
- @dataclass
17
- class OpenAIEmbedder(Embedder):
18
- id: str = "text-embedding-3-small"
19
- dimensions: int = 1536
20
- encoding_format: Literal["float", "base64"] = "float"
21
- user: Optional[str] = None
22
- api_key: Optional[str] = None
23
- organization: Optional[str] = None
24
- base_url: Optional[str] = None
25
- request_params: Optional[Dict[str, Any]] = None
26
- client_params: Optional[Dict[str, Any]] = None
27
- openai_client: Optional[OpenAIClient] = None
28
-
29
- @property
30
- def client(self) -> OpenAIClient:
31
- if self.openai_client:
32
- return self.openai_client
33
-
34
- _client_params: Dict[str, Any] = {}
35
- if self.api_key:
36
- _client_params["api_key"] = self.api_key
37
- if self.organization:
38
- _client_params["organization"] = self.organization
39
- if self.base_url:
40
- _client_params["base_url"] = self.base_url
41
- if self.client_params:
42
- _client_params.update(self.client_params)
43
- return OpenAIClient(**_client_params)
44
-
45
- def response(self, text: str) -> CreateEmbeddingResponse:
46
- _request_params: Dict[str, Any] = {
47
- "input": text,
48
- "model": self.id,
49
- "encoding_format": self.encoding_format,
50
- }
51
- if self.user is not None:
52
- _request_params["user"] = self.user
53
- if self.id.startswith("text-embedding-3"):
54
- _request_params["dimensions"] = self.dimensions
55
- if self.request_params:
56
- _request_params.update(self.request_params)
57
- return self.client.embeddings.create(**_request_params)
58
-
59
- def get_embedding(self, text: str) -> List[float]:
60
- response: CreateEmbeddingResponse = self.response(text=text)
61
- try:
62
- return response.data[0].embedding
63
- except Exception as e:
64
- logger.warning(e)
65
- return []
66
-
67
- def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict]]:
68
- response: CreateEmbeddingResponse = self.response(text=text)
69
-
70
- embedding = response.data[0].embedding
71
- usage = response.usage
72
- if usage:
73
- return embedding, usage.model_dump()
74
- return embedding, None
@@ -1,38 +0,0 @@
1
- import platform
2
- from dataclasses import dataclass
3
- from typing import Dict, List, Optional, Tuple, Union
4
-
5
- from agno.embedder.base import Embedder
6
- from agno.utils.log import logger
7
-
8
- try:
9
- from sentence_transformers import SentenceTransformer
10
-
11
- if platform.system() == "Windows":
12
- import numpy as np
13
-
14
- numpy_version = np.__version__
15
- if numpy_version.startswith("2"):
16
- raise RuntimeError(
17
- "Incompatible NumPy version detected. Please install NumPy 1.x by running 'pip install numpy<2'."
18
- )
19
- except ImportError:
20
- raise ImportError("sentence-transformers not installed, please run pip install sentence-transformers")
21
-
22
-
23
- @dataclass
24
- class SentenceTransformerEmbedder(Embedder):
25
- id: str = "sentence-transformers/all-MiniLM-L6-v2"
26
- sentence_transformer_client: Optional[SentenceTransformer] = None
27
-
28
- def get_embedding(self, text: Union[str, List[str]]) -> List[float]:
29
- model = SentenceTransformer(model_name_or_path=self.id)
30
- embedding = model.encode(text)
31
- try:
32
- return embedding # type: ignore
33
- except Exception as e:
34
- logger.warning(e)
35
- return []
36
-
37
- def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict]]:
38
- return self.get_embedding(text=text), None
agno/embedder/voyageai.py DELETED
@@ -1,64 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Any, Dict, List, Optional, Tuple
3
-
4
- from agno.embedder.base import Embedder
5
- from agno.utils.log import logger
6
-
7
- try:
8
- from voyageai import Client
9
- from voyageai.object import EmbeddingsObject
10
- except ImportError:
11
- raise ImportError("`voyageai` not installed")
12
-
13
-
14
- @dataclass
15
- class VoyageAIEmbedder(Embedder):
16
- id: str = "voyage-2"
17
- dimensions: int = 1024
18
- request_params: Optional[Dict[str, Any]] = None
19
- api_key: Optional[str] = None
20
- base_url: str = "https://api.voyageai.com/v1/embeddings"
21
- max_retries: Optional[int] = None
22
- timeout: Optional[float] = None
23
- client_params: Optional[Dict[str, Any]] = None
24
- voyage_client: Optional[Client] = None
25
-
26
- @property
27
- def client(self) -> Client:
28
- if self.voyage_client:
29
- return self.voyage_client
30
-
31
- _client_params: Dict[str, Any] = {}
32
- if self.api_key:
33
- _client_params["api_key"] = self.api_key
34
- if self.max_retries:
35
- _client_params["max_retries"] = self.max_retries
36
- if self.timeout:
37
- _client_params["timeout"] = self.timeout
38
- if self.client_params:
39
- _client_params.update(self.client_params)
40
- return Client(**_client_params)
41
-
42
- def _response(self, text: str) -> EmbeddingsObject:
43
- _request_params: Dict[str, Any] = {
44
- "texts": [text],
45
- "model": self.id,
46
- }
47
- if self.request_params:
48
- _request_params.update(self.request_params)
49
- return self.client.embed(**_request_params)
50
-
51
- def get_embedding(self, text: str) -> List[float]:
52
- response: EmbeddingsObject = self._response(text=text)
53
- try:
54
- return response.embeddings[0]
55
- except Exception as e:
56
- logger.warning(e)
57
- return []
58
-
59
- def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict]]:
60
- response: EmbeddingsObject = self._response(text=text)
61
-
62
- embedding = response.embeddings[0]
63
- usage = {"total_tokens": response.total_tokens}
64
- return embedding, usage
agno/eval/perf.py DELETED
@@ -1,201 +0,0 @@
1
- from dataclasses import asdict, dataclass, field
2
- from os import getenv
3
- from pathlib import Path
4
- from typing import TYPE_CHECKING, Callable, List, Optional
5
- from uuid import uuid4
6
-
7
- from memory_profiler import memory_usage
8
-
9
- from agno.utils.log import logger, set_log_level_to_debug, set_log_level_to_info
10
- from agno.utils.timer import Timer
11
-
12
- if TYPE_CHECKING:
13
- from rich.console import Console
14
-
15
-
16
- @dataclass
17
- class PerfResult:
18
- # Run time performance in seconds
19
- run_times: List[float] = field(default_factory=list)
20
- avg_run_time: float = field(init=False)
21
- min_run_time: float = field(init=False)
22
- max_run_time: float = field(init=False)
23
- std_dev_run_time: float = field(init=False)
24
-
25
- # Memory performance in MiB
26
- memory_usages: List[float] = field(default_factory=list)
27
- avg_memory_usage: float = field(init=False)
28
- min_memory_usage: float = field(init=False)
29
- max_memory_usage: float = field(init=False)
30
- std_dev_memory_usage: float = field(init=False)
31
-
32
- def __post_init__(self):
33
- self.compute_stats()
34
-
35
- def compute_stats(self):
36
- import statistics
37
-
38
- if self.run_times:
39
- self.avg_run_time = statistics.mean(self.run_times)
40
- self.min_run_time = min(self.run_times)
41
- self.max_run_time = max(self.run_times)
42
- self.std_dev_run_time = statistics.stdev(self.run_times) if len(self.run_times) > 1 else 0
43
-
44
- if self.memory_usages:
45
- self.avg_memory_usage = statistics.mean(self.memory_usages)
46
- self.min_memory_usage = min(self.memory_usages)
47
- self.max_memory_usage = max(self.memory_usages)
48
- self.std_dev_memory_usage = statistics.stdev(self.memory_usages) if len(self.memory_usages) > 1 else 0
49
-
50
- def print_summary(self, console: Optional["Console"] = None):
51
- from rich.console import Console
52
- from rich.table import Table
53
-
54
- if console is None:
55
- console = Console()
56
-
57
- # Create performance table
58
- perf_table = Table(title="Performance Summary", show_header=True, header_style="bold magenta")
59
- perf_table.add_column("Metric", style="cyan")
60
- perf_table.add_column("Time (seconds)", style="green")
61
- perf_table.add_column("Memory (MiB)", style="yellow")
62
-
63
- # Add rows
64
- perf_table.add_row("Average", f"{self.avg_run_time:.6f}", f"{self.avg_memory_usage:.2f}")
65
- perf_table.add_row("Minimum", f"{self.min_run_time:.6f}", f"{self.min_memory_usage:.2f}")
66
- perf_table.add_row("Maximum", f"{self.max_run_time:.6f}", f"{self.max_memory_usage:.2f}")
67
- perf_table.add_row("Std Dev", f"{self.std_dev_run_time:.6f}", f"{self.std_dev_memory_usage:.2f}")
68
-
69
- console.print(perf_table)
70
-
71
- def print_results(self, console: Optional["Console"] = None):
72
- from rich.console import Console
73
- from rich.table import Table
74
-
75
- if console is None:
76
- console = Console()
77
-
78
- # Create runs table
79
- results_table = Table(title="Individual Runs", show_header=True, header_style="bold magenta")
80
- results_table.add_column("Run #", style="cyan")
81
- results_table.add_column("Time (seconds)", style="green")
82
- results_table.add_column("Memory (MiB)", style="yellow")
83
-
84
- # Add rows
85
- for i in range(len(self.run_times)):
86
- results_table.add_row(str(i + 1), f"{self.run_times[i]:.6f}", f"{self.memory_usages[i]:.2f}")
87
-
88
- console.print(results_table)
89
-
90
-
91
- @dataclass
92
- class PerfEval:
93
- """Evaluate the performance of a function."""
94
-
95
- # Function to evaluate
96
- func: Callable
97
-
98
- # Evaluation name
99
- name: Optional[str] = None
100
- # Evaluation UUID (autogenerated if not set)
101
- eval_id: Optional[str] = None
102
-
103
- # Number of iterations to run
104
- num_iterations: int = 3
105
- # Result of the evaluation
106
- result: Optional[PerfResult] = None
107
-
108
- # Print summary of results
109
- print_summary: bool = False
110
- # Print detailed results
111
- print_results: bool = False
112
- # Save the result to a file
113
- save_result_to_file: Optional[str] = None
114
-
115
- # debug_mode=True enables debug logs
116
- debug_mode: bool = False
117
-
118
- def set_eval_id(self) -> str:
119
- if self.eval_id is None:
120
- self.eval_id = str(uuid4())
121
- logger.debug(f"*********** Evaluation ID: {self.eval_id} ***********")
122
- return self.eval_id
123
-
124
- def set_debug_mode(self) -> None:
125
- if self.debug_mode or getenv("AGNO_DEBUG", "false").lower() == "true":
126
- self.debug_mode = True
127
- set_log_level_to_debug()
128
- logger.debug("Debug logs enabled")
129
- else:
130
- set_log_level_to_info()
131
-
132
- def run(self, *, print_summary: bool = False, print_results: bool = False) -> PerfResult:
133
- from rich.console import Console
134
- from rich.live import Live
135
- from rich.status import Status
136
-
137
- run_times = []
138
- memory_usages = []
139
- self.set_eval_id()
140
- self.set_debug_mode()
141
- self.print_results = print_results
142
- self.print_summary = print_summary
143
-
144
- # Add a spinner while running the evaluations
145
- console = Console()
146
- with Live(console=console, transient=True) as live_log:
147
- # Measure run time
148
- for i in range(self.num_iterations):
149
- status = Status(
150
- f"Running run time evaluation {i + 1}...", spinner="dots", speed=1.0, refresh_per_second=10
151
- )
152
- live_log.update(status)
153
-
154
- timer = Timer()
155
- # Start the timer
156
- timer.start()
157
- # Run the function
158
- self.func()
159
- # Stop the timer
160
- timer.stop()
161
- # Append the time taken
162
- run_times.append(timer.elapsed)
163
- logger.debug(f"\nRun {i + 1}:")
164
- logger.debug(f"Time taken: {timer.elapsed:.6f} seconds")
165
- status.stop()
166
-
167
- # Measure memory usage
168
- for i in range(self.num_iterations):
169
- status = Status(
170
- f"Running memory usage evaluation {i + 1}...", spinner="dots", speed=1.0, refresh_per_second=10
171
- )
172
- live_log.update(status)
173
- mem_usage = memory_usage((self.func, (), {}), interval=0.1, max_iterations=1, max_usage=True)
174
- memory_usages.append(mem_usage)
175
- logger.debug(f"\nRun {i + 1}:")
176
- logger.debug(f"Memory usage: {mem_usage} MiB")
177
- status.stop()
178
-
179
- # Create and store the result
180
- self.result = PerfResult(run_times=run_times, memory_usages=memory_usages)
181
-
182
- # -*- Save result to file if save_result_to_file is set
183
- if self.save_result_to_file is not None and self.result is not None:
184
- try:
185
- import json
186
-
187
- fn_path = Path(self.save_result_to_file.format(name=self.name, eval_id=self.eval_id))
188
- if not fn_path.parent.exists():
189
- fn_path.parent.mkdir(parents=True, exist_ok=True)
190
- fn_path.write_text(json.dumps(asdict(self.result), indent=4))
191
- except Exception as e:
192
- logger.warning(f"Failed to save result to file: {e}")
193
-
194
- # Show results
195
- if self.print_results:
196
- self.result.print_results(console)
197
- if self.print_summary or self.print_results:
198
- self.result.print_summary(console)
199
-
200
- logger.debug(f"*********** Evaluation End: {self.eval_id} ***********")
201
- return self.result
agno/file/__init__.py DELETED
@@ -1 +0,0 @@
1
- from agno.file.file import File
agno/file/file.py DELETED
@@ -1,16 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Any, List, Optional
3
-
4
- from agno.utils.common import dataclass_to_dict
5
-
6
-
7
- @dataclass
8
- class File:
9
- name: Optional[str] = None
10
- description: Optional[str] = None
11
- columns: Optional[List[str]] = None
12
- path: Optional[str] = None
13
- type: str = "FILE"
14
-
15
- def get_metadata(self) -> dict[str, Any]:
16
- return dataclass_to_dict(self, exclude_none=True)
agno/file/local/csv.py DELETED
@@ -1,32 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Any
3
-
4
- from agno.file import File
5
- from agno.utils.common import dataclass_to_dict
6
- from agno.utils.log import logger
7
-
8
-
9
- @dataclass
10
- class CsvFile(File):
11
- path: str = "" # type: ignore
12
- type: str = "CSV"
13
-
14
- def get_metadata(self) -> dict[str, Any]:
15
- if self.name is None:
16
- from pathlib import Path
17
-
18
- self.name = Path(self.path).name
19
-
20
- if self.columns is None:
21
- try:
22
- # Get the columns from the file
23
- import csv
24
-
25
- with open(self.path) as csvfile:
26
- dict_reader = csv.DictReader(csvfile)
27
- if dict_reader.fieldnames is not None:
28
- self.columns = list(dict_reader.fieldnames)
29
- except Exception as e:
30
- logger.debug(f"Error getting columns from file: {e}")
31
-
32
- return dataclass_to_dict(self, exclude_none=True)
agno/file/local/txt.py DELETED
@@ -1,19 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Any
3
-
4
- from agno.file import File
5
- from agno.utils.common import dataclass_to_dict
6
-
7
-
8
- @dataclass
9
- class TextFile(File):
10
- path: str = "" # type: ignore
11
- type: str = "TEXT"
12
-
13
- def get_metadata(self) -> dict[str, Any]:
14
- if self.name is None:
15
- from pathlib import Path
16
-
17
- self.name = Path(self.path).name
18
-
19
- return dataclass_to_dict(self, exclude_none=True)