diff --git a/admin/assets/javascripts/discourse/routes/admin-plugins-show-discourse-ai-tools-new.js b/admin/assets/javascripts/discourse/routes/admin-plugins-show-discourse-ai-tools-new.js index 1e645097..463ae21a 100644 --- a/admin/assets/javascripts/discourse/routes/admin-plugins-show-discourse-ai-tools-new.js +++ b/admin/assets/javascripts/discourse/routes/admin-plugins-show-discourse-ai-tools-new.js @@ -1,6 +1,10 @@ import DiscourseRoute from "discourse/routes/discourse"; export default class DiscourseAiToolsNewRoute extends DiscourseRoute { + beforeModel(transition) { + this.preset = transition.to.queryParams.presetId || "empty_tool"; + } + async model() { return this.store.createRecord("ai-tool"); } @@ -8,10 +12,10 @@ export default class DiscourseAiToolsNewRoute extends DiscourseRoute { setupController(controller) { super.setupController(...arguments); const toolsModel = this.modelFor("adminPlugins.show.discourse-ai-tools"); - controller.set("allTools", toolsModel); controller.set("presets", toolsModel.resultSetMeta.presets); controller.set("llms", toolsModel.resultSetMeta.llms); controller.set("settings", toolsModel.resultSetMeta.settings); + controller.set("selectedPreset", this.preset); } } diff --git a/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/new.hbs b/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/new.hbs index 444f6966..cc036e76 100644 --- a/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/new.hbs +++ b/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/new.hbs @@ -5,5 +5,6 @@ @presets={{this.presets}} @llms={{this.llms}} @settings={{this.settings}} + @selectedPreset={{this.selectedPreset}} /> \ No newline at end of file diff --git a/assets/javascripts/discourse/components/ai-tool-editor.gjs b/assets/javascripts/discourse/components/ai-tool-editor.gjs index 0a3b4922..b5b0fa6b 100644 --- a/assets/javascripts/discourse/components/ai-tool-editor.gjs +++ b/assets/javascripts/discourse/components/ai-tool-editor.gjs @@ -13,7 +13,6 @@ 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 ComboBox from "select-kit/components/combo-box"; import AiToolParameterEditor from "./ai-tool-parameter-editor"; import AiToolTestModal from "./modal/ai-tool-test-modal"; import RagOptions from "./rag-options"; @@ -33,34 +32,26 @@ export default class AiToolEditor extends Component { @tracked isSaving = false; @tracked editingModel = null; @tracked showDelete = false; - @tracked selectedPreset = null; - get presets() { - return this.args.presets.map((preset) => { - return { - name: preset.preset_name, - id: preset.preset_id, - }; - }); - } + get selectedPreset() { + if (!this.args.selectedPreset) { + return null; + } - get showPresets() { - return !this.selectedPreset && this.args.model.isNew; + return this.args.presets.findBy("preset_id", this.args.selectedPreset); } @action updateModel() { - this.editingModel = this.args.model.workingCopy(); - this.showDelete = !this.args.model.isNew; - } - - @action - configurePreset() { - this.selectedPreset = this.args.presets.findBy("preset_id", this.presetId); - this.editingModel = this.store - .createRecord("ai-tool", this.selectedPreset) - .workingCopy(); - this.showDelete = false; + 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 @@ -148,138 +139,116 @@ export default class AiToolEditor extends Component { {{didUpdate this.updateModel @model.id}} class="form-horizontal ai-tool-editor" > - {{#if this.showPresets}} -
- - -
+
+ + + +
-
- -
- {{else}} -
- - - -
+
+ + + +
-
- - - -
+
+ + +
-
- - -
+
+ + + +
-
- - - -
+
+ + +
-
- - -
+
+ + +
+ {{#if this.siteSettings.ai_embeddings_enabled}}
- - -
- - {{#if this.siteSettings.ai_embeddings_enabled}} -
- -
- - {{/if}} - -
- {{#unless @model.isNew}} - - {{/unless}} - - - - {{#if this.showDelete}} - - {{/if}}
+ {{/if}} + +
+ {{#unless @model.isNew}} + + {{/unless}} + + + + {{#if this.showDelete}} + + {{/if}} +
} diff --git a/assets/javascripts/discourse/components/ai-tool-list-editor.gjs b/assets/javascripts/discourse/components/ai-tool-list-editor.gjs index 3be0173a..7bd7ed21 100644 --- a/assets/javascripts/discourse/components/ai-tool-list-editor.gjs +++ b/assets/javascripts/discourse/components/ai-tool-list-editor.gjs @@ -1,6 +1,9 @@ import Component from "@glimmer/component"; +import { array, fn } from "@ember/helper"; +import { action } from "@ember/object"; import { LinkTo } from "@ember/routing"; import { service } from "@ember/service"; +import { eq } from "truth-helpers"; import DBreadcrumbsItem from "discourse/components/d-breadcrumbs-item"; import DButton from "discourse/components/d-button"; import DPageSubheader from "discourse/components/d-page-subheader"; @@ -11,6 +14,23 @@ import DMenu from "float-kit/components/d-menu"; export default class AiToolListEditor extends Component { @service adminPluginNavManager; + @service router; + + get lastIndexOfPresets() { + return this.args.tools.resultSetMeta.presets.length - 1; + } + + @action + routeToNewTool(preset) { + return this.router.transitionTo( + "adminPlugins.show.discourse-ai-tools.new", + { + queryParams: { + presetId: preset.preset_id, + }, + } + ); + }