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"
/>
-
+
-
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;
- }
-
-
- {{#each @parameters as |parameter|}}
-
- {{/each}}
-
-
-
-}
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);
}