agno 2.2.13__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 (575) hide show
  1. agno/__init__.py +8 -0
  2. agno/agent/__init__.py +51 -0
  3. agno/agent/agent.py +10405 -0
  4. agno/api/__init__.py +0 -0
  5. agno/api/agent.py +28 -0
  6. agno/api/api.py +40 -0
  7. agno/api/evals.py +22 -0
  8. agno/api/os.py +17 -0
  9. agno/api/routes.py +13 -0
  10. agno/api/schemas/__init__.py +9 -0
  11. agno/api/schemas/agent.py +16 -0
  12. agno/api/schemas/evals.py +16 -0
  13. agno/api/schemas/os.py +14 -0
  14. agno/api/schemas/response.py +6 -0
  15. agno/api/schemas/team.py +16 -0
  16. agno/api/schemas/utils.py +21 -0
  17. agno/api/schemas/workflows.py +16 -0
  18. agno/api/settings.py +53 -0
  19. agno/api/team.py +30 -0
  20. agno/api/workflow.py +28 -0
  21. agno/cloud/aws/base.py +214 -0
  22. agno/cloud/aws/s3/__init__.py +2 -0
  23. agno/cloud/aws/s3/api_client.py +43 -0
  24. agno/cloud/aws/s3/bucket.py +195 -0
  25. agno/cloud/aws/s3/object.py +57 -0
  26. agno/culture/__init__.py +3 -0
  27. agno/culture/manager.py +956 -0
  28. agno/db/__init__.py +24 -0
  29. agno/db/async_postgres/__init__.py +3 -0
  30. agno/db/base.py +598 -0
  31. agno/db/dynamo/__init__.py +3 -0
  32. agno/db/dynamo/dynamo.py +2042 -0
  33. agno/db/dynamo/schemas.py +314 -0
  34. agno/db/dynamo/utils.py +743 -0
  35. agno/db/firestore/__init__.py +3 -0
  36. agno/db/firestore/firestore.py +1795 -0
  37. agno/db/firestore/schemas.py +140 -0
  38. agno/db/firestore/utils.py +376 -0
  39. agno/db/gcs_json/__init__.py +3 -0
  40. agno/db/gcs_json/gcs_json_db.py +1335 -0
  41. agno/db/gcs_json/utils.py +228 -0
  42. agno/db/in_memory/__init__.py +3 -0
  43. agno/db/in_memory/in_memory_db.py +1160 -0
  44. agno/db/in_memory/utils.py +230 -0
  45. agno/db/json/__init__.py +3 -0
  46. agno/db/json/json_db.py +1328 -0
  47. agno/db/json/utils.py +230 -0
  48. agno/db/migrations/__init__.py +0 -0
  49. agno/db/migrations/v1_to_v2.py +635 -0
  50. agno/db/mongo/__init__.py +17 -0
  51. agno/db/mongo/async_mongo.py +2026 -0
  52. agno/db/mongo/mongo.py +1982 -0
  53. agno/db/mongo/schemas.py +87 -0
  54. agno/db/mongo/utils.py +259 -0
  55. agno/db/mysql/__init__.py +3 -0
  56. agno/db/mysql/mysql.py +2308 -0
  57. agno/db/mysql/schemas.py +138 -0
  58. agno/db/mysql/utils.py +355 -0
  59. agno/db/postgres/__init__.py +4 -0
  60. agno/db/postgres/async_postgres.py +1927 -0
  61. agno/db/postgres/postgres.py +2260 -0
  62. agno/db/postgres/schemas.py +139 -0
  63. agno/db/postgres/utils.py +442 -0
  64. agno/db/redis/__init__.py +3 -0
  65. agno/db/redis/redis.py +1660 -0
  66. agno/db/redis/schemas.py +123 -0
  67. agno/db/redis/utils.py +346 -0
  68. agno/db/schemas/__init__.py +4 -0
  69. agno/db/schemas/culture.py +120 -0
  70. agno/db/schemas/evals.py +33 -0
  71. agno/db/schemas/knowledge.py +40 -0
  72. agno/db/schemas/memory.py +46 -0
  73. agno/db/schemas/metrics.py +0 -0
  74. agno/db/singlestore/__init__.py +3 -0
  75. agno/db/singlestore/schemas.py +130 -0
  76. agno/db/singlestore/singlestore.py +2272 -0
  77. agno/db/singlestore/utils.py +384 -0
  78. agno/db/sqlite/__init__.py +4 -0
  79. agno/db/sqlite/async_sqlite.py +2293 -0
  80. agno/db/sqlite/schemas.py +133 -0
  81. agno/db/sqlite/sqlite.py +2288 -0
  82. agno/db/sqlite/utils.py +431 -0
  83. agno/db/surrealdb/__init__.py +3 -0
  84. agno/db/surrealdb/metrics.py +292 -0
  85. agno/db/surrealdb/models.py +309 -0
  86. agno/db/surrealdb/queries.py +71 -0
  87. agno/db/surrealdb/surrealdb.py +1353 -0
  88. agno/db/surrealdb/utils.py +147 -0
  89. agno/db/utils.py +116 -0
  90. agno/debug.py +18 -0
  91. agno/eval/__init__.py +14 -0
  92. agno/eval/accuracy.py +834 -0
  93. agno/eval/performance.py +773 -0
  94. agno/eval/reliability.py +306 -0
  95. agno/eval/utils.py +119 -0
  96. agno/exceptions.py +161 -0
  97. agno/filters.py +354 -0
  98. agno/guardrails/__init__.py +6 -0
  99. agno/guardrails/base.py +19 -0
  100. agno/guardrails/openai.py +144 -0
  101. agno/guardrails/pii.py +94 -0
  102. agno/guardrails/prompt_injection.py +52 -0
  103. agno/integrations/__init__.py +0 -0
  104. agno/integrations/discord/__init__.py +3 -0
  105. agno/integrations/discord/client.py +203 -0
  106. agno/knowledge/__init__.py +5 -0
  107. agno/knowledge/chunking/__init__.py +0 -0
  108. agno/knowledge/chunking/agentic.py +79 -0
  109. agno/knowledge/chunking/document.py +91 -0
  110. agno/knowledge/chunking/fixed.py +57 -0
  111. agno/knowledge/chunking/markdown.py +151 -0
  112. agno/knowledge/chunking/recursive.py +63 -0
  113. agno/knowledge/chunking/row.py +39 -0
  114. agno/knowledge/chunking/semantic.py +86 -0
  115. agno/knowledge/chunking/strategy.py +165 -0
  116. agno/knowledge/content.py +74 -0
  117. agno/knowledge/document/__init__.py +5 -0
  118. agno/knowledge/document/base.py +58 -0
  119. agno/knowledge/embedder/__init__.py +5 -0
  120. agno/knowledge/embedder/aws_bedrock.py +343 -0
  121. agno/knowledge/embedder/azure_openai.py +210 -0
  122. agno/knowledge/embedder/base.py +23 -0
  123. agno/knowledge/embedder/cohere.py +323 -0
  124. agno/knowledge/embedder/fastembed.py +62 -0
  125. agno/knowledge/embedder/fireworks.py +13 -0
  126. agno/knowledge/embedder/google.py +258 -0
  127. agno/knowledge/embedder/huggingface.py +94 -0
  128. agno/knowledge/embedder/jina.py +182 -0
  129. agno/knowledge/embedder/langdb.py +22 -0
  130. agno/knowledge/embedder/mistral.py +206 -0
  131. agno/knowledge/embedder/nebius.py +13 -0
  132. agno/knowledge/embedder/ollama.py +154 -0
  133. agno/knowledge/embedder/openai.py +195 -0
  134. agno/knowledge/embedder/sentence_transformer.py +63 -0
  135. agno/knowledge/embedder/together.py +13 -0
  136. agno/knowledge/embedder/vllm.py +262 -0
  137. agno/knowledge/embedder/voyageai.py +165 -0
  138. agno/knowledge/knowledge.py +1988 -0
  139. agno/knowledge/reader/__init__.py +7 -0
  140. agno/knowledge/reader/arxiv_reader.py +81 -0
  141. agno/knowledge/reader/base.py +95 -0
  142. agno/knowledge/reader/csv_reader.py +166 -0
  143. agno/knowledge/reader/docx_reader.py +82 -0
  144. agno/knowledge/reader/field_labeled_csv_reader.py +292 -0
  145. agno/knowledge/reader/firecrawl_reader.py +201 -0
  146. agno/knowledge/reader/json_reader.py +87 -0
  147. agno/knowledge/reader/markdown_reader.py +137 -0
  148. agno/knowledge/reader/pdf_reader.py +431 -0
  149. agno/knowledge/reader/pptx_reader.py +101 -0
  150. agno/knowledge/reader/reader_factory.py +313 -0
  151. agno/knowledge/reader/s3_reader.py +89 -0
  152. agno/knowledge/reader/tavily_reader.py +194 -0
  153. agno/knowledge/reader/text_reader.py +115 -0
  154. agno/knowledge/reader/web_search_reader.py +372 -0
  155. agno/knowledge/reader/website_reader.py +455 -0
  156. agno/knowledge/reader/wikipedia_reader.py +59 -0
  157. agno/knowledge/reader/youtube_reader.py +78 -0
  158. agno/knowledge/remote_content/__init__.py +0 -0
  159. agno/knowledge/remote_content/remote_content.py +88 -0
  160. agno/knowledge/reranker/__init__.py +3 -0
  161. agno/knowledge/reranker/base.py +14 -0
  162. agno/knowledge/reranker/cohere.py +64 -0
  163. agno/knowledge/reranker/infinity.py +195 -0
  164. agno/knowledge/reranker/sentence_transformer.py +54 -0
  165. agno/knowledge/types.py +39 -0
  166. agno/knowledge/utils.py +189 -0
  167. agno/media.py +462 -0
  168. agno/memory/__init__.py +3 -0
  169. agno/memory/manager.py +1327 -0
  170. agno/models/__init__.py +0 -0
  171. agno/models/aimlapi/__init__.py +5 -0
  172. agno/models/aimlapi/aimlapi.py +45 -0
  173. agno/models/anthropic/__init__.py +5 -0
  174. agno/models/anthropic/claude.py +757 -0
  175. agno/models/aws/__init__.py +15 -0
  176. agno/models/aws/bedrock.py +701 -0
  177. agno/models/aws/claude.py +378 -0
  178. agno/models/azure/__init__.py +18 -0
  179. agno/models/azure/ai_foundry.py +485 -0
  180. agno/models/azure/openai_chat.py +131 -0
  181. agno/models/base.py +2175 -0
  182. agno/models/cerebras/__init__.py +12 -0
  183. agno/models/cerebras/cerebras.py +501 -0
  184. agno/models/cerebras/cerebras_openai.py +112 -0
  185. agno/models/cohere/__init__.py +5 -0
  186. agno/models/cohere/chat.py +389 -0
  187. agno/models/cometapi/__init__.py +5 -0
  188. agno/models/cometapi/cometapi.py +57 -0
  189. agno/models/dashscope/__init__.py +5 -0
  190. agno/models/dashscope/dashscope.py +91 -0
  191. agno/models/deepinfra/__init__.py +5 -0
  192. agno/models/deepinfra/deepinfra.py +28 -0
  193. agno/models/deepseek/__init__.py +5 -0
  194. agno/models/deepseek/deepseek.py +61 -0
  195. agno/models/defaults.py +1 -0
  196. agno/models/fireworks/__init__.py +5 -0
  197. agno/models/fireworks/fireworks.py +26 -0
  198. agno/models/google/__init__.py +5 -0
  199. agno/models/google/gemini.py +1085 -0
  200. agno/models/groq/__init__.py +5 -0
  201. agno/models/groq/groq.py +556 -0
  202. agno/models/huggingface/__init__.py +5 -0
  203. agno/models/huggingface/huggingface.py +491 -0
  204. agno/models/ibm/__init__.py +5 -0
  205. agno/models/ibm/watsonx.py +422 -0
  206. agno/models/internlm/__init__.py +3 -0
  207. agno/models/internlm/internlm.py +26 -0
  208. agno/models/langdb/__init__.py +1 -0
  209. agno/models/langdb/langdb.py +48 -0
  210. agno/models/litellm/__init__.py +14 -0
  211. agno/models/litellm/chat.py +468 -0
  212. agno/models/litellm/litellm_openai.py +25 -0
  213. agno/models/llama_cpp/__init__.py +5 -0
  214. agno/models/llama_cpp/llama_cpp.py +22 -0
  215. agno/models/lmstudio/__init__.py +5 -0
  216. agno/models/lmstudio/lmstudio.py +25 -0
  217. agno/models/message.py +434 -0
  218. agno/models/meta/__init__.py +12 -0
  219. agno/models/meta/llama.py +475 -0
  220. agno/models/meta/llama_openai.py +78 -0
  221. agno/models/metrics.py +120 -0
  222. agno/models/mistral/__init__.py +5 -0
  223. agno/models/mistral/mistral.py +432 -0
  224. agno/models/nebius/__init__.py +3 -0
  225. agno/models/nebius/nebius.py +54 -0
  226. agno/models/nexus/__init__.py +3 -0
  227. agno/models/nexus/nexus.py +22 -0
  228. agno/models/nvidia/__init__.py +5 -0
  229. agno/models/nvidia/nvidia.py +28 -0
  230. agno/models/ollama/__init__.py +5 -0
  231. agno/models/ollama/chat.py +441 -0
  232. agno/models/openai/__init__.py +9 -0
  233. agno/models/openai/chat.py +883 -0
  234. agno/models/openai/like.py +27 -0
  235. agno/models/openai/responses.py +1050 -0
  236. agno/models/openrouter/__init__.py +5 -0
  237. agno/models/openrouter/openrouter.py +66 -0
  238. agno/models/perplexity/__init__.py +5 -0
  239. agno/models/perplexity/perplexity.py +187 -0
  240. agno/models/portkey/__init__.py +3 -0
  241. agno/models/portkey/portkey.py +81 -0
  242. agno/models/requesty/__init__.py +5 -0
  243. agno/models/requesty/requesty.py +52 -0
  244. agno/models/response.py +199 -0
  245. agno/models/sambanova/__init__.py +5 -0
  246. agno/models/sambanova/sambanova.py +28 -0
  247. agno/models/siliconflow/__init__.py +5 -0
  248. agno/models/siliconflow/siliconflow.py +25 -0
  249. agno/models/together/__init__.py +5 -0
  250. agno/models/together/together.py +25 -0
  251. agno/models/utils.py +266 -0
  252. agno/models/vercel/__init__.py +3 -0
  253. agno/models/vercel/v0.py +26 -0
  254. agno/models/vertexai/__init__.py +0 -0
  255. agno/models/vertexai/claude.py +70 -0
  256. agno/models/vllm/__init__.py +3 -0
  257. agno/models/vllm/vllm.py +78 -0
  258. agno/models/xai/__init__.py +3 -0
  259. agno/models/xai/xai.py +113 -0
  260. agno/os/__init__.py +3 -0
  261. agno/os/app.py +876 -0
  262. agno/os/auth.py +57 -0
  263. agno/os/config.py +104 -0
  264. agno/os/interfaces/__init__.py +1 -0
  265. agno/os/interfaces/a2a/__init__.py +3 -0
  266. agno/os/interfaces/a2a/a2a.py +42 -0
  267. agno/os/interfaces/a2a/router.py +250 -0
  268. agno/os/interfaces/a2a/utils.py +924 -0
  269. agno/os/interfaces/agui/__init__.py +3 -0
  270. agno/os/interfaces/agui/agui.py +47 -0
  271. agno/os/interfaces/agui/router.py +144 -0
  272. agno/os/interfaces/agui/utils.py +534 -0
  273. agno/os/interfaces/base.py +25 -0
  274. agno/os/interfaces/slack/__init__.py +3 -0
  275. agno/os/interfaces/slack/router.py +148 -0
  276. agno/os/interfaces/slack/security.py +30 -0
  277. agno/os/interfaces/slack/slack.py +47 -0
  278. agno/os/interfaces/whatsapp/__init__.py +3 -0
  279. agno/os/interfaces/whatsapp/router.py +211 -0
  280. agno/os/interfaces/whatsapp/security.py +53 -0
  281. agno/os/interfaces/whatsapp/whatsapp.py +36 -0
  282. agno/os/mcp.py +292 -0
  283. agno/os/middleware/__init__.py +7 -0
  284. agno/os/middleware/jwt.py +233 -0
  285. agno/os/router.py +1763 -0
  286. agno/os/routers/__init__.py +3 -0
  287. agno/os/routers/evals/__init__.py +3 -0
  288. agno/os/routers/evals/evals.py +430 -0
  289. agno/os/routers/evals/schemas.py +142 -0
  290. agno/os/routers/evals/utils.py +162 -0
  291. agno/os/routers/health.py +31 -0
  292. agno/os/routers/home.py +52 -0
  293. agno/os/routers/knowledge/__init__.py +3 -0
  294. agno/os/routers/knowledge/knowledge.py +997 -0
  295. agno/os/routers/knowledge/schemas.py +178 -0
  296. agno/os/routers/memory/__init__.py +3 -0
  297. agno/os/routers/memory/memory.py +515 -0
  298. agno/os/routers/memory/schemas.py +62 -0
  299. agno/os/routers/metrics/__init__.py +3 -0
  300. agno/os/routers/metrics/metrics.py +190 -0
  301. agno/os/routers/metrics/schemas.py +47 -0
  302. agno/os/routers/session/__init__.py +3 -0
  303. agno/os/routers/session/session.py +997 -0
  304. agno/os/schema.py +1055 -0
  305. agno/os/settings.py +43 -0
  306. agno/os/utils.py +630 -0
  307. agno/py.typed +0 -0
  308. agno/reasoning/__init__.py +0 -0
  309. agno/reasoning/anthropic.py +80 -0
  310. agno/reasoning/azure_ai_foundry.py +67 -0
  311. agno/reasoning/deepseek.py +63 -0
  312. agno/reasoning/default.py +97 -0
  313. agno/reasoning/gemini.py +73 -0
  314. agno/reasoning/groq.py +71 -0
  315. agno/reasoning/helpers.py +63 -0
  316. agno/reasoning/ollama.py +67 -0
  317. agno/reasoning/openai.py +86 -0
  318. agno/reasoning/step.py +31 -0
  319. agno/reasoning/vertexai.py +76 -0
  320. agno/run/__init__.py +6 -0
  321. agno/run/agent.py +787 -0
  322. agno/run/base.py +229 -0
  323. agno/run/cancel.py +81 -0
  324. agno/run/messages.py +32 -0
  325. agno/run/team.py +753 -0
  326. agno/run/workflow.py +708 -0
  327. agno/session/__init__.py +10 -0
  328. agno/session/agent.py +295 -0
  329. agno/session/summary.py +265 -0
  330. agno/session/team.py +392 -0
  331. agno/session/workflow.py +205 -0
  332. agno/team/__init__.py +37 -0
  333. agno/team/team.py +8793 -0
  334. agno/tools/__init__.py +10 -0
  335. agno/tools/agentql.py +120 -0
  336. agno/tools/airflow.py +69 -0
  337. agno/tools/api.py +122 -0
  338. agno/tools/apify.py +314 -0
  339. agno/tools/arxiv.py +127 -0
  340. agno/tools/aws_lambda.py +53 -0
  341. agno/tools/aws_ses.py +66 -0
  342. agno/tools/baidusearch.py +89 -0
  343. agno/tools/bitbucket.py +292 -0
  344. agno/tools/brandfetch.py +213 -0
  345. agno/tools/bravesearch.py +106 -0
  346. agno/tools/brightdata.py +367 -0
  347. agno/tools/browserbase.py +209 -0
  348. agno/tools/calcom.py +255 -0
  349. agno/tools/calculator.py +151 -0
  350. agno/tools/cartesia.py +187 -0
  351. agno/tools/clickup.py +244 -0
  352. agno/tools/confluence.py +240 -0
  353. agno/tools/crawl4ai.py +158 -0
  354. agno/tools/csv_toolkit.py +185 -0
  355. agno/tools/dalle.py +110 -0
  356. agno/tools/daytona.py +475 -0
  357. agno/tools/decorator.py +262 -0
  358. agno/tools/desi_vocal.py +108 -0
  359. agno/tools/discord.py +161 -0
  360. agno/tools/docker.py +716 -0
  361. agno/tools/duckdb.py +379 -0
  362. agno/tools/duckduckgo.py +91 -0
  363. agno/tools/e2b.py +703 -0
  364. agno/tools/eleven_labs.py +196 -0
  365. agno/tools/email.py +67 -0
  366. agno/tools/evm.py +129 -0
  367. agno/tools/exa.py +396 -0
  368. agno/tools/fal.py +127 -0
  369. agno/tools/file.py +240 -0
  370. agno/tools/file_generation.py +350 -0
  371. agno/tools/financial_datasets.py +288 -0
  372. agno/tools/firecrawl.py +143 -0
  373. agno/tools/function.py +1187 -0
  374. agno/tools/giphy.py +93 -0
  375. agno/tools/github.py +1760 -0
  376. agno/tools/gmail.py +922 -0
  377. agno/tools/google_bigquery.py +117 -0
  378. agno/tools/google_drive.py +270 -0
  379. agno/tools/google_maps.py +253 -0
  380. agno/tools/googlecalendar.py +674 -0
  381. agno/tools/googlesearch.py +98 -0
  382. agno/tools/googlesheets.py +377 -0
  383. agno/tools/hackernews.py +77 -0
  384. agno/tools/jina.py +101 -0
  385. agno/tools/jira.py +170 -0
  386. agno/tools/knowledge.py +218 -0
  387. agno/tools/linear.py +426 -0
  388. agno/tools/linkup.py +58 -0
  389. agno/tools/local_file_system.py +90 -0
  390. agno/tools/lumalab.py +183 -0
  391. agno/tools/mcp/__init__.py +10 -0
  392. agno/tools/mcp/mcp.py +331 -0
  393. agno/tools/mcp/multi_mcp.py +347 -0
  394. agno/tools/mcp/params.py +24 -0
  395. agno/tools/mcp_toolbox.py +284 -0
  396. agno/tools/mem0.py +193 -0
  397. agno/tools/memori.py +339 -0
  398. agno/tools/memory.py +419 -0
  399. agno/tools/mlx_transcribe.py +139 -0
  400. agno/tools/models/__init__.py +0 -0
  401. agno/tools/models/azure_openai.py +190 -0
  402. agno/tools/models/gemini.py +203 -0
  403. agno/tools/models/groq.py +158 -0
  404. agno/tools/models/morph.py +186 -0
  405. agno/tools/models/nebius.py +124 -0
  406. agno/tools/models_labs.py +195 -0
  407. agno/tools/moviepy_video.py +349 -0
  408. agno/tools/neo4j.py +134 -0
  409. agno/tools/newspaper.py +46 -0
  410. agno/tools/newspaper4k.py +93 -0
  411. agno/tools/notion.py +204 -0
  412. agno/tools/openai.py +202 -0
  413. agno/tools/openbb.py +160 -0
  414. agno/tools/opencv.py +321 -0
  415. agno/tools/openweather.py +233 -0
  416. agno/tools/oxylabs.py +385 -0
  417. agno/tools/pandas.py +102 -0
  418. agno/tools/parallel.py +314 -0
  419. agno/tools/postgres.py +257 -0
  420. agno/tools/pubmed.py +188 -0
  421. agno/tools/python.py +205 -0
  422. agno/tools/reasoning.py +283 -0
  423. agno/tools/reddit.py +467 -0
  424. agno/tools/replicate.py +117 -0
  425. agno/tools/resend.py +62 -0
  426. agno/tools/scrapegraph.py +222 -0
  427. agno/tools/searxng.py +152 -0
  428. agno/tools/serpapi.py +116 -0
  429. agno/tools/serper.py +255 -0
  430. agno/tools/shell.py +53 -0
  431. agno/tools/slack.py +136 -0
  432. agno/tools/sleep.py +20 -0
  433. agno/tools/spider.py +116 -0
  434. agno/tools/sql.py +154 -0
  435. agno/tools/streamlit/__init__.py +0 -0
  436. agno/tools/streamlit/components.py +113 -0
  437. agno/tools/tavily.py +254 -0
  438. agno/tools/telegram.py +48 -0
  439. agno/tools/todoist.py +218 -0
  440. agno/tools/tool_registry.py +1 -0
  441. agno/tools/toolkit.py +146 -0
  442. agno/tools/trafilatura.py +388 -0
  443. agno/tools/trello.py +274 -0
  444. agno/tools/twilio.py +186 -0
  445. agno/tools/user_control_flow.py +78 -0
  446. agno/tools/valyu.py +228 -0
  447. agno/tools/visualization.py +467 -0
  448. agno/tools/webbrowser.py +28 -0
  449. agno/tools/webex.py +76 -0
  450. agno/tools/website.py +54 -0
  451. agno/tools/webtools.py +45 -0
  452. agno/tools/whatsapp.py +286 -0
  453. agno/tools/wikipedia.py +63 -0
  454. agno/tools/workflow.py +278 -0
  455. agno/tools/x.py +335 -0
  456. agno/tools/yfinance.py +257 -0
  457. agno/tools/youtube.py +184 -0
  458. agno/tools/zendesk.py +82 -0
  459. agno/tools/zep.py +454 -0
  460. agno/tools/zoom.py +382 -0
  461. agno/utils/__init__.py +0 -0
  462. agno/utils/agent.py +820 -0
  463. agno/utils/audio.py +49 -0
  464. agno/utils/certs.py +27 -0
  465. agno/utils/code_execution.py +11 -0
  466. agno/utils/common.py +132 -0
  467. agno/utils/dttm.py +13 -0
  468. agno/utils/enum.py +22 -0
  469. agno/utils/env.py +11 -0
  470. agno/utils/events.py +696 -0
  471. agno/utils/format_str.py +16 -0
  472. agno/utils/functions.py +166 -0
  473. agno/utils/gemini.py +426 -0
  474. agno/utils/hooks.py +57 -0
  475. agno/utils/http.py +74 -0
  476. agno/utils/json_schema.py +234 -0
  477. agno/utils/knowledge.py +36 -0
  478. agno/utils/location.py +19 -0
  479. agno/utils/log.py +255 -0
  480. agno/utils/mcp.py +214 -0
  481. agno/utils/media.py +352 -0
  482. agno/utils/merge_dict.py +41 -0
  483. agno/utils/message.py +118 -0
  484. agno/utils/models/__init__.py +0 -0
  485. agno/utils/models/ai_foundry.py +43 -0
  486. agno/utils/models/claude.py +358 -0
  487. agno/utils/models/cohere.py +87 -0
  488. agno/utils/models/llama.py +78 -0
  489. agno/utils/models/mistral.py +98 -0
  490. agno/utils/models/openai_responses.py +140 -0
  491. agno/utils/models/schema_utils.py +153 -0
  492. agno/utils/models/watsonx.py +41 -0
  493. agno/utils/openai.py +257 -0
  494. agno/utils/pickle.py +32 -0
  495. agno/utils/pprint.py +178 -0
  496. agno/utils/print_response/__init__.py +0 -0
  497. agno/utils/print_response/agent.py +842 -0
  498. agno/utils/print_response/team.py +1724 -0
  499. agno/utils/print_response/workflow.py +1668 -0
  500. agno/utils/prompts.py +111 -0
  501. agno/utils/reasoning.py +108 -0
  502. agno/utils/response.py +163 -0
  503. agno/utils/response_iterator.py +17 -0
  504. agno/utils/safe_formatter.py +24 -0
  505. agno/utils/serialize.py +32 -0
  506. agno/utils/shell.py +22 -0
  507. agno/utils/streamlit.py +487 -0
  508. agno/utils/string.py +231 -0
  509. agno/utils/team.py +139 -0
  510. agno/utils/timer.py +41 -0
  511. agno/utils/tools.py +102 -0
  512. agno/utils/web.py +23 -0
  513. agno/utils/whatsapp.py +305 -0
  514. agno/utils/yaml_io.py +25 -0
  515. agno/vectordb/__init__.py +3 -0
  516. agno/vectordb/base.py +127 -0
  517. agno/vectordb/cassandra/__init__.py +5 -0
  518. agno/vectordb/cassandra/cassandra.py +501 -0
  519. agno/vectordb/cassandra/extra_param_mixin.py +11 -0
  520. agno/vectordb/cassandra/index.py +13 -0
  521. agno/vectordb/chroma/__init__.py +5 -0
  522. agno/vectordb/chroma/chromadb.py +929 -0
  523. agno/vectordb/clickhouse/__init__.py +9 -0
  524. agno/vectordb/clickhouse/clickhousedb.py +835 -0
  525. agno/vectordb/clickhouse/index.py +9 -0
  526. agno/vectordb/couchbase/__init__.py +3 -0
  527. agno/vectordb/couchbase/couchbase.py +1442 -0
  528. agno/vectordb/distance.py +7 -0
  529. agno/vectordb/lancedb/__init__.py +6 -0
  530. agno/vectordb/lancedb/lance_db.py +995 -0
  531. agno/vectordb/langchaindb/__init__.py +5 -0
  532. agno/vectordb/langchaindb/langchaindb.py +163 -0
  533. agno/vectordb/lightrag/__init__.py +5 -0
  534. agno/vectordb/lightrag/lightrag.py +388 -0
  535. agno/vectordb/llamaindex/__init__.py +3 -0
  536. agno/vectordb/llamaindex/llamaindexdb.py +166 -0
  537. agno/vectordb/milvus/__init__.py +4 -0
  538. agno/vectordb/milvus/milvus.py +1182 -0
  539. agno/vectordb/mongodb/__init__.py +9 -0
  540. agno/vectordb/mongodb/mongodb.py +1417 -0
  541. agno/vectordb/pgvector/__init__.py +12 -0
  542. agno/vectordb/pgvector/index.py +23 -0
  543. agno/vectordb/pgvector/pgvector.py +1462 -0
  544. agno/vectordb/pineconedb/__init__.py +5 -0
  545. agno/vectordb/pineconedb/pineconedb.py +747 -0
  546. agno/vectordb/qdrant/__init__.py +5 -0
  547. agno/vectordb/qdrant/qdrant.py +1134 -0
  548. agno/vectordb/redis/__init__.py +9 -0
  549. agno/vectordb/redis/redisdb.py +694 -0
  550. agno/vectordb/search.py +7 -0
  551. agno/vectordb/singlestore/__init__.py +10 -0
  552. agno/vectordb/singlestore/index.py +41 -0
  553. agno/vectordb/singlestore/singlestore.py +763 -0
  554. agno/vectordb/surrealdb/__init__.py +3 -0
  555. agno/vectordb/surrealdb/surrealdb.py +699 -0
  556. agno/vectordb/upstashdb/__init__.py +5 -0
  557. agno/vectordb/upstashdb/upstashdb.py +718 -0
  558. agno/vectordb/weaviate/__init__.py +8 -0
  559. agno/vectordb/weaviate/index.py +15 -0
  560. agno/vectordb/weaviate/weaviate.py +1005 -0
  561. agno/workflow/__init__.py +23 -0
  562. agno/workflow/agent.py +299 -0
  563. agno/workflow/condition.py +738 -0
  564. agno/workflow/loop.py +735 -0
  565. agno/workflow/parallel.py +824 -0
  566. agno/workflow/router.py +702 -0
  567. agno/workflow/step.py +1432 -0
  568. agno/workflow/steps.py +592 -0
  569. agno/workflow/types.py +520 -0
  570. agno/workflow/workflow.py +4321 -0
  571. agno-2.2.13.dist-info/METADATA +614 -0
  572. agno-2.2.13.dist-info/RECORD +575 -0
  573. agno-2.2.13.dist-info/WHEEL +5 -0
  574. agno-2.2.13.dist-info/licenses/LICENSE +201 -0
  575. agno-2.2.13.dist-info/top_level.txt +1 -0
@@ -0,0 +1,39 @@
1
+ from typing import List
2
+
3
+ from agno.knowledge.chunking.strategy import ChunkingStrategy
4
+ from agno.knowledge.document.base import Document
5
+
6
+
7
+ class RowChunking(ChunkingStrategy):
8
+ def __init__(self, skip_header: bool = False, clean_rows: bool = True):
9
+ self.skip_header = skip_header
10
+ self.clean_rows = clean_rows
11
+
12
+ def chunk(self, document: Document) -> List[Document]:
13
+ if not document or not document.content:
14
+ return []
15
+
16
+ if not isinstance(document.content, str):
17
+ raise ValueError("Document content must be a string")
18
+
19
+ rows = document.content.splitlines()
20
+
21
+ if self.skip_header and rows:
22
+ rows = rows[1:]
23
+ start_index = 2
24
+ else:
25
+ start_index = 1
26
+
27
+ chunks = []
28
+ for i, row in enumerate(rows):
29
+ if self.clean_rows:
30
+ chunk_content = " ".join(row.split()) # Normalize internal whitespace
31
+ else:
32
+ chunk_content = row.strip()
33
+
34
+ if chunk_content: # Skip empty rows
35
+ meta_data = document.meta_data.copy()
36
+ meta_data["row_number"] = start_index + i # Preserve logical row numbering
37
+ chunk_id = f"{document.id}_row_{start_index + i}" if document.id else None
38
+ chunks.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk_content))
39
+ return chunks
@@ -0,0 +1,86 @@
1
+ import inspect
2
+ from typing import Any, Dict, List, Optional
3
+
4
+ from agno.knowledge.chunking.strategy import ChunkingStrategy
5
+ from agno.knowledge.document.base import Document
6
+ from agno.knowledge.embedder.base import Embedder
7
+ from agno.knowledge.embedder.openai import OpenAIEmbedder
8
+
9
+
10
+ class SemanticChunking(ChunkingStrategy):
11
+ """Chunking strategy that splits text into semantic chunks using chonkie"""
12
+
13
+ def __init__(self, embedder: Optional[Embedder] = None, chunk_size: int = 5000, similarity_threshold: float = 0.5):
14
+ self.embedder = embedder or OpenAIEmbedder(id="text-embedding-3-small") # type: ignore
15
+ self.chunk_size = chunk_size
16
+ self.similarity_threshold = similarity_threshold
17
+ self.chunker = None # Will be initialized lazily when needed
18
+
19
+ def _initialize_chunker(self):
20
+ """Lazily initialize the chunker with chonkie dependency."""
21
+ if self.chunker is None:
22
+ try:
23
+ from chonkie import SemanticChunker
24
+ except ImportError:
25
+ raise ImportError(
26
+ "`chonkie` is required for semantic chunking. "
27
+ "Please install it using `pip install chonkie` to use SemanticChunking."
28
+ )
29
+
30
+ # Build arguments dynamically based on chonkie's supported signature
31
+ params: Dict[str, Any] = {
32
+ "chunk_size": self.chunk_size,
33
+ "threshold": self.similarity_threshold,
34
+ }
35
+
36
+ try:
37
+ sig = inspect.signature(SemanticChunker)
38
+ param_names = set(sig.parameters.keys())
39
+
40
+ # Prefer passing a callable to avoid Chonkie initializing its own client
41
+ if "embedding_fn" in param_names:
42
+ params["embedding_fn"] = self.embedder.get_embedding # type: ignore[attr-defined]
43
+ # If chonkie allows specifying dimensions, provide them
44
+ if "embedding_dimensions" in param_names and getattr(self.embedder, "dimensions", None):
45
+ params["embedding_dimensions"] = self.embedder.dimensions # type: ignore[attr-defined]
46
+ elif "embedder" in param_names:
47
+ # Some versions may accept an embedder object directly
48
+ params["embedder"] = self.embedder
49
+ else:
50
+ # Fallback to model id
51
+ params["embedding_model"] = getattr(self.embedder, "id", None) or "text-embedding-3-small"
52
+
53
+ self.chunker = SemanticChunker(**params)
54
+ except Exception:
55
+ # As a final fallback, use the original behavior
56
+ self.chunker = SemanticChunker(
57
+ embedding_model=getattr(self.embedder, "id", None) or "text-embedding-3-small",
58
+ chunk_size=self.chunk_size,
59
+ threshold=self.similarity_threshold,
60
+ )
61
+
62
+ def chunk(self, document: Document) -> List[Document]:
63
+ """Split document into semantic chunks using chonkie"""
64
+ if not document.content:
65
+ return [document]
66
+
67
+ # Ensure chunker is initialized (will raise ImportError if chonkie is missing)
68
+ self._initialize_chunker()
69
+
70
+ # Use chonkie to split into semantic chunks
71
+ if self.chunker is None:
72
+ raise RuntimeError("Chunker failed to initialize")
73
+
74
+ chunks = self.chunker.chunk(self.clean_text(document.content))
75
+
76
+ # Convert chunks to Documents
77
+ chunked_documents: List[Document] = []
78
+ for i, chunk in enumerate(chunks, 1):
79
+ meta_data = document.meta_data.copy()
80
+ meta_data["chunk"] = i
81
+ chunk_id = f"{document.id}_{i}" if document.id else None
82
+ meta_data["chunk_size"] = len(chunk.text)
83
+
84
+ chunked_documents.append(Document(id=chunk_id, name=document.name, meta_data=meta_data, content=chunk.text))
85
+
86
+ return chunked_documents
@@ -0,0 +1,165 @@
1
+ from abc import ABC, abstractmethod
2
+ from enum import Enum
3
+ from typing import List, Optional
4
+
5
+ from agno.knowledge.document.base import Document
6
+
7
+
8
+ class ChunkingStrategy(ABC):
9
+ """Base class for chunking strategies"""
10
+
11
+ @abstractmethod
12
+ def chunk(self, document: Document) -> List[Document]:
13
+ raise NotImplementedError
14
+
15
+ def clean_text(self, text: str) -> str:
16
+ """Clean the text by replacing multiple newlines with a single newline"""
17
+ import re
18
+
19
+ # Replace multiple newlines with a single newline
20
+ cleaned_text = re.sub(r"\n+", "\n", text)
21
+ # Replace multiple spaces with a single space
22
+ cleaned_text = re.sub(r"\s+", " ", cleaned_text)
23
+ # Replace multiple tabs with a single tab
24
+ cleaned_text = re.sub(r"\t+", "\t", cleaned_text)
25
+ # Replace multiple carriage returns with a single carriage return
26
+ cleaned_text = re.sub(r"\r+", "\r", cleaned_text)
27
+ # Replace multiple form feeds with a single form feed
28
+ cleaned_text = re.sub(r"\f+", "\f", cleaned_text)
29
+ # Replace multiple vertical tabs with a single vertical tab
30
+ cleaned_text = re.sub(r"\v+", "\v", cleaned_text)
31
+
32
+ return cleaned_text
33
+
34
+
35
+ class ChunkingStrategyType(str, Enum):
36
+ """Enumeration of available chunking strategies."""
37
+
38
+ AGENTIC_CHUNKER = "AgenticChunker"
39
+ DOCUMENT_CHUNKER = "DocumentChunker"
40
+ RECURSIVE_CHUNKER = "RecursiveChunker"
41
+ SEMANTIC_CHUNKER = "SemanticChunker"
42
+ FIXED_SIZE_CHUNKER = "FixedSizeChunker"
43
+ ROW_CHUNKER = "RowChunker"
44
+ MARKDOWN_CHUNKER = "MarkdownChunker"
45
+
46
+ @classmethod
47
+ def from_string(cls, strategy_name: str) -> "ChunkingStrategyType":
48
+ """Convert a string to a ChunkingStrategyType."""
49
+ strategy_name_clean = strategy_name.strip()
50
+
51
+ # Try exact enum value match first
52
+ for enum_member in cls:
53
+ if enum_member.value == strategy_name_clean:
54
+ return enum_member
55
+
56
+ raise ValueError(f"Unsupported chunking strategy: {strategy_name}. Valid options: {[e.value for e in cls]}")
57
+
58
+
59
+ class ChunkingStrategyFactory:
60
+ """Factory for creating chunking strategy instances."""
61
+
62
+ @classmethod
63
+ def create_strategy(
64
+ cls,
65
+ strategy_type: ChunkingStrategyType,
66
+ chunk_size: Optional[int] = None,
67
+ overlap: Optional[int] = None,
68
+ **kwargs,
69
+ ) -> ChunkingStrategy:
70
+ """Create an instance of the chunking strategy with the given parameters."""
71
+ strategy_map = {
72
+ ChunkingStrategyType.AGENTIC_CHUNKER: cls._create_agentic_chunking,
73
+ ChunkingStrategyType.DOCUMENT_CHUNKER: cls._create_document_chunking,
74
+ ChunkingStrategyType.RECURSIVE_CHUNKER: cls._create_recursive_chunking,
75
+ ChunkingStrategyType.SEMANTIC_CHUNKER: cls._create_semantic_chunking,
76
+ ChunkingStrategyType.FIXED_SIZE_CHUNKER: cls._create_fixed_chunking,
77
+ ChunkingStrategyType.ROW_CHUNKER: cls._create_row_chunking,
78
+ ChunkingStrategyType.MARKDOWN_CHUNKER: cls._create_markdown_chunking,
79
+ }
80
+ return strategy_map[strategy_type](chunk_size=chunk_size, overlap=overlap, **kwargs)
81
+
82
+ @classmethod
83
+ def _create_agentic_chunking(
84
+ cls, chunk_size: Optional[int] = None, overlap: Optional[int] = None, **kwargs
85
+ ) -> ChunkingStrategy:
86
+ from agno.knowledge.chunking.agentic import AgenticChunking
87
+
88
+ # AgenticChunking accepts max_chunk_size (not chunk_size) and no overlap
89
+ if chunk_size is not None:
90
+ kwargs["max_chunk_size"] = chunk_size
91
+ # Remove overlap since AgenticChunking doesn't support it
92
+ return AgenticChunking(**kwargs)
93
+
94
+ @classmethod
95
+ def _create_document_chunking(
96
+ cls, chunk_size: Optional[int] = None, overlap: Optional[int] = None, **kwargs
97
+ ) -> ChunkingStrategy:
98
+ from agno.knowledge.chunking.document import DocumentChunking
99
+
100
+ # DocumentChunking accepts both chunk_size and overlap
101
+ if chunk_size is not None:
102
+ kwargs["chunk_size"] = chunk_size
103
+ if overlap is not None:
104
+ kwargs["overlap"] = overlap
105
+ return DocumentChunking(**kwargs)
106
+
107
+ @classmethod
108
+ def _create_recursive_chunking(
109
+ cls, chunk_size: Optional[int] = None, overlap: Optional[int] = None, **kwargs
110
+ ) -> ChunkingStrategy:
111
+ from agno.knowledge.chunking.recursive import RecursiveChunking
112
+
113
+ # RecursiveChunking accepts both chunk_size and overlap
114
+ if chunk_size is not None:
115
+ kwargs["chunk_size"] = chunk_size
116
+ if overlap is not None:
117
+ kwargs["overlap"] = overlap
118
+ return RecursiveChunking(**kwargs)
119
+
120
+ @classmethod
121
+ def _create_semantic_chunking(
122
+ cls, chunk_size: Optional[int] = None, overlap: Optional[int] = None, **kwargs
123
+ ) -> ChunkingStrategy:
124
+ from agno.knowledge.chunking.semantic import SemanticChunking
125
+
126
+ # SemanticChunking accepts chunk_size but not overlap
127
+ if chunk_size is not None:
128
+ kwargs["chunk_size"] = chunk_size
129
+ # Remove overlap since SemanticChunking doesn't support it
130
+ return SemanticChunking(**kwargs)
131
+
132
+ @classmethod
133
+ def _create_fixed_chunking(
134
+ cls, chunk_size: Optional[int] = None, overlap: Optional[int] = None, **kwargs
135
+ ) -> ChunkingStrategy:
136
+ from agno.knowledge.chunking.fixed import FixedSizeChunking
137
+
138
+ # FixedSizeChunking accepts both chunk_size and overlap
139
+ if chunk_size is not None:
140
+ kwargs["chunk_size"] = chunk_size
141
+ if overlap is not None:
142
+ kwargs["overlap"] = overlap
143
+ return FixedSizeChunking(**kwargs)
144
+
145
+ @classmethod
146
+ def _create_row_chunking(
147
+ cls, chunk_size: Optional[int] = None, overlap: Optional[int] = None, **kwargs
148
+ ) -> ChunkingStrategy:
149
+ from agno.knowledge.chunking.row import RowChunking
150
+
151
+ # RowChunking doesn't accept chunk_size or overlap, only skip_header and clean_rows
152
+ return RowChunking(**kwargs)
153
+
154
+ @classmethod
155
+ def _create_markdown_chunking(
156
+ cls, chunk_size: Optional[int] = None, overlap: Optional[int] = None, **kwargs
157
+ ) -> ChunkingStrategy:
158
+ from agno.knowledge.chunking.markdown import MarkdownChunking
159
+
160
+ # MarkdownChunking accepts both chunk_size and overlap
161
+ if chunk_size is not None:
162
+ kwargs["chunk_size"] = chunk_size
163
+ if overlap is not None:
164
+ kwargs["overlap"] = overlap
165
+ return MarkdownChunking(**kwargs)
@@ -0,0 +1,74 @@
1
+ from dataclasses import dataclass
2
+ from enum import Enum
3
+ from typing import Any, Dict, List, Optional, Union
4
+
5
+ from agno.knowledge.reader import Reader
6
+ from agno.knowledge.remote_content.remote_content import RemoteContent
7
+
8
+
9
+ class ContentStatus(str, Enum):
10
+ """Enumeration of possible content processing statuses."""
11
+
12
+ PROCESSING = "processing"
13
+ COMPLETED = "completed"
14
+ FAILED = "failed"
15
+
16
+
17
+ @dataclass
18
+ class FileData:
19
+ content: Optional[Union[str, bytes]] = None
20
+ type: Optional[str] = None
21
+ filename: Optional[str] = None
22
+ size: Optional[int] = None
23
+
24
+
25
+ @dataclass
26
+ class ContentAuth:
27
+ password: Optional[str] = None
28
+
29
+
30
+ @dataclass
31
+ class Content:
32
+ id: Optional[str] = None
33
+ name: Optional[str] = None
34
+ description: Optional[str] = None
35
+ path: Optional[str] = None
36
+ url: Optional[str] = None
37
+ auth: Optional[ContentAuth] = None
38
+ file_data: Optional[FileData] = None
39
+ metadata: Optional[Dict[str, Any]] = None
40
+ topics: Optional[List[str]] = None
41
+ remote_content: Optional[RemoteContent] = None
42
+ reader: Optional[Reader] = None
43
+ size: Optional[int] = None
44
+ file_type: Optional[str] = None
45
+ content_hash: Optional[str] = None
46
+ status: Optional[ContentStatus] = None
47
+ status_message: Optional[str] = None
48
+ created_at: Optional[int] = None
49
+ updated_at: Optional[int] = None
50
+ external_id: Optional[str] = None
51
+
52
+ @classmethod
53
+ def from_dict(cls, data: Dict[str, Any]) -> "Content":
54
+ return cls(
55
+ id=data.get("id"),
56
+ name=data.get("name"),
57
+ description=data.get("description"),
58
+ path=data.get("path"),
59
+ url=data.get("url"),
60
+ auth=data.get("auth"),
61
+ file_data=data.get("file_data"),
62
+ metadata=data.get("metadata"),
63
+ topics=data.get("topics"),
64
+ remote_content=data.get("remote_content"),
65
+ reader=data.get("reader"),
66
+ size=data.get("size"),
67
+ file_type=data.get("file_type"),
68
+ content_hash=data.get("content_hash"),
69
+ status=data.get("status"),
70
+ status_message=data.get("status_message"),
71
+ created_at=data.get("created_at"),
72
+ updated_at=data.get("updated_at"),
73
+ external_id=data.get("external_id"),
74
+ )
@@ -0,0 +1,5 @@
1
+ from agno.knowledge.document.base import Document
2
+
3
+ __all__ = [
4
+ "Document",
5
+ ]
@@ -0,0 +1,58 @@
1
+ from dataclasses import dataclass, field
2
+ from typing import Any, Dict, List, Optional
3
+
4
+ from agno.knowledge.embedder import Embedder
5
+
6
+
7
+ @dataclass
8
+ class Document:
9
+ """Dataclass for managing a document"""
10
+
11
+ content: str
12
+ id: Optional[str] = None
13
+ name: Optional[str] = None
14
+ meta_data: Dict[str, Any] = field(default_factory=dict)
15
+ embedder: Optional["Embedder"] = None
16
+ embedding: Optional[List[float]] = None
17
+ usage: Optional[Dict[str, Any]] = None
18
+ reranking_score: Optional[float] = None
19
+ content_id: Optional[str] = None
20
+ content_origin: Optional[str] = None
21
+ size: Optional[int] = None
22
+
23
+ def embed(self, embedder: Optional[Embedder] = None) -> None:
24
+ """Embed the document using the provided embedder"""
25
+
26
+ _embedder = embedder or self.embedder
27
+ if _embedder is None:
28
+ raise ValueError("No embedder provided")
29
+
30
+ self.embedding, self.usage = _embedder.get_embedding_and_usage(self.content)
31
+
32
+ async def async_embed(self, embedder: Optional[Embedder] = None) -> None:
33
+ """Embed the document using the provided embedder"""
34
+ _embedder = embedder or self.embedder
35
+ if _embedder is None:
36
+ raise ValueError("No embedder provided")
37
+ self.embedding, self.usage = await _embedder.async_get_embedding_and_usage(self.content)
38
+
39
+ def to_dict(self) -> Dict[str, Any]:
40
+ """Returns a dictionary representation of the document"""
41
+ fields = {"name", "meta_data", "content"}
42
+ return {
43
+ field: getattr(self, field)
44
+ for field in fields
45
+ if getattr(self, field) is not None or field == "content" # content is always included
46
+ }
47
+
48
+ @classmethod
49
+ def from_dict(cls, document: Dict[str, Any]) -> "Document":
50
+ """Returns a Document object from a dictionary representation"""
51
+ return cls(**document)
52
+
53
+ @classmethod
54
+ def from_json(cls, document: str) -> "Document":
55
+ """Returns a Document object from a json string representation"""
56
+ import json
57
+
58
+ return cls(**json.loads(document))
@@ -0,0 +1,5 @@
1
+ from agno.knowledge.embedder.base import Embedder
2
+
3
+ __all__ = [
4
+ "Embedder",
5
+ ]