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,172 @@
1
+ from typing import Any, Optional, Tuple
2
+ import html as html_module
3
+ import markdown
4
+ from markdown.extensions.codehilite import CodeHiliteExtension
5
+ from . import register_renderer
6
+ from .base import BaseRenderer
7
+ from ...models.outputs import OutputMode
8
+
9
+ try:
10
+ from rich.console import Console
11
+ from rich.markdown import Markdown as RichMarkdown
12
+ from rich.panel import Panel as RichPanel
13
+ RICH_AVAILABLE = True
14
+ except ImportError:
15
+ RICH_AVAILABLE = False
16
+
17
+ try:
18
+ from ipywidgets import HTML as IPyHTML
19
+ IPYWIDGETS_AVAILABLE = True
20
+ except ImportError:
21
+ IPYWIDGETS_AVAILABLE = False
22
+
23
+ try:
24
+ import panel as pn
25
+ from panel.pane import Markdown as PanelMarkdown
26
+ PANEL_AVAILABLE = True
27
+ except ImportError:
28
+ PANEL_AVAILABLE = False
29
+
30
+ try:
31
+ from IPython.display import Markdown as IPythonMarkdown
32
+ IPYTHON_AVAILABLE = True
33
+ except ImportError:
34
+ IPYTHON_AVAILABLE = False
35
+
36
+
37
+ @register_renderer(OutputMode.MARKDOWN, system_prompt="MARKDOWN OUTPUT MODE: **IMPORTANT** Generate markdown formatted text.")
38
+ class MarkdownRenderer(BaseRenderer):
39
+ """
40
+ Renderer for Markdown output.
41
+ Handles PandasAgentResponse (explanation), AIMessage, and generic text.
42
+ Adapts output format to Terminal (Rich), HTML, Jupyter, and Panel.
43
+ """
44
+ def _extract_content(self, response: Any) -> str:
45
+ """
46
+ Extract Markdown text content based on response type rules.
47
+ """
48
+ # 1. Check for PandasAgentResponse (duck typing)
49
+ # We check for specific attributes that define a PandasAgentResponse
50
+ output = getattr(response, 'output', None)
51
+
52
+ if output is not None:
53
+ # Handle PandasAgentResponse: The 'explanation' is usually the markdown text
54
+ if hasattr(output, 'explanation') and output.explanation:
55
+ return str(output.explanation)
56
+
57
+ # If it has a 'response' attribute (some agent responses)
58
+ if hasattr(output, 'response') and output.response:
59
+ return str(output.response)
60
+
61
+ # 2. Check standard AIMessage response text
62
+ if hasattr(response, 'response') and response.response:
63
+ return str(response.response)
64
+
65
+ # 3. Fallback: Use output if string, or stringify
66
+ if output is not None:
67
+ return output if isinstance(output, str) else str(output)
68
+
69
+ # 4. Last resort: stringify the whole response object
70
+ return str(response)
71
+
72
+ async def render(
73
+ self,
74
+ response: Any,
75
+ environment: str = 'default',
76
+ **kwargs,
77
+ ) -> Tuple[str, Any]:
78
+ """
79
+ Render markdown content.
80
+ """
81
+ # 1. Extract Content
82
+ content = self._extract_content(response)
83
+
84
+ # 2. Determine Format
85
+ # Allow overriding format via kwargs, else default to environment
86
+ output_format = kwargs.get('format') or kwargs.get('output_format', environment)
87
+
88
+ # 3. Wrap content based on environment/format
89
+ wrapped_output = self._wrap_output(content, output_format, **kwargs)
90
+
91
+ return content, wrapped_output
92
+
93
+ def _wrap_output(self, content: str, environment: str, **kwargs) -> Any:
94
+ """
95
+ Wrap the Markdown content into an environment-specific container.
96
+ """
97
+ # --- Terminal (Rich) ---
98
+ if environment == 'terminal':
99
+ if RICH_AVAILABLE:
100
+ show_panel = kwargs.get('show_panel', True)
101
+ panel_title = kwargs.get('panel_title', "📝 Response")
102
+
103
+ console = Console(force_terminal=True)
104
+ md = RichMarkdown(content)
105
+
106
+ # Capture rich output to string/object
107
+ with console.capture() as capture:
108
+ if show_panel:
109
+ console.print(RichPanel(md, title=panel_title, border_style="blue", expand=False))
110
+ else:
111
+ console.print(md)
112
+ return capture.get()
113
+ return content
114
+
115
+ # --- Jupyter / Notebook ---
116
+ elif environment in ('jupyter', 'notebook', 'colab'):
117
+ # Priority 1: Panel (if requested or available and appropriate)
118
+ if environment == 'panel' or (kwargs.get('use_panel', False) and PANEL_AVAILABLE):
119
+ styles = kwargs.get('styles', {
120
+ 'background': '#f9f9f9', 'padding': '20px', 'border-radius': '5px',
121
+ 'box-shadow': '0 2px 4px rgba(0,0,0,0.1)'
122
+ })
123
+ return PanelMarkdown(content, sizing_mode='stretch_width', styles=styles)
124
+
125
+ # Priority 2: IPyWidgets (if interactive requested)
126
+ use_widget = kwargs.get('use_widget', False)
127
+ if use_widget and IPYWIDGETS_AVAILABLE:
128
+ html_content = self._markdown_to_html(content)
129
+ return IPyHTML(value=html_content)
130
+
131
+ # Priority 3: Standard IPython Display
132
+ if IPYTHON_AVAILABLE:
133
+ return IPythonMarkdown(content)
134
+
135
+ # Fallback
136
+ return self._markdown_to_html(content)
137
+
138
+ # --- HTML ---
139
+ elif environment == 'html':
140
+ return self._markdown_to_html(content)
141
+
142
+ # --- Default / Plain ---
143
+ return content
144
+
145
+ def _markdown_to_html(self, content: str) -> str:
146
+ """Convert markdown to HTML with syntax highlighting."""
147
+ try:
148
+ html = markdown.markdown(
149
+ content,
150
+ extensions=[
151
+ 'fenced_code', 'tables', 'nl2br',
152
+ CodeHiliteExtension(css_class='highlight', linenums=False)
153
+ ]
154
+ )
155
+ # Add basic styling for the HTML output
156
+ return f'''
157
+ <div class="markdown-content" style="line-height: 1.6;">
158
+ <style>
159
+ .markdown-content h1, .markdown-content h2, .markdown-content h3 {{ margin-top: 1.5em; }}
160
+ .markdown-content code {{ background: #f4f4f4; padding: 2px 6px; border-radius: 3px; font-family: monospace; }}
161
+ .markdown-content pre {{ background: #2d2d2d; color: #f8f8f2; padding: 15px; border-radius: 5px; overflow-x: auto; }}
162
+ .markdown-content table {{ border-collapse: collapse; width: 100%; margin: 1em 0; }}
163
+ .markdown-content th, .markdown-content td {{ border: 1px solid #ddd; padding: 8px; text-align: left; }}
164
+ .markdown-content th {{ background-color: #f2f2f2; }}
165
+ </style>
166
+ {html}
167
+ </div>
168
+ '''
169
+ except ImportError:
170
+ # Fallback if markdown lib is missing
171
+ escaped = html_module.escape(content)
172
+ return f'<pre style="white-space: pre-wrap; font-family: sans-serif;">{escaped}</pre>'
@@ -0,0 +1,237 @@
1
+ from typing import Any, Optional, Tuple, Dict
2
+ import io
3
+ import base64
4
+ import uuid
5
+ from pathlib import Path
6
+ from .chart import BaseChart
7
+ from . import register_renderer
8
+ from ...models.outputs import OutputMode
9
+
10
+ try:
11
+ from rich.panel import Panel
12
+ RICH_AVAILABLE = True
13
+ except ImportError:
14
+ RICH_AVAILABLE = False
15
+
16
+
17
+ MATPLOTLIB_SYSTEM_PROMPT = """MATPLOTLIB CHART OUTPUT MODE:
18
+ Generate a chart using Matplotlib.
19
+
20
+ REQUIREMENTS:
21
+ 1. Return Python code in a markdown code block (```python)
22
+ 2. Use matplotlib.pyplot (import matplotlib.pyplot as plt)
23
+ 3. Store the figure in a variable named 'fig' or use plt.gcf()
24
+ 4. Make the chart self-contained with inline data
25
+ 5. Use appropriate plot types (plot, bar, scatter, hist, pie, etc.)
26
+ 6. Add titles, labels, legends, and grid for clarity
27
+ 7. Use plt.tight_layout() for better spacing
28
+ 8. DO NOT call plt.show() or save files - return code only
29
+
30
+ EXAMPLE:
31
+ ```python
32
+ import matplotlib.pyplot as plt
33
+ import numpy as np
34
+
35
+ categories = ['A', 'B', 'C', 'D']
36
+ values = [23, 45, 12, 67]
37
+
38
+ fig, ax = plt.subplots(figsize=(10, 6))
39
+ ax.bar(categories, values, color='steelblue')
40
+ ax.set_title('Sales by Category', fontsize=16, fontweight='bold')
41
+ ax.set_xlabel('Category')
42
+ ax.set_ylabel('Sales')
43
+ ax.grid(axis='y', alpha=0.3)
44
+ plt.tight_layout()
45
+ ```
46
+ """
47
+
48
+
49
+ @register_renderer(OutputMode.MATPLOTLIB, system_prompt=MATPLOTLIB_SYSTEM_PROMPT)
50
+ class MatplotlibRenderer(BaseChart):
51
+ """Renderer for Matplotlib charts"""
52
+
53
+ def execute_code(
54
+ self,
55
+ code: str,
56
+ pandas_tool: Any = None,
57
+ execution_state: Optional[Dict[str, Any]] = None,
58
+ **kwargs,
59
+ ) -> Tuple[Any, Optional[str]]:
60
+ """Execute Matplotlib code within the shared Python environment."""
61
+ extra_namespace = None
62
+ # If no pandas tool is provided, we need to setup the backend manually
63
+ # to ensure we don't try to open a GUI window
64
+ manual_backend = pandas_tool is None
65
+
66
+ if manual_backend:
67
+ import matplotlib
68
+ matplotlib.use('Agg')
69
+ import matplotlib.pyplot as plt
70
+ extra_namespace = {'plt': plt, 'matplotlib': matplotlib}
71
+
72
+ context, error = super().execute_code(
73
+ code,
74
+ pandas_tool=pandas_tool,
75
+ execution_state=execution_state,
76
+ extra_namespace=extra_namespace,
77
+ **kwargs,
78
+ )
79
+
80
+ try:
81
+ if error:
82
+ return None, error
83
+
84
+ if not context:
85
+ return None, "Execution context was empty"
86
+
87
+ # Try to find the figure object in the context
88
+ fig = context.get('fig') or context.get('figure')
89
+
90
+ # Fallback: get current figure if available
91
+ if fig is None:
92
+ if 'plt' in context:
93
+ fig = context['plt'].gcf()
94
+ elif not manual_backend and pandas_tool:
95
+ # Try to get plt from tool locals if available
96
+ plt_ref = pandas_tool.locals.get('plt')
97
+ if plt_ref:
98
+ fig = plt_ref.gcf()
99
+
100
+ if fig is None or not hasattr(fig, 'savefig'):
101
+ return None, "Code must create a matplotlib figure (fig) or use plt functions"
102
+
103
+ return fig, None
104
+ finally:
105
+ # Cleanup to avoid memory leaks
106
+ if manual_backend and 'plt' in locals():
107
+ try:
108
+ plt.close('all')
109
+ except Exception:
110
+ pass
111
+
112
+ def _render_chart_content(self, chart_obj: Any, **kwargs) -> str:
113
+ """Render Matplotlib chart as base64 embedded image."""
114
+ img_id = f"matplotlib-chart-{uuid.uuid4().hex[:8]}"
115
+
116
+ # Get image format and DPI
117
+ img_format = kwargs.get('format', 'png')
118
+ dpi = kwargs.get('dpi', 100)
119
+
120
+ # Save figure to bytes buffer
121
+ buf = io.BytesIO()
122
+ chart_obj.savefig(buf, format=img_format, dpi=dpi, bbox_inches='tight')
123
+ buf.seek(0)
124
+
125
+ # Encode to base64
126
+ img_base64 = base64.b64encode(buf.read()).decode('utf-8')
127
+ buf.close()
128
+
129
+ # Create img tag with base64 data
130
+ return f'''
131
+ <img id="{img_id}"
132
+ src="data:image/{img_format};base64,{img_base64}"
133
+ style="max-width: 100%; height: auto; display: block; margin: 0 auto; border-radius: 4px;"
134
+ alt="Matplotlib Chart" />
135
+ '''
136
+
137
+ def to_html(
138
+ self,
139
+ chart_obj: Any,
140
+ mode: str = 'partial',
141
+ **kwargs
142
+ ) -> str:
143
+ """
144
+ Convert Matplotlib chart to HTML.
145
+ """
146
+ # Matplotlib doesn't need external scripts in head
147
+ kwargs['extra_head'] = kwargs.get('extra_head', '')
148
+
149
+ # Call parent to_html
150
+ return super().to_html(chart_obj, mode=mode, **kwargs)
151
+
152
+ def to_json(self, chart_obj: Any) -> Optional[Dict]:
153
+ """Matplotlib figures don't have a standard native JSON representation."""
154
+ return None
155
+
156
+ async def render(
157
+ self,
158
+ response: Any,
159
+ theme: str = 'monokai',
160
+ environment: str = 'html',
161
+ include_code: bool = False,
162
+ html_mode: str = 'partial',
163
+ **kwargs
164
+ ) -> Tuple[Any, Optional[Any]]:
165
+ """Render Matplotlib chart."""
166
+
167
+ # 1. Extract Code
168
+ # Check if code is explicitly provided in the structured response
169
+ code = getattr(response, 'code', None)
170
+
171
+ output_format = kwargs.get('output_format', environment)
172
+
173
+ # Fallback to extracting from text content
174
+ if not code:
175
+ content = self._get_content(response)
176
+ code = self._extract_code(content)
177
+
178
+ if not code:
179
+ error_msg = "No chart code found in response"
180
+ if output_format == 'terminal':
181
+ return error_msg, None
182
+ return self._wrap_for_environment(
183
+ f"<div class='error'>{error_msg}</div>",
184
+ output_format
185
+ ), None
186
+
187
+ # 2. Execute Code
188
+ chart_obj, error = self.execute_code(
189
+ code,
190
+ pandas_tool=kwargs.pop('pandas_tool', None),
191
+ execution_state=kwargs.pop('execution_state', None),
192
+ **kwargs,
193
+ )
194
+
195
+ if error:
196
+ if output_format == 'terminal':
197
+ return f"Error generating chart: {error}", None
198
+ return self._wrap_for_environment(
199
+ self._render_error(error, code, theme),
200
+ output_format
201
+ ), None
202
+
203
+ # 3. Handle Terminal Environment (Save to Disk)
204
+ if output_format == 'terminal':
205
+ saved_path = self._save_to_disk(chart_obj)
206
+ msg = f"Chart generated successfully and saved to: {saved_path}"
207
+
208
+ if RICH_AVAILABLE:
209
+ return Panel(msg, title="📊 Chart Generated", border_style="green"), None
210
+ return msg, None
211
+
212
+ # 4. Generate HTML for Web/Jupyter
213
+ html_output = self.to_html(
214
+ chart_obj,
215
+ mode=html_mode,
216
+ include_code=include_code,
217
+ code=code,
218
+ theme=theme,
219
+ title=kwargs.pop('title', 'Matplotlib Chart'),
220
+ icon='📈',
221
+ dpi=kwargs.pop('dpi', 100),
222
+ format=kwargs.pop('img_format', 'png'),
223
+ **kwargs
224
+ )
225
+
226
+ # 5. Wrap for Environment
227
+ if output_format in {'jupyter', 'notebook', 'ipython', 'colab'}:
228
+ wrapped_html = self._wrap_for_environment(html_output, output_format)
229
+ else:
230
+ wrapped_html = html_output
231
+
232
+ # 6. Return based on output format
233
+ if output_format == 'html':
234
+ return None, wrapped_html
235
+ else:
236
+ # Default behavior: Return code as content, HTML widget as wrapped
237
+ return code, wrapped_html
File without changes