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
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)