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,359 @@
1
+ # parrot/outputs/formats/charts/altair.py
2
+ from typing import Any, Optional, Tuple, Dict
3
+ import json
4
+ import uuid
5
+ from .chart import BaseChart
6
+ from . import register_renderer
7
+ from ...models.outputs import OutputMode
8
+
9
+
10
+ ALTAIR_SYSTEM_PROMPT = """ALTAIR CHART OUTPUT MODE:
11
+ Generate an interactive chart using Altair (Vega-Lite).
12
+
13
+ REQUIREMENTS:
14
+ 1. Return Python code in a markdown code block (```python)
15
+ 2. Use altair library (import altair as alt)
16
+ 3. Store the chart in a variable named 'chart', 'fig', 'c', or 'plot'
17
+ 4. Make the chart self-contained with inline data when possible
18
+ 5. Use appropriate mark types (mark_bar, mark_line, mark_point, etc.)
19
+ 6. Include proper encodings (x, y, color, size, etc.)
20
+ 7. Add titles and labels for clarity
21
+ 8. DO NOT execute the code or save files - return code only
22
+
23
+ EXAMPLE:
24
+ ```python
25
+ import altair as alt
26
+ import pandas as pd
27
+
28
+ data = pd.DataFrame({
29
+ 'category': ['A', 'B', 'C', 'D'],
30
+ 'values': [23, 45, 12, 67]
31
+ })
32
+
33
+ chart = alt.Chart(data).mark_bar().encode(
34
+ x='category',
35
+ y='values',
36
+ color='category'
37
+ ).properties(
38
+ title='Sample Bar Chart',
39
+ width=400,
40
+ height=300
41
+ )
42
+ ```
43
+ """
44
+
45
+
46
+ @register_renderer(OutputMode.ALTAIR, system_prompt=ALTAIR_SYSTEM_PROMPT)
47
+ class AltairRenderer(BaseChart):
48
+ """Renderer for Altair/Vega-Lite charts"""
49
+
50
+ def execute_code(
51
+ self,
52
+ code: str,
53
+ pandas_tool: Any = None,
54
+ execution_state: Optional[Dict[str, Any]] = None,
55
+ **kwargs,
56
+ ) -> Tuple[Any, Optional[str]]:
57
+ """Execute Altair code within the agent's Python environment."""
58
+ extra_namespace = None
59
+ if pandas_tool is None:
60
+ try:
61
+ import altair as alt
62
+ extra_namespace = {'alt': alt}
63
+ except ImportError:
64
+ pass
65
+
66
+ # Execute using BaseRenderer logic
67
+ context, error = super().execute_code(
68
+ code,
69
+ pandas_tool=pandas_tool,
70
+ execution_state=execution_state,
71
+ extra_namespace=extra_namespace,
72
+ **kwargs,
73
+ )
74
+
75
+ if error:
76
+ return None, error
77
+
78
+ if not context:
79
+ return None, "Execution context was empty"
80
+
81
+ # Find the chart object (Altair typically produces single charts)
82
+ chart, chart_error = self._find_chart_object(context)
83
+
84
+ if chart:
85
+ return chart, None
86
+
87
+ if chart_error:
88
+ return None, chart_error
89
+
90
+ return None, "Code must define a chart variable (chart, fig, c, or plot)"
91
+
92
+ @staticmethod
93
+ def _find_chart_object(context: Dict[str, Any]) -> Tuple[Optional[Any], Optional[str]]:
94
+ """Locate the Altair chart object in the local namespace.
95
+
96
+ Returns a tuple of (chart_obj, error_message). The error_message is
97
+ populated when a chart-like object is found but fails serialization
98
+ (e.g., ``to_dict`` raises)."""
99
+
100
+ def is_altair_chart(obj: Any) -> bool:
101
+ """Check if object is an Altair chart."""
102
+ if obj is None:
103
+ return False
104
+
105
+ # Skip renderer / BaseChart instances
106
+ if isinstance(obj, BaseChart):
107
+ return False
108
+
109
+ # Altair charts have to_dict method
110
+ if not hasattr(obj, 'to_dict'):
111
+ return False
112
+
113
+ # Check by class name
114
+ class_name = obj.__class__.__name__
115
+ altair_classes = ['Chart', 'LayerChart', 'HConcatChart', 'VConcatChart', 'FacetChart']
116
+ if any(ac in class_name for ac in altair_classes):
117
+ return True
118
+
119
+ # Check module
120
+ module = getattr(obj.__class__, '__module__', '')
121
+ if 'altair' in module or 'vega' in module:
122
+ return True
123
+
124
+ return False
125
+
126
+ def is_valid_chart(obj: Any) -> Tuple[bool, Optional[str]]:
127
+ """Verify the chart can be serialized."""
128
+ try:
129
+ obj.to_dict()
130
+ return True, None
131
+ except Exception as exc:
132
+ return False, str(exc)
133
+
134
+ serialization_error = None
135
+
136
+ # Priority search for common variable names
137
+ priority_vars = ['chart', 'fig', 'c', 'plot', 'figure']
138
+ for var_name in priority_vars:
139
+ if var_name in context:
140
+ obj = context[var_name]
141
+ if is_altair_chart(obj):
142
+ is_valid, err_msg = is_valid_chart(obj)
143
+ if is_valid:
144
+ return obj, None
145
+ serialization_error = serialization_error or f"Chart variable '{var_name}' could not be serialized: {err_msg}"
146
+
147
+ # Scan all locals for chart objects
148
+ for var_name, obj in context.items():
149
+ if var_name.startswith('_'):
150
+ continue
151
+ if is_altair_chart(obj):
152
+ is_valid, err_msg = is_valid_chart(obj)
153
+ if is_valid:
154
+ return obj, None
155
+ serialization_error = serialization_error or f"Found a chart-like object in '{var_name}' but serialization failed: {err_msg}"
156
+
157
+ if serialization_error:
158
+ return None, serialization_error
159
+
160
+ return None, None
161
+
162
+ def _render_chart_content(self, chart_obj: Any, **kwargs) -> str:
163
+ """Render Altair-specific chart content with vega-embed."""
164
+ embed_options = kwargs.get('embed_options', {})
165
+
166
+ try:
167
+ spec = chart_obj.to_dict()
168
+
169
+ # Ensure charts expand to the available container space
170
+ if not spec.get('autosize'):
171
+ spec['autosize'] = {
172
+ 'type': 'fit',
173
+ 'contains': 'padding',
174
+ 'resize': True
175
+ }
176
+
177
+ config = spec.setdefault('config', {})
178
+ view_config = config.setdefault('view', {})
179
+ view_config.setdefault('continuousWidth', 'container')
180
+ view_config.setdefault('continuousHeight', 400)
181
+
182
+ spec_json = json.dumps(spec, indent=2)
183
+ except Exception as e:
184
+ return f'''
185
+ <div class="error-container">
186
+ <h3>⚠️ Chart Serialization Error</h3>
187
+ <p class="error-message">{str(e)}</p>
188
+ </div>
189
+ '''
190
+
191
+ chart_id = f"altair-chart-{uuid.uuid4().hex[:8]}"
192
+
193
+ default_options = {
194
+ 'actions': {'export': True, 'source': False, 'editor': False},
195
+ 'theme': kwargs.get('vega_theme', 'latimes')
196
+ }
197
+ default_options |= embed_options
198
+ options_json = json.dumps(default_options)
199
+
200
+ return f'''
201
+ <div class="altair-chart-wrapper" style="margin-bottom: 20px;">
202
+ <div id="{chart_id}" style="width: 100%; min-height: 400px;"></div>
203
+ <script type="text/javascript">
204
+ (function() {{
205
+ if (typeof vegaEmbed === 'undefined') {{
206
+ console.error("Vega-Embed library not loaded");
207
+ document.getElementById('{chart_id}').innerHTML =
208
+ '<div class="error-container">' +
209
+ '<h3>⚠️ Library Error</h3>' +
210
+ '<p class="error-message">Vega-Embed library not loaded</p>' +
211
+ '</div>';
212
+ return;
213
+ }}
214
+
215
+ vegaEmbed('#{chart_id}', {spec_json}, {options_json})
216
+ .then(result => {{
217
+ console.log('Altair chart {chart_id} rendered successfully');
218
+ }})
219
+ .catch(error => {{
220
+ console.error('Error rendering Altair chart:', error);
221
+ document.getElementById('{chart_id}').innerHTML =
222
+ '<div class="error-container">' +
223
+ '<h3>⚠️ Chart Rendering Error</h3>' +
224
+ '<p class="error-message">' + error.message + '</p>' +
225
+ '</div>';
226
+ }});
227
+ }})();
228
+ </script>
229
+ </div>
230
+ '''
231
+
232
+ def to_html(
233
+ self,
234
+ chart_obj: Any,
235
+ mode: str = 'partial',
236
+ **kwargs
237
+ ) -> str:
238
+ """
239
+ Convert Altair chart to HTML.
240
+
241
+ Args:
242
+ chart_obj: Altair chart object
243
+ mode: 'partial' or 'complete'
244
+ **kwargs: Additional parameters
245
+
246
+ Returns:
247
+ HTML string
248
+ """
249
+ # Vega libraries for <head>
250
+ extra_head = '''
251
+ <!-- Vega/Vega-Lite/Vega-Embed -->
252
+ <script src="https://cdn.jsdelivr.net/npm/vega@5"></script>
253
+ <script src="https://cdn.jsdelivr.net/npm/vega-lite@5"></script>
254
+ <script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>
255
+ '''
256
+
257
+ kwargs['extra_head'] = kwargs.get('extra_head', extra_head)
258
+
259
+ # Call parent to_html which uses _render_chart_content
260
+ return super().to_html(chart_obj, mode=mode, **kwargs)
261
+
262
+ def to_json(self, chart_obj: Any) -> Optional[Dict]:
263
+ """Export Vega-Lite JSON specification."""
264
+ try:
265
+ return chart_obj.to_dict()
266
+ except Exception as e:
267
+ return {'error': str(e)}
268
+
269
+ async def render(
270
+ self,
271
+ response: Any,
272
+ theme: str = 'monokai',
273
+ environment: str = 'html',
274
+ include_code: bool = False,
275
+ html_mode: str = 'partial',
276
+ **kwargs
277
+ ) -> Tuple[Any, Optional[Any]]:
278
+ """
279
+ Render Altair chart.
280
+
281
+ Environments:
282
+ - 'html': Returns HTML with embedded Vega-Embed
283
+ - 'default': Returns JSON specification (Vega-Lite spec)
284
+ - 'json': Returns JSON specification
285
+ - 'jupyter'/'notebook': Returns chart object for native rendering
286
+ - 'terminal': Returns code only
287
+
288
+ Returns:
289
+ Tuple[Any, Optional[Any]]: (code, output)
290
+ - code goes to response.output
291
+ - output goes to response.response
292
+ """
293
+
294
+ # 1. Extract Code
295
+ code = getattr(response, 'code', None)
296
+ output_format = kwargs.get('output_format', environment)
297
+
298
+ # Fallback to extracting from text content
299
+ if not code:
300
+ content = self._get_content(response)
301
+ code = self._extract_code(content)
302
+
303
+ if not code:
304
+ error_msg = "No chart code found in response"
305
+ if output_format == 'terminal':
306
+ return error_msg, None
307
+ return self._wrap_for_environment(
308
+ f"<div class='error'>{error_msg}</div>",
309
+ output_format
310
+ ), None
311
+
312
+ # 2. Execute Code
313
+ chart_obj, error = self.execute_code(
314
+ code,
315
+ pandas_tool=kwargs.pop('pandas_tool', None),
316
+ execution_state=kwargs.pop('execution_state', None),
317
+ **kwargs,
318
+ )
319
+
320
+ if error:
321
+ if output_format == 'terminal':
322
+ return f"Error generating chart: {error}", None
323
+ return self._wrap_for_environment(
324
+ self._render_error(error, code, theme),
325
+ output_format
326
+ ), None
327
+
328
+ # 3. Handle different output formats
329
+
330
+ # Terminal: just return code
331
+ if output_format == 'terminal':
332
+ return code, None
333
+
334
+ # Jupyter/Notebook: return chart object for native rendering
335
+ if output_format in {'jupyter', 'notebook', 'ipython', 'colab'}:
336
+ return code, chart_obj
337
+
338
+ # Default: return JSON specification (Vega-Lite spec)
339
+ if output_format == 'default':
340
+ json_spec = self.to_json(chart_obj)
341
+ return code, json_spec
342
+
343
+ # JSON: explicit JSON request
344
+ if output_format == 'json':
345
+ return code, self.to_json(chart_obj)
346
+
347
+ # HTML (default): Generate embedded HTML
348
+ html_output = self.to_html(
349
+ chart_obj,
350
+ mode=html_mode,
351
+ include_code=include_code,
352
+ code=code,
353
+ theme=theme,
354
+ title=kwargs.get('title', 'Altair Chart'),
355
+ icon='📊',
356
+ **kwargs
357
+ )
358
+
359
+ return code, html_output
@@ -0,0 +1,122 @@
1
+ from typing import Any, Optional, Tuple, Dict, Type
2
+ import json
3
+ import pandas as pd
4
+ from .base import BaseRenderer
5
+ from . import register_renderer
6
+ from ...models.outputs import OutputMode
7
+ from .generators.abstract import AbstractAppGenerator
8
+ from .generators.streamlit import StreamlitGenerator
9
+ from .generators.panel import PanelGenerator
10
+ from .generators.terminal import TerminalGenerator
11
+
12
+
13
+ # Define available generators mapping
14
+ GENERATORS: Dict[str, Type[AbstractAppGenerator]] = {
15
+ 'streamlit': StreamlitGenerator,
16
+ 'panel': PanelGenerator,
17
+ 'terminal': TerminalGenerator,
18
+ }
19
+
20
+
21
+ OUTPUT_APPLICATION_PROMPT = """
22
+ **APPLICATION GENERATION MODE**
23
+
24
+ **Objective:**
25
+ Transform the user's query and the agent's analysis into a fully functional, standalone application (Streamlit, Panel, or Terminal Dashboard).
26
+
27
+ **INSTRUCTIONS:**
28
+ 1. **Analyze & Compute:**
29
+ - Use the provided Python tools to query the dataframes (`df1`, `df2`, etc.).
30
+ - Ensure all data processing happens within the tool execution.
31
+
32
+ 2. **Visualize (Code Generation):**
33
+ - If the user asks for charts, maps, or visual insights, generate the Python code to create them.
34
+ - **Crucial:** The code MUST be self-contained (using `df` as the variable name for the data).
35
+ - Support libraries: `plotly`, `altair`, `matplotlib`, `bokeh`.
36
+
37
+ 3. **Structured Response:**
38
+ - Return the response strictly following the `PandasAgentResponse` schema.
39
+ - `explanation`: A clear, formatted text summary of findings.
40
+ - `data`: The relevant subset of data (rows/columns) to display in the app.
41
+ - `code`: The specific Python code block that generates the visualizations.
42
+
43
+ **Example Code Snippet (for 'code' field):**
44
+ ```python
45
+ import plotly.express as px
46
+ # Assume 'df' is already loaded in the app context
47
+ fig = px.bar(df, x='Category', y='Sales', title='Sales Performance')
48
+ st.plotly_chart(fig) # For Streamlit
49
+ # or
50
+ fig.show() # For generic
51
+ """
52
+
53
+
54
+ @register_renderer(OutputMode.APPLICATION, system_prompt=OUTPUT_APPLICATION_PROMPT)
55
+ class ApplicationRenderer(BaseRenderer):
56
+ """
57
+ Renderer that wraps the Agent Response into a standalone Application.
58
+ Supports: Streamlit, Panel.
59
+ """
60
+ async def render(
61
+ self,
62
+ response: Any,
63
+ environment: str = 'terminal',
64
+ app_type: str = 'streamlit',
65
+ **kwargs,
66
+ ) -> Tuple[Any, Any]:
67
+ """
68
+ Render response using the requested Application Generator.
69
+ """
70
+ # 1. Select Generator Class
71
+ output_format = kwargs.get('output_format', environment)
72
+ # If environment is terminal and no specific app_type requested, default to terminal app
73
+ if output_format == 'terminal':
74
+ generator_cls = TerminalGenerator
75
+ else:
76
+ generator_cls = GENERATORS.get(app_type.lower(), StreamlitGenerator)
77
+
78
+ # 2. Instantiate and Generate
79
+ generator = generator_cls(response)
80
+ output = generator.generate()
81
+
82
+ # 3. Wrap Output
83
+ # For TerminalApp, the output IS the renderable object
84
+ if isinstance(generator, TerminalGenerator):
85
+ return "", output
86
+
87
+ # For Code Generators (Streamlit/Panel)
88
+ wrapped = self._wrap_code_instruction(output, app_type, environment)
89
+
90
+ return output, wrapped
91
+
92
+ def _wrap_code_instruction(self, code: str, app_type: str, environment: str) -> Any:
93
+ """Wraps the generated code with run instructions."""
94
+ filename = f"app_{app_type}.py"
95
+ cmd = f"streamlit run {filename}" if app_type == 'streamlit' else f"panel serve {filename}"
96
+
97
+ if environment == 'terminal':
98
+ try:
99
+ from rich.panel import Panel
100
+ from rich.syntax import Syntax
101
+ from rich.console import Group
102
+ from rich.markdown import Markdown
103
+
104
+ return Panel(
105
+ Group(
106
+ Markdown(f"**To run this {app_type.title()} app:**\n1. Save to `{filename}`\n2. Run `{cmd}`"),
107
+ Syntax(code, "python", theme="monokai")
108
+ ),
109
+ title=f"🚀 {app_type.title()} App Generated",
110
+ border_style="green"
111
+ )
112
+ except ImportError:
113
+ return f"Save to {filename} and run: {cmd}\n\n{code}"
114
+
115
+ elif environment in {'jupyter', 'notebook', 'colab'}:
116
+ from ipywidgets import HTML, VBox, Textarea, Layout
117
+ return VBox([
118
+ HTML(f"<b>{app_type.title()} App Generated.</b> Save code below and run: <code>{cmd}</code>"),
119
+ Textarea(value=code, layout=Layout(width='100%', height='300px'))
120
+ ])
121
+
122
+ return code