diff --git a/assets/javascripts/discourse/components/ai-tool-editor-form.gjs b/assets/javascripts/discourse/components/ai-tool-editor-form.gjs index 1c8bfa89..71fa264f 100644 --- a/assets/javascripts/discourse/components/ai-tool-editor-form.gjs +++ b/assets/javascripts/discourse/components/ai-tool-editor-form.gjs @@ -16,6 +16,12 @@ import RagOptions from "./rag-options"; import RagUploader from "./rag-uploader"; export default class AiToolEditorForm extends Component { + @service siteSettings; + @service dialog; + @service router; + + @tracked uploadedFiles = []; + PARAMETER_TYPES = [ { name: "string", id: "string" }, { name: "number", id: "number" }, @@ -23,6 +29,15 @@ export default class AiToolEditorForm extends Component { { name: "array", id: "array" }, ]; + constructor() { + super(...arguments); + console.log( + "editingModel", + this.args.editingModel, + this.args.selectedPreset + ); + } + @cached get formData() { // todo @@ -33,6 +48,7 @@ export default class AiToolEditorForm extends Component { summary: "", parameters: [], script: "", + rag_uploads: [], }; } @@ -41,6 +57,36 @@ export default class AiToolEditorForm extends Component { console.log(data, "is saved!"); } + @action + delete() { + return this.dialog.confirm({ + message: i18n("discourse_ai.tools.confirm_delete"), + didConfirm: async () => { + // ! TODO: handle deletion properly. + // await this.args.model.destroyRecord(); + // this.args.tools.removeObject(this.args.model); + this.router.transitionTo("adminPlugins.show.discourse-ai-tools.index"); + }, + }); + } + + @action + updateUploads(addItemToCollection, uploads) { + const uniqueUploads = uploads.filter( + (upload) => !this.uploadedFiles.some((file) => file.id === upload.id) + ); + addItemToCollection("rag_uploads", uniqueUploads); + this.uploadedFiles = [...this.uploadedFiles, ...uniqueUploads]; + } + + @action + removeUpload(form, upload) { + this.uploadedFiles = this.uploadedFiles.filter( + (file) => file.id !== upload.id + ); + form.set("rag_uploads", this.uploadedFiles); + } + currentParameterSelection(data, index) { return data.parameters[index].type; } @@ -199,29 +245,43 @@ export default class AiToolEditorForm extends Component { {{! Uploads }} - - - {{! TODO: props for RagUploader and RagOptions }} - - - - + {{#if this.siteSettings.ai_embeddings_enabled}} + + + {{! TODO: remove this.editingModel (target not needed?) }} + + + + + {{/if}} {{! TODO add delete and test actions when /edit }} + + {{#unless @isNew}} + Run Test + + + {{/unless}} + diff --git a/assets/javascripts/discourse/components/ai-tool-editor.gjs b/assets/javascripts/discourse/components/ai-tool-editor.gjs index 4cc6f2ba..8026fc33 100644 --- a/assets/javascripts/discourse/components/ai-tool-editor.gjs +++ b/assets/javascripts/discourse/components/ai-tool-editor.gjs @@ -1,26 +1,16 @@ import Component from "@glimmer/component"; import { tracked } from "@glimmer/tracking"; import { fn } from "@ember/helper"; -import { on } from "@ember/modifier"; import { action } from "@ember/object"; import didInsert from "@ember/render-modifiers/modifiers/did-insert"; import didUpdate from "@ember/render-modifiers/modifiers/did-update"; import { service } from "@ember/service"; -import AceEditor from "discourse/components/ace-editor"; import BackButton from "discourse/components/back-button"; import DButton from "discourse/components/d-button"; -import DTooltip from "discourse/components/d-tooltip"; -import withEventValue from "discourse/helpers/with-event-value"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { i18n } from "discourse-i18n"; import AiToolEditorForm from "./ai-tool-editor-form"; -import AiToolParameterEditor from "./ai-tool-parameter-editor"; import AiToolTestModal from "./modal/ai-tool-test-modal"; -import RagOptions from "./rag-options"; -import RagUploader from "./rag-uploader"; - -const ACE_EDITOR_MODE = "javascript"; -const ACE_EDITOR_THEME = "chrome"; export default class AiToolEditor extends Component { @service router; @@ -32,39 +22,27 @@ export default class AiToolEditor extends Component { @tracked isSaving = false; @tracked editingModel = null; - @tracked showDelete = false; + + constructor() { + super(...arguments); + this.updateModel(); + } get selectedPreset() { if (!this.args.selectedPreset) { - return null; + return this.args.presets.findBy("preset_id", "empty_tool"); } return this.args.presets.findBy("preset_id", this.args.selectedPreset); } - @action updateModel() { if (this.args.model.isNew) { this.editingModel = this.store .createRecord("ai-tool", this.selectedPreset) .workingCopy(); - this.showDelete = false; } else { this.editingModel = this.args.model.workingCopy(); - this.showDelete = !this.args.model.isNew; - } - } - - @action - updateUploads(uploads) { - this.editingModel.rag_uploads = uploads; - } - - @action - removeUpload(upload) { - this.editingModel.rag_uploads.removeObject(upload); - if (!this.args.model.isNew) { - this.save(); } } @@ -135,102 +113,17 @@ export default class AiToolEditor extends Component { @label="discourse_ai.tools.back" /> - +


-
-
- - - -
- -
- - - -
- -
- - -
- -
- - - -
- -
- - -
- -
- - -
- - {{#if this.siteSettings.ai_embeddings_enabled}} -
- -
- - {{/if}} +
{{#unless @model.isNew}} @@ -240,21 +133,6 @@ export default class AiToolEditor extends Component { class="ai-tool-editor__test-button" /> {{/unless}} - - - - {{#if this.showDelete}} - - {{/if}}
diff --git a/assets/javascripts/discourse/components/ai-tool-parameter-editor.gjs b/assets/javascripts/discourse/components/ai-tool-parameter-editor.gjs deleted file mode 100644 index a2798cdb..00000000 --- a/assets/javascripts/discourse/components/ai-tool-parameter-editor.gjs +++ /dev/null @@ -1,155 +0,0 @@ -import Component from "@glimmer/component"; -import { fn } from "@ember/helper"; -import { on } from "@ember/modifier"; -import { action } from "@ember/object"; -import { TrackedArray, TrackedObject } from "@ember-compat/tracked-built-ins"; -import DButton from "discourse/components/d-button"; -import withEventValue from "discourse/helpers/with-event-value"; -import { i18n } from "discourse-i18n"; -import ComboBox from "select-kit/components/combo-box"; - -const PARAMETER_TYPES = [ - { name: "string", id: "string" }, - { name: "number", id: "number" }, - { name: "boolean", id: "boolean" }, - { name: "array", id: "array" }, -]; - -export default class AiToolParameterEditor extends Component { - @action - addParameter() { - this.args.parameters.push( - new TrackedObject({ - name: "", - description: "", - type: "string", - required: false, - enum: null, - }) - ); - } - - @action - removeParameter(parameter) { - const index = this.args.parameters.indexOf(parameter); - this.args.parameters.splice(index, 1); - } - - @action - toggleRequired(parameter, event) { - parameter.required = event.target.checked; - } - - @action - toggleEnum(parameter) { - if (parameter.enum) { - parameter.enum = null; - } else { - this.addEnumValue(parameter); - } - } - - @action - addEnumValue(parameter) { - parameter.enum ||= new TrackedArray(); - parameter.enum.push(""); - } - - @action - removeEnumValue(parameter, index) { - parameter.enum.splice(index, 1); - if (parameter.enum.length === 0) { - parameter.enum = null; - } - } - - @action - updateEnumValue(parameter, index, event) { - parameter.enum[index] = event.target.value; - } - - -} diff --git a/assets/javascripts/discourse/components/rag-uploader.gjs b/assets/javascripts/discourse/components/rag-uploader.gjs index 731e636a..e1c513bb 100644 --- a/assets/javascripts/discourse/components/rag-uploader.gjs +++ b/assets/javascripts/discourse/components/rag-uploader.gjs @@ -74,6 +74,7 @@ export default class RagUploader extends Component { } _updateTargetWithUploads() { + console.log(this.updateUploads); this.updateUploads(this.ragUploads); }