agno 1.8.1__py3-none-any.whl → 2.0.0a1__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 (580) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +19 -27
  3. agno/agent/agent.py +2778 -4123
  4. agno/api/agent.py +9 -65
  5. agno/api/api.py +5 -46
  6. agno/api/evals.py +6 -17
  7. agno/api/os.py +17 -0
  8. agno/api/routes.py +6 -41
  9. agno/api/schemas/__init__.py +9 -0
  10. agno/api/schemas/agent.py +5 -21
  11. agno/api/schemas/evals.py +7 -16
  12. agno/api/schemas/os.py +14 -0
  13. agno/api/schemas/team.py +5 -21
  14. agno/api/schemas/utils.py +21 -0
  15. agno/api/schemas/workflows.py +11 -7
  16. agno/api/settings.py +53 -0
  17. agno/api/team.py +9 -64
  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/db/__init__.py +24 -0
  25. agno/db/base.py +245 -0
  26. agno/db/dynamo/__init__.py +3 -0
  27. agno/db/dynamo/dynamo.py +1749 -0
  28. agno/db/dynamo/schemas.py +278 -0
  29. agno/db/dynamo/utils.py +684 -0
  30. agno/db/firestore/__init__.py +3 -0
  31. agno/db/firestore/firestore.py +1438 -0
  32. agno/db/firestore/schemas.py +130 -0
  33. agno/db/firestore/utils.py +278 -0
  34. agno/db/gcs_json/__init__.py +3 -0
  35. agno/db/gcs_json/gcs_json_db.py +1001 -0
  36. agno/db/gcs_json/utils.py +194 -0
  37. agno/db/in_memory/__init__.py +3 -0
  38. agno/db/in_memory/in_memory_db.py +888 -0
  39. agno/db/in_memory/utils.py +172 -0
  40. agno/db/json/__init__.py +3 -0
  41. agno/db/json/json_db.py +1051 -0
  42. agno/db/json/utils.py +196 -0
  43. agno/db/migrations/v1_to_v2.py +162 -0
  44. agno/db/mongo/__init__.py +3 -0
  45. agno/db/mongo/mongo.py +1417 -0
  46. agno/db/mongo/schemas.py +77 -0
  47. agno/db/mongo/utils.py +204 -0
  48. agno/db/mysql/__init__.py +3 -0
  49. agno/db/mysql/mysql.py +1719 -0
  50. agno/db/mysql/schemas.py +124 -0
  51. agno/db/mysql/utils.py +298 -0
  52. agno/db/postgres/__init__.py +3 -0
  53. agno/db/postgres/postgres.py +1720 -0
  54. agno/db/postgres/schemas.py +124 -0
  55. agno/db/postgres/utils.py +281 -0
  56. agno/db/redis/__init__.py +3 -0
  57. agno/db/redis/redis.py +1371 -0
  58. agno/db/redis/schemas.py +109 -0
  59. agno/db/redis/utils.py +288 -0
  60. agno/db/schemas/__init__.py +3 -0
  61. agno/db/schemas/evals.py +33 -0
  62. agno/db/schemas/knowledge.py +40 -0
  63. agno/db/schemas/memory.py +46 -0
  64. agno/db/singlestore/__init__.py +3 -0
  65. agno/db/singlestore/schemas.py +116 -0
  66. agno/db/singlestore/singlestore.py +1722 -0
  67. agno/db/singlestore/utils.py +327 -0
  68. agno/db/sqlite/__init__.py +3 -0
  69. agno/db/sqlite/schemas.py +119 -0
  70. agno/db/sqlite/sqlite.py +1680 -0
  71. agno/db/sqlite/utils.py +269 -0
  72. agno/db/utils.py +88 -0
  73. agno/eval/__init__.py +14 -0
  74. agno/eval/accuracy.py +142 -43
  75. agno/eval/performance.py +88 -23
  76. agno/eval/reliability.py +73 -20
  77. agno/eval/utils.py +23 -13
  78. agno/integrations/discord/__init__.py +3 -0
  79. agno/{app → integrations}/discord/client.py +10 -10
  80. agno/knowledge/__init__.py +2 -2
  81. agno/{document → knowledge}/chunking/agentic.py +2 -2
  82. agno/{document → knowledge}/chunking/document.py +2 -2
  83. agno/{document → knowledge}/chunking/fixed.py +3 -3
  84. agno/{document → knowledge}/chunking/markdown.py +2 -2
  85. agno/{document → knowledge}/chunking/recursive.py +2 -2
  86. agno/{document → knowledge}/chunking/row.py +2 -2
  87. agno/knowledge/chunking/semantic.py +59 -0
  88. agno/knowledge/chunking/strategy.py +121 -0
  89. agno/knowledge/content.py +74 -0
  90. agno/knowledge/document/__init__.py +5 -0
  91. agno/{document → knowledge/document}/base.py +12 -2
  92. agno/knowledge/embedder/__init__.py +5 -0
  93. agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
  94. agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
  95. agno/{embedder → knowledge/embedder}/base.py +6 -0
  96. agno/{embedder → knowledge/embedder}/cohere.py +72 -1
  97. agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
  98. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  99. agno/{embedder → knowledge/embedder}/google.py +74 -1
  100. agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
  101. agno/{embedder → knowledge/embedder}/jina.py +48 -2
  102. agno/knowledge/embedder/langdb.py +22 -0
  103. agno/knowledge/embedder/mistral.py +139 -0
  104. agno/{embedder → knowledge/embedder}/nebius.py +1 -1
  105. agno/{embedder → knowledge/embedder}/ollama.py +54 -3
  106. agno/knowledge/embedder/openai.py +223 -0
  107. agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
  108. agno/{embedder → knowledge/embedder}/together.py +1 -1
  109. agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
  110. agno/knowledge/knowledge.py +1515 -0
  111. agno/knowledge/reader/__init__.py +7 -0
  112. agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
  113. agno/knowledge/reader/base.py +88 -0
  114. agno/{document → knowledge}/reader/csv_reader.py +68 -15
  115. agno/knowledge/reader/docx_reader.py +83 -0
  116. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  117. agno/knowledge/reader/gcs_reader.py +67 -0
  118. agno/{document → knowledge}/reader/json_reader.py +30 -9
  119. agno/{document → knowledge}/reader/markdown_reader.py +36 -9
  120. agno/{document → knowledge}/reader/pdf_reader.py +79 -21
  121. agno/knowledge/reader/reader_factory.py +275 -0
  122. agno/knowledge/reader/s3_reader.py +171 -0
  123. agno/{document → knowledge}/reader/text_reader.py +31 -10
  124. agno/knowledge/reader/url_reader.py +84 -0
  125. agno/knowledge/reader/web_search_reader.py +389 -0
  126. agno/{document → knowledge}/reader/website_reader.py +37 -10
  127. agno/knowledge/reader/wikipedia_reader.py +59 -0
  128. agno/knowledge/reader/youtube_reader.py +78 -0
  129. agno/knowledge/remote_content/remote_content.py +88 -0
  130. agno/{reranker → knowledge/reranker}/base.py +1 -1
  131. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  132. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  133. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  134. agno/knowledge/types.py +30 -0
  135. agno/knowledge/utils.py +169 -0
  136. agno/memory/__init__.py +2 -10
  137. agno/memory/manager.py +1003 -148
  138. agno/models/aimlapi/__init__.py +2 -2
  139. agno/models/aimlapi/aimlapi.py +6 -6
  140. agno/models/anthropic/claude.py +129 -82
  141. agno/models/aws/bedrock.py +107 -175
  142. agno/models/aws/claude.py +64 -18
  143. agno/models/azure/ai_foundry.py +73 -23
  144. agno/models/base.py +347 -287
  145. agno/models/cerebras/cerebras.py +84 -27
  146. agno/models/cohere/chat.py +106 -98
  147. agno/models/google/gemini.py +100 -42
  148. agno/models/groq/groq.py +97 -35
  149. agno/models/huggingface/huggingface.py +92 -27
  150. agno/models/ibm/watsonx.py +72 -13
  151. agno/models/litellm/chat.py +85 -13
  152. agno/models/message.py +38 -144
  153. agno/models/meta/llama.py +85 -49
  154. agno/models/metrics.py +120 -0
  155. agno/models/mistral/mistral.py +90 -21
  156. agno/models/ollama/__init__.py +0 -2
  157. agno/models/ollama/chat.py +84 -46
  158. agno/models/openai/chat.py +121 -23
  159. agno/models/openai/responses.py +178 -105
  160. agno/models/perplexity/perplexity.py +26 -2
  161. agno/models/portkey/portkey.py +0 -7
  162. agno/models/response.py +14 -8
  163. agno/models/utils.py +20 -0
  164. agno/models/vercel/__init__.py +2 -2
  165. agno/models/vercel/v0.py +1 -1
  166. agno/models/vllm/__init__.py +2 -2
  167. agno/models/vllm/vllm.py +3 -3
  168. agno/models/xai/xai.py +10 -10
  169. agno/os/__init__.py +3 -0
  170. agno/os/app.py +393 -0
  171. agno/os/auth.py +47 -0
  172. agno/os/config.py +103 -0
  173. agno/os/interfaces/agui/__init__.py +3 -0
  174. agno/os/interfaces/agui/agui.py +31 -0
  175. agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
  176. agno/{app → os/interfaces}/agui/utils.py +65 -28
  177. agno/os/interfaces/base.py +21 -0
  178. agno/os/interfaces/slack/__init__.py +3 -0
  179. agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
  180. agno/os/interfaces/slack/slack.py +33 -0
  181. agno/os/interfaces/whatsapp/__init__.py +3 -0
  182. agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
  183. agno/os/interfaces/whatsapp/whatsapp.py +30 -0
  184. agno/os/router.py +843 -0
  185. agno/os/routers/__init__.py +3 -0
  186. agno/os/routers/evals/__init__.py +3 -0
  187. agno/os/routers/evals/evals.py +204 -0
  188. agno/os/routers/evals/schemas.py +142 -0
  189. agno/os/routers/evals/utils.py +161 -0
  190. agno/os/routers/knowledge/__init__.py +3 -0
  191. agno/os/routers/knowledge/knowledge.py +413 -0
  192. agno/os/routers/knowledge/schemas.py +118 -0
  193. agno/os/routers/memory/__init__.py +3 -0
  194. agno/os/routers/memory/memory.py +179 -0
  195. agno/os/routers/memory/schemas.py +58 -0
  196. agno/os/routers/metrics/__init__.py +3 -0
  197. agno/os/routers/metrics/metrics.py +58 -0
  198. agno/os/routers/metrics/schemas.py +47 -0
  199. agno/os/routers/session/__init__.py +3 -0
  200. agno/os/routers/session/session.py +163 -0
  201. agno/os/schema.py +892 -0
  202. agno/{app/playground → os}/settings.py +8 -15
  203. agno/os/utils.py +270 -0
  204. agno/reasoning/azure_ai_foundry.py +4 -4
  205. agno/reasoning/deepseek.py +4 -4
  206. agno/reasoning/default.py +6 -11
  207. agno/reasoning/groq.py +4 -4
  208. agno/reasoning/helpers.py +4 -6
  209. agno/reasoning/ollama.py +4 -4
  210. agno/reasoning/openai.py +4 -4
  211. agno/run/{response.py → agent.py} +144 -72
  212. agno/run/base.py +44 -58
  213. agno/run/cancel.py +83 -0
  214. agno/run/team.py +133 -77
  215. agno/run/workflow.py +537 -12
  216. agno/session/__init__.py +10 -0
  217. agno/session/agent.py +244 -0
  218. agno/session/summary.py +225 -0
  219. agno/session/team.py +262 -0
  220. agno/{storage/session/v2 → session}/workflow.py +47 -24
  221. agno/team/__init__.py +15 -16
  222. agno/team/team.py +2961 -4253
  223. agno/tools/agentql.py +14 -5
  224. agno/tools/airflow.py +9 -4
  225. agno/tools/api.py +7 -3
  226. agno/tools/apify.py +2 -46
  227. agno/tools/arxiv.py +8 -3
  228. agno/tools/aws_lambda.py +7 -5
  229. agno/tools/aws_ses.py +7 -1
  230. agno/tools/baidusearch.py +4 -1
  231. agno/tools/bitbucket.py +4 -4
  232. agno/tools/brandfetch.py +14 -11
  233. agno/tools/bravesearch.py +4 -1
  234. agno/tools/brightdata.py +42 -22
  235. agno/tools/browserbase.py +13 -4
  236. agno/tools/calcom.py +12 -10
  237. agno/tools/calculator.py +10 -27
  238. agno/tools/cartesia.py +18 -13
  239. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  240. agno/tools/confluence.py +8 -8
  241. agno/tools/crawl4ai.py +7 -1
  242. agno/tools/csv_toolkit.py +9 -8
  243. agno/tools/dalle.py +18 -11
  244. agno/tools/daytona.py +13 -16
  245. agno/tools/decorator.py +6 -3
  246. agno/tools/desi_vocal.py +16 -7
  247. agno/tools/discord.py +11 -8
  248. agno/tools/docker.py +30 -42
  249. agno/tools/duckdb.py +34 -53
  250. agno/tools/duckduckgo.py +8 -7
  251. agno/tools/e2b.py +61 -61
  252. agno/tools/eleven_labs.py +35 -28
  253. agno/tools/email.py +4 -1
  254. agno/tools/evm.py +7 -1
  255. agno/tools/exa.py +19 -14
  256. agno/tools/fal.py +29 -29
  257. agno/tools/file.py +9 -8
  258. agno/tools/financial_datasets.py +25 -44
  259. agno/tools/firecrawl.py +22 -22
  260. agno/tools/function.py +68 -17
  261. agno/tools/giphy.py +22 -10
  262. agno/tools/github.py +48 -126
  263. agno/tools/gmail.py +45 -61
  264. agno/tools/google_bigquery.py +7 -6
  265. agno/tools/google_maps.py +11 -26
  266. agno/tools/googlesearch.py +7 -2
  267. agno/tools/googlesheets.py +21 -17
  268. agno/tools/hackernews.py +9 -5
  269. agno/tools/jina.py +5 -4
  270. agno/tools/jira.py +18 -9
  271. agno/tools/knowledge.py +31 -32
  272. agno/tools/linear.py +18 -33
  273. agno/tools/linkup.py +5 -1
  274. agno/tools/local_file_system.py +8 -5
  275. agno/tools/lumalab.py +31 -19
  276. agno/tools/mem0.py +18 -12
  277. agno/tools/memori.py +14 -10
  278. agno/tools/mlx_transcribe.py +3 -2
  279. agno/tools/models/azure_openai.py +32 -14
  280. agno/tools/models/gemini.py +58 -31
  281. agno/tools/models/groq.py +29 -20
  282. agno/tools/models/nebius.py +27 -11
  283. agno/tools/models_labs.py +39 -15
  284. agno/tools/moviepy_video.py +7 -6
  285. agno/tools/neo4j.py +10 -8
  286. agno/tools/newspaper.py +7 -2
  287. agno/tools/newspaper4k.py +8 -3
  288. agno/tools/openai.py +57 -26
  289. agno/tools/openbb.py +12 -11
  290. agno/tools/opencv.py +62 -46
  291. agno/tools/openweather.py +14 -12
  292. agno/tools/pandas.py +11 -3
  293. agno/tools/postgres.py +4 -12
  294. agno/tools/pubmed.py +4 -1
  295. agno/tools/python.py +9 -22
  296. agno/tools/reasoning.py +35 -27
  297. agno/tools/reddit.py +11 -26
  298. agno/tools/replicate.py +54 -41
  299. agno/tools/resend.py +4 -1
  300. agno/tools/scrapegraph.py +15 -14
  301. agno/tools/searxng.py +10 -23
  302. agno/tools/serpapi.py +6 -3
  303. agno/tools/serper.py +13 -4
  304. agno/tools/shell.py +9 -2
  305. agno/tools/slack.py +12 -11
  306. agno/tools/sleep.py +3 -2
  307. agno/tools/spider.py +24 -4
  308. agno/tools/sql.py +7 -6
  309. agno/tools/tavily.py +6 -4
  310. agno/tools/telegram.py +12 -4
  311. agno/tools/todoist.py +11 -31
  312. agno/tools/toolkit.py +1 -1
  313. agno/tools/trafilatura.py +22 -6
  314. agno/tools/trello.py +9 -22
  315. agno/tools/twilio.py +10 -3
  316. agno/tools/user_control_flow.py +6 -1
  317. agno/tools/valyu.py +34 -5
  318. agno/tools/visualization.py +19 -28
  319. agno/tools/webbrowser.py +4 -3
  320. agno/tools/webex.py +11 -7
  321. agno/tools/website.py +15 -46
  322. agno/tools/webtools.py +12 -4
  323. agno/tools/whatsapp.py +5 -9
  324. agno/tools/wikipedia.py +20 -13
  325. agno/tools/x.py +14 -13
  326. agno/tools/yfinance.py +13 -40
  327. agno/tools/youtube.py +26 -20
  328. agno/tools/zendesk.py +7 -2
  329. agno/tools/zep.py +10 -7
  330. agno/tools/zoom.py +10 -9
  331. agno/utils/common.py +1 -19
  332. agno/utils/events.py +95 -118
  333. agno/utils/knowledge.py +29 -0
  334. agno/utils/log.py +2 -2
  335. agno/utils/mcp.py +11 -5
  336. agno/utils/media.py +39 -0
  337. agno/utils/message.py +12 -1
  338. agno/utils/models/claude.py +6 -4
  339. agno/utils/models/mistral.py +8 -7
  340. agno/utils/models/schema_utils.py +3 -3
  341. agno/utils/pprint.py +33 -32
  342. agno/utils/print_response/agent.py +779 -0
  343. agno/utils/print_response/team.py +1565 -0
  344. agno/utils/print_response/workflow.py +1451 -0
  345. agno/utils/prompts.py +14 -14
  346. agno/utils/reasoning.py +87 -0
  347. agno/utils/response.py +42 -42
  348. agno/utils/string.py +8 -22
  349. agno/utils/team.py +50 -0
  350. agno/utils/timer.py +2 -2
  351. agno/vectordb/base.py +33 -21
  352. agno/vectordb/cassandra/cassandra.py +287 -23
  353. agno/vectordb/chroma/chromadb.py +482 -59
  354. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  355. agno/vectordb/couchbase/couchbase.py +309 -29
  356. agno/vectordb/lancedb/lance_db.py +360 -21
  357. agno/vectordb/langchaindb/__init__.py +5 -0
  358. agno/vectordb/langchaindb/langchaindb.py +145 -0
  359. agno/vectordb/lightrag/__init__.py +5 -0
  360. agno/vectordb/lightrag/lightrag.py +374 -0
  361. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  362. agno/vectordb/milvus/milvus.py +242 -32
  363. agno/vectordb/mongodb/mongodb.py +200 -24
  364. agno/vectordb/pgvector/pgvector.py +319 -37
  365. agno/vectordb/pineconedb/pineconedb.py +221 -27
  366. agno/vectordb/qdrant/qdrant.py +334 -14
  367. agno/vectordb/singlestore/singlestore.py +286 -29
  368. agno/vectordb/surrealdb/surrealdb.py +187 -7
  369. agno/vectordb/upstashdb/upstashdb.py +342 -26
  370. agno/vectordb/weaviate/weaviate.py +227 -165
  371. agno/workflow/__init__.py +17 -13
  372. agno/workflow/{v2/condition.py → condition.py} +135 -32
  373. agno/workflow/{v2/loop.py → loop.py} +115 -28
  374. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  375. agno/workflow/{v2/router.py → router.py} +133 -32
  376. agno/workflow/{v2/step.py → step.py} +200 -42
  377. agno/workflow/{v2/steps.py → steps.py} +147 -66
  378. agno/workflow/types.py +482 -0
  379. agno/workflow/workflow.py +2394 -696
  380. agno-2.0.0a1.dist-info/METADATA +355 -0
  381. agno-2.0.0a1.dist-info/RECORD +514 -0
  382. agno/agent/metrics.py +0 -107
  383. agno/api/app.py +0 -35
  384. agno/api/playground.py +0 -92
  385. agno/api/schemas/app.py +0 -12
  386. agno/api/schemas/playground.py +0 -22
  387. agno/api/schemas/user.py +0 -35
  388. agno/api/schemas/workspace.py +0 -46
  389. agno/api/user.py +0 -160
  390. agno/api/workflows.py +0 -33
  391. agno/api/workspace.py +0 -175
  392. agno/app/agui/__init__.py +0 -3
  393. agno/app/agui/app.py +0 -17
  394. agno/app/agui/sync_router.py +0 -120
  395. agno/app/base.py +0 -186
  396. agno/app/discord/__init__.py +0 -3
  397. agno/app/fastapi/__init__.py +0 -3
  398. agno/app/fastapi/app.py +0 -107
  399. agno/app/fastapi/async_router.py +0 -457
  400. agno/app/fastapi/sync_router.py +0 -448
  401. agno/app/playground/app.py +0 -228
  402. agno/app/playground/async_router.py +0 -1050
  403. agno/app/playground/deploy.py +0 -249
  404. agno/app/playground/operator.py +0 -183
  405. agno/app/playground/schemas.py +0 -220
  406. agno/app/playground/serve.py +0 -55
  407. agno/app/playground/sync_router.py +0 -1042
  408. agno/app/playground/utils.py +0 -46
  409. agno/app/settings.py +0 -15
  410. agno/app/slack/__init__.py +0 -3
  411. agno/app/slack/app.py +0 -19
  412. agno/app/slack/sync_router.py +0 -92
  413. agno/app/utils.py +0 -54
  414. agno/app/whatsapp/__init__.py +0 -3
  415. agno/app/whatsapp/app.py +0 -15
  416. agno/app/whatsapp/sync_router.py +0 -197
  417. agno/cli/auth_server.py +0 -249
  418. agno/cli/config.py +0 -274
  419. agno/cli/console.py +0 -88
  420. agno/cli/credentials.py +0 -23
  421. agno/cli/entrypoint.py +0 -571
  422. agno/cli/operator.py +0 -357
  423. agno/cli/settings.py +0 -96
  424. agno/cli/ws/ws_cli.py +0 -817
  425. agno/constants.py +0 -13
  426. agno/document/__init__.py +0 -5
  427. agno/document/chunking/semantic.py +0 -45
  428. agno/document/chunking/strategy.py +0 -31
  429. agno/document/reader/__init__.py +0 -5
  430. agno/document/reader/base.py +0 -47
  431. agno/document/reader/docx_reader.py +0 -60
  432. agno/document/reader/gcs/pdf_reader.py +0 -44
  433. agno/document/reader/s3/pdf_reader.py +0 -59
  434. agno/document/reader/s3/text_reader.py +0 -63
  435. agno/document/reader/url_reader.py +0 -59
  436. agno/document/reader/youtube_reader.py +0 -58
  437. agno/embedder/__init__.py +0 -5
  438. agno/embedder/langdb.py +0 -80
  439. agno/embedder/mistral.py +0 -82
  440. agno/embedder/openai.py +0 -78
  441. agno/file/__init__.py +0 -5
  442. agno/file/file.py +0 -16
  443. agno/file/local/csv.py +0 -32
  444. agno/file/local/txt.py +0 -19
  445. agno/infra/app.py +0 -240
  446. agno/infra/base.py +0 -144
  447. agno/infra/context.py +0 -20
  448. agno/infra/db_app.py +0 -52
  449. agno/infra/resource.py +0 -205
  450. agno/infra/resources.py +0 -55
  451. agno/knowledge/agent.py +0 -702
  452. agno/knowledge/arxiv.py +0 -33
  453. agno/knowledge/combined.py +0 -36
  454. agno/knowledge/csv.py +0 -144
  455. agno/knowledge/csv_url.py +0 -124
  456. agno/knowledge/document.py +0 -223
  457. agno/knowledge/docx.py +0 -137
  458. agno/knowledge/firecrawl.py +0 -34
  459. agno/knowledge/gcs/__init__.py +0 -0
  460. agno/knowledge/gcs/base.py +0 -39
  461. agno/knowledge/gcs/pdf.py +0 -125
  462. agno/knowledge/json.py +0 -137
  463. agno/knowledge/langchain.py +0 -71
  464. agno/knowledge/light_rag.py +0 -273
  465. agno/knowledge/llamaindex.py +0 -66
  466. agno/knowledge/markdown.py +0 -154
  467. agno/knowledge/pdf.py +0 -164
  468. agno/knowledge/pdf_bytes.py +0 -42
  469. agno/knowledge/pdf_url.py +0 -148
  470. agno/knowledge/s3/__init__.py +0 -0
  471. agno/knowledge/s3/base.py +0 -64
  472. agno/knowledge/s3/pdf.py +0 -33
  473. agno/knowledge/s3/text.py +0 -34
  474. agno/knowledge/text.py +0 -141
  475. agno/knowledge/url.py +0 -46
  476. agno/knowledge/website.py +0 -179
  477. agno/knowledge/wikipedia.py +0 -32
  478. agno/knowledge/youtube.py +0 -35
  479. agno/memory/agent.py +0 -423
  480. agno/memory/classifier.py +0 -104
  481. agno/memory/db/__init__.py +0 -5
  482. agno/memory/db/base.py +0 -42
  483. agno/memory/db/mongodb.py +0 -189
  484. agno/memory/db/postgres.py +0 -203
  485. agno/memory/db/sqlite.py +0 -193
  486. agno/memory/memory.py +0 -22
  487. agno/memory/row.py +0 -36
  488. agno/memory/summarizer.py +0 -201
  489. agno/memory/summary.py +0 -19
  490. agno/memory/team.py +0 -415
  491. agno/memory/v2/__init__.py +0 -2
  492. agno/memory/v2/db/__init__.py +0 -1
  493. agno/memory/v2/db/base.py +0 -42
  494. agno/memory/v2/db/firestore.py +0 -339
  495. agno/memory/v2/db/mongodb.py +0 -196
  496. agno/memory/v2/db/postgres.py +0 -214
  497. agno/memory/v2/db/redis.py +0 -187
  498. agno/memory/v2/db/schema.py +0 -54
  499. agno/memory/v2/db/sqlite.py +0 -209
  500. agno/memory/v2/manager.py +0 -437
  501. agno/memory/v2/memory.py +0 -1097
  502. agno/memory/v2/schema.py +0 -55
  503. agno/memory/v2/summarizer.py +0 -215
  504. agno/memory/workflow.py +0 -38
  505. agno/models/ollama/tools.py +0 -430
  506. agno/models/qwen/__init__.py +0 -5
  507. agno/playground/__init__.py +0 -10
  508. agno/playground/deploy.py +0 -3
  509. agno/playground/playground.py +0 -3
  510. agno/playground/serve.py +0 -3
  511. agno/playground/settings.py +0 -3
  512. agno/reranker/__init__.py +0 -0
  513. agno/run/v2/__init__.py +0 -0
  514. agno/run/v2/workflow.py +0 -567
  515. agno/storage/__init__.py +0 -0
  516. agno/storage/agent/__init__.py +0 -0
  517. agno/storage/agent/dynamodb.py +0 -1
  518. agno/storage/agent/json.py +0 -1
  519. agno/storage/agent/mongodb.py +0 -1
  520. agno/storage/agent/postgres.py +0 -1
  521. agno/storage/agent/singlestore.py +0 -1
  522. agno/storage/agent/sqlite.py +0 -1
  523. agno/storage/agent/yaml.py +0 -1
  524. agno/storage/base.py +0 -60
  525. agno/storage/dynamodb.py +0 -673
  526. agno/storage/firestore.py +0 -297
  527. agno/storage/gcs_json.py +0 -261
  528. agno/storage/in_memory.py +0 -234
  529. agno/storage/json.py +0 -237
  530. agno/storage/mongodb.py +0 -328
  531. agno/storage/mysql.py +0 -685
  532. agno/storage/postgres.py +0 -682
  533. agno/storage/redis.py +0 -336
  534. agno/storage/session/__init__.py +0 -16
  535. agno/storage/session/agent.py +0 -64
  536. agno/storage/session/team.py +0 -63
  537. agno/storage/session/v2/__init__.py +0 -5
  538. agno/storage/session/workflow.py +0 -61
  539. agno/storage/singlestore.py +0 -606
  540. agno/storage/sqlite.py +0 -646
  541. agno/storage/workflow/__init__.py +0 -0
  542. agno/storage/workflow/mongodb.py +0 -1
  543. agno/storage/workflow/postgres.py +0 -1
  544. agno/storage/workflow/sqlite.py +0 -1
  545. agno/storage/yaml.py +0 -241
  546. agno/tools/thinking.py +0 -73
  547. agno/utils/defaults.py +0 -57
  548. agno/utils/filesystem.py +0 -39
  549. agno/utils/git.py +0 -52
  550. agno/utils/json_io.py +0 -30
  551. agno/utils/load_env.py +0 -19
  552. agno/utils/py_io.py +0 -19
  553. agno/utils/pyproject.py +0 -18
  554. agno/utils/resource_filter.py +0 -31
  555. agno/workflow/v2/__init__.py +0 -21
  556. agno/workflow/v2/types.py +0 -357
  557. agno/workflow/v2/workflow.py +0 -3312
  558. agno/workspace/__init__.py +0 -0
  559. agno/workspace/config.py +0 -325
  560. agno/workspace/enums.py +0 -6
  561. agno/workspace/helpers.py +0 -52
  562. agno/workspace/operator.py +0 -757
  563. agno/workspace/settings.py +0 -158
  564. agno-1.8.1.dist-info/METADATA +0 -982
  565. agno-1.8.1.dist-info/RECORD +0 -566
  566. agno-1.8.1.dist-info/entry_points.txt +0 -3
  567. /agno/{app → db/migrations}/__init__.py +0 -0
  568. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  569. /agno/{cli → integrations}/__init__.py +0 -0
  570. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  571. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  572. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  573. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  574. /agno/{app → os/interfaces}/slack/security.py +0 -0
  575. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  576. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  577. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  578. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/WHEEL +0 -0
  579. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/licenses/LICENSE +0 -0
  580. {agno-1.8.1.dist-info → agno-2.0.0a1.dist-info}/top_level.txt +0 -0
agno/tools/wikipedia.py CHANGED
@@ -1,18 +1,24 @@
1
1
  import json
2
2
  from typing import List, Optional
3
3
 
4
- from agno.document import Document
5
- from agno.knowledge.wikipedia import WikipediaKnowledgeBase
4
+ from agno.knowledge.document import Document
5
+ from agno.knowledge.knowledge import Knowledge
6
+ from agno.knowledge.reader.wikipedia_reader import WikipediaReader
6
7
  from agno.tools import Toolkit
7
8
  from agno.utils.log import log_debug, log_info
8
9
 
9
10
 
10
11
  class WikipediaTools(Toolkit):
11
- def __init__(self, knowledge_base: Optional[WikipediaKnowledgeBase] = None, **kwargs):
12
+ def __init__(
13
+ self,
14
+ knowledge: Optional[Knowledge] = None,
15
+ all: bool = False,
16
+ **kwargs,
17
+ ):
12
18
  tools = []
13
19
 
14
- self.knowledge_base: Optional[WikipediaKnowledgeBase] = knowledge_base
15
- if self.knowledge_base is not None and isinstance(self.knowledge_base, WikipediaKnowledgeBase):
20
+ self.knowledge: Optional[Knowledge] = knowledge
21
+ if self.knowledge is not None and isinstance(self.knowledge, Knowledge):
16
22
  tools.append(self.search_wikipedia_and_update_knowledge_base)
17
23
  else:
18
24
  tools.append(self.search_wikipedia) # type: ignore
@@ -28,15 +34,16 @@ class WikipediaTools(Toolkit):
28
34
  :return: Relevant documents from Wikipedia knowledge base.
29
35
  """
30
36
 
31
- if self.knowledge_base is None:
32
- return "Knowledge base not provided"
37
+ if self.knowledge is None:
38
+ return "Knowledge not provided"
33
39
 
34
- log_debug(f"Adding to knowledge base: {topic}")
35
- self.knowledge_base.topics.append(topic)
36
- log_debug("Loading knowledge base.")
37
- self.knowledge_base.load(recreate=False)
38
- log_debug(f"Searching knowledge base: {topic}")
39
- relevant_docs: List[Document] = self.knowledge_base.search(query=topic)
40
+ log_debug(f"Adding to knowledge: {topic}")
41
+ self.knowledge.add_content(
42
+ topics=[topic],
43
+ reader=WikipediaReader(),
44
+ )
45
+ log_debug(f"Searching knowledge: {topic}")
46
+ relevant_docs: List[Document] = self.knowledge.search(query=topic)
40
47
  return json.dumps([doc.to_dict() for doc in relevant_docs])
41
48
 
42
49
  def search_wikipedia(self, query: str) -> str:
agno/tools/x.py CHANGED
@@ -1,5 +1,5 @@
1
1
  import json
2
- import os
2
+ from os import getenv
3
3
  from typing import Any, List, Optional
4
4
 
5
5
  from agno.tools import Toolkit
@@ -35,11 +35,11 @@ class XTools(Toolkit):
35
35
  include_post_metrics Optional[bool]: Whether to include post metrics in the search results.
36
36
  wait_on_rate_limit Optional[bool]: Whether to wait on rate limit.
37
37
  """
38
- self.bearer_token = bearer_token or os.getenv("X_BEARER_TOKEN")
39
- self.consumer_key = consumer_key or os.getenv("X_CONSUMER_KEY")
40
- self.consumer_secret = consumer_secret or os.getenv("X_CONSUMER_SECRET")
41
- self.access_token = access_token or os.getenv("X_ACCESS_TOKEN")
42
- self.access_token_secret = access_token_secret or os.getenv("X_ACCESS_TOKEN_SECRET")
38
+ self.bearer_token = bearer_token or getenv("X_BEARER_TOKEN")
39
+ self.consumer_key = consumer_key or getenv("X_CONSUMER_KEY")
40
+ self.consumer_secret = consumer_secret or getenv("X_CONSUMER_SECRET")
41
+ self.access_token = access_token or getenv("X_ACCESS_TOKEN")
42
+ self.access_token_secret = access_token_secret or getenv("X_ACCESS_TOKEN_SECRET")
43
43
  self.wait_on_rate_limit = wait_on_rate_limit
44
44
  self.client = tweepy.Client(
45
45
  bearer_token=self.bearer_token,
@@ -51,13 +51,14 @@ class XTools(Toolkit):
51
51
  )
52
52
  self.include_post_metrics = include_post_metrics
53
53
 
54
- tools: List[Any] = []
55
- tools.append(self.create_post)
56
- tools.append(self.reply_to_post)
57
- tools.append(self.send_dm)
58
- tools.append(self.get_user_info)
59
- tools.append(self.get_home_timeline)
60
- tools.append(self.search_posts)
54
+ tools: List[Any] = [
55
+ self.create_post,
56
+ self.reply_to_post,
57
+ self.send_dm,
58
+ self.get_user_info,
59
+ self.get_home_timeline,
60
+ self.search_posts,
61
+ ]
61
62
 
62
63
  super().__init__(name="x", tools=tools, **kwargs)
63
64
 
agno/tools/yfinance.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import json
2
+ from typing import Any, List
2
3
 
3
4
  from agno.tools import Toolkit
4
5
  from agno.utils.log import log_debug
@@ -12,52 +13,24 @@ except ImportError:
12
13
  class YFinanceTools(Toolkit):
13
14
  """
14
15
  YFinanceTools is a toolkit for getting financial data from Yahoo Finance.
15
- Args:
16
- stock_price (bool): Whether to get the current stock price.
17
- company_info (bool): Whether to get company information.
18
- stock_fundamentals (bool): Whether to get stock fundamentals.
19
- income_statements (bool): Whether to get income statements.
20
- key_financial_ratios (bool): Whether to get key financial ratios.
21
- analyst_recommendations (bool): Whether to get analyst recommendations.
22
- company_news (bool): Whether to get company news.
23
- technical_indicators (bool): Whether to get technical indicators.
24
- historical_prices (bool): Whether to get historical prices.
25
- enable_all (bool): Whether to enable all tools.
16
+ Includes all available financial data tools.
26
17
  """
27
18
 
28
19
  def __init__(
29
20
  self,
30
- stock_price: bool = True,
31
- company_info: bool = False,
32
- stock_fundamentals: bool = False,
33
- income_statements: bool = False,
34
- key_financial_ratios: bool = False,
35
- analyst_recommendations: bool = False,
36
- company_news: bool = False,
37
- technical_indicators: bool = False,
38
- historical_prices: bool = False,
39
- enable_all: bool = False,
40
21
  **kwargs,
41
22
  ):
42
- tools = []
43
- if stock_price or enable_all:
44
- tools.append(self.get_current_stock_price)
45
- if company_info or enable_all:
46
- tools.append(self.get_company_info)
47
- if stock_fundamentals or enable_all:
48
- tools.append(self.get_stock_fundamentals)
49
- if income_statements or enable_all:
50
- tools.append(self.get_income_statements)
51
- if key_financial_ratios or enable_all:
52
- tools.append(self.get_key_financial_ratios)
53
- if analyst_recommendations or enable_all:
54
- tools.append(self.get_analyst_recommendations)
55
- if company_news or enable_all:
56
- tools.append(self.get_company_news)
57
- if technical_indicators or enable_all:
58
- tools.append(self.get_technical_indicators)
59
- if historical_prices or enable_all:
60
- tools.append(self.get_historical_stock_prices)
23
+ tools: List[Any] = [
24
+ self.get_current_stock_price,
25
+ self.get_company_info,
26
+ self.get_stock_fundamentals,
27
+ self.get_income_statements,
28
+ self.get_key_financial_ratios,
29
+ self.get_analyst_recommendations,
30
+ self.get_company_news,
31
+ self.get_technical_indicators,
32
+ self.get_historical_stock_prices,
33
+ ]
61
34
 
62
35
  super().__init__(name="yfinance_tools", tools=tools, **kwargs)
63
36
 
agno/tools/youtube.py CHANGED
@@ -17,9 +17,10 @@ except ImportError:
17
17
  class YouTubeTools(Toolkit):
18
18
  def __init__(
19
19
  self,
20
- get_video_captions: bool = True,
21
- get_video_data: bool = True,
22
- get_video_timestamps: bool = True,
20
+ enable_get_video_captions: bool = True,
21
+ enable_get_video_data: bool = True,
22
+ enable_get_video_timestamps: bool = True,
23
+ all: bool = False,
23
24
  languages: Optional[List[str]] = None,
24
25
  proxies: Optional[Dict[str, Any]] = None,
25
26
  **kwargs,
@@ -28,11 +29,11 @@ class YouTubeTools(Toolkit):
28
29
  self.proxies: Optional[Dict[str, Any]] = proxies
29
30
 
30
31
  tools: List[Any] = []
31
- if get_video_captions:
32
+ if all or enable_get_video_captions:
32
33
  tools.append(self.get_youtube_video_captions)
33
- if get_video_data:
34
+ if all or enable_get_video_data:
34
35
  tools.append(self.get_youtube_video_data)
35
- if get_video_timestamps:
36
+ if all or enable_get_video_timestamps:
36
37
  tools.append(self.get_video_timestamps)
37
38
 
38
39
  super().__init__(name="youtube_tools", tools=tools, **kwargs)
@@ -126,17 +127,19 @@ class YouTubeTools(Toolkit):
126
127
  return "Error getting video ID from URL, please provide a valid YouTube url"
127
128
 
128
129
  try:
129
- ytt_api = YouTubeTranscriptApi()
130
- captions_data = ytt_api.fetch(video_id)
131
-
132
- # log_info(f"Captions for video {video_id}: {captions_data}")
133
-
134
- transcript_text = ""
135
-
136
- for segment in captions_data:
137
- transcript_text += f"{segment.text} "
138
-
139
- return transcript_text.strip() if transcript_text else "No captions found for video"
130
+ captions = None
131
+ kwargs: Dict = {}
132
+ if self.languages:
133
+ kwargs["languages"] = self.languages or ["en"]
134
+ if self.proxies:
135
+ kwargs["proxies"] = self.proxies
136
+ if video_id is not None:
137
+ captions = YouTubeTranscriptApi().fetch(video_id, **kwargs)
138
+ else:
139
+ return "No video ID found"
140
+ if captions:
141
+ return " ".join(line.text for line in captions)
142
+ return "No captions found for video"
140
143
  except Exception as e:
141
144
  # log_info(f"Error getting captions for video {video_id}: {e}")
142
145
  return f"Error getting captions for video: {e}"
@@ -160,6 +163,9 @@ class YouTubeTools(Toolkit):
160
163
  except Exception:
161
164
  return "Error getting video ID from URL, please provide a valid YouTube url"
162
165
 
166
+ if video_id is None:
167
+ return "No video ID found"
168
+
163
169
  try:
164
170
  kwargs: Dict = {}
165
171
  if self.languages:
@@ -167,12 +173,12 @@ class YouTubeTools(Toolkit):
167
173
  if self.proxies:
168
174
  kwargs["proxies"] = self.proxies
169
175
 
170
- captions = YouTubeTranscriptApi.get_transcript(video_id, **kwargs)
176
+ captions = YouTubeTranscriptApi().fetch(video_id, **kwargs)
171
177
  timestamps = []
172
178
  for line in captions:
173
- start = int(line["start"])
179
+ start = int(line.start)
174
180
  minutes, seconds = divmod(start, 60)
175
- timestamps.append(f"{minutes}:{seconds:02d} - {line['text']}")
181
+ timestamps.append(f"{minutes}:{seconds:02d} - {line.text}")
176
182
  return "\n".join(timestamps)
177
183
  except Exception as e:
178
184
  return f"Error generating timestamps: {e}"
agno/tools/zendesk.py CHANGED
@@ -23,6 +23,8 @@ class ZendeskTools(Toolkit):
23
23
  username: Optional[str] = None,
24
24
  password: Optional[str] = None,
25
25
  company_name: Optional[str] = None,
26
+ enable_search_zendesk: bool = True,
27
+ all: bool = False,
26
28
  **kwargs,
27
29
  ):
28
30
  """
@@ -33,16 +35,19 @@ class ZendeskTools(Toolkit):
33
35
  username (str): The username for Zendesk API authentication.
34
36
  password (str): The password for Zendesk API authentication.
35
37
  company_name (str): The company name to form the base URL for API requests.
38
+ enable_search_zendesk (bool): Whether to enable the search functionality.
39
+ all (bool): Enable all functions.
36
40
  """
37
41
  self.username = username or getenv("ZENDESK_USERNAME")
38
- self.password = password or getenv("ZENDESK_PW")
42
+ self.password = password or getenv("ZENDESK_PASSWORD")
39
43
  self.company_name = company_name or getenv("ZENDESK_COMPANY_NAME")
40
44
 
41
45
  if not self.username or not self.password or not self.company_name:
42
46
  logger.error("Username, password, or company name not provided.")
43
47
 
44
48
  tools: List[Any] = []
45
- tools.append(self.search_zendesk)
49
+ if all or enable_search_zendesk:
50
+ tools.append(self.search_zendesk)
46
51
 
47
52
  super().__init__(name="zendesk_tools", tools=tools, **kwargs)
48
53
 
agno/tools/zep.py CHANGED
@@ -40,11 +40,12 @@ class ZepTools(Toolkit):
40
40
  user_id: Optional[str] = None,
41
41
  api_key: Optional[str] = None,
42
42
  ignore_assistant_messages: bool = False,
43
- add_zep_message: bool = True,
44
- get_zep_memory: bool = True,
45
- search_zep_memory: bool = True,
43
+ enable_add_zep_message: bool = True,
44
+ enable_get_zep_memory: bool = True,
45
+ enable_search_zep_memory: bool = True,
46
46
  instructions: Optional[str] = None,
47
47
  add_instructions: bool = False,
48
+ all: bool = False,
48
49
  **kwargs,
49
50
  ):
50
51
  self._api_key = api_key or getenv("ZEP_API_KEY")
@@ -71,11 +72,11 @@ class ZepTools(Toolkit):
71
72
  self.initialize()
72
73
 
73
74
  tools: List[Any] = []
74
- if add_zep_message:
75
+ if enable_add_zep_message or all:
75
76
  tools.append(self.add_zep_message)
76
- if get_zep_memory:
77
+ if enable_get_zep_memory or all:
77
78
  tools.append(self.get_zep_memory)
78
- if search_zep_memory:
79
+ if enable_search_zep_memory or all:
79
80
  tools.append(self.search_zep_memory)
80
81
 
81
82
  super().__init__(
@@ -118,7 +119,7 @@ class ZepTools(Toolkit):
118
119
 
119
120
  # Create session associated with the user
120
121
  try:
121
- self.zep_client.thread.create(thread_id=self.session_id, user_id=self.user_id)
122
+ self.zep_client.thread.create(thread_id=self.session_id, user_id=self.user_id) # type: ignore
122
123
  log_debug(f"Created session {self.session_id} for user {self.user_id}")
123
124
  except Exception as e:
124
125
  log_debug(f"Session may already exist: {e}")
@@ -150,6 +151,7 @@ class ZepTools(Toolkit):
150
151
  zep_message = ZepMessage(
151
152
  role=role,
152
153
  content=content,
154
+ role_type=role,
153
155
  )
154
156
 
155
157
  # Prepare ignore_roles if needed
@@ -358,6 +360,7 @@ class ZepAsyncTools(Toolkit):
358
360
  zep_message = ZepMessage(
359
361
  role=role,
360
362
  content=content,
363
+ role_type=role,
361
364
  )
362
365
 
363
366
  # Prepare ignore_roles if needed
agno/tools/zoom.py CHANGED
@@ -6,7 +6,7 @@ from typing import Any, List, Optional
6
6
 
7
7
  import requests
8
8
 
9
- from agno.tools.toolkit import Toolkit
9
+ from agno.tools import Toolkit
10
10
  from agno.utils.log import log_debug, log_info, logger
11
11
 
12
12
 
@@ -39,14 +39,15 @@ class ZoomTools(Toolkit):
39
39
  "ZOOM_ACCOUNT_ID, ZOOM_CLIENT_ID, and ZOOM_CLIENT_SECRET must be set either through parameters or environment variables."
40
40
  )
41
41
 
42
- tools: List[Any] = []
43
-
44
- tools.append(self.schedule_meeting)
45
- tools.append(self.get_upcoming_meetings)
46
- tools.append(self.list_meetings)
47
- tools.append(self.get_meeting_recordings)
48
- tools.append(self.delete_meeting)
49
- tools.append(self.get_meeting)
42
+ tools: List[Any] = [
43
+ self.get_access_token,
44
+ self.schedule_meeting,
45
+ self.get_upcoming_meetings,
46
+ self.list_meetings,
47
+ self.get_meeting_recordings,
48
+ self.delete_meeting,
49
+ self.get_meeting,
50
+ ]
50
51
 
51
52
  super().__init__(name="zoom_tool", tools=tools, **kwargs)
52
53
 
agno/utils/common.py CHANGED
@@ -10,24 +10,6 @@ def isinstanceany(obj: Any, class_list: List[Type]) -> bool:
10
10
  return False
11
11
 
12
12
 
13
- def str_to_int(inp: Optional[str]) -> Optional[int]:
14
- """
15
- Safely converts a string value to integer.
16
- Args:
17
- inp: input string
18
-
19
- Returns: input string as int if possible, None if not
20
- """
21
- if inp is None:
22
- return None
23
-
24
- try:
25
- val = int(inp)
26
- return val
27
- except Exception:
28
- return None
29
-
30
-
31
13
  def is_empty(val: Any) -> bool:
32
14
  """Returns True if val is None or empty"""
33
15
  if val is None or len(val) == 0 or val == "":
@@ -43,7 +25,7 @@ def dataclass_to_dict(dataclass_object, exclude: Optional[set[str]] = None, excl
43
25
  final_dict = asdict(dataclass_object)
44
26
  if exclude:
45
27
  for key in exclude:
46
- final_dict.pop(key)
28
+ final_dict.pop(key, None)
47
29
  if exclude_none:
48
30
  final_dict = {k: v for k, v in final_dict.items() if v is not None}
49
31
  return final_dict