agno 1.8.2__py3-none-any.whl → 2.0.0__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 (589) hide show
  1. agno/agent/__init__.py +19 -27
  2. agno/agent/agent.py +3143 -4170
  3. agno/api/agent.py +11 -67
  4. agno/api/api.py +5 -46
  5. agno/api/evals.py +8 -19
  6. agno/api/os.py +17 -0
  7. agno/api/routes.py +6 -41
  8. agno/api/schemas/__init__.py +9 -0
  9. agno/api/schemas/agent.py +5 -21
  10. agno/api/schemas/evals.py +7 -16
  11. agno/api/schemas/os.py +14 -0
  12. agno/api/schemas/team.py +5 -21
  13. agno/api/schemas/utils.py +21 -0
  14. agno/api/schemas/workflows.py +11 -7
  15. agno/api/settings.py +53 -0
  16. agno/api/team.py +11 -66
  17. agno/api/workflow.py +28 -0
  18. agno/cloud/aws/base.py +214 -0
  19. agno/cloud/aws/s3/__init__.py +2 -0
  20. agno/cloud/aws/s3/api_client.py +43 -0
  21. agno/cloud/aws/s3/bucket.py +195 -0
  22. agno/cloud/aws/s3/object.py +57 -0
  23. agno/db/__init__.py +24 -0
  24. agno/db/base.py +245 -0
  25. agno/db/dynamo/__init__.py +3 -0
  26. agno/db/dynamo/dynamo.py +1743 -0
  27. agno/db/dynamo/schemas.py +278 -0
  28. agno/db/dynamo/utils.py +684 -0
  29. agno/db/firestore/__init__.py +3 -0
  30. agno/db/firestore/firestore.py +1432 -0
  31. agno/db/firestore/schemas.py +130 -0
  32. agno/db/firestore/utils.py +278 -0
  33. agno/db/gcs_json/__init__.py +3 -0
  34. agno/db/gcs_json/gcs_json_db.py +1001 -0
  35. agno/db/gcs_json/utils.py +194 -0
  36. agno/db/in_memory/__init__.py +3 -0
  37. agno/db/in_memory/in_memory_db.py +882 -0
  38. agno/db/in_memory/utils.py +172 -0
  39. agno/db/json/__init__.py +3 -0
  40. agno/db/json/json_db.py +1045 -0
  41. agno/db/json/utils.py +196 -0
  42. agno/db/migrations/v1_to_v2.py +162 -0
  43. agno/db/mongo/__init__.py +3 -0
  44. agno/db/mongo/mongo.py +1416 -0
  45. agno/db/mongo/schemas.py +77 -0
  46. agno/db/mongo/utils.py +204 -0
  47. agno/db/mysql/__init__.py +3 -0
  48. agno/db/mysql/mysql.py +1719 -0
  49. agno/db/mysql/schemas.py +124 -0
  50. agno/db/mysql/utils.py +297 -0
  51. agno/db/postgres/__init__.py +3 -0
  52. agno/db/postgres/postgres.py +1710 -0
  53. agno/db/postgres/schemas.py +124 -0
  54. agno/db/postgres/utils.py +280 -0
  55. agno/db/redis/__init__.py +3 -0
  56. agno/db/redis/redis.py +1367 -0
  57. agno/db/redis/schemas.py +109 -0
  58. agno/db/redis/utils.py +288 -0
  59. agno/db/schemas/__init__.py +3 -0
  60. agno/db/schemas/evals.py +33 -0
  61. agno/db/schemas/knowledge.py +40 -0
  62. agno/db/schemas/memory.py +46 -0
  63. agno/db/singlestore/__init__.py +3 -0
  64. agno/db/singlestore/schemas.py +116 -0
  65. agno/db/singlestore/singlestore.py +1712 -0
  66. agno/db/singlestore/utils.py +326 -0
  67. agno/db/sqlite/__init__.py +3 -0
  68. agno/db/sqlite/schemas.py +119 -0
  69. agno/db/sqlite/sqlite.py +1676 -0
  70. agno/db/sqlite/utils.py +268 -0
  71. agno/db/utils.py +88 -0
  72. agno/eval/__init__.py +14 -0
  73. agno/eval/accuracy.py +154 -48
  74. agno/eval/performance.py +88 -23
  75. agno/eval/reliability.py +73 -20
  76. agno/eval/utils.py +23 -13
  77. agno/integrations/discord/__init__.py +3 -0
  78. agno/{app → integrations}/discord/client.py +10 -10
  79. agno/knowledge/__init__.py +2 -2
  80. agno/{document → knowledge}/chunking/agentic.py +2 -2
  81. agno/{document → knowledge}/chunking/document.py +2 -2
  82. agno/{document → knowledge}/chunking/fixed.py +3 -3
  83. agno/{document → knowledge}/chunking/markdown.py +2 -2
  84. agno/{document → knowledge}/chunking/recursive.py +2 -2
  85. agno/{document → knowledge}/chunking/row.py +2 -2
  86. agno/knowledge/chunking/semantic.py +59 -0
  87. agno/knowledge/chunking/strategy.py +121 -0
  88. agno/knowledge/content.py +74 -0
  89. agno/knowledge/document/__init__.py +5 -0
  90. agno/{document → knowledge/document}/base.py +12 -2
  91. agno/knowledge/embedder/__init__.py +5 -0
  92. agno/{embedder → knowledge/embedder}/aws_bedrock.py +127 -1
  93. agno/{embedder → knowledge/embedder}/azure_openai.py +65 -1
  94. agno/{embedder → knowledge/embedder}/base.py +6 -0
  95. agno/{embedder → knowledge/embedder}/cohere.py +72 -1
  96. agno/{embedder → knowledge/embedder}/fastembed.py +17 -1
  97. agno/{embedder → knowledge/embedder}/fireworks.py +1 -1
  98. agno/{embedder → knowledge/embedder}/google.py +74 -1
  99. agno/{embedder → knowledge/embedder}/huggingface.py +36 -2
  100. agno/{embedder → knowledge/embedder}/jina.py +48 -2
  101. agno/knowledge/embedder/langdb.py +22 -0
  102. agno/knowledge/embedder/mistral.py +139 -0
  103. agno/{embedder → knowledge/embedder}/nebius.py +1 -1
  104. agno/{embedder → knowledge/embedder}/ollama.py +54 -3
  105. agno/knowledge/embedder/openai.py +223 -0
  106. agno/{embedder → knowledge/embedder}/sentence_transformer.py +16 -1
  107. agno/{embedder → knowledge/embedder}/together.py +1 -1
  108. agno/{embedder → knowledge/embedder}/voyageai.py +49 -1
  109. agno/knowledge/knowledge.py +1551 -0
  110. agno/knowledge/reader/__init__.py +7 -0
  111. agno/{document → knowledge}/reader/arxiv_reader.py +32 -4
  112. agno/knowledge/reader/base.py +88 -0
  113. agno/{document → knowledge}/reader/csv_reader.py +47 -65
  114. agno/knowledge/reader/docx_reader.py +83 -0
  115. agno/{document → knowledge}/reader/firecrawl_reader.py +42 -21
  116. agno/{document → knowledge}/reader/json_reader.py +30 -9
  117. agno/{document → knowledge}/reader/markdown_reader.py +58 -9
  118. agno/{document → knowledge}/reader/pdf_reader.py +71 -126
  119. agno/knowledge/reader/reader_factory.py +268 -0
  120. agno/knowledge/reader/s3_reader.py +101 -0
  121. agno/{document → knowledge}/reader/text_reader.py +31 -10
  122. agno/knowledge/reader/url_reader.py +128 -0
  123. agno/knowledge/reader/web_search_reader.py +366 -0
  124. agno/{document → knowledge}/reader/website_reader.py +37 -10
  125. agno/knowledge/reader/wikipedia_reader.py +59 -0
  126. agno/knowledge/reader/youtube_reader.py +78 -0
  127. agno/knowledge/remote_content/remote_content.py +88 -0
  128. agno/{reranker → knowledge/reranker}/base.py +1 -1
  129. agno/{reranker → knowledge/reranker}/cohere.py +2 -2
  130. agno/{reranker → knowledge/reranker}/infinity.py +2 -2
  131. agno/{reranker → knowledge/reranker}/sentence_transformer.py +2 -2
  132. agno/knowledge/types.py +30 -0
  133. agno/knowledge/utils.py +169 -0
  134. agno/media.py +269 -268
  135. agno/memory/__init__.py +2 -10
  136. agno/memory/manager.py +1003 -148
  137. agno/models/aimlapi/__init__.py +2 -2
  138. agno/models/aimlapi/aimlapi.py +6 -6
  139. agno/models/anthropic/claude.py +128 -72
  140. agno/models/aws/bedrock.py +107 -175
  141. agno/models/aws/claude.py +64 -18
  142. agno/models/azure/ai_foundry.py +73 -23
  143. agno/models/base.py +346 -290
  144. agno/models/cerebras/cerebras.py +84 -27
  145. agno/models/cohere/chat.py +106 -98
  146. agno/models/google/gemini.py +105 -46
  147. agno/models/groq/groq.py +97 -35
  148. agno/models/huggingface/huggingface.py +92 -27
  149. agno/models/ibm/watsonx.py +72 -13
  150. agno/models/litellm/chat.py +85 -13
  151. agno/models/message.py +46 -151
  152. agno/models/meta/llama.py +85 -49
  153. agno/models/metrics.py +120 -0
  154. agno/models/mistral/mistral.py +90 -21
  155. agno/models/ollama/__init__.py +0 -2
  156. agno/models/ollama/chat.py +85 -47
  157. agno/models/openai/chat.py +154 -37
  158. agno/models/openai/responses.py +178 -105
  159. agno/models/perplexity/perplexity.py +26 -2
  160. agno/models/portkey/portkey.py +0 -7
  161. agno/models/response.py +15 -9
  162. agno/models/utils.py +20 -0
  163. agno/models/vercel/__init__.py +2 -2
  164. agno/models/vercel/v0.py +1 -1
  165. agno/models/vllm/__init__.py +2 -2
  166. agno/models/vllm/vllm.py +3 -3
  167. agno/models/xai/xai.py +10 -10
  168. agno/os/__init__.py +3 -0
  169. agno/os/app.py +497 -0
  170. agno/os/auth.py +47 -0
  171. agno/os/config.py +103 -0
  172. agno/os/interfaces/agui/__init__.py +3 -0
  173. agno/os/interfaces/agui/agui.py +31 -0
  174. agno/{app/agui/async_router.py → os/interfaces/agui/router.py} +16 -16
  175. agno/{app → os/interfaces}/agui/utils.py +65 -28
  176. agno/os/interfaces/base.py +21 -0
  177. agno/os/interfaces/slack/__init__.py +3 -0
  178. agno/{app/slack/async_router.py → os/interfaces/slack/router.py} +3 -5
  179. agno/os/interfaces/slack/slack.py +32 -0
  180. agno/os/interfaces/whatsapp/__init__.py +3 -0
  181. agno/{app/whatsapp/async_router.py → os/interfaces/whatsapp/router.py} +4 -7
  182. agno/os/interfaces/whatsapp/whatsapp.py +29 -0
  183. agno/os/mcp.py +235 -0
  184. agno/os/router.py +1400 -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 +393 -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 +850 -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 +410 -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 +178 -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 +536 -0
  201. agno/os/schema.py +945 -0
  202. agno/{app/playground → os}/settings.py +7 -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/agent.py +633 -0
  212. agno/run/base.py +53 -77
  213. agno/run/cancel.py +81 -0
  214. agno/run/team.py +243 -96
  215. agno/run/workflow.py +550 -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 +3260 -4824
  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 +43 -23
  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 +20 -17
  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 +22 -12
  244. agno/tools/daytona.py +13 -16
  245. agno/tools/decorator.py +6 -3
  246. agno/tools/desi_vocal.py +17 -8
  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 +62 -62
  252. agno/tools/eleven_labs.py +36 -29
  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 +30 -30
  257. agno/tools/file.py +9 -8
  258. agno/tools/financial_datasets.py +25 -44
  259. agno/tools/firecrawl.py +17 -18
  260. agno/tools/function.py +127 -18
  261. agno/tools/giphy.py +23 -11
  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 +32 -20
  276. agno/tools/mcp.py +1 -2
  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 +33 -15
  281. agno/tools/models/gemini.py +59 -32
  282. agno/tools/models/groq.py +30 -23
  283. agno/tools/models/nebius.py +28 -12
  284. agno/tools/models_labs.py +40 -16
  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 +58 -32
  290. agno/tools/openbb.py +12 -11
  291. agno/tools/opencv.py +63 -47
  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 +55 -42
  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 +100 -123
  334. agno/utils/gemini.py +1 -1
  335. agno/utils/knowledge.py +29 -0
  336. agno/utils/log.py +54 -4
  337. agno/utils/mcp.py +68 -10
  338. agno/utils/media.py +39 -0
  339. agno/utils/message.py +12 -1
  340. agno/utils/models/aws_claude.py +1 -1
  341. agno/utils/models/claude.py +6 -12
  342. agno/utils/models/cohere.py +1 -1
  343. agno/utils/models/mistral.py +8 -7
  344. agno/utils/models/schema_utils.py +3 -3
  345. agno/utils/models/watsonx.py +1 -1
  346. agno/utils/openai.py +1 -1
  347. agno/utils/pprint.py +33 -32
  348. agno/utils/print_response/agent.py +779 -0
  349. agno/utils/print_response/team.py +1669 -0
  350. agno/utils/print_response/workflow.py +1451 -0
  351. agno/utils/prompts.py +14 -14
  352. agno/utils/reasoning.py +87 -0
  353. agno/utils/response.py +42 -42
  354. agno/utils/streamlit.py +481 -0
  355. agno/utils/string.py +8 -22
  356. agno/utils/team.py +50 -0
  357. agno/utils/timer.py +2 -2
  358. agno/vectordb/base.py +33 -21
  359. agno/vectordb/cassandra/cassandra.py +287 -23
  360. agno/vectordb/chroma/chromadb.py +482 -59
  361. agno/vectordb/clickhouse/clickhousedb.py +270 -63
  362. agno/vectordb/couchbase/couchbase.py +309 -29
  363. agno/vectordb/lancedb/lance_db.py +360 -21
  364. agno/vectordb/langchaindb/__init__.py +5 -0
  365. agno/vectordb/langchaindb/langchaindb.py +145 -0
  366. agno/vectordb/lightrag/__init__.py +5 -0
  367. agno/vectordb/lightrag/lightrag.py +374 -0
  368. agno/vectordb/llamaindex/llamaindexdb.py +127 -0
  369. agno/vectordb/milvus/milvus.py +242 -32
  370. agno/vectordb/mongodb/mongodb.py +200 -24
  371. agno/vectordb/pgvector/pgvector.py +319 -37
  372. agno/vectordb/pineconedb/pineconedb.py +221 -27
  373. agno/vectordb/qdrant/qdrant.py +334 -14
  374. agno/vectordb/singlestore/singlestore.py +286 -29
  375. agno/vectordb/surrealdb/surrealdb.py +187 -7
  376. agno/vectordb/upstashdb/upstashdb.py +342 -26
  377. agno/vectordb/weaviate/weaviate.py +227 -165
  378. agno/workflow/__init__.py +17 -13
  379. agno/workflow/{v2/condition.py → condition.py} +135 -32
  380. agno/workflow/{v2/loop.py → loop.py} +115 -28
  381. agno/workflow/{v2/parallel.py → parallel.py} +138 -108
  382. agno/workflow/{v2/router.py → router.py} +133 -32
  383. agno/workflow/{v2/step.py → step.py} +207 -49
  384. agno/workflow/{v2/steps.py → steps.py} +147 -66
  385. agno/workflow/types.py +482 -0
  386. agno/workflow/workflow.py +2410 -696
  387. agno-2.0.0.dist-info/METADATA +494 -0
  388. agno-2.0.0.dist-info/RECORD +515 -0
  389. agno-2.0.0.dist-info/licenses/LICENSE +201 -0
  390. agno/agent/metrics.py +0 -110
  391. agno/api/app.py +0 -35
  392. agno/api/playground.py +0 -92
  393. agno/api/schemas/app.py +0 -12
  394. agno/api/schemas/playground.py +0 -22
  395. agno/api/schemas/user.py +0 -35
  396. agno/api/schemas/workspace.py +0 -46
  397. agno/api/user.py +0 -160
  398. agno/api/workflows.py +0 -33
  399. agno/api/workspace.py +0 -175
  400. agno/app/agui/__init__.py +0 -3
  401. agno/app/agui/app.py +0 -17
  402. agno/app/agui/sync_router.py +0 -120
  403. agno/app/base.py +0 -186
  404. agno/app/discord/__init__.py +0 -3
  405. agno/app/fastapi/__init__.py +0 -3
  406. agno/app/fastapi/app.py +0 -107
  407. agno/app/fastapi/async_router.py +0 -457
  408. agno/app/fastapi/sync_router.py +0 -448
  409. agno/app/playground/app.py +0 -228
  410. agno/app/playground/async_router.py +0 -1053
  411. agno/app/playground/deploy.py +0 -249
  412. agno/app/playground/operator.py +0 -183
  413. agno/app/playground/schemas.py +0 -223
  414. agno/app/playground/serve.py +0 -55
  415. agno/app/playground/sync_router.py +0 -1045
  416. agno/app/playground/utils.py +0 -46
  417. agno/app/settings.py +0 -15
  418. agno/app/slack/__init__.py +0 -3
  419. agno/app/slack/app.py +0 -19
  420. agno/app/slack/sync_router.py +0 -92
  421. agno/app/utils.py +0 -54
  422. agno/app/whatsapp/__init__.py +0 -3
  423. agno/app/whatsapp/app.py +0 -15
  424. agno/app/whatsapp/sync_router.py +0 -197
  425. agno/cli/auth_server.py +0 -249
  426. agno/cli/config.py +0 -274
  427. agno/cli/console.py +0 -88
  428. agno/cli/credentials.py +0 -23
  429. agno/cli/entrypoint.py +0 -571
  430. agno/cli/operator.py +0 -357
  431. agno/cli/settings.py +0 -96
  432. agno/cli/ws/ws_cli.py +0 -817
  433. agno/constants.py +0 -13
  434. agno/document/__init__.py +0 -5
  435. agno/document/chunking/semantic.py +0 -45
  436. agno/document/chunking/strategy.py +0 -31
  437. agno/document/reader/__init__.py +0 -5
  438. agno/document/reader/base.py +0 -47
  439. agno/document/reader/docx_reader.py +0 -60
  440. agno/document/reader/gcs/pdf_reader.py +0 -44
  441. agno/document/reader/s3/pdf_reader.py +0 -59
  442. agno/document/reader/s3/text_reader.py +0 -63
  443. agno/document/reader/url_reader.py +0 -59
  444. agno/document/reader/youtube_reader.py +0 -58
  445. agno/embedder/__init__.py +0 -5
  446. agno/embedder/langdb.py +0 -80
  447. agno/embedder/mistral.py +0 -82
  448. agno/embedder/openai.py +0 -78
  449. agno/file/__init__.py +0 -5
  450. agno/file/file.py +0 -16
  451. agno/file/local/csv.py +0 -32
  452. agno/file/local/txt.py +0 -19
  453. agno/infra/app.py +0 -240
  454. agno/infra/base.py +0 -144
  455. agno/infra/context.py +0 -20
  456. agno/infra/db_app.py +0 -52
  457. agno/infra/resource.py +0 -205
  458. agno/infra/resources.py +0 -55
  459. agno/knowledge/agent.py +0 -702
  460. agno/knowledge/arxiv.py +0 -33
  461. agno/knowledge/combined.py +0 -36
  462. agno/knowledge/csv.py +0 -144
  463. agno/knowledge/csv_url.py +0 -124
  464. agno/knowledge/document.py +0 -223
  465. agno/knowledge/docx.py +0 -137
  466. agno/knowledge/firecrawl.py +0 -34
  467. agno/knowledge/gcs/__init__.py +0 -0
  468. agno/knowledge/gcs/base.py +0 -39
  469. agno/knowledge/gcs/pdf.py +0 -125
  470. agno/knowledge/json.py +0 -137
  471. agno/knowledge/langchain.py +0 -71
  472. agno/knowledge/light_rag.py +0 -273
  473. agno/knowledge/llamaindex.py +0 -66
  474. agno/knowledge/markdown.py +0 -154
  475. agno/knowledge/pdf.py +0 -164
  476. agno/knowledge/pdf_bytes.py +0 -42
  477. agno/knowledge/pdf_url.py +0 -148
  478. agno/knowledge/s3/__init__.py +0 -0
  479. agno/knowledge/s3/base.py +0 -64
  480. agno/knowledge/s3/pdf.py +0 -33
  481. agno/knowledge/s3/text.py +0 -34
  482. agno/knowledge/text.py +0 -141
  483. agno/knowledge/url.py +0 -46
  484. agno/knowledge/website.py +0 -179
  485. agno/knowledge/wikipedia.py +0 -32
  486. agno/knowledge/youtube.py +0 -35
  487. agno/memory/agent.py +0 -423
  488. agno/memory/classifier.py +0 -104
  489. agno/memory/db/__init__.py +0 -5
  490. agno/memory/db/base.py +0 -42
  491. agno/memory/db/mongodb.py +0 -189
  492. agno/memory/db/postgres.py +0 -203
  493. agno/memory/db/sqlite.py +0 -193
  494. agno/memory/memory.py +0 -22
  495. agno/memory/row.py +0 -36
  496. agno/memory/summarizer.py +0 -201
  497. agno/memory/summary.py +0 -19
  498. agno/memory/team.py +0 -415
  499. agno/memory/v2/__init__.py +0 -2
  500. agno/memory/v2/db/__init__.py +0 -1
  501. agno/memory/v2/db/base.py +0 -42
  502. agno/memory/v2/db/firestore.py +0 -339
  503. agno/memory/v2/db/mongodb.py +0 -196
  504. agno/memory/v2/db/postgres.py +0 -214
  505. agno/memory/v2/db/redis.py +0 -187
  506. agno/memory/v2/db/schema.py +0 -54
  507. agno/memory/v2/db/sqlite.py +0 -209
  508. agno/memory/v2/manager.py +0 -437
  509. agno/memory/v2/memory.py +0 -1097
  510. agno/memory/v2/schema.py +0 -55
  511. agno/memory/v2/summarizer.py +0 -215
  512. agno/memory/workflow.py +0 -38
  513. agno/models/ollama/tools.py +0 -430
  514. agno/models/qwen/__init__.py +0 -5
  515. agno/playground/__init__.py +0 -10
  516. agno/playground/deploy.py +0 -3
  517. agno/playground/playground.py +0 -3
  518. agno/playground/serve.py +0 -3
  519. agno/playground/settings.py +0 -3
  520. agno/reranker/__init__.py +0 -0
  521. agno/run/response.py +0 -467
  522. agno/run/v2/__init__.py +0 -0
  523. agno/run/v2/workflow.py +0 -567
  524. agno/storage/__init__.py +0 -0
  525. agno/storage/agent/__init__.py +0 -0
  526. agno/storage/agent/dynamodb.py +0 -1
  527. agno/storage/agent/json.py +0 -1
  528. agno/storage/agent/mongodb.py +0 -1
  529. agno/storage/agent/postgres.py +0 -1
  530. agno/storage/agent/singlestore.py +0 -1
  531. agno/storage/agent/sqlite.py +0 -1
  532. agno/storage/agent/yaml.py +0 -1
  533. agno/storage/base.py +0 -60
  534. agno/storage/dynamodb.py +0 -673
  535. agno/storage/firestore.py +0 -297
  536. agno/storage/gcs_json.py +0 -261
  537. agno/storage/in_memory.py +0 -234
  538. agno/storage/json.py +0 -237
  539. agno/storage/mongodb.py +0 -328
  540. agno/storage/mysql.py +0 -685
  541. agno/storage/postgres.py +0 -682
  542. agno/storage/redis.py +0 -336
  543. agno/storage/session/__init__.py +0 -16
  544. agno/storage/session/agent.py +0 -64
  545. agno/storage/session/team.py +0 -63
  546. agno/storage/session/v2/__init__.py +0 -5
  547. agno/storage/session/workflow.py +0 -61
  548. agno/storage/singlestore.py +0 -606
  549. agno/storage/sqlite.py +0 -646
  550. agno/storage/workflow/__init__.py +0 -0
  551. agno/storage/workflow/mongodb.py +0 -1
  552. agno/storage/workflow/postgres.py +0 -1
  553. agno/storage/workflow/sqlite.py +0 -1
  554. agno/storage/yaml.py +0 -241
  555. agno/tools/thinking.py +0 -73
  556. agno/utils/defaults.py +0 -57
  557. agno/utils/filesystem.py +0 -39
  558. agno/utils/git.py +0 -52
  559. agno/utils/json_io.py +0 -30
  560. agno/utils/load_env.py +0 -19
  561. agno/utils/py_io.py +0 -19
  562. agno/utils/pyproject.py +0 -18
  563. agno/utils/resource_filter.py +0 -31
  564. agno/workflow/v2/__init__.py +0 -21
  565. agno/workflow/v2/types.py +0 -357
  566. agno/workflow/v2/workflow.py +0 -3313
  567. agno/workspace/__init__.py +0 -0
  568. agno/workspace/config.py +0 -325
  569. agno/workspace/enums.py +0 -6
  570. agno/workspace/helpers.py +0 -52
  571. agno/workspace/operator.py +0 -757
  572. agno/workspace/settings.py +0 -158
  573. agno-1.8.2.dist-info/METADATA +0 -982
  574. agno-1.8.2.dist-info/RECORD +0 -566
  575. agno-1.8.2.dist-info/entry_points.txt +0 -3
  576. agno-1.8.2.dist-info/licenses/LICENSE +0 -375
  577. /agno/{app → db/migrations}/__init__.py +0 -0
  578. /agno/{app/playground/__init__.py → db/schemas/metrics.py} +0 -0
  579. /agno/{cli → integrations}/__init__.py +0 -0
  580. /agno/{cli/ws → knowledge/chunking}/__init__.py +0 -0
  581. /agno/{document/chunking → knowledge/remote_content}/__init__.py +0 -0
  582. /agno/{document/reader/gcs → knowledge/reranker}/__init__.py +0 -0
  583. /agno/{document/reader/s3 → os/interfaces}/__init__.py +0 -0
  584. /agno/{app → os/interfaces}/slack/security.py +0 -0
  585. /agno/{app → os/interfaces}/whatsapp/security.py +0 -0
  586. /agno/{file/local → utils/print_response}/__init__.py +0 -0
  587. /agno/{infra → vectordb/llamaindex}/__init__.py +0 -0
  588. {agno-1.8.2.dist-info → agno-2.0.0.dist-info}/WHEEL +0 -0
  589. {agno-1.8.2.dist-info → agno-2.0.0.dist-info}/top_level.txt +0 -0
File without changes
agno/workspace/config.py DELETED
@@ -1,325 +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.api.schemas.user import TeamSchema
7
- from agno.api.schemas.workspace import WorkspaceSchema
8
- from agno.infra.base import InfraBase
9
- from agno.infra.resources import InfraResources
10
- from agno.utils.log import logger
11
- from agno.workspace.settings import WorkspaceSettings
12
-
13
- # List of directories to ignore when loading the workspace
14
- ignored_dirs = ["ignore", "test", "tests", "config"]
15
-
16
-
17
- class WorkspaceConfig(BaseModel):
18
- """The WorkspaceConfig holds the configuration for an Agno workspace."""
19
-
20
- # Root directory of the workspace.
21
- ws_root_path: Path
22
- # WorkspaceSchema: This field indicates that the workspace is synced with the api
23
- ws_schema: Optional[WorkspaceSchema] = None
24
- # The Team for this workspace
25
- ws_team: Optional[TeamSchema] = None
26
- # The API key for this workspace
27
- ws_api_key: Optional[str] = None
28
-
29
- # Path to the "workspace" directory inside the workspace root
30
- _workspace_dir_path: Optional[Path] = None
31
- # WorkspaceSettings
32
- _workspace_settings: Optional[WorkspaceSettings] = None
33
-
34
- model_config = ConfigDict(arbitrary_types_allowed=True)
35
-
36
- def to_dict(self) -> dict:
37
- return self.model_dump(include={"ws_root_path", "ws_schema", "ws_team", "ws_api_key"})
38
-
39
- @property
40
- def workspace_dir_path(self) -> Optional[Path]:
41
- if self._workspace_dir_path is None:
42
- if self.ws_root_path is not None:
43
- from agno.workspace.helpers import get_workspace_dir_path
44
-
45
- self._workspace_dir_path = get_workspace_dir_path(self.ws_root_path)
46
- return self._workspace_dir_path
47
-
48
- def validate_workspace_settings(self, obj: Any) -> bool:
49
- if not isinstance(obj, WorkspaceSettings):
50
- raise Exception("WorkspaceSettings must be of type WorkspaceSettings")
51
-
52
- if self.ws_root_path is not None and obj.ws_root is not None:
53
- if obj.ws_root != self.ws_root_path:
54
- raise Exception(f"WorkspaceSettings.ws_root ({obj.ws_root}) must match {self.ws_root_path}")
55
- return True
56
-
57
- @property
58
- def workspace_settings(self) -> Optional[WorkspaceSettings]:
59
- if self._workspace_settings is not None:
60
- return self._workspace_settings
61
-
62
- ws_settings_file: Optional[Path] = None
63
- if self.workspace_dir_path is not None:
64
- _ws_settings_file = self.workspace_dir_path.joinpath("settings.py")
65
- if _ws_settings_file.exists() and _ws_settings_file.is_file():
66
- ws_settings_file = _ws_settings_file
67
- if ws_settings_file is None:
68
- logger.debug("workspace_settings file not found")
69
- return None
70
-
71
- logger.debug(f"Loading workspace_settings from {ws_settings_file}")
72
- try:
73
- from agno.utils.py_io import get_python_objects_from_module
74
-
75
- python_objects = get_python_objects_from_module(ws_settings_file)
76
- for obj_name, obj in python_objects.items():
77
- if isinstance(obj, WorkspaceSettings):
78
- if self.validate_workspace_settings(obj):
79
- self._workspace_settings = obj
80
- if self.ws_schema is not None and self._workspace_settings is not None:
81
- self._workspace_settings.ws_schema = self.ws_schema
82
- logger.debug("Added WorkspaceSchema to WorkspaceSettings")
83
- except Exception:
84
- logger.warning(f"Error in {ws_settings_file}")
85
- raise
86
- return self._workspace_settings
87
-
88
- def set_local_env(self) -> None:
89
- from os import environ
90
-
91
- from agno.constants import (
92
- AWS_REGION_ENV_VAR,
93
- WORKSPACE_DIR_ENV_VAR,
94
- WORKSPACE_ID_ENV_VAR,
95
- WORKSPACE_NAME_ENV_VAR,
96
- WORKSPACE_ROOT_ENV_VAR,
97
- )
98
-
99
- if self.ws_root_path is not None:
100
- environ[WORKSPACE_ROOT_ENV_VAR] = str(self.ws_root_path)
101
-
102
- workspace_dir_path: Optional[Path] = self.workspace_dir_path
103
- if workspace_dir_path is not None:
104
- environ[WORKSPACE_DIR_ENV_VAR] = str(workspace_dir_path)
105
-
106
- if self.workspace_settings is not None:
107
- environ[WORKSPACE_NAME_ENV_VAR] = str(self.workspace_settings.ws_name)
108
-
109
- if self.ws_schema is not None and self.ws_schema.id_workspace is not None:
110
- environ[WORKSPACE_ID_ENV_VAR] = str(self.ws_schema.id_workspace)
111
-
112
- if (
113
- environ.get(AWS_REGION_ENV_VAR) is None
114
- and self.workspace_settings is not None
115
- and self.workspace_settings.aws_region is not None
116
- ):
117
- environ[AWS_REGION_ENV_VAR] = self.workspace_settings.aws_region
118
-
119
- def get_resources(
120
- self,
121
- env: Optional[str] = None,
122
- infra: Optional[str] = None,
123
- order: str = "create",
124
- ) -> List[InfraResources]:
125
- if self.ws_root_path is None:
126
- logger.warning("WorkspaceConfig.ws_root_path is None")
127
- return []
128
-
129
- from sys import path as sys_path
130
-
131
- from agno.utils.load_env import load_env
132
- from agno.utils.py_io import get_python_objects_from_module
133
-
134
- logger.debug("**--> Loading WorkspaceConfig")
135
- logger.debug(f"Loading .env from {self.ws_root_path}")
136
- load_env(dotenv_dir=self.ws_root_path)
137
-
138
- # NOTE: When loading a workspace, relative imports or package imports do not work.
139
- # This is a known problem in python
140
- # eg: https://stackoverflow.com/questions/6323860/sibling-package-imports/50193944#50193944
141
- # To make them work, we add workspace_root to sys.path so is treated as a module
142
- logger.debug(f"Adding {self.ws_root_path} to path")
143
- sys_path.insert(0, str(self.ws_root_path))
144
-
145
- workspace_dir_path: Optional[Path] = self.workspace_dir_path
146
- if workspace_dir_path is not None:
147
- logger.debug(f"--^^-- Loading workspace from: {workspace_dir_path}")
148
- # Create a dict of objects in the workspace directory
149
- workspace_objects: Dict[str, InfraResources] = {}
150
- resource_files = workspace_dir_path.rglob("*.py")
151
- for resource_file in resource_files:
152
- if resource_file.name == "__init__.py":
153
- continue
154
-
155
- resource_file_parts = resource_file.parts
156
- workspace_dir_path_parts = workspace_dir_path.parts
157
- resource_file_parts_after_ws = resource_file_parts[len(workspace_dir_path_parts) :]
158
- # Check if file in ignored directory
159
- if any([ignored_dir in resource_file_parts_after_ws for ignored_dir in ignored_dirs]):
160
- logger.debug(f"Skipping file in ignored directory: {resource_file}")
161
- continue
162
- logger.debug(f"Reading file: {resource_file}")
163
- try:
164
- python_objects = get_python_objects_from_module(resource_file)
165
- # logger.debug(f"python_objects: {python_objects}")
166
- for obj_name, obj in python_objects.items():
167
- if isinstance(obj, WorkspaceSettings):
168
- logger.debug(f"Found: {obj.__class__.__module__}: {obj_name}")
169
- if self.validate_workspace_settings(obj):
170
- self._workspace_settings = obj
171
- if self.ws_schema is not None and self._workspace_settings is not None:
172
- self._workspace_settings.ws_schema = self.ws_schema
173
- logger.debug("Added WorkspaceSchema to WorkspaceSettings")
174
- elif isinstance(obj, InfraResources):
175
- logger.debug(f"Found: {obj.__class__.__module__}: {obj_name}")
176
- if not obj.enabled:
177
- logger.debug(f"Skipping {obj_name}: disabled")
178
- continue
179
- workspace_objects[obj_name] = obj
180
- except Exception:
181
- logger.warning(f"Error in {resource_file}")
182
- raise
183
- logger.debug(f"workspace_objects: {workspace_objects}")
184
- logger.debug("**--> WorkspaceConfig loaded")
185
- logger.debug(f"Removing {self.ws_root_path} from path")
186
- sys_path.remove(str(self.ws_root_path))
187
-
188
- # Filter resources by infra
189
- filtered_ws_objects_by_infra_type: Dict[str, InfraResources] = {}
190
- logger.debug(f"Filtering resources for env: {env} | infra: {infra} | order: {order}")
191
- if infra is None:
192
- filtered_ws_objects_by_infra_type = workspace_objects
193
- else:
194
- for resource_name, resource in workspace_objects.items():
195
- if resource.infra == infra:
196
- filtered_ws_objects_by_infra_type[resource_name] = resource
197
-
198
- # Filter resources by env
199
- filtered_infra_objects_by_env: Dict[str, InfraResources] = {}
200
- if env is None:
201
- filtered_infra_objects_by_env = filtered_ws_objects_by_infra_type
202
- else:
203
- for resource_name, resource in filtered_ws_objects_by_infra_type.items():
204
- if resource.env == env:
205
- filtered_infra_objects_by_env[resource_name] = resource
206
-
207
- # Updated resources with the workspace settings
208
- # Create a temporary workspace settings object if it does not exist
209
- if self._workspace_settings is None:
210
- self._workspace_settings = WorkspaceSettings(
211
- ws_root=self.ws_root_path,
212
- ws_name=self.ws_root_path.stem,
213
- )
214
- logger.debug(f"Created WorkspaceSettings: {self._workspace_settings}")
215
- # Update the resources with the workspace settings
216
- if self._workspace_settings is not None:
217
- for resource_name, resource in filtered_infra_objects_by_env.items():
218
- logger.debug(f"Setting workspace settings for {resource.__class__.__name__}")
219
- resource.set_workspace_settings(self._workspace_settings)
220
-
221
- # Create a list of InfraResources from the filtered resources
222
- infra_resources_list: List[InfraResources] = []
223
- for resource_name, resource in filtered_infra_objects_by_env.items():
224
- # If the resource is an InfraResources object, add it to the list
225
- if isinstance(resource, InfraResources):
226
- infra_resources_list.append(resource)
227
-
228
- return infra_resources_list
229
-
230
- @staticmethod
231
- def get_resources_from_file(
232
- resource_file: Path,
233
- env: Optional[str] = None,
234
- infra: Optional[str] = None,
235
- order: str = "create",
236
- ) -> List[InfraResources]:
237
- if not resource_file.exists():
238
- raise FileNotFoundError(f"File {resource_file} does not exist")
239
- if not resource_file.is_file():
240
- raise ValueError(f"Path {resource_file} is not a file")
241
- if not resource_file.suffix == ".py":
242
- raise ValueError(f"File {resource_file} is not a python file")
243
-
244
- from sys import path as sys_path
245
-
246
- from agno.utils.load_env import load_env
247
- from agno.utils.py_io import get_python_objects_from_module
248
-
249
- resource_file_parent_dir = resource_file.parent.resolve()
250
- logger.debug(f"Loading .env from {resource_file_parent_dir}")
251
- load_env(dotenv_dir=resource_file_parent_dir)
252
-
253
- temporary_ws_config = WorkspaceConfig(ws_root_path=resource_file_parent_dir)
254
-
255
- # NOTE: When loading a directory, relative imports or package imports do not work.
256
- # This is a known problem in python
257
- # eg: https://stackoverflow.com/questions/6323860/sibling-package-imports/50193944#50193944
258
- # To make them work, we add the resource_file_parent_dir to sys.path so it can be treated as a module
259
- logger.debug(f"Adding {resource_file_parent_dir} to path")
260
- sys_path.insert(0, str(resource_file_parent_dir))
261
-
262
- logger.debug(f"**--> Reading Infra resources from {resource_file}")
263
-
264
- # Get all infra resources from the file
265
- infra_objects: Dict[str, InfraBase] = {}
266
- try:
267
- # Get all python objects from the file
268
- python_objects = get_python_objects_from_module(resource_file)
269
- # Filter out the objects that are subclasses of InfraBase
270
- for obj_name, obj in python_objects.items():
271
- if isinstance(obj, InfraBase):
272
- logger.debug(f"Found: {obj.__class__.__module__}: {obj_name}")
273
- if not obj.enabled:
274
- logger.debug(f"Skipping {obj_name}: disabled")
275
- continue
276
- infra_objects[obj_name] = obj
277
- except Exception:
278
- logger.error(f"Error reading: {resource_file}")
279
- raise
280
-
281
- # Filter resources by infra
282
- filtered_infra_objects_by_infra_type: Dict[str, InfraBase] = {}
283
- logger.debug(f"Filtering resources for env: {env} | infra: {infra} | order: {order}")
284
- if infra is None:
285
- filtered_infra_objects_by_infra_type = infra_objects
286
- else:
287
- for resource_name, resource in infra_objects.items():
288
- if resource.infra == infra:
289
- filtered_infra_objects_by_infra_type[resource_name] = resource
290
-
291
- # Filter resources by env
292
- filtered_infra_objects_by_env: Dict[str, InfraBase] = {}
293
- if env is None:
294
- filtered_infra_objects_by_env = filtered_infra_objects_by_infra_type
295
- else:
296
- for resource_name, resource in filtered_infra_objects_by_infra_type.items():
297
- if resource.env == env:
298
- filtered_infra_objects_by_env[resource_name] = resource
299
-
300
- # Updated resources with the workspace settings
301
- # Create a temporary workspace settings object if it does not exist
302
- if temporary_ws_config._workspace_settings is None:
303
- temporary_ws_config._workspace_settings = WorkspaceSettings(
304
- ws_root=temporary_ws_config.ws_root_path,
305
- ws_name=temporary_ws_config.ws_root_path.stem,
306
- )
307
- # Update the resources with the workspace settings
308
- if temporary_ws_config._workspace_settings is not None:
309
- for resource_name, resource in filtered_infra_objects_by_env.items():
310
- logger.debug(f"Setting workspace settings for {resource.__class__.__name__}")
311
- resource.set_workspace_settings(temporary_ws_config._workspace_settings)
312
-
313
- # Create a list of InfraResources from the filtered resources
314
- infra_resources_list: List[InfraResources] = []
315
- for resource_name, resource in filtered_infra_objects_by_env.items():
316
- # If the resource is an InfraResources object, add it to the list
317
- if isinstance(resource, InfraResources):
318
- infra_resources_list.append(resource)
319
- # Otherwise, get the InfraResources object from the resource
320
- else:
321
- _infra_resources = resource.get_infra_resources()
322
- if _infra_resources is not None and isinstance(_infra_resources, InfraResources):
323
- infra_resources_list.append(_infra_resources)
324
-
325
- return infra_resources_list
agno/workspace/enums.py DELETED
@@ -1,6 +0,0 @@
1
- from enum import Enum
2
-
3
-
4
- class WorkspaceStarterTemplate(str, Enum):
5
- agent_app = "agent-app"
6
- agent_api = "agent-api"
agno/workspace/helpers.py DELETED
@@ -1,52 +0,0 @@
1
- from pathlib import Path
2
- from typing import Optional
3
-
4
- from agno.utils.log import logger
5
-
6
-
7
- def get_workspace_dir_from_env() -> Optional[Path]:
8
- from os import getenv
9
-
10
- from agno.constants import WORKSPACE_DIR_ENV_VAR
11
-
12
- logger.debug(f"Reading {WORKSPACE_DIR_ENV_VAR} from environment variables")
13
- workspace_dir = getenv(WORKSPACE_DIR_ENV_VAR, None)
14
- if workspace_dir is not None:
15
- return Path(workspace_dir)
16
- return None
17
-
18
-
19
- def get_workspace_dir_path(ws_root_path: Path) -> Path:
20
- """
21
- Get the workspace directory path from the given workspace root path.
22
- Agno workspace dir can be found at:
23
- 1. subdirectory: workspace
24
- 2. In a folder defined by the pyproject.toml file
25
- """
26
- from agno.utils.pyproject import read_pyproject_agno
27
-
28
- logger.debug(f"Searching for a workspace directory in {ws_root_path}")
29
-
30
- # Case 1: Look for a subdirectory with name: workspace
31
- ws_workspace_dir = ws_root_path.joinpath("workspace")
32
- logger.debug(f"Searching {ws_workspace_dir}")
33
- if ws_workspace_dir.exists() and ws_workspace_dir.is_dir():
34
- return ws_workspace_dir
35
-
36
- # Case 2: Look for a folder defined by the pyproject.toml file
37
- ws_pyproject_toml = ws_root_path.joinpath("pyproject.toml")
38
- if ws_pyproject_toml.exists() and ws_pyproject_toml.is_file():
39
- agno_conf = read_pyproject_agno(ws_pyproject_toml)
40
- if agno_conf is not None:
41
- agno_conf_workspace_dir_str = agno_conf.get("workspace", None)
42
- if agno_conf_workspace_dir_str is not None:
43
- agno_conf_workspace_dir_path = ws_root_path.joinpath(agno_conf_workspace_dir_str)
44
- else:
45
- logger.error("Workspace directory not specified in pyproject.toml")
46
- exit(0)
47
- logger.debug(f"Searching {agno_conf_workspace_dir_path}")
48
- if agno_conf_workspace_dir_path.exists() and agno_conf_workspace_dir_path.is_dir():
49
- return agno_conf_workspace_dir_path
50
-
51
- logger.error(f"Could not find a workspace at: {ws_root_path}")
52
- exit(0)