agno 1.8.1__py3-none-any.whl → 2.0.0rc1__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 (583) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +19 -27
  3. agno/agent/agent.py +3181 -4169
  4. agno/api/agent.py +11 -67
  5. agno/api/api.py +5 -46
  6. agno/api/evals.py +8 -19
  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 +11 -66
  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 +1743 -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 +1432 -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 +882 -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 +1045 -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 +1411 -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 +297 -0
  52. agno/db/postgres/__init__.py +3 -0
  53. agno/db/postgres/postgres.py +1710 -0
  54. agno/db/postgres/schemas.py +124 -0
  55. agno/db/postgres/utils.py +280 -0
  56. agno/db/redis/__init__.py +3 -0
  57. agno/db/redis/redis.py +1367 -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 +1712 -0
  67. agno/db/singlestore/utils.py +326 -0
  68. agno/db/sqlite/__init__.py +3 -0
  69. agno/db/sqlite/schemas.py +119 -0
  70. agno/db/sqlite/sqlite.py +1676 -0
  71. agno/db/sqlite/utils.py +268 -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 +15 -11
  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 +131 -131
  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 +45 -150
  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 +489 -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 +77 -33
  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 +32 -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 +29 -0
  184. agno/os/mcp.py +255 -0
  185. agno/os/router.py +869 -0
  186. agno/os/routers/__init__.py +3 -0
  187. agno/os/routers/evals/__init__.py +3 -0
  188. agno/os/routers/evals/evals.py +208 -0
  189. agno/os/routers/evals/schemas.py +142 -0
  190. agno/os/routers/evals/utils.py +161 -0
  191. agno/os/routers/knowledge/__init__.py +3 -0
  192. agno/os/routers/knowledge/knowledge.py +436 -0
  193. agno/os/routers/knowledge/schemas.py +118 -0
  194. agno/os/routers/memory/__init__.py +3 -0
  195. agno/os/routers/memory/memory.py +188 -0
  196. agno/os/routers/memory/schemas.py +58 -0
  197. agno/os/routers/metrics/__init__.py +3 -0
  198. agno/os/routers/metrics/metrics.py +60 -0
  199. agno/os/routers/metrics/schemas.py +47 -0
  200. agno/os/routers/session/__init__.py +3 -0
  201. agno/os/routers/session/session.py +168 -0
  202. agno/os/schema.py +892 -0
  203. agno/{app/playground → os}/settings.py +7 -15
  204. agno/os/utils.py +270 -0
  205. agno/reasoning/azure_ai_foundry.py +4 -4
  206. agno/reasoning/deepseek.py +4 -4
  207. agno/reasoning/default.py +6 -11
  208. agno/reasoning/groq.py +4 -4
  209. agno/reasoning/helpers.py +4 -6
  210. agno/reasoning/ollama.py +4 -4
  211. agno/reasoning/openai.py +4 -4
  212. agno/run/{response.py → agent.py} +231 -74
  213. agno/run/base.py +44 -58
  214. agno/run/cancel.py +81 -0
  215. agno/run/team.py +133 -77
  216. agno/run/workflow.py +537 -12
  217. agno/session/__init__.py +10 -0
  218. agno/session/agent.py +244 -0
  219. agno/session/summary.py +225 -0
  220. agno/session/team.py +262 -0
  221. agno/{storage/session/v2 → session}/workflow.py +47 -24
  222. agno/team/__init__.py +15 -16
  223. agno/team/team.py +2960 -4252
  224. agno/tools/agentql.py +14 -5
  225. agno/tools/airflow.py +9 -4
  226. agno/tools/api.py +7 -3
  227. agno/tools/apify.py +2 -46
  228. agno/tools/arxiv.py +8 -3
  229. agno/tools/aws_lambda.py +7 -5
  230. agno/tools/aws_ses.py +7 -1
  231. agno/tools/baidusearch.py +4 -1
  232. agno/tools/bitbucket.py +4 -4
  233. agno/tools/brandfetch.py +14 -11
  234. agno/tools/bravesearch.py +4 -1
  235. agno/tools/brightdata.py +42 -22
  236. agno/tools/browserbase.py +13 -4
  237. agno/tools/calcom.py +12 -10
  238. agno/tools/calculator.py +10 -27
  239. agno/tools/cartesia.py +18 -13
  240. agno/tools/{clickup_tool.py → clickup.py} +12 -25
  241. agno/tools/confluence.py +8 -8
  242. agno/tools/crawl4ai.py +7 -1
  243. agno/tools/csv_toolkit.py +9 -8
  244. agno/tools/dalle.py +18 -11
  245. agno/tools/daytona.py +13 -16
  246. agno/tools/decorator.py +6 -3
  247. agno/tools/desi_vocal.py +16 -7
  248. agno/tools/discord.py +11 -8
  249. agno/tools/docker.py +30 -42
  250. agno/tools/duckdb.py +34 -53
  251. agno/tools/duckduckgo.py +8 -7
  252. agno/tools/e2b.py +61 -61
  253. agno/tools/eleven_labs.py +35 -28
  254. agno/tools/email.py +4 -1
  255. agno/tools/evm.py +7 -1
  256. agno/tools/exa.py +19 -14
  257. agno/tools/fal.py +29 -29
  258. agno/tools/file.py +9 -8
  259. agno/tools/financial_datasets.py +25 -44
  260. agno/tools/firecrawl.py +22 -22
  261. agno/tools/function.py +127 -18
  262. agno/tools/giphy.py +22 -10
  263. agno/tools/github.py +48 -126
  264. agno/tools/gmail.py +45 -61
  265. agno/tools/google_bigquery.py +7 -6
  266. agno/tools/google_maps.py +11 -26
  267. agno/tools/googlesearch.py +7 -2
  268. agno/tools/googlesheets.py +21 -17
  269. agno/tools/hackernews.py +9 -5
  270. agno/tools/jina.py +5 -4
  271. agno/tools/jira.py +18 -9
  272. agno/tools/knowledge.py +31 -32
  273. agno/tools/linear.py +19 -34
  274. agno/tools/linkup.py +5 -1
  275. agno/tools/local_file_system.py +8 -5
  276. agno/tools/lumalab.py +31 -19
  277. agno/tools/mem0.py +18 -12
  278. agno/tools/memori.py +14 -10
  279. agno/tools/mlx_transcribe.py +3 -2
  280. agno/tools/models/azure_openai.py +32 -14
  281. agno/tools/models/gemini.py +58 -31
  282. agno/tools/models/groq.py +29 -20
  283. agno/tools/models/nebius.py +27 -11
  284. agno/tools/models_labs.py +39 -15
  285. agno/tools/moviepy_video.py +7 -6
  286. agno/tools/neo4j.py +10 -8
  287. agno/tools/newspaper.py +7 -2
  288. agno/tools/newspaper4k.py +8 -3
  289. agno/tools/openai.py +57 -26
  290. agno/tools/openbb.py +12 -11
  291. agno/tools/opencv.py +62 -46
  292. agno/tools/openweather.py +14 -12
  293. agno/tools/pandas.py +11 -3
  294. agno/tools/postgres.py +4 -12
  295. agno/tools/pubmed.py +4 -1
  296. agno/tools/python.py +9 -22
  297. agno/tools/reasoning.py +35 -27
  298. agno/tools/reddit.py +11 -26
  299. agno/tools/replicate.py +54 -41
  300. agno/tools/resend.py +4 -1
  301. agno/tools/scrapegraph.py +15 -14
  302. agno/tools/searxng.py +10 -23
  303. agno/tools/serpapi.py +6 -3
  304. agno/tools/serper.py +13 -4
  305. agno/tools/shell.py +9 -2
  306. agno/tools/slack.py +12 -11
  307. agno/tools/sleep.py +3 -2
  308. agno/tools/spider.py +24 -4
  309. agno/tools/sql.py +7 -6
  310. agno/tools/tavily.py +6 -4
  311. agno/tools/telegram.py +12 -4
  312. agno/tools/todoist.py +11 -31
  313. agno/tools/toolkit.py +1 -1
  314. agno/tools/trafilatura.py +22 -6
  315. agno/tools/trello.py +9 -22
  316. agno/tools/twilio.py +10 -3
  317. agno/tools/user_control_flow.py +6 -1
  318. agno/tools/valyu.py +34 -5
  319. agno/tools/visualization.py +19 -28
  320. agno/tools/webbrowser.py +4 -3
  321. agno/tools/webex.py +11 -7
  322. agno/tools/website.py +15 -46
  323. agno/tools/webtools.py +12 -4
  324. agno/tools/whatsapp.py +5 -9
  325. agno/tools/wikipedia.py +20 -13
  326. agno/tools/x.py +14 -13
  327. agno/tools/yfinance.py +13 -40
  328. agno/tools/youtube.py +26 -20
  329. agno/tools/zendesk.py +7 -2
  330. agno/tools/zep.py +10 -7
  331. agno/tools/zoom.py +10 -9
  332. agno/utils/common.py +1 -19
  333. agno/utils/events.py +95 -118
  334. agno/utils/gemini.py +31 -1
  335. agno/utils/knowledge.py +29 -0
  336. agno/utils/log.py +2 -2
  337. agno/utils/mcp.py +11 -5
  338. agno/utils/media.py +39 -0
  339. agno/utils/message.py +12 -1
  340. agno/utils/models/claude.py +55 -4
  341. agno/utils/models/mistral.py +8 -7
  342. agno/utils/models/schema_utils.py +3 -3
  343. agno/utils/pprint.py +33 -32
  344. agno/utils/print_response/agent.py +779 -0
  345. agno/utils/print_response/team.py +1565 -0
  346. agno/utils/print_response/workflow.py +1451 -0
  347. agno/utils/prompts.py +14 -14
  348. agno/utils/reasoning.py +87 -0
  349. agno/utils/response.py +42 -42
  350. agno/utils/streamlit.py +454 -0
  351. agno/utils/string.py +8 -22
  352. agno/utils/team.py +50 -0
  353. agno/utils/timer.py +2 -2
  354. agno/vectordb/base.py +33 -21
  355. agno/vectordb/cassandra/cassandra.py +287 -23
  356. agno/vectordb/chroma/chromadb.py +482 -59
  357. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  358. agno/vectordb/couchbase/couchbase.py +309 -29
  359. agno/vectordb/lancedb/lance_db.py +360 -21
  360. agno/vectordb/langchaindb/__init__.py +5 -0
  361. agno/vectordb/langchaindb/langchaindb.py +145 -0
  362. agno/vectordb/lightrag/__init__.py +5 -0
  363. agno/vectordb/lightrag/lightrag.py +374 -0
  364. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  365. agno/vectordb/milvus/milvus.py +242 -32
  366. agno/vectordb/mongodb/mongodb.py +200 -24
  367. agno/vectordb/pgvector/pgvector.py +319 -37
  368. agno/vectordb/pineconedb/pineconedb.py +221 -27
  369. agno/vectordb/qdrant/qdrant.py +334 -14
  370. agno/vectordb/singlestore/singlestore.py +286 -29
  371. agno/vectordb/surrealdb/surrealdb.py +187 -7
  372. agno/vectordb/upstashdb/upstashdb.py +342 -26
  373. agno/vectordb/weaviate/weaviate.py +227 -165
  374. agno/workflow/__init__.py +17 -13
  375. agno/workflow/{v2/condition.py → condition.py} +135 -32
  376. agno/workflow/{v2/loop.py → loop.py} +115 -28
  377. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  378. agno/workflow/{v2/router.py → router.py} +133 -32
  379. agno/workflow/{v2/step.py → step.py} +200 -42
  380. agno/workflow/{v2/steps.py → steps.py} +147 -66
  381. agno/workflow/types.py +482 -0
  382. agno/workflow/workflow.py +2401 -696
  383. agno-2.0.0rc1.dist-info/METADATA +355 -0
  384. agno-2.0.0rc1.dist-info/RECORD +516 -0
  385. agno/agent/metrics.py +0 -107
  386. agno/api/app.py +0 -35
  387. agno/api/playground.py +0 -92
  388. agno/api/schemas/app.py +0 -12
  389. agno/api/schemas/playground.py +0 -22
  390. agno/api/schemas/user.py +0 -35
  391. agno/api/schemas/workspace.py +0 -46
  392. agno/api/user.py +0 -160
  393. agno/api/workflows.py +0 -33
  394. agno/api/workspace.py +0 -175
  395. agno/app/agui/__init__.py +0 -3
  396. agno/app/agui/app.py +0 -17
  397. agno/app/agui/sync_router.py +0 -120
  398. agno/app/base.py +0 -186
  399. agno/app/discord/__init__.py +0 -3
  400. agno/app/fastapi/__init__.py +0 -3
  401. agno/app/fastapi/app.py +0 -107
  402. agno/app/fastapi/async_router.py +0 -457
  403. agno/app/fastapi/sync_router.py +0 -448
  404. agno/app/playground/app.py +0 -228
  405. agno/app/playground/async_router.py +0 -1050
  406. agno/app/playground/deploy.py +0 -249
  407. agno/app/playground/operator.py +0 -183
  408. agno/app/playground/schemas.py +0 -220
  409. agno/app/playground/serve.py +0 -55
  410. agno/app/playground/sync_router.py +0 -1042
  411. agno/app/playground/utils.py +0 -46
  412. agno/app/settings.py +0 -15
  413. agno/app/slack/__init__.py +0 -3
  414. agno/app/slack/app.py +0 -19
  415. agno/app/slack/sync_router.py +0 -92
  416. agno/app/utils.py +0 -54
  417. agno/app/whatsapp/__init__.py +0 -3
  418. agno/app/whatsapp/app.py +0 -15
  419. agno/app/whatsapp/sync_router.py +0 -197
  420. agno/cli/auth_server.py +0 -249
  421. agno/cli/config.py +0 -274
  422. agno/cli/console.py +0 -88
  423. agno/cli/credentials.py +0 -23
  424. agno/cli/entrypoint.py +0 -571
  425. agno/cli/operator.py +0 -357
  426. agno/cli/settings.py +0 -96
  427. agno/cli/ws/ws_cli.py +0 -817
  428. agno/constants.py +0 -13
  429. agno/document/__init__.py +0 -5
  430. agno/document/chunking/semantic.py +0 -45
  431. agno/document/chunking/strategy.py +0 -31
  432. agno/document/reader/__init__.py +0 -5
  433. agno/document/reader/base.py +0 -47
  434. agno/document/reader/docx_reader.py +0 -60
  435. agno/document/reader/gcs/pdf_reader.py +0 -44
  436. agno/document/reader/s3/pdf_reader.py +0 -59
  437. agno/document/reader/s3/text_reader.py +0 -63
  438. agno/document/reader/url_reader.py +0 -59
  439. agno/document/reader/youtube_reader.py +0 -58
  440. agno/embedder/__init__.py +0 -5
  441. agno/embedder/langdb.py +0 -80
  442. agno/embedder/mistral.py +0 -82
  443. agno/embedder/openai.py +0 -78
  444. agno/file/__init__.py +0 -5
  445. agno/file/file.py +0 -16
  446. agno/file/local/csv.py +0 -32
  447. agno/file/local/txt.py +0 -19
  448. agno/infra/app.py +0 -240
  449. agno/infra/base.py +0 -144
  450. agno/infra/context.py +0 -20
  451. agno/infra/db_app.py +0 -52
  452. agno/infra/resource.py +0 -205
  453. agno/infra/resources.py +0 -55
  454. agno/knowledge/agent.py +0 -702
  455. agno/knowledge/arxiv.py +0 -33
  456. agno/knowledge/combined.py +0 -36
  457. agno/knowledge/csv.py +0 -144
  458. agno/knowledge/csv_url.py +0 -124
  459. agno/knowledge/document.py +0 -223
  460. agno/knowledge/docx.py +0 -137
  461. agno/knowledge/firecrawl.py +0 -34
  462. agno/knowledge/gcs/__init__.py +0 -0
  463. agno/knowledge/gcs/base.py +0 -39
  464. agno/knowledge/gcs/pdf.py +0 -125
  465. agno/knowledge/json.py +0 -137
  466. agno/knowledge/langchain.py +0 -71
  467. agno/knowledge/light_rag.py +0 -273
  468. agno/knowledge/llamaindex.py +0 -66
  469. agno/knowledge/markdown.py +0 -154
  470. agno/knowledge/pdf.py +0 -164
  471. agno/knowledge/pdf_bytes.py +0 -42
  472. agno/knowledge/pdf_url.py +0 -148
  473. agno/knowledge/s3/__init__.py +0 -0
  474. agno/knowledge/s3/base.py +0 -64
  475. agno/knowledge/s3/pdf.py +0 -33
  476. agno/knowledge/s3/text.py +0 -34
  477. agno/knowledge/text.py +0 -141
  478. agno/knowledge/url.py +0 -46
  479. agno/knowledge/website.py +0 -179
  480. agno/knowledge/wikipedia.py +0 -32
  481. agno/knowledge/youtube.py +0 -35
  482. agno/memory/agent.py +0 -423
  483. agno/memory/classifier.py +0 -104
  484. agno/memory/db/__init__.py +0 -5
  485. agno/memory/db/base.py +0 -42
  486. agno/memory/db/mongodb.py +0 -189
  487. agno/memory/db/postgres.py +0 -203
  488. agno/memory/db/sqlite.py +0 -193
  489. agno/memory/memory.py +0 -22
  490. agno/memory/row.py +0 -36
  491. agno/memory/summarizer.py +0 -201
  492. agno/memory/summary.py +0 -19
  493. agno/memory/team.py +0 -415
  494. agno/memory/v2/__init__.py +0 -2
  495. agno/memory/v2/db/__init__.py +0 -1
  496. agno/memory/v2/db/base.py +0 -42
  497. agno/memory/v2/db/firestore.py +0 -339
  498. agno/memory/v2/db/mongodb.py +0 -196
  499. agno/memory/v2/db/postgres.py +0 -214
  500. agno/memory/v2/db/redis.py +0 -187
  501. agno/memory/v2/db/schema.py +0 -54
  502. agno/memory/v2/db/sqlite.py +0 -209
  503. agno/memory/v2/manager.py +0 -437
  504. agno/memory/v2/memory.py +0 -1097
  505. agno/memory/v2/schema.py +0 -55
  506. agno/memory/v2/summarizer.py +0 -215
  507. agno/memory/workflow.py +0 -38
  508. agno/models/ollama/tools.py +0 -430
  509. agno/models/qwen/__init__.py +0 -5
  510. agno/playground/__init__.py +0 -10
  511. agno/playground/deploy.py +0 -3
  512. agno/playground/playground.py +0 -3
  513. agno/playground/serve.py +0 -3
  514. agno/playground/settings.py +0 -3
  515. agno/reranker/__init__.py +0 -0
  516. agno/run/v2/__init__.py +0 -0
  517. agno/run/v2/workflow.py +0 -567
  518. agno/storage/__init__.py +0 -0
  519. agno/storage/agent/__init__.py +0 -0
  520. agno/storage/agent/dynamodb.py +0 -1
  521. agno/storage/agent/json.py +0 -1
  522. agno/storage/agent/mongodb.py +0 -1
  523. agno/storage/agent/postgres.py +0 -1
  524. agno/storage/agent/singlestore.py +0 -1
  525. agno/storage/agent/sqlite.py +0 -1
  526. agno/storage/agent/yaml.py +0 -1
  527. agno/storage/base.py +0 -60
  528. agno/storage/dynamodb.py +0 -673
  529. agno/storage/firestore.py +0 -297
  530. agno/storage/gcs_json.py +0 -261
  531. agno/storage/in_memory.py +0 -234
  532. agno/storage/json.py +0 -237
  533. agno/storage/mongodb.py +0 -328
  534. agno/storage/mysql.py +0 -685
  535. agno/storage/postgres.py +0 -682
  536. agno/storage/redis.py +0 -336
  537. agno/storage/session/__init__.py +0 -16
  538. agno/storage/session/agent.py +0 -64
  539. agno/storage/session/team.py +0 -63
  540. agno/storage/session/v2/__init__.py +0 -5
  541. agno/storage/session/workflow.py +0 -61
  542. agno/storage/singlestore.py +0 -606
  543. agno/storage/sqlite.py +0 -646
  544. agno/storage/workflow/__init__.py +0 -0
  545. agno/storage/workflow/mongodb.py +0 -1
  546. agno/storage/workflow/postgres.py +0 -1
  547. agno/storage/workflow/sqlite.py +0 -1
  548. agno/storage/yaml.py +0 -241
  549. agno/tools/thinking.py +0 -73
  550. agno/utils/defaults.py +0 -57
  551. agno/utils/filesystem.py +0 -39
  552. agno/utils/git.py +0 -52
  553. agno/utils/json_io.py +0 -30
  554. agno/utils/load_env.py +0 -19
  555. agno/utils/py_io.py +0 -19
  556. agno/utils/pyproject.py +0 -18
  557. agno/utils/resource_filter.py +0 -31
  558. agno/workflow/v2/__init__.py +0 -21
  559. agno/workflow/v2/types.py +0 -357
  560. agno/workflow/v2/workflow.py +0 -3312
  561. agno/workspace/__init__.py +0 -0
  562. agno/workspace/config.py +0 -325
  563. agno/workspace/enums.py +0 -6
  564. agno/workspace/helpers.py +0 -52
  565. agno/workspace/operator.py +0 -757
  566. agno/workspace/settings.py +0 -158
  567. agno-1.8.1.dist-info/METADATA +0 -982
  568. agno-1.8.1.dist-info/RECORD +0 -566
  569. agno-1.8.1.dist-info/entry_points.txt +0 -3
  570. /agno/{app → db/migrations}/__init__.py +0 -0
  571. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  572. /agno/{cli → integrations}/__init__.py +0 -0
  573. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  574. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  575. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  576. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  577. /agno/{app → os/interfaces}/slack/security.py +0 -0
  578. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  579. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  580. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  581. {agno-1.8.1.dist-info → agno-2.0.0rc1.dist-info}/WHEEL +0 -0
  582. {agno-1.8.1.dist-info → agno-2.0.0rc1.dist-info}/licenses/LICENSE +0 -0
  583. {agno-1.8.1.dist-info → agno-2.0.0rc1.dist-info}/top_level.txt +0 -0
agno/embedder/openai.py DELETED
@@ -1,78 +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: Optional[int] = None
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
- def __post_init__(self):
30
- if self.dimensions is None:
31
- self.dimensions = 3072 if self.id == "text-embedding-3-large" else 1536
32
-
33
- @property
34
- def client(self) -> OpenAIClient:
35
- if self.openai_client:
36
- return self.openai_client
37
-
38
- _client_params: Dict[str, Any] = {
39
- "api_key": self.api_key,
40
- "organization": self.organization,
41
- "base_url": self.base_url,
42
- }
43
- _client_params = {k: v for k, v in _client_params.items() if v is not None}
44
- if self.client_params:
45
- _client_params.update(self.client_params)
46
- self.openai_client = OpenAIClient(**_client_params)
47
- return self.openai_client
48
-
49
- def response(self, text: str) -> CreateEmbeddingResponse:
50
- _request_params: Dict[str, Any] = {
51
- "input": text,
52
- "model": self.id,
53
- "encoding_format": self.encoding_format,
54
- }
55
- if self.user is not None:
56
- _request_params["user"] = self.user
57
- if self.id.startswith("text-embedding-3"):
58
- _request_params["dimensions"] = self.dimensions
59
- if self.request_params:
60
- _request_params.update(self.request_params)
61
- return self.client.embeddings.create(**_request_params)
62
-
63
- def get_embedding(self, text: str) -> List[float]:
64
- response: CreateEmbeddingResponse = self.response(text=text)
65
- try:
66
- return response.data[0].embedding
67
- except Exception as e:
68
- logger.warning(e)
69
- return []
70
-
71
- def get_embedding_and_usage(self, text: str) -> Tuple[List[float], Optional[Dict]]:
72
- response: CreateEmbeddingResponse = self.response(text=text)
73
-
74
- embedding = response.data[0].embedding
75
- usage = response.usage
76
- if usage:
77
- return embedding, usage.model_dump()
78
- return embedding, None
agno/file/__init__.py DELETED
@@ -1,5 +0,0 @@
1
- from agno.file.file import File
2
-
3
- __all__ = [
4
- "File",
5
- ]
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 log_debug
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
- log_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)
agno/infra/app.py DELETED
@@ -1,240 +0,0 @@
1
- from typing import Any, Dict, List, Optional, Union
2
-
3
- from pydantic import Field, field_validator
4
- from pydantic_core.core_schema import ValidationInfo
5
-
6
- from agno.infra.base import InfraBase
7
- from agno.infra.context import ContainerContext
8
- from agno.infra.resource import InfraResource
9
- from agno.utils.log import logger
10
-
11
-
12
- class InfraApp(InfraBase):
13
- """Base class for Infrastructure Apps."""
14
-
15
- # -*- App Name (required)
16
- name: str
17
-
18
- # -*- Image Configuration
19
- # Image can be provided as a DockerImage object
20
- image: Optional[Any] = None
21
- # OR as image_name:image_tag str
22
- image_str: Optional[str] = None
23
- # OR as image_name and image_tag
24
- image_name: Optional[str] = None
25
- image_tag: Optional[str] = None
26
- # Entrypoint for the container
27
- entrypoint: Optional[Union[str, List[str]]] = None
28
- # Command for the container
29
- command: Optional[Union[str, List[str]]] = None
30
-
31
- # -*- Python Configuration
32
- # Install python dependencies using a requirements.txt file
33
- install_requirements: bool = False
34
- # Path to the requirements.txt file relative to the workspace_root
35
- requirements_file: str = "requirements.txt"
36
- # Set the PYTHONPATH env var
37
- set_python_path: bool = True
38
- # Manually provide the PYTHONPATH.
39
- # If None, PYTHONPATH is set to workspace_root
40
- python_path: Optional[str] = None
41
- # Add paths to the PYTHONPATH env var
42
- # If python_path is provided, this value is ignored
43
- add_python_paths: Optional[List[str]] = None
44
-
45
- # -*- App Ports
46
- # Open a container port if open_port=True
47
- open_port: bool = False
48
- # If open_port=True, port_number is used to set the
49
- # container_port if container_port is None and host_port if host_port is None
50
- port_number: int = 80
51
- # Port number on the Container to open
52
- # Preferred over port_number if both are set
53
- container_port: Optional[int] = Field(None, validate_default=True)
54
- # Port name for the opened port
55
- container_port_name: str = "http"
56
- # Port number on the Host to map to the Container port
57
- # Preferred over port_number if both are set
58
- host_port: Optional[int] = Field(None, validate_default=True)
59
-
60
- # -*- Extra Resources created "before" the App resources
61
- resources: Optional[List[InfraResource]] = None
62
-
63
- # -*- Other args
64
- print_env_on_load: bool = False
65
-
66
- # -*- App specific args. Not to be set by the user.
67
- # Container Environment that can be set by subclasses
68
- # which is used as a starting point for building the container_env
69
- # Any variables set in container_env will be overridden by values
70
- # in the env_vars dict or env_file
71
- container_env: Optional[Dict[str, Any]] = None
72
- # Variable used to cache the container context
73
- container_context: Optional[ContainerContext] = None
74
-
75
- # -*- Cached Data
76
- cached_resources: Optional[List[Any]] = None
77
-
78
- @field_validator("container_port", mode="before")
79
- def set_container_port(cls, v, info: ValidationInfo):
80
- port_number = info.data.get("port_number")
81
- if v is None and port_number is not None:
82
- v = port_number
83
- return v
84
-
85
- @field_validator("host_port", mode="before")
86
- def set_host_port(cls, v, info: ValidationInfo):
87
- port_number = info.data.get("port_number")
88
- if v is None and port_number is not None:
89
- v = port_number
90
- return v
91
-
92
- def get_app_name(self) -> str:
93
- return self.name
94
-
95
- def get_image_str(self) -> str:
96
- if self.image:
97
- return f"{self.image.name}:{self.image.tag}"
98
- elif self.image_str:
99
- return self.image_str
100
- elif self.image_name and self.image_tag:
101
- return f"{self.image_name}:{self.image_tag}"
102
- elif self.image_name:
103
- return f"{self.image_name}:latest"
104
- else:
105
- return ""
106
-
107
- def build_resources(self, build_context: Any) -> Optional[Any]:
108
- logger.debug(f"@build_resource_group not defined for {self.get_app_name()}")
109
- return None
110
-
111
- def get_dependencies(self) -> Optional[List[InfraResource]]:
112
- return (
113
- [dep for dep in self.depends_on if isinstance(dep, InfraResource)] if self.depends_on is not None else None
114
- )
115
-
116
- def add_app_properties_to_resources(self, resources: List[InfraResource]) -> List[InfraResource]:
117
- updated_resources = []
118
- app_properties = self.model_dump(exclude_defaults=True)
119
- app_group = self.get_group_name()
120
- app_output_dir = self.get_app_name()
121
-
122
- app_skip_create = app_properties.get("skip_create")
123
- app_skip_read = app_properties.get("skip_read")
124
- app_skip_update = app_properties.get("skip_update")
125
- app_skip_delete = app_properties.get("skip_delete")
126
- app_recreate_on_update = app_properties.get("recreate_on_update")
127
- app_use_cache = app_properties.get("use_cache")
128
- app_force = app_properties.get("force")
129
- app_debug_mode = app_properties.get("debug_mode")
130
- app_wait_for_create = app_properties.get("wait_for_create")
131
- app_wait_for_update = app_properties.get("wait_for_update")
132
- app_wait_for_delete = app_properties.get("wait_for_delete")
133
- app_save_output = app_properties.get("save_output")
134
-
135
- for resource in resources:
136
- resource_properties = resource.model_dump(exclude_defaults=True)
137
- resource_skip_create = resource_properties.get("skip_create")
138
- resource_skip_read = resource_properties.get("skip_read")
139
- resource_skip_update = resource_properties.get("skip_update")
140
- resource_skip_delete = resource_properties.get("skip_delete")
141
- resource_recreate_on_update = resource_properties.get("recreate_on_update")
142
- resource_use_cache = resource_properties.get("use_cache")
143
- resource_force = resource_properties.get("force")
144
- resource_debug_mode = resource_properties.get("debug_mode")
145
- resource_wait_for_create = resource_properties.get("wait_for_create")
146
- resource_wait_for_update = resource_properties.get("wait_for_update")
147
- resource_wait_for_delete = resource_properties.get("wait_for_delete")
148
- resource_save_output = resource_properties.get("save_output")
149
-
150
- # If skip_create on resource is not set, use app level skip_create (if set on app)
151
- if resource_skip_create is None and app_skip_create is not None:
152
- resource.skip_create = app_skip_create
153
- # If skip_read on resource is not set, use app level skip_read (if set on app)
154
- if resource_skip_read is None and app_skip_read is not None:
155
- resource.skip_read = app_skip_read
156
- # If skip_update on resource is not set, use app level skip_update (if set on app)
157
- if resource_skip_update is None and app_skip_update is not None:
158
- resource.skip_update = app_skip_update
159
- # If skip_delete on resource is not set, use app level skip_delete (if set on app)
160
- if resource_skip_delete is None and app_skip_delete is not None:
161
- resource.skip_delete = app_skip_delete
162
- # If recreate_on_update on resource is not set, use app level recreate_on_update (if set on app)
163
- if resource_recreate_on_update is None and app_recreate_on_update is not None:
164
- resource.recreate_on_update = app_recreate_on_update
165
- # If use_cache on resource is not set, use app level use_cache (if set on app)
166
- if resource_use_cache is None and app_use_cache is not None:
167
- resource.use_cache = app_use_cache
168
- # If force on resource is not set, use app level force (if set on app)
169
- if resource_force is None and app_force is not None:
170
- resource.force = app_force
171
- # If debug_mode on resource is not set, use app level debug_mode (if set on app)
172
- if resource_debug_mode is None and app_debug_mode is not None:
173
- resource.debug_mode = app_debug_mode
174
- # If wait_for_create on resource is not set, use app level wait_for_create (if set on app)
175
- if resource_wait_for_create is None and app_wait_for_create is not None:
176
- resource.wait_for_create = app_wait_for_create
177
- # If wait_for_update on resource is not set, use app level wait_for_update (if set on app)
178
- if resource_wait_for_update is None and app_wait_for_update is not None:
179
- resource.wait_for_update = app_wait_for_update
180
- # If wait_for_delete on resource is not set, use app level wait_for_delete (if set on app)
181
- if resource_wait_for_delete is None and app_wait_for_delete is not None:
182
- resource.wait_for_delete = app_wait_for_delete
183
- # If save_output on resource is not set, use app level save_output (if set on app)
184
- if resource_save_output is None and app_save_output is not None:
185
- resource.save_output = app_save_output
186
- # If workspace_settings on resource is not set, use app level workspace_settings (if set on app)
187
- if resource.workspace_settings is None and self.workspace_settings is not None:
188
- resource.set_workspace_settings(self.workspace_settings)
189
- # If group on resource is not set, use app level group (if set on app)
190
- if resource.group is None and app_group is not None:
191
- resource.group = app_group
192
-
193
- # Always set output_dir on resource to app level output_dir
194
- resource.output_dir = app_output_dir
195
-
196
- app_dependencies = self.get_dependencies()
197
- if app_dependencies is not None:
198
- if resource.depends_on is None:
199
- resource.depends_on = app_dependencies
200
- else:
201
- resource.depends_on.extend(app_dependencies)
202
-
203
- updated_resources.append(resource)
204
- return updated_resources
205
-
206
- def get_resources(self, build_context: Any) -> List[InfraResource]:
207
- if self.cached_resources is not None and len(self.cached_resources) > 0:
208
- return self.cached_resources
209
-
210
- base_resources = self.resources or []
211
- app_resources = self.build_resources(build_context)
212
- if app_resources is not None:
213
- base_resources.extend(app_resources)
214
-
215
- self.cached_resources = self.add_app_properties_to_resources(base_resources)
216
- # logger.debug(f"Resources: {self.cached_resources}")
217
- return self.cached_resources
218
-
219
- def matches_filters(self, group_filter: Optional[str] = None) -> bool:
220
- if group_filter is not None:
221
- group_name = self.get_group_name()
222
- logger.debug(f"{self.get_app_name()}: Checking {group_filter} in {group_name}")
223
- if group_name is None or group_filter not in group_name:
224
- return False
225
- return True
226
-
227
- def should_create(self, group_filter: Optional[str] = None) -> bool:
228
- if not self.enabled or self.skip_create:
229
- return False
230
- return self.matches_filters(group_filter)
231
-
232
- def should_delete(self, group_filter: Optional[str] = None) -> bool:
233
- if not self.enabled or self.skip_delete:
234
- return False
235
- return self.matches_filters(group_filter)
236
-
237
- def should_update(self, group_filter: Optional[str] = None) -> bool:
238
- if not self.enabled or self.skip_update:
239
- return False
240
- return self.matches_filters(group_filter)
agno/infra/base.py DELETED
@@ -1,144 +0,0 @@
1
- from pathlib import Path
2
- from typing import Any, Dict, List, Optional
3
-
4
- from pydantic import BaseModel, ConfigDict
5
-
6
- from agno.workspace.settings import WorkspaceSettings
7
-
8
-
9
- class InfraBase(BaseModel):
10
- """Base class for all InfraResource, InfraApp and InfraResources objects."""
11
-
12
- # Name of the infrastructure resource
13
- name: Optional[str] = None
14
- # Group for the infrastructure resource
15
- # Used for filtering infrastructure resources by group
16
- group: Optional[str] = None
17
- # Environment filter for this resource
18
- env: Optional[str] = None
19
- # Infrastructure filter for this resource
20
- infra: Optional[str] = None
21
- # Whether this resource is enabled
22
- enabled: bool = True
23
-
24
- # Resource Control
25
- skip_create: bool = False
26
- skip_read: bool = False
27
- skip_update: bool = False
28
- skip_delete: bool = False
29
- recreate_on_update: bool = False
30
- # Skip create if resource with the same name is active
31
- use_cache: bool = True
32
- # Force create/update/delete even if a resource with the same name is active
33
- force: Optional[bool] = None
34
-
35
- # Wait for resource to be created, updated or deleted
36
- wait_for_create: bool = True
37
- wait_for_update: bool = True
38
- wait_for_delete: bool = True
39
- waiter_delay: int = 30
40
- waiter_max_attempts: int = 50
41
-
42
- # Environment Variables for the resource (if applicable)
43
- # Add env variables to resource where applicable
44
- env_vars: Optional[Dict[str, Any]] = None
45
- # Read env from a file in yaml format
46
- env_file: Optional[Path] = None
47
- # Add secret variables to resource where applicable
48
- # secrets_dict: Optional[Dict[str, Any]] = None
49
- # Read secrets from a file in yaml format
50
- secrets_file: Optional[Path] = None
51
- # Read secret variables from AWS Secrets
52
- aws_secrets: Optional[Any] = None
53
-
54
- # Debug Mode
55
- debug_mode: bool = False
56
-
57
- # Store resource to output directory
58
- # If True, save resource output to json files
59
- save_output: bool = False
60
- # The directory for the input files in the workspace directory
61
- input_dir: Optional[str] = None
62
- # The directory for the output files in the workspace directory
63
- output_dir: Optional[str] = None
64
-
65
- # Dependencies for the resource
66
- depends_on: Optional[List[Any]] = None
67
-
68
- # Workspace Settings
69
- workspace_settings: Optional[WorkspaceSettings] = None
70
-
71
- # Cached Data
72
- cached_workspace_dir: Optional[Path] = None
73
- cached_env_file_data: Optional[Dict[str, Any]] = None
74
- cached_secret_file_data: Optional[Dict[str, Any]] = None
75
-
76
- model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True)
77
-
78
- def get_group_name(self) -> Optional[str]:
79
- return self.group or self.name
80
-
81
- @property
82
- def workspace_root(self) -> Optional[Path]:
83
- return self.workspace_settings.ws_root if self.workspace_settings is not None else None
84
-
85
- @property
86
- def workspace_name(self) -> Optional[str]:
87
- return self.workspace_settings.ws_name if self.workspace_settings is not None else None
88
-
89
- @property
90
- def workspace_dir(self) -> Optional[Path]:
91
- if self.cached_workspace_dir is not None:
92
- return self.cached_workspace_dir
93
-
94
- if self.workspace_root is not None:
95
- from agno.workspace.helpers import get_workspace_dir_path
96
-
97
- workspace_dir = get_workspace_dir_path(self.workspace_root)
98
- if workspace_dir is not None:
99
- self.cached_workspace_dir = workspace_dir
100
- return workspace_dir
101
- return None
102
-
103
- def set_workspace_settings(self, workspace_settings: Optional[WorkspaceSettings] = None) -> None:
104
- if workspace_settings is not None:
105
- self.workspace_settings = workspace_settings
106
-
107
- def get_env_file_data(self) -> Optional[Dict[str, Any]]:
108
- if self.cached_env_file_data is None:
109
- from agno.utils.yaml_io import read_yaml_file
110
-
111
- self.cached_env_file_data = read_yaml_file(file_path=self.env_file)
112
- return self.cached_env_file_data
113
-
114
- def get_secret_file_data(self) -> Optional[Dict[str, Any]]:
115
- if self.cached_secret_file_data is None:
116
- from agno.utils.yaml_io import read_yaml_file
117
-
118
- self.cached_secret_file_data = read_yaml_file(file_path=self.secrets_file)
119
- return self.cached_secret_file_data
120
-
121
- def get_secret_from_file(self, secret_name: str) -> Optional[str]:
122
- secret_file_data = self.get_secret_file_data()
123
- if secret_file_data is not None:
124
- return secret_file_data.get(secret_name)
125
- return None
126
-
127
- def get_infra_resources(self) -> Optional[Any]:
128
- """This method returns an InfraResources object for this resource"""
129
- raise NotImplementedError("get_infra_resources method not implemented")
130
-
131
- def set_aws_env_vars(self, env_dict: Dict[str, str], aws_region: Optional[str] = None) -> None:
132
- from agno.constants import (
133
- AWS_DEFAULT_REGION_ENV_VAR,
134
- AWS_REGION_ENV_VAR,
135
- )
136
-
137
- if aws_region is not None:
138
- # logger.debug(f"Setting AWS Region to {aws_region}")
139
- env_dict[AWS_REGION_ENV_VAR] = aws_region
140
- env_dict[AWS_DEFAULT_REGION_ENV_VAR] = aws_region
141
- elif self.workspace_settings is not None and self.workspace_settings.aws_region is not None:
142
- # logger.debug(f"Setting AWS Region to {aws_region} using workspace_settings")
143
- env_dict[AWS_REGION_ENV_VAR] = self.workspace_settings.aws_region
144
- env_dict[AWS_DEFAULT_REGION_ENV_VAR] = self.workspace_settings.aws_region
agno/infra/context.py DELETED
@@ -1,20 +0,0 @@
1
- from typing import Optional
2
-
3
- from pydantic import BaseModel
4
-
5
- from agno.api.schemas.workspace import WorkspaceSchema
6
-
7
-
8
- class ContainerContext(BaseModel):
9
- """ContainerContext is a context object passed when creating containers."""
10
-
11
- # Workspace name
12
- workspace_name: str
13
- # Workspace schema from the API
14
- workspace_schema: Optional[WorkspaceSchema] = None
15
- # Path to the workspace directory inside the container
16
- workspace_root: str
17
- # Path to the workspace parent directory inside the container
18
- workspace_parent: str
19
- # Path to the requirements.txt file relative to the workspace_root
20
- requirements_file: Optional[str] = None
agno/infra/db_app.py DELETED
@@ -1,52 +0,0 @@
1
- from typing import Optional
2
-
3
- from agno.infra.app import ContainerContext, InfraApp, InfraResource # noqa: F401
4
-
5
-
6
- class DbApp(InfraApp):
7
- db_user: Optional[str] = None
8
- db_password: Optional[str] = None
9
- db_database: Optional[str] = None
10
- db_driver: Optional[str] = None
11
-
12
- def get_db_user(self) -> Optional[str]:
13
- return self.db_user or self.get_secret_from_file("DB_USER")
14
-
15
- def get_db_password(self) -> Optional[str]:
16
- return self.db_password or self.get_secret_from_file("DB_PASSWORD")
17
-
18
- def get_db_database(self) -> Optional[str]:
19
- return self.db_database or self.get_secret_from_file("DB_DATABASE")
20
-
21
- def get_db_driver(self) -> Optional[str]:
22
- return self.db_driver or self.get_secret_from_file("DB_DRIVER")
23
-
24
- def get_db_host(self) -> Optional[str]:
25
- raise NotImplementedError
26
-
27
- def get_db_port(self) -> Optional[int]:
28
- raise NotImplementedError
29
-
30
- def get_db_connection(self) -> Optional[str]:
31
- user = self.get_db_user()
32
- password = self.get_db_password()
33
- database = self.get_db_database()
34
- driver = self.get_db_driver()
35
- host = self.get_db_host()
36
- port = self.get_db_port()
37
- return f"{driver}://{user}:{password}@{host}:{port}/{database}"
38
-
39
- def get_db_host_local(self) -> Optional[str]:
40
- return "localhost"
41
-
42
- def get_db_port_local(self) -> Optional[int]:
43
- return self.host_port
44
-
45
- def get_db_connection_local(self) -> Optional[str]:
46
- user = self.get_db_user()
47
- password = self.get_db_password()
48
- database = self.get_db_database()
49
- driver = self.get_db_driver()
50
- host = self.get_db_host_local()
51
- port = self.get_db_port_local()
52
- return f"{driver}://{user}:{password}@{host}:{port}/{database}"