ai-parrot 0.17.2__cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.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 (535) hide show
  1. agentui/.prettierrc +15 -0
  2. agentui/QUICKSTART.md +272 -0
  3. agentui/README.md +59 -0
  4. agentui/env.example +16 -0
  5. agentui/jsconfig.json +14 -0
  6. agentui/package-lock.json +4242 -0
  7. agentui/package.json +34 -0
  8. agentui/scripts/postinstall/apply-patches.mjs +260 -0
  9. agentui/src/app.css +61 -0
  10. agentui/src/app.d.ts +13 -0
  11. agentui/src/app.html +12 -0
  12. agentui/src/components/LoadingSpinner.svelte +64 -0
  13. agentui/src/components/ThemeSwitcher.svelte +159 -0
  14. agentui/src/components/index.js +4 -0
  15. agentui/src/lib/api/bots.ts +60 -0
  16. agentui/src/lib/api/chat.ts +22 -0
  17. agentui/src/lib/api/http.ts +25 -0
  18. agentui/src/lib/components/BotCard.svelte +33 -0
  19. agentui/src/lib/components/ChatBubble.svelte +63 -0
  20. agentui/src/lib/components/Toast.svelte +21 -0
  21. agentui/src/lib/config.ts +20 -0
  22. agentui/src/lib/stores/auth.svelte.ts +73 -0
  23. agentui/src/lib/stores/theme.svelte.js +64 -0
  24. agentui/src/lib/stores/toast.svelte.ts +31 -0
  25. agentui/src/lib/utils/conversation.ts +39 -0
  26. agentui/src/routes/+layout.svelte +20 -0
  27. agentui/src/routes/+page.svelte +232 -0
  28. agentui/src/routes/login/+page.svelte +200 -0
  29. agentui/src/routes/talk/[agentId]/+page.svelte +297 -0
  30. agentui/src/routes/talk/[agentId]/+page.ts +7 -0
  31. agentui/static/README.md +1 -0
  32. agentui/svelte.config.js +11 -0
  33. agentui/tailwind.config.ts +53 -0
  34. agentui/tsconfig.json +3 -0
  35. agentui/vite.config.ts +10 -0
  36. ai_parrot-0.17.2.dist-info/METADATA +472 -0
  37. ai_parrot-0.17.2.dist-info/RECORD +535 -0
  38. ai_parrot-0.17.2.dist-info/WHEEL +6 -0
  39. ai_parrot-0.17.2.dist-info/entry_points.txt +2 -0
  40. ai_parrot-0.17.2.dist-info/licenses/LICENSE +21 -0
  41. ai_parrot-0.17.2.dist-info/top_level.txt +6 -0
  42. crew-builder/.prettierrc +15 -0
  43. crew-builder/QUICKSTART.md +259 -0
  44. crew-builder/README.md +113 -0
  45. crew-builder/env.example +17 -0
  46. crew-builder/jsconfig.json +14 -0
  47. crew-builder/package-lock.json +4182 -0
  48. crew-builder/package.json +37 -0
  49. crew-builder/scripts/postinstall/apply-patches.mjs +260 -0
  50. crew-builder/src/app.css +62 -0
  51. crew-builder/src/app.d.ts +13 -0
  52. crew-builder/src/app.html +12 -0
  53. crew-builder/src/components/LoadingSpinner.svelte +64 -0
  54. crew-builder/src/components/ThemeSwitcher.svelte +149 -0
  55. crew-builder/src/components/index.js +9 -0
  56. crew-builder/src/lib/api/bots.ts +60 -0
  57. crew-builder/src/lib/api/chat.ts +80 -0
  58. crew-builder/src/lib/api/client.ts +56 -0
  59. crew-builder/src/lib/api/crew/crew.ts +136 -0
  60. crew-builder/src/lib/api/index.ts +5 -0
  61. crew-builder/src/lib/api/o365/auth.ts +65 -0
  62. crew-builder/src/lib/auth/auth.ts +54 -0
  63. crew-builder/src/lib/components/AgentNode.svelte +43 -0
  64. crew-builder/src/lib/components/BotCard.svelte +33 -0
  65. crew-builder/src/lib/components/ChatBubble.svelte +67 -0
  66. crew-builder/src/lib/components/ConfigPanel.svelte +278 -0
  67. crew-builder/src/lib/components/JsonTreeNode.svelte +76 -0
  68. crew-builder/src/lib/components/JsonViewer.svelte +24 -0
  69. crew-builder/src/lib/components/MarkdownEditor.svelte +48 -0
  70. crew-builder/src/lib/components/ThemeToggle.svelte +36 -0
  71. crew-builder/src/lib/components/Toast.svelte +67 -0
  72. crew-builder/src/lib/components/Toolbar.svelte +157 -0
  73. crew-builder/src/lib/components/index.ts +10 -0
  74. crew-builder/src/lib/config.ts +8 -0
  75. crew-builder/src/lib/stores/auth.svelte.ts +228 -0
  76. crew-builder/src/lib/stores/crewStore.ts +369 -0
  77. crew-builder/src/lib/stores/theme.svelte.js +145 -0
  78. crew-builder/src/lib/stores/toast.svelte.ts +69 -0
  79. crew-builder/src/lib/utils/conversation.ts +39 -0
  80. crew-builder/src/lib/utils/markdown.ts +122 -0
  81. crew-builder/src/lib/utils/talkHistory.ts +47 -0
  82. crew-builder/src/routes/+layout.svelte +20 -0
  83. crew-builder/src/routes/+page.svelte +539 -0
  84. crew-builder/src/routes/agents/+page.svelte +247 -0
  85. crew-builder/src/routes/agents/[agentId]/+page.svelte +288 -0
  86. crew-builder/src/routes/agents/[agentId]/+page.ts +7 -0
  87. crew-builder/src/routes/builder/+page.svelte +204 -0
  88. crew-builder/src/routes/crew/ask/+page.svelte +1052 -0
  89. crew-builder/src/routes/crew/ask/+page.ts +1 -0
  90. crew-builder/src/routes/integrations/o365/+page.svelte +304 -0
  91. crew-builder/src/routes/login/+page.svelte +197 -0
  92. crew-builder/src/routes/talk/[agentId]/+page.svelte +487 -0
  93. crew-builder/src/routes/talk/[agentId]/+page.ts +7 -0
  94. crew-builder/static/README.md +1 -0
  95. crew-builder/svelte.config.js +11 -0
  96. crew-builder/tailwind.config.ts +53 -0
  97. crew-builder/tsconfig.json +3 -0
  98. crew-builder/vite.config.ts +10 -0
  99. mcp_servers/calculator_server.py +309 -0
  100. parrot/__init__.py +27 -0
  101. parrot/__pycache__/__init__.cpython-310.pyc +0 -0
  102. parrot/__pycache__/version.cpython-310.pyc +0 -0
  103. parrot/_version.py +34 -0
  104. parrot/a2a/__init__.py +48 -0
  105. parrot/a2a/client.py +658 -0
  106. parrot/a2a/discovery.py +89 -0
  107. parrot/a2a/mixin.py +257 -0
  108. parrot/a2a/models.py +376 -0
  109. parrot/a2a/server.py +770 -0
  110. parrot/agents/__init__.py +29 -0
  111. parrot/bots/__init__.py +12 -0
  112. parrot/bots/a2a_agent.py +19 -0
  113. parrot/bots/abstract.py +3139 -0
  114. parrot/bots/agent.py +1129 -0
  115. parrot/bots/basic.py +9 -0
  116. parrot/bots/chatbot.py +669 -0
  117. parrot/bots/data.py +1618 -0
  118. parrot/bots/database/__init__.py +5 -0
  119. parrot/bots/database/abstract.py +3071 -0
  120. parrot/bots/database/cache.py +286 -0
  121. parrot/bots/database/models.py +468 -0
  122. parrot/bots/database/prompts.py +154 -0
  123. parrot/bots/database/retries.py +98 -0
  124. parrot/bots/database/router.py +269 -0
  125. parrot/bots/database/sql.py +41 -0
  126. parrot/bots/db/__init__.py +6 -0
  127. parrot/bots/db/abstract.py +556 -0
  128. parrot/bots/db/bigquery.py +602 -0
  129. parrot/bots/db/cache.py +85 -0
  130. parrot/bots/db/documentdb.py +668 -0
  131. parrot/bots/db/elastic.py +1014 -0
  132. parrot/bots/db/influx.py +898 -0
  133. parrot/bots/db/mock.py +96 -0
  134. parrot/bots/db/multi.py +783 -0
  135. parrot/bots/db/prompts.py +185 -0
  136. parrot/bots/db/sql.py +1255 -0
  137. parrot/bots/db/tools.py +212 -0
  138. parrot/bots/document.py +680 -0
  139. parrot/bots/hrbot.py +15 -0
  140. parrot/bots/kb.py +170 -0
  141. parrot/bots/mcp.py +36 -0
  142. parrot/bots/orchestration/README.md +463 -0
  143. parrot/bots/orchestration/__init__.py +1 -0
  144. parrot/bots/orchestration/agent.py +155 -0
  145. parrot/bots/orchestration/crew.py +3330 -0
  146. parrot/bots/orchestration/fsm.py +1179 -0
  147. parrot/bots/orchestration/hr.py +434 -0
  148. parrot/bots/orchestration/storage/__init__.py +4 -0
  149. parrot/bots/orchestration/storage/memory.py +100 -0
  150. parrot/bots/orchestration/storage/mixin.py +119 -0
  151. parrot/bots/orchestration/verify.py +202 -0
  152. parrot/bots/product.py +204 -0
  153. parrot/bots/prompts/__init__.py +96 -0
  154. parrot/bots/prompts/agents.py +155 -0
  155. parrot/bots/prompts/data.py +216 -0
  156. parrot/bots/prompts/output_generation.py +8 -0
  157. parrot/bots/scraper/__init__.py +3 -0
  158. parrot/bots/scraper/models.py +122 -0
  159. parrot/bots/scraper/scraper.py +1173 -0
  160. parrot/bots/scraper/templates.py +115 -0
  161. parrot/bots/stores/__init__.py +5 -0
  162. parrot/bots/stores/local.py +172 -0
  163. parrot/bots/webdev.py +81 -0
  164. parrot/cli.py +17 -0
  165. parrot/clients/__init__.py +16 -0
  166. parrot/clients/base.py +1491 -0
  167. parrot/clients/claude.py +1191 -0
  168. parrot/clients/factory.py +129 -0
  169. parrot/clients/google.py +4567 -0
  170. parrot/clients/gpt.py +1975 -0
  171. parrot/clients/grok.py +432 -0
  172. parrot/clients/groq.py +986 -0
  173. parrot/clients/hf.py +582 -0
  174. parrot/clients/models.py +18 -0
  175. parrot/conf.py +395 -0
  176. parrot/embeddings/__init__.py +9 -0
  177. parrot/embeddings/base.py +157 -0
  178. parrot/embeddings/google.py +98 -0
  179. parrot/embeddings/huggingface.py +74 -0
  180. parrot/embeddings/openai.py +84 -0
  181. parrot/embeddings/processor.py +88 -0
  182. parrot/exceptions.c +13868 -0
  183. parrot/exceptions.cpython-310-x86_64-linux-gnu.so +0 -0
  184. parrot/exceptions.pxd +22 -0
  185. parrot/exceptions.pxi +15 -0
  186. parrot/exceptions.pyx +44 -0
  187. parrot/generators/__init__.py +29 -0
  188. parrot/generators/base.py +200 -0
  189. parrot/generators/html.py +293 -0
  190. parrot/generators/react.py +205 -0
  191. parrot/generators/streamlit.py +203 -0
  192. parrot/generators/template.py +105 -0
  193. parrot/handlers/__init__.py +4 -0
  194. parrot/handlers/agent.py +861 -0
  195. parrot/handlers/agents/__init__.py +1 -0
  196. parrot/handlers/agents/abstract.py +900 -0
  197. parrot/handlers/bots.py +338 -0
  198. parrot/handlers/chat.py +915 -0
  199. parrot/handlers/creation.sql +192 -0
  200. parrot/handlers/crew/ARCHITECTURE.md +362 -0
  201. parrot/handlers/crew/README_BOTMANAGER_PERSISTENCE.md +303 -0
  202. parrot/handlers/crew/README_REDIS_PERSISTENCE.md +366 -0
  203. parrot/handlers/crew/__init__.py +0 -0
  204. parrot/handlers/crew/handler.py +801 -0
  205. parrot/handlers/crew/models.py +229 -0
  206. parrot/handlers/crew/redis_persistence.py +523 -0
  207. parrot/handlers/jobs/__init__.py +10 -0
  208. parrot/handlers/jobs/job.py +384 -0
  209. parrot/handlers/jobs/mixin.py +627 -0
  210. parrot/handlers/jobs/models.py +115 -0
  211. parrot/handlers/jobs/worker.py +31 -0
  212. parrot/handlers/models.py +596 -0
  213. parrot/handlers/o365_auth.py +105 -0
  214. parrot/handlers/stream.py +337 -0
  215. parrot/interfaces/__init__.py +6 -0
  216. parrot/interfaces/aws.py +143 -0
  217. parrot/interfaces/credentials.py +113 -0
  218. parrot/interfaces/database.py +27 -0
  219. parrot/interfaces/google.py +1123 -0
  220. parrot/interfaces/hierarchy.py +1227 -0
  221. parrot/interfaces/http.py +651 -0
  222. parrot/interfaces/images/__init__.py +0 -0
  223. parrot/interfaces/images/plugins/__init__.py +24 -0
  224. parrot/interfaces/images/plugins/abstract.py +58 -0
  225. parrot/interfaces/images/plugins/analisys.py +148 -0
  226. parrot/interfaces/images/plugins/classify.py +150 -0
  227. parrot/interfaces/images/plugins/classifybase.py +182 -0
  228. parrot/interfaces/images/plugins/detect.py +150 -0
  229. parrot/interfaces/images/plugins/exif.py +1103 -0
  230. parrot/interfaces/images/plugins/hash.py +52 -0
  231. parrot/interfaces/images/plugins/vision.py +104 -0
  232. parrot/interfaces/images/plugins/yolo.py +66 -0
  233. parrot/interfaces/images/plugins/zerodetect.py +197 -0
  234. parrot/interfaces/o365.py +978 -0
  235. parrot/interfaces/onedrive.py +822 -0
  236. parrot/interfaces/sharepoint.py +1435 -0
  237. parrot/interfaces/soap.py +257 -0
  238. parrot/loaders/__init__.py +8 -0
  239. parrot/loaders/abstract.py +1131 -0
  240. parrot/loaders/audio.py +199 -0
  241. parrot/loaders/basepdf.py +53 -0
  242. parrot/loaders/basevideo.py +1568 -0
  243. parrot/loaders/csv.py +409 -0
  244. parrot/loaders/docx.py +116 -0
  245. parrot/loaders/epubloader.py +316 -0
  246. parrot/loaders/excel.py +199 -0
  247. parrot/loaders/factory.py +55 -0
  248. parrot/loaders/files/__init__.py +0 -0
  249. parrot/loaders/files/abstract.py +39 -0
  250. parrot/loaders/files/html.py +26 -0
  251. parrot/loaders/files/text.py +63 -0
  252. parrot/loaders/html.py +152 -0
  253. parrot/loaders/markdown.py +442 -0
  254. parrot/loaders/pdf.py +373 -0
  255. parrot/loaders/pdfmark.py +320 -0
  256. parrot/loaders/pdftables.py +506 -0
  257. parrot/loaders/ppt.py +476 -0
  258. parrot/loaders/qa.py +63 -0
  259. parrot/loaders/splitters/__init__.py +10 -0
  260. parrot/loaders/splitters/base.py +138 -0
  261. parrot/loaders/splitters/md.py +228 -0
  262. parrot/loaders/splitters/token.py +143 -0
  263. parrot/loaders/txt.py +26 -0
  264. parrot/loaders/video.py +89 -0
  265. parrot/loaders/videolocal.py +218 -0
  266. parrot/loaders/videounderstanding.py +377 -0
  267. parrot/loaders/vimeo.py +167 -0
  268. parrot/loaders/web.py +599 -0
  269. parrot/loaders/youtube.py +504 -0
  270. parrot/manager/__init__.py +5 -0
  271. parrot/manager/manager.py +1030 -0
  272. parrot/mcp/__init__.py +28 -0
  273. parrot/mcp/adapter.py +105 -0
  274. parrot/mcp/cli.py +174 -0
  275. parrot/mcp/client.py +119 -0
  276. parrot/mcp/config.py +75 -0
  277. parrot/mcp/integration.py +842 -0
  278. parrot/mcp/oauth.py +933 -0
  279. parrot/mcp/server.py +225 -0
  280. parrot/mcp/transports/__init__.py +3 -0
  281. parrot/mcp/transports/base.py +279 -0
  282. parrot/mcp/transports/grpc_session.py +163 -0
  283. parrot/mcp/transports/http.py +312 -0
  284. parrot/mcp/transports/mcp.proto +108 -0
  285. parrot/mcp/transports/quic.py +1082 -0
  286. parrot/mcp/transports/sse.py +330 -0
  287. parrot/mcp/transports/stdio.py +309 -0
  288. parrot/mcp/transports/unix.py +395 -0
  289. parrot/mcp/transports/websocket.py +547 -0
  290. parrot/memory/__init__.py +16 -0
  291. parrot/memory/abstract.py +209 -0
  292. parrot/memory/agent.py +32 -0
  293. parrot/memory/cache.py +175 -0
  294. parrot/memory/core.py +555 -0
  295. parrot/memory/file.py +153 -0
  296. parrot/memory/mem.py +131 -0
  297. parrot/memory/redis.py +613 -0
  298. parrot/models/__init__.py +46 -0
  299. parrot/models/basic.py +118 -0
  300. parrot/models/compliance.py +208 -0
  301. parrot/models/crew.py +395 -0
  302. parrot/models/detections.py +654 -0
  303. parrot/models/generation.py +85 -0
  304. parrot/models/google.py +223 -0
  305. parrot/models/groq.py +23 -0
  306. parrot/models/openai.py +30 -0
  307. parrot/models/outputs.py +285 -0
  308. parrot/models/responses.py +938 -0
  309. parrot/notifications/__init__.py +743 -0
  310. parrot/openapi/__init__.py +3 -0
  311. parrot/openapi/components.yaml +641 -0
  312. parrot/openapi/config.py +322 -0
  313. parrot/outputs/__init__.py +32 -0
  314. parrot/outputs/formats/__init__.py +108 -0
  315. parrot/outputs/formats/altair.py +359 -0
  316. parrot/outputs/formats/application.py +122 -0
  317. parrot/outputs/formats/base.py +351 -0
  318. parrot/outputs/formats/bokeh.py +356 -0
  319. parrot/outputs/formats/card.py +424 -0
  320. parrot/outputs/formats/chart.py +436 -0
  321. parrot/outputs/formats/d3.py +255 -0
  322. parrot/outputs/formats/echarts.py +310 -0
  323. parrot/outputs/formats/generators/__init__.py +0 -0
  324. parrot/outputs/formats/generators/abstract.py +61 -0
  325. parrot/outputs/formats/generators/panel.py +145 -0
  326. parrot/outputs/formats/generators/streamlit.py +86 -0
  327. parrot/outputs/formats/generators/terminal.py +63 -0
  328. parrot/outputs/formats/holoviews.py +310 -0
  329. parrot/outputs/formats/html.py +147 -0
  330. parrot/outputs/formats/jinja2.py +46 -0
  331. parrot/outputs/formats/json.py +87 -0
  332. parrot/outputs/formats/map.py +933 -0
  333. parrot/outputs/formats/markdown.py +172 -0
  334. parrot/outputs/formats/matplotlib.py +237 -0
  335. parrot/outputs/formats/mixins/__init__.py +0 -0
  336. parrot/outputs/formats/mixins/emaps.py +855 -0
  337. parrot/outputs/formats/plotly.py +341 -0
  338. parrot/outputs/formats/seaborn.py +310 -0
  339. parrot/outputs/formats/table.py +397 -0
  340. parrot/outputs/formats/template_report.py +138 -0
  341. parrot/outputs/formats/yaml.py +125 -0
  342. parrot/outputs/formatter.py +152 -0
  343. parrot/outputs/templates/__init__.py +95 -0
  344. parrot/pipelines/__init__.py +0 -0
  345. parrot/pipelines/abstract.py +210 -0
  346. parrot/pipelines/detector.py +124 -0
  347. parrot/pipelines/models.py +90 -0
  348. parrot/pipelines/planogram.py +3002 -0
  349. parrot/pipelines/table.sql +97 -0
  350. parrot/plugins/__init__.py +106 -0
  351. parrot/plugins/importer.py +80 -0
  352. parrot/py.typed +0 -0
  353. parrot/registry/__init__.py +18 -0
  354. parrot/registry/registry.py +594 -0
  355. parrot/scheduler/__init__.py +1189 -0
  356. parrot/scheduler/models.py +60 -0
  357. parrot/security/__init__.py +16 -0
  358. parrot/security/prompt_injection.py +268 -0
  359. parrot/security/security_events.sql +25 -0
  360. parrot/services/__init__.py +1 -0
  361. parrot/services/mcp/__init__.py +8 -0
  362. parrot/services/mcp/config.py +13 -0
  363. parrot/services/mcp/server.py +295 -0
  364. parrot/services/o365_remote_auth.py +235 -0
  365. parrot/stores/__init__.py +7 -0
  366. parrot/stores/abstract.py +352 -0
  367. parrot/stores/arango.py +1090 -0
  368. parrot/stores/bigquery.py +1377 -0
  369. parrot/stores/cache.py +106 -0
  370. parrot/stores/empty.py +10 -0
  371. parrot/stores/faiss_store.py +1157 -0
  372. parrot/stores/kb/__init__.py +9 -0
  373. parrot/stores/kb/abstract.py +68 -0
  374. parrot/stores/kb/cache.py +165 -0
  375. parrot/stores/kb/doc.py +325 -0
  376. parrot/stores/kb/hierarchy.py +346 -0
  377. parrot/stores/kb/local.py +457 -0
  378. parrot/stores/kb/prompt.py +28 -0
  379. parrot/stores/kb/redis.py +659 -0
  380. parrot/stores/kb/store.py +115 -0
  381. parrot/stores/kb/user.py +374 -0
  382. parrot/stores/models.py +59 -0
  383. parrot/stores/pgvector.py +3 -0
  384. parrot/stores/postgres.py +2853 -0
  385. parrot/stores/utils/__init__.py +0 -0
  386. parrot/stores/utils/chunking.py +197 -0
  387. parrot/telemetry/__init__.py +3 -0
  388. parrot/telemetry/mixin.py +111 -0
  389. parrot/template/__init__.py +3 -0
  390. parrot/template/engine.py +259 -0
  391. parrot/tools/__init__.py +23 -0
  392. parrot/tools/abstract.py +644 -0
  393. parrot/tools/agent.py +363 -0
  394. parrot/tools/arangodbsearch.py +537 -0
  395. parrot/tools/arxiv_tool.py +188 -0
  396. parrot/tools/calculator/__init__.py +3 -0
  397. parrot/tools/calculator/operations/__init__.py +38 -0
  398. parrot/tools/calculator/operations/calculus.py +80 -0
  399. parrot/tools/calculator/operations/statistics.py +76 -0
  400. parrot/tools/calculator/tool.py +150 -0
  401. parrot/tools/cloudwatch.py +988 -0
  402. parrot/tools/codeinterpreter/__init__.py +127 -0
  403. parrot/tools/codeinterpreter/executor.py +371 -0
  404. parrot/tools/codeinterpreter/internals.py +473 -0
  405. parrot/tools/codeinterpreter/models.py +643 -0
  406. parrot/tools/codeinterpreter/prompts.py +224 -0
  407. parrot/tools/codeinterpreter/tool.py +664 -0
  408. parrot/tools/company_info/__init__.py +6 -0
  409. parrot/tools/company_info/tool.py +1138 -0
  410. parrot/tools/correlationanalysis.py +437 -0
  411. parrot/tools/database/abstract.py +286 -0
  412. parrot/tools/database/bq.py +115 -0
  413. parrot/tools/database/cache.py +284 -0
  414. parrot/tools/database/models.py +95 -0
  415. parrot/tools/database/pg.py +343 -0
  416. parrot/tools/databasequery.py +1159 -0
  417. parrot/tools/db.py +1800 -0
  418. parrot/tools/ddgo.py +370 -0
  419. parrot/tools/decorators.py +271 -0
  420. parrot/tools/dftohtml.py +282 -0
  421. parrot/tools/document.py +549 -0
  422. parrot/tools/ecs.py +819 -0
  423. parrot/tools/edareport.py +368 -0
  424. parrot/tools/elasticsearch.py +1049 -0
  425. parrot/tools/employees.py +462 -0
  426. parrot/tools/epson/__init__.py +96 -0
  427. parrot/tools/excel.py +683 -0
  428. parrot/tools/file/__init__.py +13 -0
  429. parrot/tools/file/abstract.py +76 -0
  430. parrot/tools/file/gcs.py +378 -0
  431. parrot/tools/file/local.py +284 -0
  432. parrot/tools/file/s3.py +511 -0
  433. parrot/tools/file/tmp.py +309 -0
  434. parrot/tools/file/tool.py +501 -0
  435. parrot/tools/file_reader.py +129 -0
  436. parrot/tools/flowtask/__init__.py +19 -0
  437. parrot/tools/flowtask/tool.py +761 -0
  438. parrot/tools/gittoolkit.py +508 -0
  439. parrot/tools/google/__init__.py +18 -0
  440. parrot/tools/google/base.py +169 -0
  441. parrot/tools/google/tools.py +1251 -0
  442. parrot/tools/googlelocation.py +5 -0
  443. parrot/tools/googleroutes.py +5 -0
  444. parrot/tools/googlesearch.py +5 -0
  445. parrot/tools/googlesitesearch.py +5 -0
  446. parrot/tools/googlevoice.py +2 -0
  447. parrot/tools/gvoice.py +695 -0
  448. parrot/tools/ibisworld/README.md +225 -0
  449. parrot/tools/ibisworld/__init__.py +11 -0
  450. parrot/tools/ibisworld/tool.py +366 -0
  451. parrot/tools/jiratoolkit.py +1718 -0
  452. parrot/tools/manager.py +1098 -0
  453. parrot/tools/math.py +152 -0
  454. parrot/tools/metadata.py +476 -0
  455. parrot/tools/msteams.py +1621 -0
  456. parrot/tools/msword.py +635 -0
  457. parrot/tools/multidb.py +580 -0
  458. parrot/tools/multistoresearch.py +369 -0
  459. parrot/tools/networkninja.py +167 -0
  460. parrot/tools/nextstop/__init__.py +4 -0
  461. parrot/tools/nextstop/base.py +286 -0
  462. parrot/tools/nextstop/employee.py +733 -0
  463. parrot/tools/nextstop/store.py +462 -0
  464. parrot/tools/notification.py +435 -0
  465. parrot/tools/o365/__init__.py +42 -0
  466. parrot/tools/o365/base.py +295 -0
  467. parrot/tools/o365/bundle.py +522 -0
  468. parrot/tools/o365/events.py +554 -0
  469. parrot/tools/o365/mail.py +992 -0
  470. parrot/tools/o365/onedrive.py +497 -0
  471. parrot/tools/o365/sharepoint.py +641 -0
  472. parrot/tools/openapi_toolkit.py +904 -0
  473. parrot/tools/openweather.py +527 -0
  474. parrot/tools/pdfprint.py +1001 -0
  475. parrot/tools/powerbi.py +518 -0
  476. parrot/tools/powerpoint.py +1113 -0
  477. parrot/tools/pricestool.py +146 -0
  478. parrot/tools/products/__init__.py +246 -0
  479. parrot/tools/prophet_tool.py +171 -0
  480. parrot/tools/pythonpandas.py +630 -0
  481. parrot/tools/pythonrepl.py +910 -0
  482. parrot/tools/qsource.py +436 -0
  483. parrot/tools/querytoolkit.py +395 -0
  484. parrot/tools/quickeda.py +827 -0
  485. parrot/tools/resttool.py +553 -0
  486. parrot/tools/retail/__init__.py +0 -0
  487. parrot/tools/retail/bby.py +528 -0
  488. parrot/tools/sandboxtool.py +703 -0
  489. parrot/tools/sassie/__init__.py +352 -0
  490. parrot/tools/scraping/__init__.py +7 -0
  491. parrot/tools/scraping/docs/select.md +466 -0
  492. parrot/tools/scraping/documentation.md +1278 -0
  493. parrot/tools/scraping/driver.py +436 -0
  494. parrot/tools/scraping/models.py +576 -0
  495. parrot/tools/scraping/options.py +85 -0
  496. parrot/tools/scraping/orchestrator.py +517 -0
  497. parrot/tools/scraping/readme.md +740 -0
  498. parrot/tools/scraping/tool.py +3115 -0
  499. parrot/tools/seasonaldetection.py +642 -0
  500. parrot/tools/shell_tool/__init__.py +5 -0
  501. parrot/tools/shell_tool/actions.py +408 -0
  502. parrot/tools/shell_tool/engine.py +155 -0
  503. parrot/tools/shell_tool/models.py +322 -0
  504. parrot/tools/shell_tool/tool.py +442 -0
  505. parrot/tools/site_search.py +214 -0
  506. parrot/tools/textfile.py +418 -0
  507. parrot/tools/think.py +378 -0
  508. parrot/tools/toolkit.py +298 -0
  509. parrot/tools/webapp_tool.py +187 -0
  510. parrot/tools/whatif.py +1279 -0
  511. parrot/tools/workday/MULTI_WSDL_EXAMPLE.md +249 -0
  512. parrot/tools/workday/__init__.py +6 -0
  513. parrot/tools/workday/models.py +1389 -0
  514. parrot/tools/workday/tool.py +1293 -0
  515. parrot/tools/yfinance_tool.py +306 -0
  516. parrot/tools/zipcode.py +217 -0
  517. parrot/utils/__init__.py +2 -0
  518. parrot/utils/helpers.py +73 -0
  519. parrot/utils/parsers/__init__.py +5 -0
  520. parrot/utils/parsers/toml.c +12078 -0
  521. parrot/utils/parsers/toml.cpython-310-x86_64-linux-gnu.so +0 -0
  522. parrot/utils/parsers/toml.pyx +21 -0
  523. parrot/utils/toml.py +11 -0
  524. parrot/utils/types.cpp +20936 -0
  525. parrot/utils/types.cpython-310-x86_64-linux-gnu.so +0 -0
  526. parrot/utils/types.pyx +213 -0
  527. parrot/utils/uv.py +11 -0
  528. parrot/version.py +10 -0
  529. parrot/yaml-rs/Cargo.lock +350 -0
  530. parrot/yaml-rs/Cargo.toml +19 -0
  531. parrot/yaml-rs/pyproject.toml +19 -0
  532. parrot/yaml-rs/python/yaml_rs/__init__.py +81 -0
  533. parrot/yaml-rs/src/lib.rs +222 -0
  534. requirements/docker-compose.yml +24 -0
  535. requirements/requirements-dev.txt +21 -0
@@ -0,0 +1,235 @@
1
+ """Utilities to manage remote Office 365 interactive login sessions."""
2
+ from __future__ import annotations
3
+
4
+ import asyncio
5
+ import contextlib
6
+ from dataclasses import dataclass, field
7
+ from datetime import datetime, timedelta
8
+ from typing import Any, Dict, Optional, List
9
+ from uuid import uuid4
10
+
11
+ from navconfig.logging import logging
12
+
13
+ from ..interfaces.o365 import O365Client
14
+
15
+
16
+ @dataclass
17
+ class RemoteAuthSession:
18
+ """Metadata for a remote interactive login session."""
19
+
20
+ session_id: str
21
+ status: str = "pending"
22
+ login_url: Optional[str] = None
23
+ device_flow: Optional[Dict[str, Any]] = None
24
+ created_at: datetime = field(default_factory=datetime.utcnow)
25
+ updated_at: datetime = field(default_factory=datetime.utcnow)
26
+ expires_at: Optional[datetime] = None
27
+ result_summary: Optional[Dict[str, Any]] = None
28
+ error: Optional[str] = None
29
+ task: Optional[asyncio.Task] = None
30
+ client: Optional[O365Client] = None
31
+
32
+ def to_dict(self) -> Dict[str, Any]:
33
+ data: Dict[str, Any] = {
34
+ "session_id": self.session_id,
35
+ "status": self.status,
36
+ "created_at": self.created_at.isoformat() + "Z",
37
+ "updated_at": self.updated_at.isoformat() + "Z",
38
+ }
39
+ if self.login_url:
40
+ data["auth_url"] = self.login_url
41
+ if self.device_flow:
42
+ data["device_flow"] = self.device_flow
43
+ if self.expires_at:
44
+ data["expires_at"] = self.expires_at.isoformat() + "Z"
45
+ if self.result_summary:
46
+ data["result"] = self.result_summary
47
+ if self.error:
48
+ data["error"] = self.error
49
+ return data
50
+
51
+
52
+ class RemoteAuthManager:
53
+ """Manage remote Office 365 interactive login sessions."""
54
+
55
+ def __init__(self):
56
+ self._sessions: Dict[str, RemoteAuthSession] = {}
57
+ self._lock = asyncio.Lock()
58
+ self.logger = logging.getLogger("Parrot.O365.RemoteAuth")
59
+
60
+ async def start_session(
61
+ self,
62
+ *,
63
+ credentials: Optional[Dict[str, Any]] = None,
64
+ scopes: Optional[List[str]] = None,
65
+ redirect_uri: Optional[str] = None,
66
+ ) -> Dict[str, Any]:
67
+ """Start a new remote interactive login session."""
68
+
69
+ session_id = str(uuid4())
70
+ session = RemoteAuthSession(session_id=session_id)
71
+ async with self._lock:
72
+ self._sessions[session_id] = session
73
+
74
+ client = O365Client(credentials=credentials or {})
75
+ session.client = client
76
+ client.processing_credentials()
77
+ client.set_auth_mode("delegated")
78
+
79
+ loop = asyncio.get_running_loop()
80
+ login_url_future: asyncio.Future = loop.create_future()
81
+ device_flow_future: asyncio.Future = loop.create_future()
82
+
83
+ def _login_callback(url: str) -> bool:
84
+ def _set_login_url() -> None:
85
+ session.login_url = url
86
+ session.updated_at = datetime.utcnow()
87
+ if not login_url_future.done():
88
+ login_url_future.set_result(url)
89
+
90
+ loop.call_soon_threadsafe(_set_login_url)
91
+ return False
92
+
93
+ def _device_flow_callback(flow: Dict[str, Any]) -> None:
94
+ def _set_device_flow() -> None:
95
+ session.device_flow = {
96
+ "user_code": flow.get("user_code"),
97
+ "verification_uri": flow.get("verification_uri"),
98
+ "verification_uri_complete": flow.get("verification_uri_complete"),
99
+ "message": flow.get("message"),
100
+ "expires_in": flow.get("expires_in"),
101
+ "interval": flow.get("interval"),
102
+ }
103
+ if flow.get("expires_in"):
104
+ session.expires_at = datetime.utcnow() + timedelta(seconds=int(flow["expires_in"]))
105
+ session.updated_at = datetime.utcnow()
106
+ if not device_flow_future.done():
107
+ device_flow_future.set_result(session.device_flow)
108
+
109
+ loop.call_soon_threadsafe(_set_device_flow)
110
+
111
+ async def _run_login() -> None:
112
+ try:
113
+ result = await client.interactive_login(
114
+ scopes=scopes,
115
+ redirect_uri=redirect_uri or "http://localhost",
116
+ open_browser=False,
117
+ login_callback=_login_callback,
118
+ device_flow_callback=_device_flow_callback,
119
+ )
120
+ summary = self._summarize_result(result)
121
+ session.result_summary = summary if summary else None
122
+ session.status = "authorized"
123
+ session.updated_at = datetime.utcnow()
124
+ except Exception as exc: # pragma: no cover - network/auth errors
125
+ session.status = "failed"
126
+ session.error = str(exc)
127
+ session.updated_at = datetime.utcnow()
128
+ self.logger.error("Remote login session %s failed: %s", session_id, exc)
129
+ finally:
130
+ with contextlib.suppress(Exception):
131
+ await client.close()
132
+ session.client = None
133
+
134
+ session.task = asyncio.create_task(_run_login())
135
+
136
+ waiters = []
137
+ if not login_url_future.done():
138
+ waiters.append(login_url_future)
139
+ if not device_flow_future.done():
140
+ waiters.append(device_flow_future)
141
+
142
+ if waiters:
143
+ try:
144
+ await asyncio.wait(waiters, timeout=5, return_when=asyncio.FIRST_COMPLETED)
145
+ except Exception: # pragma: no cover - defensive
146
+ pass
147
+
148
+ return session.to_dict()
149
+
150
+ async def get_session(self, session_id: str) -> Optional[Dict[str, Any]]:
151
+ async with self._lock:
152
+ session = self._sessions.get(session_id)
153
+ if not session:
154
+ return None
155
+
156
+ if session.status == "pending" and session.expires_at and datetime.utcnow() > session.expires_at:
157
+ await self._expire_session(session)
158
+
159
+ return session.to_dict()
160
+
161
+ async def cancel_session(self, session_id: str) -> bool:
162
+ async with self._lock:
163
+ session = self._sessions.get(session_id)
164
+ if not session:
165
+ return False
166
+
167
+ await self._finalize_session(session, status="cancelled", error="Session cancelled by user")
168
+ return True
169
+
170
+ async def shutdown(self) -> None:
171
+ async with self._lock:
172
+ sessions = list(self._sessions.values())
173
+
174
+ for session in sessions:
175
+ await self._finalize_session(session, status=session.status)
176
+
177
+ async def _expire_session(self, session: RemoteAuthSession) -> None:
178
+ await self._finalize_session(
179
+ session,
180
+ status="expired",
181
+ error="Authorization session expired before completion",
182
+ )
183
+
184
+ async def _finalize_session(
185
+ self,
186
+ session: RemoteAuthSession,
187
+ *,
188
+ status: str,
189
+ error: Optional[str] = None,
190
+ ) -> None:
191
+ if session.task and not session.task.done():
192
+ session.task.cancel()
193
+ with contextlib.suppress(asyncio.CancelledError):
194
+ await session.task
195
+ if session.client:
196
+ with contextlib.suppress(Exception):
197
+ await session.client.close()
198
+ session.client = None
199
+ session.status = status
200
+ session.error = error
201
+ session.updated_at = datetime.utcnow()
202
+
203
+ def _summarize_result(self, result: Dict[str, Any]) -> Dict[str, Any]:
204
+ summary: Dict[str, Any] = {}
205
+ if not result:
206
+ return summary
207
+
208
+ if result.get("expires_on"):
209
+ summary["expires_on"] = result["expires_on"]
210
+ if result.get("scope"):
211
+ summary["scope"] = result["scope"]
212
+ if result.get("token_source"):
213
+ summary["token_source"] = result["token_source"]
214
+
215
+ account = result.get("account")
216
+ if isinstance(account, dict):
217
+ summary["account"] = {
218
+ "home_account_id": account.get("home_account_id"),
219
+ "environment": account.get("environment"),
220
+ "username": account.get("username"),
221
+ }
222
+
223
+ claims = result.get("id_token_claims")
224
+ if isinstance(claims, dict):
225
+ summary["user"] = {
226
+ "name": claims.get("name"),
227
+ "preferred_username": claims.get("preferred_username"),
228
+ "oid": claims.get("oid"),
229
+ "tid": claims.get("tid"),
230
+ }
231
+
232
+ return summary
233
+
234
+
235
+ __all__ = ["RemoteAuthManager", "RemoteAuthSession"]
@@ -0,0 +1,7 @@
1
+ from .abstract import AbstractStore
2
+ from .postgres import PgVectorStore
3
+
4
+ supported_stores = {
5
+ 'postgres': 'PgVectorStore',
6
+ 'kb': 'KnowledgeBaseStore',
7
+ }
@@ -0,0 +1,352 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any, Dict, List, Optional, Union
3
+ import importlib
4
+ from collections.abc import Callable
5
+ from datamodel.parsers.json import JSONContent # pylint: disable=E0611 # noqa
6
+ from navconfig.logging import logging
7
+ from ..conf import (
8
+ EMBEDDING_DEFAULT_MODEL
9
+ )
10
+ from ..exceptions import ConfigError # pylint: disable=E0611
11
+ from ..embeddings import supported_embeddings
12
+
13
+
14
+ logging.getLogger(name='datasets').setLevel(logging.WARNING)
15
+
16
+ class AbstractStore(ABC):
17
+ """AbstractStore class.
18
+
19
+ Base class for all Database Vector Stores.
20
+ Args:
21
+ embeddings (str): Embedding name.
22
+
23
+ Supported Vector Stores:
24
+ - Qdrant
25
+ - Milvus
26
+ - Faiss
27
+ - Chroma
28
+ - PgVector
29
+ """
30
+
31
+ def __init__(
32
+ self,
33
+ embedding_model: Union[dict, str] = None,
34
+ embedding: Union[dict, Callable] = None,
35
+ **kwargs
36
+ ):
37
+ self.client: Callable = None
38
+ self.vector: Callable = None
39
+ self._embed_: Callable = None
40
+ self._connected: bool = False
41
+ if embedding_model is not None:
42
+ if isinstance(embedding_model, str):
43
+ self.embedding_model = {
44
+ 'model_name': embedding_model,
45
+ 'model_type': 'huggingface'
46
+ }
47
+ elif isinstance(embedding_model, dict):
48
+ self.embedding_model = embedding_model
49
+ else:
50
+ raise ValueError(
51
+ "Embedding Model must be a string or a dictionary."
52
+ )
53
+ # Use or not connection to a vector database:
54
+ self._use_database: bool = kwargs.get('use_database', True)
55
+ # Database Information:
56
+ self.collection_name: str = kwargs.get('collection_name', 'my_collection')
57
+ self.dimension: int = kwargs.get("dimension", 384)
58
+ self._metric_type: str = kwargs.get("metric_type", 'COSINE')
59
+ self._index_type: str = kwargs.get("index_type", 'IVF_FLAT')
60
+ self.database: str = kwargs.get('database', '')
61
+ self.index_name = kwargs.get("index_name", "my_index")
62
+ if embedding is not None:
63
+ if isinstance(embedding, str):
64
+ self.embedding_model = {
65
+ 'model_name': embedding,
66
+ 'model_type': 'huggingface'
67
+ }
68
+ elif isinstance(embedding, dict):
69
+ self.embedding_model = embedding
70
+ else:
71
+ # is a callable:
72
+ self.embedding_model = {
73
+ 'model_name': EMBEDDING_DEFAULT_MODEL,
74
+ 'model_type': 'huggingface'
75
+ }
76
+ self._embed_ = embedding
77
+ self.logger = logging.getLogger(
78
+ f"Store.{__name__}"
79
+ )
80
+ # Client Connection (if required):
81
+ self._connection = None
82
+ # Create the Embedding Model:
83
+ self._embed_ = self.create_embedding(
84
+ embedding_model=self.embedding_model
85
+ )
86
+ # Track context depth
87
+ self._context_depth = 0
88
+ # JSON parser (based on orjson):
89
+ self._json = JSONContent()
90
+
91
+ @property
92
+ def connected(self) -> bool:
93
+ return self._connected
94
+
95
+ def is_connected(self):
96
+ return self._connected
97
+
98
+ @abstractmethod
99
+ async def connection(self) -> tuple:
100
+ pass
101
+
102
+ def get_connection(self) -> Any:
103
+ return self._connection
104
+
105
+ def engine(self):
106
+ return self._connection
107
+
108
+ @abstractmethod
109
+ async def disconnect(self) -> None:
110
+ pass
111
+
112
+ # Async Context Manager
113
+ async def __aenter__(self):
114
+ if self._use_database:
115
+ if not self._connection:
116
+ await self.connection()
117
+ self._context_depth += 1
118
+ return self
119
+
120
+ async def _free_resources(self):
121
+ if self._embed_:
122
+ self._embed_.free()
123
+ self._embed_ = None
124
+
125
+ async def __aexit__(self, exc_type, exc_value, traceback):
126
+ # closing Embedding
127
+ if self._embed_:
128
+ await self._free_resources()
129
+ try:
130
+ # Only disconnect if we're exiting the outermost context
131
+ if self._context_depth <= 0:
132
+ await self.disconnect()
133
+ self._context_depth = 0
134
+ except RuntimeError:
135
+ pass
136
+
137
+ @abstractmethod
138
+ def get_vector(self, metric_type: str = None, **kwargs):
139
+ pass
140
+
141
+ def get_vectorstore(self):
142
+ return self.get_vector()
143
+
144
+ @abstractmethod
145
+ async def similarity_search(
146
+ self,
147
+ query: str,
148
+ collection: Union[str, None] = None,
149
+ limit: int = 2,
150
+ similarity_threshold: float = 0.0,
151
+ search_strategy: str = "auto",
152
+ metadata_filters: Union[dict, None] = None,
153
+ **kwargs
154
+ ) -> list: # noqa
155
+ pass
156
+
157
+ @abstractmethod
158
+ async def from_documents(
159
+ self,
160
+ documents: List[Any],
161
+ collection: Union[str, None] = None,
162
+ **kwargs
163
+ ) -> Callable:
164
+ """
165
+ Create Vector Store from Documents.
166
+
167
+ Args:
168
+ documents (List[Any]): List of Documents.
169
+ collection (str): Collection Name.
170
+ kwargs: Additional Arguments.
171
+
172
+ Returns:
173
+ Callable VectorStore.
174
+ """
175
+
176
+ @abstractmethod
177
+ async def create_collection(self, collection: str) -> None:
178
+ """
179
+ Create Collection in Vector Store.
180
+
181
+ Args:
182
+ collection (str): Collection Name.
183
+
184
+ Returns:
185
+ None.
186
+ """
187
+ pass
188
+
189
+ @abstractmethod
190
+ async def add_documents(
191
+ self,
192
+ documents: List[Any],
193
+ collection: Union[str, None] = None,
194
+ **kwargs
195
+ ) -> None:
196
+ """
197
+ Add Documents to Vector Store.
198
+
199
+ Args:
200
+ documents (List[Any]): List of Documents.
201
+ collection (str): Collection Name.
202
+ kwargs: Additional Arguments.
203
+
204
+ Returns:
205
+ None.
206
+ """
207
+
208
+ def create_embedding(
209
+ self,
210
+
211
+ embedding_model: dict,
212
+ **kwargs
213
+ ):
214
+ """
215
+ Create Embedding Model.
216
+
217
+ Args:
218
+ embedding_model (dict): Embedding Model Configuration.
219
+ kwargs: Additional Arguments.
220
+
221
+ Returns:
222
+ Callable: Embedding Model.
223
+
224
+ """
225
+ model_type = embedding_model.get('model_type', 'huggingface')
226
+ model_name = embedding_model.get('model', EMBEDDING_DEFAULT_MODEL)
227
+ if model_type not in supported_embeddings:
228
+ raise ConfigError(
229
+ f"Embedding Model Type: {model_type} not supported."
230
+ )
231
+ embed_cls = supported_embeddings[model_type]
232
+ cls_path = f"..embeddings.{model_type}" # Relative module path
233
+ try:
234
+ embed_module = importlib.import_module(
235
+ cls_path,
236
+ package=__package__
237
+ )
238
+ embed_obj = getattr(embed_module, embed_cls)
239
+ return embed_obj(
240
+ model_name=model_name,
241
+ **kwargs
242
+ )
243
+ except ImportError as e:
244
+ raise ConfigError(
245
+ f"Error Importing Embedding Model: {model_type}"
246
+ ) from e
247
+
248
+ def get_default_embedding(self):
249
+ embed_model = {
250
+ 'model_name': EMBEDDING_DEFAULT_MODEL,
251
+ 'model_type': 'huggingface'
252
+ }
253
+ return self.create_embedding(
254
+ embedding_model=embed_model
255
+ )
256
+
257
+ def generate_embedding(self, documents: List[Any]) -> List[Any]:
258
+ if not self._embed_:
259
+ self._embed_ = self.get_default_embedding()
260
+
261
+ # Using the Embed Model to Generate Embeddings:
262
+ embeddings = self._embed_.embed_documents(documents)
263
+ return embeddings
264
+
265
+ @abstractmethod
266
+ async def prepare_embedding_table(
267
+ self,
268
+ tablename: str,
269
+ conn: Any = None,
270
+ embedding_column: str = 'embedding',
271
+ document_column: str = 'document',
272
+ metadata_column: str = 'cmetadata',
273
+ dimension: int = None,
274
+ id_column: str = 'id',
275
+ use_jsonb: bool = True,
276
+ drop_columns: bool = False,
277
+ create_all_indexes: bool = True,
278
+ **kwargs
279
+ ):
280
+ """
281
+ Prepare a Table as an embedding table with advanced features.
282
+ This method prepares a table with the following columns:
283
+ - id: unique identifier (String)
284
+ - embedding: the vector column (Vector(dimension) or JSONB)
285
+ - document: text column containing the document
286
+ - collection_id: UUID column for collection identification.
287
+ - metadata: JSONB column for metadata
288
+ - Additional columns based on the provided `columns` list
289
+ - Enhanced indexing strategies for efficient querying
290
+ - Support for multiple distance strategies (COSINE, L2, IP, etc.)
291
+ Args:
292
+ - tablename (str): Name of the table to create.
293
+ - embedding_column (str): Name of the column for storing embeddings.
294
+ - document_column (str): Name of the column for storing document text.
295
+ - metadata_column (str): Name of the column for storing metadata.
296
+ - dimension (int): Dimension of the embedding vector.
297
+ - id_column (str): Name of the column for storing unique identifiers.
298
+ - use_jsonb (bool): Whether to use JSONB for metadata storage.
299
+ - drop_columns (bool): Whether to drop existing columns.
300
+ - create_all_indexes (bool): Whether to create all distance strategies.
301
+ """
302
+ pass
303
+
304
+
305
+ @abstractmethod
306
+ async def delete_documents(
307
+ self,
308
+ documents: Optional[Any] = None,
309
+ pk: str = 'source_type',
310
+ values: Optional[Union[str, List[str]]] = None,
311
+ table: Optional[str] = None,
312
+ schema: Optional[str] = None,
313
+ collection: Optional[str] = None,
314
+ **kwargs
315
+ ) -> int:
316
+ """
317
+ Delete Documents from the Vector Store.
318
+ Args:
319
+ documents (Optional[Any]): Documents to delete.
320
+ pk (str): Primary key field.
321
+ values (Optional[Union[str, List[str]]]): Values to match for deletion.
322
+ table (Optional[str]): Table name.
323
+ schema (Optional[str]): Schema name.
324
+ collection (Optional[str]): Collection name.
325
+ kwargs: Additional arguments.
326
+ Returns:
327
+ int: Number of deleted documents.
328
+ """
329
+ pass
330
+
331
+
332
+ @abstractmethod
333
+ async def delete_documents_by_filter(
334
+ self,
335
+ search_filter: Dict[str, Union[str, List[str]]],
336
+ table: Optional[str] = None,
337
+ schema: Optional[str] = None,
338
+ collection: Optional[str] = None,
339
+ **kwargs
340
+ ) -> int:
341
+ """
342
+ Delete Documents by filter.
343
+ Args:
344
+ search_filter (Dict[str, Union[str, List[str]]]): Filter criteria.
345
+ table (Optional[str]): Table name.
346
+ schema (Optional[str]): Schema name.
347
+ collection (Optional[str]): Collection name.
348
+ kwargs: Additional arguments.
349
+ Returns:
350
+ int: Number of deleted documents.
351
+ """
352
+ pass