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,537 @@
1
+ """
2
+ ArangoDB Vector Search Tool for AI-Parrot Framework.
3
+
4
+ Provides comprehensive search capabilities including:
5
+ - Vector similarity search
6
+ - Full-text search (BM25)
7
+ - Hybrid search (combining vector + text)
8
+ - Graph traversal and context enrichment
9
+ """
10
+ from typing import Any, Dict, List, Optional, Union
11
+ from enum import Enum
12
+ import asyncio
13
+ import inspect
14
+ from pydantic import BaseModel, Field
15
+ from asyncdb import AsyncDB
16
+ from navconfig import config
17
+ from datamodel.parsers.json import json_encoder # pylint: disable=E0611
18
+ from parrot.tools.abstract import AbstractTool, ToolResult
19
+
20
+
21
+ class SearchType(str, Enum):
22
+ """Supported search types."""
23
+ VECTOR = "vector"
24
+ FULLTEXT = "fulltext"
25
+ HYBRID = "hybrid"
26
+ GRAPH_TRAVERSE = "graph_traverse"
27
+
28
+
29
+ class ArangoSearchArgs(BaseModel):
30
+ """Arguments schema for ArangoDB search operations."""
31
+
32
+ # Common arguments
33
+ search_type: SearchType = Field(
34
+ default=SearchType.VECTOR,
35
+ description="Type of search to perform: vector, fulltext, hybrid, or graph_traverse"
36
+ )
37
+
38
+ # Collection/View arguments
39
+ view_name: str = Field(
40
+ description="ArangoSearch view name for search operations"
41
+ )
42
+ collection: Optional[str] = Field(
43
+ default=None,
44
+ description="Collection name (required for vector search)"
45
+ )
46
+
47
+ # Query arguments
48
+ query_text: Optional[str] = Field(
49
+ default=None,
50
+ description="Text query for full-text or hybrid search"
51
+ )
52
+ query_vector: Optional[List[float]] = Field(
53
+ default=None,
54
+ description="Query embedding vector for vector or hybrid search"
55
+ )
56
+
57
+ # Search parameters
58
+ top_k: int = Field(
59
+ default=10,
60
+ ge=1,
61
+ le=100,
62
+ description="Number of results to return"
63
+ )
64
+ score_threshold: Optional[float] = Field(
65
+ default=None,
66
+ ge=0.0,
67
+ le=1.0,
68
+ description="Minimum score threshold for results"
69
+ )
70
+
71
+ # Vector search specific
72
+ vector_field: str = Field(
73
+ default="embedding",
74
+ description="Field name containing embeddings"
75
+ )
76
+
77
+ # Full-text search specific
78
+ text_fields: Optional[List[str]] = Field(
79
+ default=None,
80
+ description="Fields to search for full-text queries"
81
+ )
82
+ analyzer: str = Field(
83
+ default="text_en",
84
+ description="Text analyzer for full-text search"
85
+ )
86
+
87
+ # Hybrid search specific
88
+ text_weight: float = Field(
89
+ default=0.5,
90
+ ge=0.0,
91
+ le=1.0,
92
+ description="Weight for text score in hybrid search"
93
+ )
94
+ vector_weight: float = Field(
95
+ default=0.5,
96
+ ge=0.0,
97
+ le=1.0,
98
+ description="Weight for vector similarity in hybrid search"
99
+ )
100
+
101
+ # Filter conditions
102
+ filter_conditions: Optional[List[str]] = Field(
103
+ default=None,
104
+ description="Additional AQL filter conditions"
105
+ )
106
+
107
+ # Graph-specific arguments
108
+ graph_name: Optional[str] = Field(
109
+ default=None,
110
+ description="Graph name for graph operations"
111
+ )
112
+ start_vertex: Optional[str] = Field(
113
+ default=None,
114
+ description="Starting vertex for graph traversal"
115
+ )
116
+ include_graph_context: bool = Field(
117
+ default=False,
118
+ description="Include neighboring nodes in results"
119
+ )
120
+ max_depth: int = Field(
121
+ default=2,
122
+ ge=1,
123
+ le=5,
124
+ description="Maximum depth for graph traversal"
125
+ )
126
+ relation_types: Optional[List[str]] = Field(
127
+ default=None,
128
+ description="Filter by specific relationship types"
129
+ )
130
+
131
+
132
+ class ArangoDBSearchTool(AbstractTool):
133
+ """
134
+ ArangoDB Vector Search Tool.
135
+
136
+ Provides unified search capabilities across vector, full-text, and graph data.
137
+ Supports:
138
+ - Semantic vector search
139
+ - BM25 full-text search
140
+ - Hybrid search combining both approaches
141
+ - Graph-enhanced search with relationship context
142
+ """
143
+
144
+ name = "arangodb_search"
145
+ description = """Search ArangoDB using vector similarity, full-text, or hybrid approaches.
146
+ Can also traverse graph relationships to enrich results with context."""
147
+ args_schema = ArangoSearchArgs
148
+
149
+ def __init__(
150
+ self,
151
+ connection_params: Optional[Dict[str, Any]] = None,
152
+ default_database: str = "_system",
153
+ default_view: Optional[str] = None,
154
+ default_graph: Optional[str] = None,
155
+ embedding_function: Optional[callable] = None,
156
+ **kwargs
157
+ ):
158
+ """
159
+ Initialize ArangoDB search tool.
160
+
161
+ Args:
162
+ connection_params: Connection parameters for ArangoDB
163
+ default_database: Default database name
164
+ default_view: Default ArangoSearch view name
165
+ default_graph: Default graph name for graph operations
166
+ embedding_function: Function to generate embeddings from text
167
+ """
168
+ super().__init__(**kwargs)
169
+
170
+ self.connection_params = connection_params or {
171
+ "host": config.get('ARANGODB_HOST', 'localhost'),
172
+ "port": config.get('ARANGODB_PORT', 8529),
173
+ "username": config.get('ARANGODB_USERNAME', 'root'),
174
+ "password": config.get('ARANGODB_PASSWORD', '12345678'),
175
+ "database": config.get('ARANGODB_DATABASE', default_database),
176
+ }
177
+
178
+ self.default_database = default_database
179
+ self.default_view = default_view
180
+ self.default_graph = default_graph
181
+ self.embedding_function = embedding_function
182
+
183
+ # ArangoDB connection (lazy initialization)
184
+ self._db: Optional[AsyncDB] = None
185
+
186
+ async def _get_connection(self) -> AsyncDB:
187
+ """Get or create ArangoDB connection."""
188
+ if self._db is None:
189
+ self._db = AsyncDB("arangodb", params=self.connection_params)
190
+ return self._db
191
+
192
+ async def _execute(
193
+ self,
194
+ search_type: SearchType = SearchType.VECTOR,
195
+ view_name: Optional[str] = None,
196
+ collection: Optional[str] = None,
197
+ query_text: Optional[str] = None,
198
+ query_vector: Optional[List[float]] = None,
199
+ top_k: int = 10,
200
+ score_threshold: Optional[float] = None,
201
+ vector_field: str = "embedding",
202
+ text_fields: Optional[List[str]] = None,
203
+ analyzer: str = "text_en",
204
+ text_weight: float = 0.5,
205
+ vector_weight: float = 0.5,
206
+ filter_conditions: Optional[List[str]] = None,
207
+ graph_name: Optional[str] = None,
208
+ start_vertex: Optional[str] = None,
209
+ include_graph_context: bool = False,
210
+ max_depth: int = 2,
211
+ relation_types: Optional[List[str]] = None,
212
+ **kwargs
213
+ ) -> ToolResult:
214
+ """
215
+ Execute the search operation.
216
+
217
+ Returns:
218
+ ToolResult containing search results and metadata
219
+ """
220
+ try:
221
+ db = self._get_connection()
222
+
223
+ # Use defaults if not provided
224
+ view_name = view_name or self.default_view
225
+ graph_name = graph_name or self.default_graph
226
+
227
+ # Validate required parameters
228
+ if not view_name and search_type != SearchType.GRAPH_TRAVERSE:
229
+ return ToolResult(
230
+ status="error",
231
+ result=None,
232
+ error="view_name is required for search operations"
233
+ )
234
+
235
+ # Generate embedding if needed and function provided
236
+ if search_type in [SearchType.VECTOR, SearchType.HYBRID]:
237
+ if query_vector is None and query_text and self.embedding_function:
238
+ self.logger.info("Generating embedding from query text")
239
+ query_vector = await self._generate_embedding(query_text)
240
+
241
+ if query_vector is None:
242
+ return ToolResult(
243
+ status="error",
244
+ result=None,
245
+ error="query_vector is required for vector/hybrid search"
246
+ )
247
+
248
+ # Execute appropriate search
249
+ results = []
250
+ metadata = {
251
+ "search_type": search_type.value,
252
+ "top_k": top_k,
253
+ "view_name": view_name,
254
+ "collection": collection
255
+ }
256
+
257
+ async with await db.connection() as conn: # pylint: disable=E1101 # noqa
258
+
259
+ if search_type == SearchType.VECTOR:
260
+ results = await self._vector_search(
261
+ conn, view_name, collection, query_vector,
262
+ vector_field, top_k, score_threshold, filter_conditions
263
+ )
264
+ metadata["vector_dimension"] = len(query_vector)
265
+
266
+ elif search_type == SearchType.FULLTEXT:
267
+ results = await self._fulltext_search(
268
+ conn, view_name, query_text,
269
+ text_fields, analyzer, top_k, score_threshold
270
+ )
271
+ metadata["analyzer"] = analyzer
272
+ metadata["text_fields"] = text_fields
273
+
274
+ elif search_type == SearchType.HYBRID:
275
+ results = await self._hybrid_search(
276
+ conn, view_name, collection, query_text, query_vector,
277
+ text_fields, vector_field, text_weight, vector_weight,
278
+ analyzer, top_k, filter_conditions
279
+ )
280
+ metadata["text_weight"] = text_weight
281
+ metadata["vector_weight"] = vector_weight
282
+
283
+ elif search_type == SearchType.GRAPH_TRAVERSE:
284
+ if not start_vertex:
285
+ return ToolResult(
286
+ status="error",
287
+ result=None,
288
+ error="start_vertex is required for graph traversal"
289
+ )
290
+ results = await self._graph_traverse(
291
+ conn, start_vertex, graph_name,
292
+ max_depth, relation_types, top_k
293
+ )
294
+ metadata["graph_name"] = graph_name
295
+ metadata["max_depth"] = max_depth
296
+
297
+ # Enrich with graph context if requested
298
+ if include_graph_context and graph_name and results:
299
+ results = await self._enrich_with_graph_context(
300
+ conn, results, graph_name, max_depth, relation_types
301
+ )
302
+ metadata["graph_context_included"] = True
303
+
304
+ metadata["results_count"] = len(results)
305
+
306
+ return ToolResult(
307
+ status="success",
308
+ result=results,
309
+ metadata=metadata
310
+ )
311
+
312
+ except Exception as e:
313
+ self.logger.error(f"ArangoDB search error: {e}", exc_info=True)
314
+ return ToolResult(
315
+ status="error",
316
+ result=None,
317
+ error=str(e)
318
+ )
319
+
320
+ async def _generate_embedding(self, text: str) -> List[float]:
321
+ """Generate embedding from text using the configured function."""
322
+ if self.embedding_function is None:
323
+ raise ValueError("No embedding function configured")
324
+
325
+ # Handle both sync and async embedding functions
326
+ if inspect.iscoroutinefunction(self.embedding_function):
327
+ return await self.embedding_function(text)
328
+ else:
329
+ return await asyncio.get_event_loop().run_in_executor(
330
+ None, self.embedding_function, text
331
+ )
332
+
333
+ async def _vector_search(
334
+ self,
335
+ db: AsyncDB,
336
+ view_name: str,
337
+ collection: str,
338
+ query_vector: List[float],
339
+ vector_field: str,
340
+ top_k: int,
341
+ score_threshold: Optional[float],
342
+ filter_conditions: Optional[List[str]]
343
+ ) -> List[Dict]:
344
+ """Execute vector similarity search."""
345
+ results = await db.vector_search(
346
+ view_name=view_name,
347
+ collection=collection,
348
+ query_vector=query_vector,
349
+ vector_field=vector_field,
350
+ top_k=top_k,
351
+ filter_conditions=filter_conditions,
352
+ include_similarity=True
353
+ )
354
+
355
+ # Apply score threshold if specified
356
+ if score_threshold is not None:
357
+ results = [
358
+ r for r in results
359
+ if r.get('similarity', 0) >= score_threshold
360
+ ]
361
+
362
+ return results
363
+
364
+ async def _fulltext_search(
365
+ self,
366
+ db: AsyncDB,
367
+ view_name: str,
368
+ query_text: str,
369
+ text_fields: Optional[List[str]],
370
+ analyzer: str,
371
+ top_k: int,
372
+ min_score: Optional[float]
373
+ ) -> List[Dict]:
374
+ """Execute full-text search."""
375
+ results = await db.fulltext_search(
376
+ view_name=view_name,
377
+ query_text=query_text,
378
+ fields=text_fields,
379
+ analyzer=analyzer,
380
+ top_k=top_k,
381
+ min_score=min_score or 0.0
382
+ )
383
+ return results
384
+
385
+ async def _hybrid_search(
386
+ self,
387
+ db: AsyncDB,
388
+ view_name: str,
389
+ collection: str,
390
+ query_text: str,
391
+ query_vector: List[float],
392
+ text_fields: Optional[List[str]],
393
+ vector_field: str,
394
+ text_weight: float,
395
+ vector_weight: float,
396
+ analyzer: str,
397
+ top_k: int,
398
+ filter_conditions: Optional[List[str]]
399
+ ) -> List[Dict]:
400
+ """Execute hybrid search combining vector and text."""
401
+ results = await db.hybrid_search(
402
+ view_name=view_name,
403
+ collection=collection,
404
+ query_text=query_text,
405
+ query_vector=query_vector,
406
+ text_fields=text_fields,
407
+ vector_field=vector_field,
408
+ text_weight=text_weight,
409
+ vector_weight=vector_weight,
410
+ analyzer=analyzer,
411
+ top_k=top_k
412
+ )
413
+ return results
414
+
415
+ async def _graph_traverse(
416
+ self,
417
+ db: AsyncDB,
418
+ start_vertex: str,
419
+ graph_name: Optional[str],
420
+ max_depth: int,
421
+ relation_types: Optional[List[str]],
422
+ limit: int
423
+ ) -> List[Dict]:
424
+ """Execute graph traversal."""
425
+ results = await db.find_related_nodes(
426
+ node_id=start_vertex,
427
+ relation_types=relation_types,
428
+ max_depth=max_depth,
429
+ limit=limit,
430
+ graph_name=graph_name
431
+ )
432
+ return results
433
+
434
+ async def _enrich_with_graph_context(
435
+ self,
436
+ db: AsyncDB,
437
+ results: List[Dict],
438
+ graph_name: str,
439
+ max_depth: int,
440
+ relation_types: Optional[List[str]]
441
+ ) -> List[Dict]:
442
+ """Enrich search results with graph context."""
443
+ enriched = []
444
+
445
+ for result in results:
446
+ # Extract document ID
447
+ doc_id = None
448
+ if 'document' in result:
449
+ doc_id = result['document'].get('_id')
450
+ elif '_id' in result:
451
+ doc_id = result['_id']
452
+
453
+ if doc_id:
454
+ # Get neighboring nodes
455
+ neighbors = await db.find_related_nodes(
456
+ node_id=doc_id,
457
+ relation_types=relation_types,
458
+ max_depth=max_depth,
459
+ limit=10,
460
+ graph_name=graph_name
461
+ )
462
+
463
+ result['graph_context'] = neighbors
464
+
465
+ enriched.append(result)
466
+
467
+ return enriched
468
+
469
+ async def close(self):
470
+ """Close database connection."""
471
+ self._db = None
472
+
473
+ def __del__(self):
474
+ """Cleanup on deletion."""
475
+ if self._db:
476
+ try:
477
+ loop = asyncio.get_event_loop()
478
+ if loop.is_running():
479
+ loop.create_task(self.close())
480
+ else:
481
+ loop.run_until_complete(self.close())
482
+ except Exception:
483
+ pass
484
+
485
+
486
+ # Example usage and helper functions
487
+
488
+ async def create_arangodb_search_tool(
489
+ connection_params: Optional[Dict] = None,
490
+ embedding_model: Optional[str] = None,
491
+ **kwargs
492
+ ) -> ArangoDBSearchTool:
493
+ """
494
+ Factory function to create ArangoDB search tool with embedding support.
495
+
496
+ Args:
497
+ connection_params: ArangoDB connection parameters
498
+ embedding_model: Hugging Face model name for embeddings
499
+ **kwargs: Additional tool configuration
500
+
501
+ Returns:
502
+ Configured ArangoDBSearchTool instance
503
+ """
504
+ embedding_function = None
505
+
506
+ if embedding_model:
507
+ from transformers import AutoTokenizer, AutoModel
508
+ import torch
509
+
510
+ # Load model and tokenizer
511
+ tokenizer = AutoTokenizer.from_pretrained(embedding_model)
512
+ model = AutoModel.from_pretrained(embedding_model)
513
+
514
+ def generate_embedding(text: str) -> List[float]:
515
+ """Generate embedding using transformers."""
516
+ inputs = tokenizer(
517
+ text,
518
+ return_tensors="pt",
519
+ truncation=True,
520
+ max_length=512,
521
+ padding=True
522
+ )
523
+
524
+ with torch.no_grad():
525
+ outputs = model(**inputs)
526
+
527
+ # Use mean pooling
528
+ embeddings = outputs.last_hidden_state.mean(dim=1)
529
+ return embeddings[0].tolist()
530
+
531
+ embedding_function = generate_embedding
532
+
533
+ return ArangoDBSearchTool(
534
+ connection_params=connection_params,
535
+ embedding_function=embedding_function,
536
+ **kwargs
537
+ )