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,192 @@
1
+ -- Drop existing table if it exists (uncomment if needed)
2
+ DROP TABLE IF EXISTS navigator.ai_bots CASCADE;
3
+
4
+ -- Create the unified AI bots table
5
+ CREATE TABLE IF NOT EXISTS navigator.ai_bots (
6
+ -- Primary key
7
+ chatbot_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
8
+
9
+ -- Basic bot information
10
+ name VARCHAR NOT NULL,
11
+ description TEXT,
12
+ avatar TEXT,
13
+ enabled BOOLEAN NOT NULL DEFAULT TRUE,
14
+ timezone VARCHAR(75) DEFAULT 'UTC',
15
+
16
+ -- Bot personality and behavior
17
+ role VARCHAR DEFAULT 'AI Assistant',
18
+ goal TEXT NOT NULL DEFAULT 'Help users accomplish their tasks effectively.',
19
+ backstory TEXT NOT NULL DEFAULT 'I am an AI assistant created to help users with various tasks.',
20
+ rationale TEXT NOT NULL DEFAULT 'I maintain a professional tone and provide accurate, helpful information.',
21
+ capabilities TEXT DEFAULT 'I can engage in conversation, answer questions, and use tools when needed.',
22
+
23
+ -- Prompt configuration
24
+ system_prompt_template TEXT,
25
+ human_prompt_template TEXT,
26
+ pre_instructions JSONB DEFAULT '[]'::JSONB,
27
+
28
+ -- LLM configuration
29
+ llm VARCHAR DEFAULT 'google',
30
+ model_name VARCHAR DEFAULT 'gemini-2.0-flash-001',
31
+ temperature FLOAT DEFAULT 0.1 CHECK (temperature >= 0 AND temperature <= 2),
32
+ max_tokens INTEGER DEFAULT 1024 CHECK (max_tokens > 0),
33
+ top_k INTEGER DEFAULT 41 CHECK (top_k > 0),
34
+ top_p FLOAT DEFAULT 0.9 CHECK (top_p >= 0 AND top_p <= 1),
35
+ model_config JSONB DEFAULT '{}'::JSONB,
36
+
37
+ -- Tool and agent configuration
38
+ tools_enabled BOOLEAN DEFAULT TRUE,
39
+ auto_tool_detection BOOLEAN DEFAULT TRUE,
40
+ tool_threshold FLOAT DEFAULT 0.7 CHECK (tool_threshold >= 0 AND tool_threshold <= 1),
41
+ tools JSONB DEFAULT '[]'::JSONB,
42
+ operation_mode VARCHAR DEFAULT 'adaptive' CHECK (operation_mode IN ('conversational', 'agentic', 'adaptive')),
43
+
44
+ -- Vector store and retrieval configuration
45
+ use_vector BOOLEAN DEFAULT FALSE,
46
+ vector_store_config JSONB DEFAULT '{}'::JSONB,
47
+ embedding_model JSONB DEFAULT '{"model_name": "sentence-transformers/all-MiniLM-L12-v2", "model_type": "huggingface"}'::JSONB,
48
+ context_search_limit INTEGER DEFAULT 10 CHECK (context_search_limit > 0),
49
+ context_score_threshold FLOAT DEFAULT 0.7 CHECK (context_score_threshold >= 0 AND context_score_threshold <= 1),
50
+
51
+ -- Memory and conversation configuration
52
+ memory_type VARCHAR DEFAULT 'memory' CHECK (memory_type IN ('memory', 'file', 'redis')),
53
+ memory_config JSONB DEFAULT '{}'::JSONB,
54
+ max_context_turns INTEGER DEFAULT 5 CHECK (max_context_turns > 0),
55
+ use_conversation_history BOOLEAN DEFAULT TRUE,
56
+
57
+ -- Security and permissions
58
+ permissions JSONB DEFAULT '{}'::JSONB,
59
+
60
+ -- Metadata
61
+ language VARCHAR(10) DEFAULT 'en',
62
+ disclaimer TEXT,
63
+ created_at TIMESTAMPTZ DEFAULT NOW(),
64
+ created_by INTEGER,
65
+ updated_at TIMESTAMPTZ DEFAULT NOW()
66
+ );
67
+
68
+ -- Create indexes for better performance
69
+ CREATE INDEX IF NOT EXISTS idx_ai_bots_name ON navigator.ai_bots(name);
70
+ CREATE INDEX IF NOT EXISTS idx_ai_bots_enabled ON navigator.ai_bots(enabled);
71
+ CREATE INDEX IF NOT EXISTS idx_ai_bots_operation_mode ON navigator.ai_bots(operation_mode);
72
+ CREATE INDEX IF NOT EXISTS idx_ai_bots_tools_enabled ON navigator.ai_bots(tools_enabled);
73
+ CREATE INDEX IF NOT EXISTS idx_ai_bots_use_vector ON navigator.ai_bots(use_vector);
74
+ CREATE INDEX IF NOT EXISTS idx_ai_bots_created_at ON navigator.ai_bots(created_at);
75
+ CREATE INDEX IF NOT EXISTS idx_ai_bots_llm ON navigator.ai_bots(llm);
76
+
77
+ -- Create a GIN index for JSONB columns for efficient querying
78
+ CREATE INDEX IF NOT EXISTS idx_ai_bots_tools_gin ON navigator.ai_bots USING GIN (tools);
79
+ CREATE INDEX IF NOT EXISTS idx_ai_bots_permissions_gin ON navigator.ai_bots USING GIN (permissions);
80
+ CREATE INDEX IF NOT EXISTS idx_ai_bots_model_config_gin ON navigator.ai_bots USING GIN (model_config);
81
+
82
+ -- Unique constraint on name
83
+ ALTER TABLE navigator.ai_bots
84
+ ADD CONSTRAINT unq_navigator_ai_bots_name UNIQUE (name);
85
+
86
+ -- Add comments for documentation
87
+ COMMENT ON TABLE navigator.ai_bots IS 'Unified AI bots table supporting both conversational and agentic capabilities';
88
+ COMMENT ON COLUMN navigator.ai_bots.chatbot_id IS 'Primary key UUID for the bot';
89
+ COMMENT ON COLUMN navigator.ai_bots.name IS 'Unique name identifier for the bot';
90
+ COMMENT ON COLUMN navigator.ai_bots.operation_mode IS 'Bot operation mode: conversational, agentic, or adaptive';
91
+ COMMENT ON COLUMN navigator.ai_bots.tools_enabled IS 'Whether the bot can use tools';
92
+ COMMENT ON COLUMN navigator.ai_bots.auto_tool_detection IS 'Whether the bot automatically detects when to use tools';
93
+ COMMENT ON COLUMN navigator.ai_bots.tool_threshold IS 'Confidence threshold for automatic tool usage (0-1)';
94
+ COMMENT ON COLUMN navigator.ai_bots.tools IS 'JSON array of available tool names';
95
+ COMMENT ON COLUMN navigator.ai_bots.use_vector IS 'Whether the bot uses vector store for context retrieval';
96
+ COMMENT ON COLUMN navigator.ai_bots.vector_store_config IS 'JSON configuration for vector store connection';
97
+ COMMENT ON COLUMN navigator.ai_bots.memory_type IS 'Type of conversation memory: memory, file, or redis';
98
+ COMMENT ON COLUMN navigator.ai_bots.pre_instructions IS 'JSON array of pre-instructions for the bot';
99
+ COMMENT ON COLUMN navigator.ai_bots.permissions IS 'JSON object defining bot access permissions';
100
+
101
+ -- Create a function to update the updated_at timestamp
102
+ CREATE OR REPLACE FUNCTION update_ai_bots_updated_at()
103
+ RETURNS TRIGGER AS $$
104
+ BEGIN
105
+ NEW.updated_at = NOW();
106
+ RETURN NEW;
107
+ END;
108
+ $$ language 'plpgsql';
109
+
110
+ -- Create trigger to automatically update updated_at
111
+ CREATE TRIGGER trigger_ai_bots_updated_at
112
+ BEFORE UPDATE ON navigator.ai_bots
113
+ FOR EACH ROW
114
+ EXECUTE FUNCTION update_ai_bots_updated_at();
115
+
116
+ -- Insert some example configurations
117
+ INSERT INTO navigator.ai_bots (
118
+ name, description, role, goal, backstory, capabilities,
119
+ tools_enabled, auto_tool_detection, tools, operation_mode, tool_threshold
120
+ ) VALUES
121
+ (
122
+ 'ResearchBot',
123
+ 'AI assistant specialized in research and information gathering',
124
+ 'Research Assistant',
125
+ 'Help users find and analyze information from various sources',
126
+ 'I am a research-focused AI assistant trained to help users discover, analyze, and synthesize information.',
127
+ 'I can search the web, analyze documents, perform calculations, and help with research tasks',
128
+ TRUE,
129
+ TRUE,
130
+ '["DuckDuckGoSearchTool", "MathTool", "PDFAnalysisTool"]'::JSONB,
131
+ 'adaptive',
132
+ 0.5
133
+ ),
134
+ (
135
+ 'ChatBot',
136
+ 'Friendly conversational AI assistant',
137
+ 'Conversational Assistant',
138
+ 'Engage in helpful and friendly conversations',
139
+ 'I am a friendly AI assistant designed to have natural conversations and help with general questions.',
140
+ 'I can chat, answer questions, and provide information on a wide range of topics',
141
+ FALSE,
142
+ FALSE,
143
+ '[]'::JSONB,
144
+ 'conversational',
145
+ 0.7
146
+ ),
147
+ (
148
+ 'DataBot',
149
+ 'AI assistant specialized in data analysis and visualization',
150
+ 'Data Analyst',
151
+ 'Help users analyze and visualize data effectively',
152
+ 'I am a data-focused AI assistant with expertise in statistical analysis and data visualization.',
153
+ 'I can analyze datasets, create visualizations, perform statistical calculations, and help interpret data',
154
+ TRUE,
155
+ TRUE,
156
+ '["MathTool", "DataAnalysisTool", "PlottingTool"]'::JSONB,
157
+ 'adaptive',
158
+ 0.3
159
+ ) ON CONFLICT (name) DO NOTHING;
160
+
161
+ -- Create views for easier querying
162
+ CREATE OR REPLACE VIEW navigator.vw_active_bots AS
163
+ SELECT
164
+ chatbot_id,
165
+ name,
166
+ description,
167
+ role,
168
+ operation_mode,
169
+ tools_enabled,
170
+ use_vector,
171
+ llm,
172
+ model_name,
173
+ created_at,
174
+ updated_at
175
+ FROM navigator.ai_bots
176
+ WHERE enabled = TRUE;
177
+
178
+ CREATE OR REPLACE VIEW navigator.vw_tool_enabled_bots AS
179
+ SELECT
180
+ chatbot_id,
181
+ name,
182
+ description,
183
+ tools,
184
+ tool_threshold,
185
+ auto_tool_detection,
186
+ operation_mode
187
+ FROM navigator.ai_bots
188
+ WHERE enabled = TRUE AND tools_enabled = TRUE;
189
+
190
+ -- Grant appropriate permissions (adjust as needed for your setup)
191
+ -- GRANT SELECT, INSERT, UPDATE, DELETE ON navigator.ai_bots TO your_app_user;
192
+ -- GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA navigator TO your_app_user;
@@ -0,0 +1,362 @@
1
+ # AgentCrew REST API - Arquitectura del Sistema
2
+
3
+ ## πŸ—οΈ Vista General de la Arquitectura
4
+
5
+ ```
6
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
7
+ β”‚ Cliente / Usuario β”‚
8
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
9
+ β”‚
10
+ β”‚ HTTP Requests
11
+ β”‚
12
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
13
+ β”‚ CrewHandler (BaseView) β”‚
14
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
15
+ β”‚ β”‚ PUT /api/v1/crew β†’ Create Crew β”‚ β”‚
16
+ β”‚ β”‚ GET /api/v1/crew β†’ List/Get Crews β”‚ β”‚
17
+ β”‚ β”‚ POST /api/v1/crew/execute β†’ Execute Crew (async) β”‚ β”‚
18
+ β”‚ β”‚ PATCH /api/v1/crew/job β†’ Get Job Status/Results β”‚ β”‚
19
+ β”‚ β”‚ DELETE /api/v1/crew β†’ Delete Crew β”‚ β”‚
20
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
21
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
22
+ β”‚ β”‚
23
+ β”‚ Crew Management β”‚ Job Management
24
+ β”‚ β”‚
25
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
26
+ β”‚ BotManager β”‚ β”‚ JobManager β”‚
27
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
28
+ β”‚ β”‚ β€’ add_crew() β”‚ β”‚ β”‚ β”‚ β€’ create_job() β”‚ β”‚
29
+ β”‚ β”‚ β€’ get_crew() β”‚ β”‚ β”‚ β”‚ β€’ execute_job() β”‚ β”‚
30
+ β”‚ β”‚ β€’ list_crews() β”‚ β”‚ β”‚ β”‚ β€’ get_job() β”‚ β”‚
31
+ β”‚ β”‚ β€’ remove_crew() β”‚ β”‚ β”‚ β”‚ β€’ list_jobs() β”‚ β”‚
32
+ β”‚ β”‚ β€’ get_crew_stats() β”‚ β”‚ β”‚ β”‚ β€’ delete_job() β”‚ β”‚
33
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β€’ get_stats() β”‚ β”‚
34
+ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
35
+ β”‚ Stores: β”‚ β”‚ β”‚
36
+ β”‚ _crews: Dict[str, Tuple[ β”‚ β”‚ Stores: β”‚
37
+ β”‚ AgentCrew, β”‚ β”‚ jobs: Dict[str, CrewJob] β”‚
38
+ β”‚ CrewDefinition β”‚ β”‚ tasks: Dict[str, Task] β”‚
39
+ β”‚ ]] β”‚ β”‚ β”‚
40
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
41
+ β”‚ β”‚
42
+ β”‚ Crew Execution β”‚ Async Execution
43
+ β”‚ β”‚
44
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
45
+ β”‚ AgentCrew β”‚
46
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
47
+ β”‚ β”‚ Execution Modes: β”‚ β”‚
48
+ β”‚ β”‚ β”‚ β”‚
49
+ β”‚ β”‚ β€’ SEQUENTIAL β”‚ β”‚
50
+ β”‚ β”‚ Input β†’ Agent1 β†’ Agent2 β†’ Agent3 β†’ Output β”‚ β”‚
51
+ β”‚ β”‚ β”‚ β”‚
52
+ β”‚ β”‚ β€’ PARALLEL β”‚ β”‚
53
+ β”‚ β”‚ Input β†’ [Agent1, Agent2, Agent3] β†’ Outputs β”‚ β”‚
54
+ β”‚ β”‚ β”‚ β”‚
55
+ β”‚ β”‚ β€’ FLOW (DAG) β”‚ β”‚
56
+ β”‚ β”‚ Input β†’ Agent1 β†’ [Agent2, Agent3] β†’ Agent4 β†’ Output β”‚ β”‚
57
+ β”‚ β”‚ β”‚ β”‚
58
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
59
+ β”‚ β”‚
60
+ β”‚ Components: β”‚
61
+ β”‚ β€’ agents: Dict[str, Agent] β”‚
62
+ β”‚ β€’ shared_tool_manager: ToolManager β”‚
63
+ β”‚ β€’ workflow_graph: Dict[str, AgentNode] (for flow mode) β”‚
64
+ β”‚ β€’ execution_log: List[Dict] β”‚
65
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
66
+ β”‚
67
+ β”‚ Agent Execution
68
+ β”‚
69
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
70
+ β”‚ Individual Agents β”‚
71
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
72
+ β”‚ β”‚ BaseAgent β”‚ β”‚ Chatbot β”‚ β”‚ Custom Agent β”‚ β”‚
73
+ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
74
+ β”‚ β”‚ β€’ LLM Client β”‚ β”‚ β€’ LLM Client β”‚ β”‚ β€’ LLM Client β”‚ β”‚
75
+ β”‚ β”‚ β€’ Tools β”‚ β”‚ β€’ Tools β”‚ β”‚ β€’ Tools β”‚ β”‚
76
+ β”‚ β”‚ β€’ Memory β”‚ β”‚ β€’ Memory β”‚ β”‚ β€’ Memory β”‚ β”‚
77
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
78
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
79
+ ```
80
+
81
+ ## πŸ“Š Flujo de Datos
82
+
83
+ ### 1. CreaciΓ³n de Crew (PUT)
84
+
85
+ ```
86
+ Cliente
87
+ β”‚
88
+ β”‚ PUT /api/v1/crew
89
+ β”‚ {crew_definition}
90
+ β”‚
91
+ β–Ό
92
+ CrewHandler.put()
93
+ β”‚
94
+ β”‚ 1. Valida CrewDefinition (Pydantic)
95
+ β”‚ 2. Crea instancias de agentes
96
+ β”‚ 3. Configura tools
97
+ β”‚ 4. Setup flow relations (si flow mode)
98
+ β”‚
99
+ β–Ό
100
+ BotManager.add_crew()
101
+ β”‚
102
+ β”‚ Almacena: (AgentCrew, CrewDefinition)
103
+ β”‚
104
+ β–Ό
105
+ Response {crew_id, status}
106
+ ```
107
+
108
+ ### 2. EjecuciΓ³n de Crew (POST)
109
+
110
+ ```
111
+ Cliente
112
+ β”‚
113
+ β”‚ POST /api/v1/crew/execute
114
+ β”‚ {crew_id, query}
115
+ β”‚
116
+ β–Ό
117
+ CrewHandler.post()
118
+ β”‚
119
+ β”‚ 1. Obtiene crew de BotManager
120
+ β”‚ 2. Crea job en JobManager
121
+ β”‚ 3. Define funciΓ³n async de ejecuciΓ³n
122
+ β”‚
123
+ β–Ό
124
+ JobManager.execute_job()
125
+ β”‚
126
+ β”‚ 1. Crea asyncio.Task
127
+ β”‚ 2. Actualiza job status β†’ RUNNING
128
+ β”‚
129
+ β–Ό
130
+ AgentCrew.run_[sequential|parallel|flow]()
131
+ β”‚
132
+ β”‚ Ejecuta agentes segΓΊn modo
133
+ β”‚
134
+ β–Ό
135
+ JobManager
136
+ β”‚
137
+ β”‚ 1. Actualiza job status β†’ COMPLETED
138
+ β”‚ 2. Almacena resultado
139
+ β”‚
140
+ β–Ό
141
+ Response {job_id, status}
142
+ ```
143
+
144
+ ### 3. ObtenciΓ³n de Resultados (PATCH)
145
+
146
+ ```
147
+ Cliente
148
+ β”‚
149
+ β”‚ PATCH /api/v1/crew/job?job_id=xxx
150
+ β”‚
151
+ β–Ό
152
+ CrewHandler.patch()
153
+ β”‚
154
+ β”‚ 1. Obtiene job de JobManager
155
+ β”‚ 2. Verifica status
156
+ β”‚
157
+ β–Ό
158
+ Response {
159
+ status,
160
+ result (if completed),
161
+ error (if failed)
162
+ }
163
+ ```
164
+
165
+ ## πŸ”„ Ciclo de Vida de un Job
166
+
167
+ ```
168
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
169
+ β”‚ PENDING β”‚ ← Job creado
170
+ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
171
+ β”‚
172
+ β”‚ execute_job() llamado
173
+ β”‚
174
+ β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
175
+ β”‚ RUNNING β”‚ ← EjecuciΓ³n iniciada
176
+ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
177
+ β”‚
178
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
179
+ β”‚ β”‚
180
+ β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”‚
181
+ β”‚ COMPLETED β”‚ β”‚ ← EjecuciΓ³n exitosa
182
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
183
+ β”‚
184
+ β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
185
+ β”‚ FAILED β”‚ ← EjecuciΓ³n fallida
186
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
187
+ ```
188
+
189
+ ## 🧩 Componentes Principales
190
+
191
+ ### CrewHandler
192
+ - **Responsabilidad**: Endpoints REST
193
+ - **Dependencias**: BotManager, JobManager
194
+ - **Entrada**: HTTP Requests (JSON)
195
+ - **Salida**: HTTP Responses (JSON)
196
+
197
+ ### BotManager
198
+ - **Responsabilidad**: GestiΓ³n de crews
199
+ - **Almacenamiento**: Dict de crews
200
+ - **Operaciones**: CRUD de crews
201
+
202
+ ### JobManager
203
+ - **Responsabilidad**: EjecuciΓ³n asΓ­ncrona
204
+ - **Almacenamiento**: Dict de jobs
205
+ - **Operaciones**: Crear, ejecutar, monitorear jobs
206
+
207
+ ### AgentCrew
208
+ - **Responsabilidad**: OrquestaciΓ³n de agentes
209
+ - **Modos**: Sequential, Parallel, Flow
210
+ - **Entrada**: Query/Task
211
+ - **Salida**: CrewResult
212
+
213
+ ## πŸ“¦ Modelos de Datos
214
+
215
+ ```
216
+ CrewDefinition
217
+ β”œβ”€β”€ crew_id: str
218
+ β”œβ”€β”€ name: str
219
+ β”œβ”€β”€ execution_mode: ExecutionMode
220
+ β”œβ”€β”€ agents: List[AgentDefinition]
221
+ β”œβ”€β”€ flow_relations: List[FlowRelation]
222
+ └── metadata: Dict
223
+
224
+ AgentDefinition
225
+ β”œβ”€β”€ agent_id: str
226
+ β”œβ”€β”€ agent_class: str
227
+ β”œβ”€β”€ config: Dict
228
+ β”œβ”€β”€ tools: List[str]
229
+ └── system_prompt: str
230
+
231
+ CrewJob
232
+ β”œβ”€β”€ job_id: str
233
+ β”œβ”€β”€ crew_id: str
234
+ β”œβ”€β”€ status: JobStatus
235
+ β”œβ”€β”€ query: str
236
+ β”œβ”€β”€ result: Any
237
+ β”œβ”€β”€ error: str
238
+ └── timestamps: ...
239
+
240
+ CrewResult (from AgentCrew)
241
+ β”œβ”€β”€ output: str
242
+ β”œβ”€β”€ results: List[str]
243
+ β”œβ”€β”€ agent_ids: List[str]
244
+ β”œβ”€β”€ agents: List[AgentExecutionInfo]
245
+ β”œβ”€β”€ execution_log: List[Dict]
246
+ └── metadata: Dict
247
+ ```
248
+
249
+ ## πŸ”— Interacciones entre Componentes
250
+
251
+ ```
252
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
253
+ β”‚ Cliente β”‚
254
+ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
255
+ β”‚
256
+ β”‚ 1. Crear Crew
257
+ β–Ό
258
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
259
+ β”‚ CrewHandler │────▢│ BotManager β”‚
260
+ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
261
+ β”‚
262
+ β”‚ 2. Ejecutar Crew
263
+ β–Ό
264
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
265
+ β”‚ CrewHandler │────▢│ JobManager β”‚
266
+ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
267
+ β”‚ β”‚
268
+ β”‚ β”‚ 3. Ejecutar async
269
+ β”‚ β–Ό
270
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
271
+ β”‚ β”‚ AgentCrew β”‚
272
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
273
+ β”‚ β”‚
274
+ β”‚ β”‚ 4. Ejecutar agentes
275
+ β”‚ β–Ό
276
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
277
+ β”‚ β”‚ Agents β”‚
278
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
279
+ β”‚ β”‚
280
+ β”‚ β”‚ 5. Retornar resultado
281
+ β”‚ β”‚
282
+ β”‚ 6. Obtener resultado β”‚
283
+ β–Ό β”‚
284
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
285
+ β”‚ CrewHandler β”‚β—€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
286
+ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
287
+ β”‚
288
+ β”‚ 7. Response
289
+ β–Ό
290
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
291
+ β”‚ Cliente β”‚
292
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
293
+ ```
294
+
295
+ ## 🎯 Patrones de Diseño Utilizados
296
+
297
+ ### 1. Repository Pattern
298
+ - BotManager actΓΊa como repositorio de crews
299
+ - JobManager actΓΊa como repositorio de jobs
300
+
301
+ ### 2. Factory Pattern
302
+ - CrewHandler crea instancias de AgentCrew
303
+ - CreaciΓ³n dinΓ‘mica de agentes basada en AgentDefinition
304
+
305
+ ### 3. Async Pattern
306
+ - EjecuciΓ³n no bloqueante con asyncio
307
+ - Jobs tracked con futures/tasks
308
+
309
+ ### 4. Strategy Pattern
310
+ - Diferentes modos de ejecuciΓ³n (Sequential, Parallel, Flow)
311
+ - SelecciΓ³n dinΓ‘mica basada en execution_mode
312
+
313
+ ### 5. Observer Pattern
314
+ - JobManager permite polling de estado
315
+ - Jobs notifican cambios de estado
316
+
317
+ ## πŸ”’ Consideraciones de Concurrencia
318
+
319
+ ```
320
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
321
+ β”‚ Ejecuciones Concurrentes β”‚
322
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
323
+ β”‚ β”‚
324
+ β”‚ Job 1: Crew A β†’ Running β”‚
325
+ β”‚ [Agent1] [Agent2] [Agent3] β”‚
326
+ β”‚ β”‚
327
+ β”‚ Job 2: Crew B β†’ Running β”‚
328
+ β”‚ [Agent1] [Agent2] β”‚
329
+ β”‚ β”‚
330
+ β”‚ Job 3: Crew A β†’ Pending β”‚
331
+ β”‚ (en cola) β”‚
332
+ β”‚ β”‚
333
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
334
+ ```
335
+
336
+ - Cada job se ejecuta en su propio asyncio.Task
337
+ - No hay lΓ­mite de crews concurrentes (configurable)
338
+ - max_parallel_tasks limita agentes paralelos dentro de un crew
339
+ - JobManager mantiene estado independiente por job
340
+
341
+ ## πŸ“ˆ Escalabilidad
342
+
343
+ ### Vertical
344
+ - Aumentar max_parallel_tasks
345
+ - Reducir cleanup_interval
346
+ - Aumentar recursos del servidor
347
+
348
+ ### Horizontal
349
+ - Jobs son stateless (resultado en memoria)
350
+ - Puede distribuirse con Redis/DB compartida
351
+ - Load balancing en mΓΊltiples instancias
352
+
353
+ ### Optimizaciones Futuras
354
+ - Queue system (Redis, RabbitMQ)
355
+ - Persistent storage (PostgreSQL)
356
+ - Caching (Redis)
357
+ - Webhooks para notificaciones
358
+ - Streaming de resultados parciales
359
+
360
+ ---
361
+
362
+ **Arquitectura diseñada para AI-Parrot 🦜**