From a2e5a827bc0229fcced590bbd2a05fe0f0cb25db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Busso?= <90727999+agustinbusso@users.noreply.github.com> Date: Thu, 15 Jun 2023 16:41:02 -0300 Subject: [PATCH 01/20] Update create process modal for generative ai --- ProcessMaker/Http/Controllers/Api/ProcessController.php | 6 ++++++ resources/js/processes/components/CreateProcessModal.vue | 7 +++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ProcessMaker/Http/Controllers/Api/ProcessController.php b/ProcessMaker/Http/Controllers/Api/ProcessController.php index 5a88a8b39e..355f3dbad4 100644 --- a/ProcessMaker/Http/Controllers/Api/ProcessController.php +++ b/ProcessMaker/Http/Controllers/Api/ProcessController.php @@ -218,6 +218,12 @@ public function store(Request $request) { $request->validate(Process::rules()); $data = $request->all(); + + // If bpmn exists (from Generative AI) + if ($request->input('bpmn')) { + $data['bpmn'] = $request->input('bpmn'); + } + // Validate if exists file bpmn if ($request->has('file')) { $data['bpmn'] = $request->file('file')->get(); diff --git a/resources/js/processes/components/CreateProcessModal.vue b/resources/js/processes/components/CreateProcessModal.vue index 4eef95d917..2889d49b53 100644 --- a/resources/js/processes/components/CreateProcessModal.vue +++ b/resources/js/processes/components/CreateProcessModal.vue @@ -87,7 +87,7 @@ export default { components: { Modal, Required, TemplateSearch }, mixins: [ FormErrorsMixin ], - props: ["countCategories", "blankTemplate", "selectedTemplate", "templateData"], + props: ["countCategories", "blankTemplate", "selectedTemplate", "templateData", "generativeProcessData"], data: function() { return { showModal: false, @@ -172,6 +172,9 @@ if (this.selectedTemplate) { this.handleCreateFromTemplate(this.templateData.id, formData); } else { + if (this.generativeProcessData) { + formData.append("bpmn", this.generativeProcessData.bpmn); + } this.handleCreateBlank(formData); } }, @@ -206,7 +209,7 @@ this.disabled = false; this.addError = error.response.data.errors; }); - } + }, }, }; From ebdfdb95ca7b81caf9e61e11c5169352e6427b6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Busso?= <90727999+agustinbusso@users.noreply.github.com> Date: Thu, 15 Jun 2023 16:43:10 -0300 Subject: [PATCH 02/20] HIde upload file for generative ai --- resources/js/processes/components/CreateProcessModal.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/js/processes/components/CreateProcessModal.vue b/resources/js/processes/components/CreateProcessModal.vue index 2889d49b53..621791e569 100644 --- a/resources/js/processes/components/CreateProcessModal.vue +++ b/resources/js/processes/components/CreateProcessModal.vue @@ -55,7 +55,7 @@ > Date: Thu, 15 Jun 2023 16:51:22 -0300 Subject: [PATCH 03/20] Add inflight modeler endpoint for generative ai --- .../Controllers/Process/ModelerController.php | 18 ++++++++ .../modeler/inflight-generative-ai.blade.php | 44 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 resources/views/processes/modeler/inflight-generative-ai.blade.php diff --git a/ProcessMaker/Http/Controllers/Process/ModelerController.php b/ProcessMaker/Http/Controllers/Process/ModelerController.php index 688f02c0de..b026dc966e 100644 --- a/ProcessMaker/Http/Controllers/Process/ModelerController.php +++ b/ProcessMaker/Http/Controllers/Process/ModelerController.php @@ -76,4 +76,22 @@ public function inflight(ModelerManager $manager, Process $process, Request $req 'requestInProgressNodes' => $requestInProgressNodes, ]); } + + /** + * Invokes the Modeler for In-flight Process Map rendering for ai generative. + */ + public function inflightProcessAi(ModelerManager $manager, Process $process, Request $request) + { + // Receive the history ID + // Call microservice and pass the history ID + // The microervice returns a history entry that contains [created_at, id, prompt_id, prompt, bpmn, user_id] + // Use the bpmn and return to view + event(new ModelerStarting($manager)); + $bpmn = $process->bpmn; + + return view('processes.modeler.inflight-generative-ai', [ + 'manager' => $manager, + 'bpmn' => $bpmn, + ]); + } } diff --git a/resources/views/processes/modeler/inflight-generative-ai.blade.php b/resources/views/processes/modeler/inflight-generative-ai.blade.php new file mode 100644 index 0000000000..479e6fb839 --- /dev/null +++ b/resources/views/processes/modeler/inflight-generative-ai.blade.php @@ -0,0 +1,44 @@ +@extends('layouts.process-map') + +@section('title') + {{ __('Process Map') }} +@endsection + +@section('content') +
+@endsection + +@section('css') + +@endsection + +@section('js') + + @foreach ($manager->getScripts() as $script) + + @endforeach + +@endsection From a1b6c0c827d0d29dcb5e5a15fe0ccb12c42605bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Busso?= <90727999+agustinbusso@users.noreply.github.com> Date: Fri, 16 Jun 2023 17:25:22 -0300 Subject: [PATCH 04/20] Add modeler inflight route --- routes/web.php | 1 + 1 file changed, 1 insertion(+) diff --git a/routes/web.php b/routes/web.php index f50e7c31ba..4b4830887c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -107,6 +107,7 @@ // Ensure our modeler loads at a distinct url Route::get('modeler/{process}', [ModelerController::class, 'show'])->name('modeler.show')->middleware('can:edit-processes'); Route::get('modeler/{process}/inflight', [ModelerController::class, 'inflight'])->name('modeler.inflight')->middleware('can:edit-processes'); + Route::get('modeler/{process}/inflight/generative-ai', [ModelerController::class, 'inflightProcessAi'])->name('modeler.inflight.bpmn')->middleware('can:edit-processes'); Route::get('/', [HomeController::class, 'index'])->name('home'); From e8754d16d3f7dfba80911ebfe7acd526465ca72a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Busso?= <90727999+agustinbusso@users.noreply.github.com> Date: Tue, 20 Jun 2023 12:50:45 -0300 Subject: [PATCH 05/20] Add ai button and redesign blank button --- .../js/components/templates/ButtonCard.vue | 92 +++++++++++++++++++ .../templates/SelectTemplateModal.vue | 14 +-- .../components/templates/TemplateSearch.vue | 33 ++++++- 3 files changed, 131 insertions(+), 8 deletions(-) create mode 100644 resources/js/components/templates/ButtonCard.vue diff --git a/resources/js/components/templates/ButtonCard.vue b/resources/js/components/templates/ButtonCard.vue new file mode 100644 index 0000000000..8d0e49791c --- /dev/null +++ b/resources/js/components/templates/ButtonCard.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/resources/js/components/templates/SelectTemplateModal.vue b/resources/js/components/templates/SelectTemplateModal.vue index 815d7f3a3e..c4511414e7 100644 --- a/resources/js/components/templates/SelectTemplateModal.vue +++ b/resources/js/components/templates/SelectTemplateModal.vue @@ -19,7 +19,9 @@ @ok.prevent="onSubmit" @close="close" > - + @@ -44,7 +46,6 @@ {'content': '< Back', 'action': 'showSelectTemplate', 'variant': 'link', 'disabled': false, 'hidden': true, 'ariaLabel': 'Back to select templates'}, ], titleButtons: [ - {'content': `Blank ${this.type}`, 'action': 'createBlankProcess', 'variant': 'primary', 'disabled': false, 'hidden': false, 'position': 'right', 'icon': 'fas fa-plus', 'ariaLabel': `Create ${this.type}`}, {'content': 'Use Template', 'action': 'useSelectedTemplate', 'variant': 'primary', 'disabled': false, 'hidden': true, 'position': 'right', 'ariaLabel': `Create a ${this.type} with this template` }, ], blankTemplate: false, @@ -69,15 +70,13 @@ this.title = $event.name; this.hasHeaderButtons = true; this.headerButtons[0].hidden = false; - this.titleButtons[0].hidden = true; - this.titleButtons[1].hidden = false; + this.titleButtons[0].hidden = false; this.currentComponent = 'template-details'; }, showSelectTemplateComponent() { this.currentComponent = 'template-select-card'; this.headerButtons[0].hidden = true; - this.titleButtons[0].hidden = false; - this.titleButtons[1].hidden = true; + this.titleButtons[0].hidden = true; this.hasHeaderButtons = false; this.title = this.$t(`New ${this.type}`); }, @@ -87,6 +86,9 @@ this.$bvModal.hide("selectTemplate"); this.$refs["create-process-modal"].show(); }, + createAiProcess() { + window.location.href = "/package-ai/processes/create"; + }, useSelectedTemplate() { this.selectedTemplate = true; this.blankTemplate = false; diff --git a/resources/js/components/templates/TemplateSearch.vue b/resources/js/components/templates/TemplateSearch.vue index f53745be1a..9f855e24d7 100644 --- a/resources/js/components/templates/TemplateSearch.vue +++ b/resources/js/components/templates/TemplateSearch.vue @@ -10,6 +10,24 @@ + + + + +
+
+