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/knowledge/arxiv.py DELETED
@@ -1,33 +0,0 @@
1
- from typing import AsyncIterator, Iterator, List
2
-
3
- from agno.document import Document
4
- from agno.document.reader.arxiv_reader import ArxivReader
5
- from agno.knowledge.agent import AgentKnowledge
6
-
7
-
8
- class ArxivKnowledgeBase(AgentKnowledge):
9
- queries: List[str] = []
10
- reader: ArxivReader = ArxivReader()
11
-
12
- @property
13
- def document_lists(self) -> Iterator[List[Document]]:
14
- """Iterate over urls and yield lists of documents.
15
- Each object yielded by the iterator is a list of documents.
16
-
17
- Returns:
18
- Iterator[List[Document]]: Iterator yielding list of documents
19
- """
20
-
21
- for _query in self.queries:
22
- yield self.reader.read(query=_query)
23
-
24
- @property
25
- async def async_document_lists(self) -> AsyncIterator[List[Document]]:
26
- """Iterate over queries and yield lists of documents asynchronously.
27
- Each object yielded by the iterator is a list of documents.
28
-
29
- Returns:
30
- AsyncIterator[List[Document]]: Async iterator yielding list of documents
31
- """
32
- for _query in self.queries:
33
- yield await self.reader.async_read(query=_query)
@@ -1,36 +0,0 @@
1
- from typing import AsyncIterator, Iterator, List
2
-
3
- from agno.document import Document
4
- from agno.knowledge.agent import AgentKnowledge
5
- from agno.utils.log import log_debug
6
-
7
-
8
- class CombinedKnowledgeBase(AgentKnowledge):
9
- sources: List[AgentKnowledge] = []
10
-
11
- @property
12
- def document_lists(self) -> Iterator[List[Document]]:
13
- """Iterate over knowledge bases and yield lists of documents.
14
- Each object yielded by the iterator is a list of documents.
15
-
16
- Returns:
17
- Iterator[List[Document]]: Iterator yielding list of documents
18
- """
19
-
20
- for kb in self.sources:
21
- log_debug(f"Loading documents from {kb.__class__.__name__}")
22
- yield from kb.document_lists
23
-
24
- @property
25
- async def async_document_lists(self) -> AsyncIterator[List[Document]]:
26
- """Iterate over knowledge bases and yield lists of documents.
27
- Each object yielded by the iterator is a list of documents.
28
-
29
- Returns:
30
- Iterator[List[Document]]: Iterator yielding list of documents
31
- """
32
-
33
- for kb in self.sources:
34
- log_debug(f"Loading documents from {kb.__class__.__name__}")
35
- async for document in kb.async_document_lists: # type: ignore
36
- yield document
agno/knowledge/csv.py DELETED
@@ -1,144 +0,0 @@
1
- from pathlib import Path
2
- from typing import Any, AsyncIterator, Dict, Iterator, List, Optional, Union
3
-
4
- from pydantic import Field
5
-
6
- from agno.document import Document
7
- from agno.document.reader.csv_reader import CSVReader
8
- from agno.knowledge.agent import AgentKnowledge
9
- from agno.utils.log import log_info, logger
10
-
11
-
12
- class CSVKnowledgeBase(AgentKnowledge):
13
- path: Optional[Union[str, Path, List[Dict[str, Union[str, Dict[str, Any]]]]]] = None
14
- formats: List[str] = [".csv"]
15
- exclude_files: List[str] = Field(default_factory=list)
16
- reader: CSVReader = CSVReader()
17
-
18
- @property
19
- def document_lists(self) -> Iterator[List[Document]]:
20
- """Iterate over CSV files and yield lists of documents."""
21
- if self.path is None:
22
- raise ValueError("Path is not set")
23
-
24
- if isinstance(self.path, list):
25
- for item in self.path:
26
- if isinstance(item, dict) and "path" in item:
27
- # Handle path with metadata
28
- file_path = item["path"]
29
- config = item.get("metadata", {})
30
- _csv_path = Path(file_path) # type: ignore
31
- if self._is_valid_csv(_csv_path):
32
- documents = self.reader.read(file=_csv_path)
33
- if config:
34
- for doc in documents:
35
- log_info(f"Adding metadata {config} to document: {doc.name}")
36
- doc.meta_data.update(config) # type: ignore
37
- yield documents
38
- else:
39
- # Handle single path
40
- _csv_path = Path(self.path)
41
- if _csv_path.is_dir():
42
- for _csv in _csv_path.glob("**/*.csv"):
43
- if _csv.name not in self.exclude_files:
44
- yield self.reader.read(file=_csv)
45
- elif self._is_valid_csv(_csv_path):
46
- yield self.reader.read(file=_csv_path)
47
-
48
- def _is_valid_csv(self, path: Path) -> bool:
49
- """Helper to check if path is a valid CSV file."""
50
- return path.exists() and path.is_file() and path.suffix == ".csv" and path.name not in self.exclude_files
51
-
52
- @property
53
- async def async_document_lists(self) -> AsyncIterator[List[Document]]:
54
- """Iterate over CSV files and yield lists of documents asynchronously."""
55
- if self.path is None:
56
- raise ValueError("Path is not set")
57
-
58
- if isinstance(self.path, list):
59
- for item in self.path:
60
- if isinstance(item, dict) and "path" in item:
61
- # Handle path with metadata
62
- file_path = item["path"]
63
- config = item.get("metadata", {})
64
- _csv_path = Path(file_path) # type: ignore
65
- if self._is_valid_csv(_csv_path):
66
- documents = await self.reader.async_read(file=_csv_path)
67
- if config:
68
- for doc in documents:
69
- log_info(f"Adding metadata {config} to document: {doc.name}")
70
- doc.meta_data.update(config) # type: ignore
71
- yield documents
72
- else:
73
- # Handle single path
74
- _csv_path = Path(self.path)
75
- if _csv_path.is_dir():
76
- for _csv in _csv_path.glob("**/*.csv"):
77
- if _csv.name not in self.exclude_files:
78
- yield await self.reader.async_read(file=_csv)
79
- elif self._is_valid_csv(_csv_path):
80
- yield await self.reader.async_read(file=_csv_path)
81
-
82
- def load_document(
83
- self,
84
- path: Union[str, Path],
85
- metadata: Optional[Dict[str, Any]] = None,
86
- recreate: bool = False,
87
- upsert: bool = False,
88
- skip_existing: bool = True,
89
- ) -> None:
90
- """Load documents from a single CSV file with specific metadata into the vector DB."""
91
-
92
- _file_path = Path(path) if isinstance(path, str) else path
93
-
94
- # Validate file and prepare collection in one step
95
- if not self.prepare_load(_file_path, self.formats, metadata, recreate):
96
- return
97
-
98
- # Read documents
99
- try:
100
- documents = self.reader.read(file=_file_path)
101
- except Exception as e:
102
- logger.exception(f"Failed to read documents from file {_file_path}: {e}")
103
- return
104
-
105
- # Process documents
106
- self.process_documents(
107
- documents=documents,
108
- metadata=metadata,
109
- upsert=upsert,
110
- skip_existing=skip_existing,
111
- source_info=str(_file_path),
112
- )
113
-
114
- async def aload_document(
115
- self,
116
- path: Union[str, Path],
117
- metadata: Optional[Dict[str, Any]] = None,
118
- recreate: bool = False,
119
- upsert: bool = False,
120
- skip_existing: bool = True,
121
- ) -> None:
122
- """Load documents from a single CSV file with specific metadata into the vector DB."""
123
-
124
- _file_path = Path(path) if isinstance(path, str) else path
125
-
126
- # Validate file and prepare collection in one step
127
- if not await self.aprepare_load(_file_path, self.formats, metadata, recreate):
128
- return
129
-
130
- # Read documents
131
- try:
132
- documents = await self.reader.async_read(file=_file_path)
133
- except Exception as e:
134
- logger.exception(f"Failed to read documents from file {_file_path}: {e}")
135
- return
136
-
137
- # Process documents
138
- await self.aprocess_documents(
139
- documents=documents,
140
- metadata=metadata,
141
- upsert=upsert,
142
- skip_existing=skip_existing,
143
- source_info=str(_file_path),
144
- )
agno/knowledge/csv_url.py DELETED
@@ -1,124 +0,0 @@
1
- from typing import Any, AsyncIterator, Dict, Iterator, List, Optional, Union
2
-
3
- from agno.document import Document
4
- from agno.document.reader.csv_reader import CSVUrlReader
5
- from agno.knowledge.agent import AgentKnowledge
6
- from agno.utils.log import log_info, logger
7
-
8
-
9
- class CSVUrlKnowledgeBase(AgentKnowledge):
10
- urls: Optional[Union[List[str], List[Dict[str, Union[str, Dict[str, Any]]]]]] = None
11
- formats: List[str] = [".csv"]
12
- reader: CSVUrlReader = CSVUrlReader()
13
-
14
- @property
15
- def document_lists(self) -> Iterator[List[Document]]:
16
- """Iterate over CSV URLs and yield lists of documents."""
17
- if self.urls is None:
18
- raise ValueError("URLs are not set")
19
-
20
- for item in self.urls:
21
- if isinstance(item, dict) and "url" in item:
22
- # Handle URL with metadata
23
- url = item["url"]
24
- if isinstance(url, str): # Type guard
25
- config = item.get("metadata", {})
26
- if self._is_valid_csv_url(url):
27
- documents = self.reader.read(url=url)
28
- if config and isinstance(config, dict):
29
- for doc in documents:
30
- log_info(f"Adding metadata {config} to document: {doc.name}")
31
- doc.meta_data.update(config) # type: ignore
32
- yield documents
33
- elif isinstance(item, str):
34
- # Handle plain URL string
35
- if self._is_valid_csv_url(item):
36
- yield self.reader.read(url=item)
37
-
38
- def _is_valid_csv_url(self, url: str) -> bool:
39
- """Helper to check if URL is a valid CSV URL."""
40
- return url.endswith(".csv")
41
-
42
- @property
43
- async def async_document_lists(self) -> AsyncIterator[List[Document]]:
44
- """Iterate over CSV URLs and yield lists of documents asynchronously."""
45
- if self.urls is None:
46
- raise ValueError("URLs are not set")
47
-
48
- for item in self.urls:
49
- if isinstance(item, dict) and "url" in item:
50
- # Handle URL with metadata
51
- url = item["url"]
52
- if isinstance(url, str): # Type guard
53
- config = item.get("metadata", {})
54
- if self._is_valid_csv_url(url):
55
- documents = await self.reader.async_read(url=url)
56
- if config and isinstance(config, dict):
57
- for doc in documents:
58
- log_info(f"Adding metadata {config} to document: {doc.name}")
59
- doc.meta_data.update(config) # type: ignore
60
- yield documents
61
- elif isinstance(item, str):
62
- # Handle plain URL string
63
- if self._is_valid_csv_url(item):
64
- yield await self.reader.async_read(url=item)
65
-
66
- def load_document(
67
- self,
68
- url: str,
69
- metadata: Optional[Dict[str, Any]] = None,
70
- recreate: bool = False,
71
- upsert: bool = False,
72
- skip_existing: bool = True,
73
- ) -> None:
74
- """Load documents from a single CSV URL with specific metadata into the vector DB."""
75
-
76
- # Validate URL and prepare collection in one step
77
- if not self.prepare_load(url, self.formats, metadata, recreate, is_url=True): # type: ignore
78
- return
79
-
80
- # Read documents
81
- try:
82
- documents = self.reader.read(url=url)
83
- except Exception as e:
84
- logger.exception(f"Failed to read documents from URL {url}: {e}")
85
- return
86
-
87
- # Process documents
88
- self.process_documents(
89
- documents=documents,
90
- metadata=metadata,
91
- upsert=upsert,
92
- skip_existing=skip_existing,
93
- source_info=url,
94
- )
95
-
96
- async def aload_document(
97
- self,
98
- url: str,
99
- metadata: Optional[Dict[str, Any]] = None,
100
- recreate: bool = False,
101
- upsert: bool = False,
102
- skip_existing: bool = True,
103
- ) -> None:
104
- """Load documents from a single CSV URL with specific metadata into the vector DB."""
105
-
106
- # Validate URL and prepare collection in one step
107
- if not await self.aprepare_load(url, self.formats, metadata, recreate, is_url=True): # type: ignore
108
- return
109
-
110
- # Read documents
111
- try:
112
- documents = await self.reader.async_read(url=url)
113
- except Exception as e:
114
- logger.exception(f"Failed to read documents from URL {url}: {e}")
115
- return
116
-
117
- # Process documents
118
- await self.aprocess_documents(
119
- documents=documents,
120
- metadata=metadata,
121
- upsert=upsert,
122
- skip_existing=skip_existing,
123
- source_info=url,
124
- )
@@ -1,223 +0,0 @@
1
- from typing import Any, AsyncIterator, Dict, Iterator, List, Optional, Union
2
-
3
- from agno.document import Document
4
- from agno.knowledge.agent import AgentKnowledge
5
- from agno.utils.log import log_info, logger
6
-
7
-
8
- class DocumentKnowledgeBase(AgentKnowledge):
9
- documents: Optional[Union[List[Document], List[Dict[str, Any]]]] = None
10
-
11
- @property
12
- def document_lists(self) -> Iterator[List[Document]]:
13
- """Iterate over documents and yield lists of documents.
14
- Each object yielded by the iterator is a list of documents.
15
-
16
- Returns:
17
- Iterator[List[Document]]: Iterator yielding list of documents
18
- """
19
- if self.documents is None:
20
- # Return empty iterator when no documents are set
21
- return
22
-
23
- for item in self.documents:
24
- if isinstance(item, dict) and "document" in item:
25
- # Handle document with metadata
26
- document: Document = item["document"]
27
- config = item.get("metadata", {})
28
- if config:
29
- log_info(f"Adding metadata {config} to document: {document.name}")
30
- # Create a copy of the document with updated metadata
31
- updated_document = Document(
32
- content=document.content,
33
- id=document.id,
34
- name=document.name,
35
- meta_data={**document.meta_data, **config},
36
- embedder=document.embedder,
37
- embedding=document.embedding,
38
- usage=document.usage,
39
- reranking_score=document.reranking_score,
40
- )
41
- yield [updated_document]
42
- else:
43
- yield [document]
44
- elif isinstance(item, Document):
45
- # Handle direct document
46
- yield [item]
47
- else:
48
- raise ValueError(f"Invalid document format: {type(item)}")
49
-
50
- @property
51
- async def async_document_lists(self) -> AsyncIterator[List[Document]]:
52
- """Iterate over documents and yield lists of documents asynchronously.
53
- Each object yielded by the iterator is a list of documents.
54
-
55
- Returns:
56
- AsyncIterator[List[Document]]: Iterator yielding list of documents
57
- """
58
- if self.documents is None:
59
- # Return empty iterator when no documents are set
60
- return
61
-
62
- for item in self.documents:
63
- if isinstance(item, dict) and "document" in item:
64
- # Handle document with metadata
65
- document: Document = item["document"]
66
- config = item.get("metadata", {})
67
- if config:
68
- log_info(f"Adding metadata {config} to document: {document.name}")
69
- # Create a copy of the document with updated metadata
70
- updated_document = Document(
71
- content=document.content,
72
- id=document.id,
73
- name=document.name,
74
- meta_data={**document.meta_data, **config},
75
- embedder=document.embedder,
76
- embedding=document.embedding,
77
- usage=document.usage,
78
- reranking_score=document.reranking_score,
79
- )
80
- yield [updated_document]
81
- else:
82
- yield [document]
83
- elif isinstance(item, Document):
84
- # Handle direct document
85
- yield [item]
86
- else:
87
- raise ValueError(f"Invalid document format: {type(item)}")
88
-
89
- def _prepare_document_load(
90
- self,
91
- metadata: Optional[Dict[str, Any]] = None,
92
- recreate: bool = False,
93
- ) -> bool:
94
- """Prepare collection for loading documents (no file validation needed).
95
- Args:
96
- metadata (Optional[Dict[str, Any]]): Metadata to track
97
- recreate (bool): Whether to recreate the collection
98
- Returns:
99
- bool: True if preparation succeeded, False otherwise
100
- """
101
- # 1. Track metadata
102
- if metadata:
103
- self._track_metadata_structure(metadata)
104
-
105
- # 2. Prepare vector DB
106
- if self.vector_db is None:
107
- logger.warning("Cannot load document: No vector db provided.")
108
- return False
109
-
110
- # Recreate collection if requested
111
- if recreate:
112
- self.vector_db.drop()
113
-
114
- # Create collection if it doesn't exist
115
- if not self.vector_db.exists():
116
- self.vector_db.create()
117
-
118
- return True
119
-
120
- async def _aprepare_document_load(
121
- self,
122
- metadata: Optional[Dict[str, Any]] = None,
123
- recreate: bool = False,
124
- ) -> bool:
125
- """Prepare collection for loading documents asynchronously (no file validation needed).
126
- Args:
127
- metadata (Optional[Dict[str, Any]]): Metadata to track
128
- recreate (bool): Whether to recreate the collection
129
- Returns:
130
- bool: True if preparation succeeded, False otherwise
131
- """
132
- # 1. Track metadata
133
- if metadata:
134
- self._track_metadata_structure(metadata)
135
-
136
- # 2. Prepare vector DB
137
- if self.vector_db is None:
138
- logger.warning("Cannot load document: No vector db provided.")
139
- return False
140
-
141
- # Recreate collection if requested
142
- if recreate:
143
- await self.vector_db.async_drop()
144
-
145
- # Create collection if it doesn't exist
146
- if not await self.vector_db.async_exists():
147
- await self.vector_db.async_create()
148
-
149
- return True
150
-
151
- def load_document(
152
- self,
153
- document: Document,
154
- metadata: Optional[Dict[str, Any]] = None,
155
- recreate: bool = False,
156
- upsert: bool = False,
157
- skip_existing: bool = True,
158
- ) -> None:
159
- """Load a single document with specific metadata into the vector DB."""
160
-
161
- # Use our document-specific preparation method
162
- if not self._prepare_document_load(metadata, recreate):
163
- return
164
-
165
- # Apply metadata if provided
166
- if metadata:
167
- # Create a copy of the document with updated metadata
168
- document = Document(
169
- content=document.content,
170
- id=document.id,
171
- name=document.name,
172
- meta_data={**document.meta_data, **metadata},
173
- embedder=document.embedder,
174
- embedding=document.embedding,
175
- usage=document.usage,
176
- reranking_score=document.reranking_score,
177
- )
178
-
179
- # Process documents
180
- self.process_documents(
181
- documents=[document],
182
- metadata=metadata,
183
- upsert=upsert,
184
- skip_existing=skip_existing,
185
- source_info=f"document: {document.name or document.id}",
186
- )
187
-
188
- async def aload_document(
189
- self,
190
- document: Document,
191
- metadata: Optional[Dict[str, Any]] = None,
192
- recreate: bool = False,
193
- upsert: bool = False,
194
- skip_existing: bool = True,
195
- ) -> None:
196
- """Load a single document with specific metadata into the vector DB asynchronously."""
197
-
198
- # Use our document-specific preparation method
199
- if not await self._aprepare_document_load(metadata, recreate):
200
- return
201
-
202
- # Apply metadata if provided
203
- if metadata:
204
- # Create a copy of the document with updated metadata
205
- document = Document(
206
- content=document.content,
207
- id=document.id,
208
- name=document.name,
209
- meta_data={**document.meta_data, **metadata},
210
- embedder=document.embedder,
211
- embedding=document.embedding,
212
- usage=document.usage,
213
- reranking_score=document.reranking_score,
214
- )
215
-
216
- # Process documents
217
- await self.aprocess_documents(
218
- documents=[document],
219
- metadata=metadata,
220
- upsert=upsert,
221
- skip_existing=skip_existing,
222
- source_info=f"document: {document.name or document.id}",
223
- )