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,205 @@
1
+ from typing import Type, List
2
+ from pydantic import BaseModel, Field
3
+ from .base import WebAppGenerator
4
+
5
+
6
+ class ReactApp(BaseModel):
7
+ """Pydantic schema for React application output."""
8
+ code: str = Field(description="Complete React component code")
9
+ component_name: str = Field(description="Main component name")
10
+ description: str = Field(description="App description")
11
+ dependencies: List[str] = Field(
12
+ description="External dependencies used",
13
+ default_factory=lambda: ["react", "recharts", "lucide-react"]
14
+ )
15
+ features: List[str] = Field(description="Key features implemented")
16
+
17
+
18
+ class ReactGenerator(WebAppGenerator):
19
+ """Generator for React applications."""
20
+
21
+ def get_system_prompt(self) -> str:
22
+ return """You are a senior React developer building modern, responsive web applications.
23
+
24
+ **User Requirements:**
25
+ {user_description}
26
+
27
+ **Technical Stack:**
28
+ - React 18+ with Hooks (useState, useEffect, useReducer, useMemo, useCallback)
29
+ - Tailwind CSS for ALL styling (no inline styles)
30
+ - Recharts for charts and data visualization
31
+ - Lucide React for icons
32
+ - Mock data only (no external API calls)
33
+
34
+ **Code Quality Standards:**
35
+ - Functional components only (no class components)
36
+ - Proper prop destructuring and validation
37
+ - Clean, modular component structure
38
+ - Responsive design using Tailwind's responsive classes
39
+ - Accessibility: ARIA labels, semantic HTML, keyboard navigation
40
+ - Performance: useMemo for expensive computations, useCallback for event handlers
41
+
42
+ **Styling Requirements:**
43
+ - Use ONLY Tailwind utility classes
44
+ - Consistent color palette (blue-600 primary, gray-50 backgrounds)
45
+ - Proper spacing scale (p-4, p-6, etc.)
46
+ - Smooth transitions (transition-all duration-300)
47
+ - Hover states for interactive elements
48
+ - Mobile-first responsive design
49
+
50
+ **Component Structure:**
51
+ 1. Import statements at top
52
+ 2. Component definition with clear function name
53
+ 3. State declarations grouped together
54
+ 4. Helper functions
55
+ 5. useEffect hooks
56
+ 6. JSX return statement
57
+ 7. Default export
58
+
59
+ **Best Practices:**
60
+ - Break large components into smaller ones
61
+ - Keep components under 200 lines
62
+ - Use meaningful variable names
63
+ - Add comments for complex logic
64
+ - Include loading and error states
65
+ - Implement proper form validation
66
+
67
+ **Example Quality Standard:**
68
+ {high_quality_example}
69
+
70
+ Generate a complete, self-contained React component as a default export."""
71
+
72
+ def get_output_schema(self) -> Type[BaseModel]:
73
+ return ReactApp
74
+
75
+ def get_examples(self) -> str:
76
+ return '''
77
+ import React, { useState, useMemo } from 'react';
78
+ import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';
79
+ import { TrendingUp, Download, Filter } from 'lucide-react';
80
+
81
+ const Dashboard = () => {
82
+ // Mock data
83
+ const [data] = useState([
84
+ { name: 'Jan', revenue: 4000, expenses: 2400 },
85
+ { name: 'Feb', revenue: 3000, expenses: 1398 },
86
+ { name: 'Mar', revenue: 2000, expenses: 9800 },
87
+ { name: 'Apr', revenue: 2780, expenses: 3908 },
88
+ { name: 'May', revenue: 1890, expenses: 4800 },
89
+ { name: 'Jun', revenue: 2390, expenses: 3800 }
90
+ ]);
91
+
92
+ const [filterActive, setFilterActive] = useState(false);
93
+
94
+ // Compute metrics
95
+ const metrics = useMemo(() => ({
96
+ totalRevenue: data.reduce((sum, item) => sum + item.revenue, 0),
97
+ totalExpenses: data.reduce((sum, item) => sum + item.expenses, 0),
98
+ avgRevenue: data.reduce((sum, item) => sum + item.revenue, 0) / data.length
99
+ }), [data]);
100
+
101
+ const handleExport = () => {
102
+ const csv = [
103
+ 'Month,Revenue,Expenses',
104
+ ...data.map(d => `${d.name},${d.revenue},${d.expenses}`)
105
+ ].join('\\n');
106
+
107
+ const blob = new Blob([csv], { type: 'text/csv' });
108
+ const url = window.URL.createObjectURL(blob);
109
+ const a = document.createElement('a');
110
+ a.href = url;
111
+ a.download = 'data.csv';
112
+ a.click();
113
+ };
114
+
115
+ return (
116
+ <div className="min-h-screen bg-gray-50 p-6">
117
+ <div className="max-w-7xl mx-auto">
118
+ {/* Header */}
119
+ <div className="bg-white rounded-lg shadow-lg p-6 mb-6">
120
+ <div className="flex items-center justify-between mb-4">
121
+ <div className="flex items-center gap-3">
122
+ <TrendingUp className="text-blue-600" size={32} />
123
+ <div>
124
+ <h1 className="text-3xl font-bold text-gray-900">
125
+ Financial Dashboard
126
+ </h1>
127
+ <p className="text-gray-600">Track your revenue and expenses</p>
128
+ </div>
129
+ </div>
130
+
131
+ <div className="flex gap-2">
132
+ <button
133
+ onClick={() => setFilterActive(!filterActive)}
134
+ className="flex items-center gap-2 px-4 py-2 bg-gray-100 hover:bg-gray-200 rounded-lg transition-colors"
135
+ aria-label="Toggle filters"
136
+ >
137
+ <Filter size={18} />
138
+ Filters
139
+ </button>
140
+ <button
141
+ onClick={handleExport}
142
+ className="flex items-center gap-2 px-4 py-2 bg-blue-600 text-white hover:bg-blue-700 rounded-lg transition-colors"
143
+ aria-label="Export data"
144
+ >
145
+ <Download size={18} />
146
+ Export
147
+ </button>
148
+ </div>
149
+ </div>
150
+
151
+ {/* Metrics */}
152
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
153
+ <div className="bg-gradient-to-br from-blue-50 to-blue-100 rounded-lg p-4">
154
+ <div className="text-sm text-blue-600 font-medium mb-1">
155
+ Total Revenue
156
+ </div>
157
+ <div className="text-2xl font-bold text-blue-900">
158
+ ${metrics.totalRevenue.toLocaleString()}
159
+ </div>
160
+ </div>
161
+ <div className="bg-gradient-to-br from-red-50 to-red-100 rounded-lg p-4">
162
+ <div className="text-sm text-red-600 font-medium mb-1">
163
+ Total Expenses
164
+ </div>
165
+ <div className="text-2xl font-bold text-red-900">
166
+ ${metrics.totalExpenses.toLocaleString()}
167
+ </div>
168
+ </div>
169
+ <div className="bg-gradient-to-br from-green-50 to-green-100 rounded-lg p-4">
170
+ <div className="text-sm text-green-600 font-medium mb-1">
171
+ Avg Revenue
172
+ </div>
173
+ <div className="text-2xl font-bold text-green-900">
174
+ ${Math.round(metrics.avgRevenue).toLocaleString()}
175
+ </div>
176
+ </div>
177
+ </div>
178
+ </div>
179
+
180
+ {/* Chart */}
181
+ <div className="bg-white rounded-lg shadow-lg p-6">
182
+ <h2 className="text-xl font-bold text-gray-900 mb-4">
183
+ Monthly Comparison
184
+ </h2>
185
+ <ResponsiveContainer width="100%" height={400}>
186
+ <BarChart data={data}>
187
+ <CartesianGrid strokeDasharray="3 3" />
188
+ <XAxis dataKey="name" />
189
+ <YAxis />
190
+ <Tooltip />
191
+ <Bar dataKey="revenue" fill="#3b82f6" name="Revenue" />
192
+ <Bar dataKey="expenses" fill="#ef4444" name="Expenses" />
193
+ </BarChart>
194
+ </ResponsiveContainer>
195
+ </div>
196
+ </div>
197
+ </div>
198
+ );
199
+ };
200
+
201
+ export default Dashboard;
202
+ '''
203
+
204
+ def _get_file_extension(self) -> str:
205
+ return '.jsx'
@@ -0,0 +1,203 @@
1
+ from typing import Type, List
2
+ import ast
3
+ from pydantic import BaseModel, Field
4
+ from .base import WebAppGenerator
5
+
6
+
7
+ class StreamlitApp(BaseModel):
8
+ """Pydantic schema for Streamlit application output."""
9
+ code: str = Field(description="Complete Streamlit Python code")
10
+ title: str = Field(description="App title")
11
+ description: str = Field(description="Brief description of the app")
12
+ requirements: List[str] = Field(
13
+ description="Python package requirements",
14
+ default_factory=lambda: ["streamlit"]
15
+ )
16
+ features: List[str] = Field(description="List of main features")
17
+
18
+
19
+ class StreamlitGenerator(WebAppGenerator):
20
+ """Generator for Streamlit applications."""
21
+
22
+ def get_system_prompt(self) -> str:
23
+ return """You are an expert Streamlit developer creating production-ready applications.
24
+
25
+ **User Requirements:**
26
+ {user_description}
27
+
28
+ {additional_requirements}
29
+
30
+ **Technical Specifications:**
31
+ - Streamlit version: 1.28+
32
+ - Python 3.10+
33
+ - Use st.cache_data for expensive computations
34
+ - Implement proper error handling with try-except blocks
35
+ - Add loading states with st.spinner()
36
+ - Use st.session_state for state management
37
+ - Add input validation and clear error messages
38
+
39
+ **Design Guidelines:**
40
+ - Clean, modern UI with st.columns for layout
41
+ - Consistent spacing with st.divider() and padding
42
+ - Helpful tooltips using help parameter
43
+ - Clear section headers with st.header() and st.subheader()
44
+ - Data export functionality where appropriate
45
+ - Mobile-responsive considerations
46
+
47
+ **Code Structure:**
48
+ 1. Required imports at the top
49
+ 2. Page configuration using st.set_page_config() with appropriate title and layout
50
+ 3. Helper functions decorated with @st.cache_data where appropriate
51
+ 4. Main application logic
52
+ 5. if __name__ == "__main__": block at the end
53
+
54
+ **Quality Standards:**
55
+ - All functions must have docstrings
56
+ - Use type hints for function parameters
57
+ - Include comments for complex logic
58
+ - Handle edge cases and errors gracefully
59
+ - Use st.empty() for dynamic content updates
60
+ - Add st.success(), st.warning(), st.error() for user feedback
61
+
62
+ **Example of Expected Quality:**
63
+ {high_quality_example}
64
+
65
+ Generate a complete, production-ready Streamlit application now."""
66
+
67
+ def get_output_schema(self) -> Type[BaseModel]:
68
+ return StreamlitApp
69
+
70
+ def get_examples(self) -> str:
71
+ return '''
72
+ import streamlit as st
73
+ import pandas as pd
74
+ import plotly.express as px
75
+ from datetime import datetime
76
+
77
+ # Page configuration
78
+ st.set_page_config(
79
+ page_title="Data Analysis Dashboard",
80
+ page_icon="📊",
81
+ layout="wide",
82
+ initial_sidebar_state="expanded"
83
+ )
84
+
85
+ # Cache expensive operations
86
+ @st.cache_data
87
+ def load_data() -> pd.DataFrame:
88
+ """Load and prepare sample data."""
89
+ return pd.DataFrame({
90
+ 'date': pd.date_range('2024-01-01', periods=100),
91
+ 'category': ['A', 'B', 'C', 'D'] * 25,
92
+ 'value': np.random.randint(10, 100, 100)
93
+ })
94
+
95
+ @st.cache_data
96
+ def calculate_metrics(df: pd.DataFrame) -> dict:
97
+ """Calculate summary metrics."""
98
+ return {
99
+ 'total': df['value'].sum(),
100
+ 'average': df['value'].mean(),
101
+ 'max': df['value'].max(),
102
+ 'min': df['value'].min()
103
+ }
104
+
105
+ def main():
106
+ """Main application function."""
107
+ st.title("📊 Data Analysis Dashboard")
108
+ st.markdown("Analyze your data with interactive visualizations")
109
+
110
+ # Sidebar controls
111
+ with st.sidebar:
112
+ st.header("Filters")
113
+ categories = st.multiselect(
114
+ "Select Categories",
115
+ options=['A', 'B', 'C', 'D'],
116
+ default=['A', 'B'],
117
+ help="Choose which categories to display"
118
+ )
119
+
120
+ # Load data
121
+ try:
122
+ with st.spinner("Loading data..."):
123
+ df = load_data()
124
+
125
+ # Filter data
126
+ filtered_df = df[df['category'].isin(categories)]
127
+
128
+ if filtered_df.empty:
129
+ st.warning("No data available for selected filters")
130
+ return
131
+
132
+ # Metrics row
133
+ metrics = calculate_metrics(filtered_df)
134
+ col1, col2, col3, col4 = st.columns(4)
135
+
136
+ with col1:
137
+ st.metric("Total", f"{metrics['total']:,.0f}")
138
+ with col2:
139
+ st.metric("Average", f"{metrics['average']:.1f}")
140
+ with col3:
141
+ st.metric("Maximum", metrics['max'])
142
+ with col4:
143
+ st.metric("Minimum", metrics['min'])
144
+
145
+ st.divider()
146
+
147
+ # Visualization
148
+ st.subheader("Trend Analysis")
149
+ fig = px.line(
150
+ filtered_df,
151
+ x='date',
152
+ y='value',
153
+ color='category',
154
+ title='Values Over Time'
155
+ )
156
+ st.plotly_chart(fig, use_container_width=True)
157
+
158
+ # Data table
159
+ with st.expander("View Raw Data"):
160
+ st.dataframe(filtered_df, use_container_width=True)
161
+
162
+ # Export functionality
163
+ csv = filtered_df.to_csv(index=False)
164
+ st.download_button(
165
+ label="Download CSV",
166
+ data=csv,
167
+ file_name=f"data_export_{datetime.now():%Y%m%d}.csv",
168
+ mime="text/csv"
169
+ )
170
+
171
+ st.success("✓ Analysis complete!")
172
+
173
+ except Exception as e:
174
+ st.error(f"An error occurred: {str(e)}")
175
+ st.exception(e)
176
+
177
+ if __name__ == "__main__":
178
+ main()
179
+ '''
180
+
181
+ def validate_output(self, code: str) -> dict:
182
+ """Validate Python syntax of generated Streamlit code."""
183
+ errors = []
184
+ warnings = []
185
+
186
+ try:
187
+ ast.parse(code)
188
+ except SyntaxError as e:
189
+ errors.append(f"Syntax error: {e}")
190
+
191
+ # Check for required Streamlit imports
192
+ if 'import streamlit' not in code:
193
+ warnings.append("Missing streamlit import")
194
+
195
+ # Check for page config
196
+ if 'st.set_page_config' not in code:
197
+ warnings.append("Missing st.set_page_config() - recommended for better UX")
198
+
199
+ return {
200
+ "valid": len(errors) == 0,
201
+ "errors": errors,
202
+ "warnings": warnings
203
+ }
@@ -0,0 +1,105 @@
1
+ from typing import List, Dict, Any, Optional
2
+ from pathlib import Path
3
+ from pydantic import BaseModel
4
+ import json
5
+ from datamodel.parsers.json import json_encoder, json_decoder # pylint: disable=E0611 # noqa
6
+
7
+
8
+ class AppTemplate(BaseModel):
9
+ """Template for app generation."""
10
+ name: str
11
+ description: str
12
+ app_type: str # streamlit, react, html
13
+ base_structure: Dict[str, Any]
14
+ required_features: List[str]
15
+ optional_features: List[str]
16
+ styling_theme: Dict[str, str]
17
+
18
+
19
+ class TemplateManager:
20
+ """
21
+ Manages reusable templates for web app generation.
22
+ """
23
+
24
+ def __init__(self, templates_dir: Path):
25
+ self.templates_dir = templates_dir
26
+ self.templates_dir.mkdir(parents=True, exist_ok=True)
27
+ self._templates: Dict[str, AppTemplate] = {}
28
+ self._load_templates()
29
+
30
+ def _load_templates(self):
31
+ """Load templates from directory."""
32
+ for template_file in self.templates_dir.glob("*.json"):
33
+ with open(template_file) as f:
34
+ data = json_decoder(f)
35
+ template = AppTemplate(**data)
36
+ self._templates[template.name] = template
37
+
38
+ def create_template(
39
+ self,
40
+ name: str,
41
+ app_type: str,
42
+ description: str,
43
+ base_structure: Dict[str, Any],
44
+ required_features: List[str],
45
+ optional_features: List[str] = None,
46
+ styling_theme: Dict[str, str] = None
47
+ ) -> AppTemplate:
48
+ """Create a new template."""
49
+ template = AppTemplate(
50
+ name=name,
51
+ description=description,
52
+ app_type=app_type,
53
+ base_structure=base_structure,
54
+ required_features=required_features,
55
+ optional_features=optional_features or [],
56
+ styling_theme=styling_theme or {}
57
+ )
58
+
59
+ # Save to file
60
+ template_file = self.templates_dir / f"{name}.json"
61
+ with open(template_file, 'w') as f:
62
+ json_encoder(template.model_dump(), f)
63
+
64
+ self._templates[name] = template
65
+ return template
66
+
67
+ def get_template(self, name: str) -> Optional[AppTemplate]:
68
+ """Get a template by name."""
69
+ return self._templates.get(name)
70
+
71
+ def list_templates(self) -> List[str]:
72
+ """List all available templates."""
73
+ return list(self._templates.keys())
74
+
75
+ def generate_from_template(
76
+ self,
77
+ template_name: str,
78
+ customization: Dict[str, Any],
79
+ llm_client
80
+ ) -> str:
81
+ """Generate an app from a template with customization."""
82
+ template = self.get_template(template_name)
83
+ if not template:
84
+ raise ValueError(f"Template '{template_name}' not found")
85
+
86
+ prompt = f"""Generate a {template.app_type} application based on this template:
87
+
88
+ **Template:** {template.name}
89
+ {template.description}
90
+
91
+ **Required Features:**
92
+ {chr(10).join(f'- {f}' for f in template.required_features)}
93
+
94
+ **Customizations:**
95
+ {chr(10).join(f'- {k}: {v}' for k, v in customization.items())}
96
+
97
+ **Base Structure:**
98
+ {json.dumps(template.base_structure, indent=2)}
99
+
100
+ **Styling Theme:**
101
+ {json.dumps(template.styling_theme, indent=2)}
102
+
103
+ Generate complete code following the template structure with the specified customizations."""
104
+
105
+ return prompt
@@ -0,0 +1,4 @@
1
+ """
2
+ Parrot basic Handlers.
3
+ """
4
+ from .bots import ChatbotHandler