-
+
+
-
-
-
-
+
+
+ {{#each this.selectedProviders as |provider|}}
+ {{provider.name}}
+ {{/each}}
+
+
-
-
-
-
-
-
-
+
+
+
-
-
-
-
+
+
+
-
-
-
+
+ {{#each @embeddings.resultSetMeta.tokenizers as |tokenizer|}}
+ {{tokenizer.name}}
+ {{/each}}
+
+
+
+
+
- {{#if this.editingModel.isNew}}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{#each this.distanceFunctions as |df|}}
+ {{df.name}}
+ {{/each}}
+
+
+
+ {{! provider-specific content }}
+ {{#if this.currentProvider}}
+ {{#if data.provider_params}}
+
+ {{#let (get this.providerParams name) as |params|}}
+ {{#if params}}
+
+ {{#if (eq params.type "enum")}}
+
+ {{#each params.values as |option|}}
+ {{option.name}}
+ {{/each}}
+
+ {{else if (eq params.type "checkbox")}}
+
+ {{else}}
+
+ {{/if}}
+
+ {{/if}}
+ {{/let}}
+
{{/if}}
-
+ {{/if}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{#each-in this.metaProviderParams as |field type|}}
-
-
-
-
- {{/each-in}}
-
-
-
+
-
- {{#unless this.editingModel.isNew}}
-
{{/unless}}
+
-
- {{#if this.displayTestResult}}
- {{#if this.testRunning}}
-
- {{i18n "discourse_ai.embeddings.tests.running"}}
- {{else}}
+ {{#if this.displayTestResult}}
+
+
+
{{#if this.testResult}}
{{icon "check"}}
@@ -458,11 +561,11 @@ export default class AiEmbeddingEditor extends Component {
{{this.testErrorMessage}}
{{/if}}
- {{/if}}
- {{/if}}
-
-
- {{/if}}
-
+
+
+
+ {{/if}}
+
+ {{/if}}
}
diff --git a/spec/system/embeddings/ai_embedding_definition_spec.rb b/spec/system/embeddings/ai_embedding_definition_spec.rb
index 3f10597c..f20a3327 100644
--- a/spec/system/embeddings/ai_embedding_definition_spec.rb
+++ b/spec/system/embeddings/ai_embedding_definition_spec.rb
@@ -3,6 +3,7 @@
RSpec.describe "Managing Embeddings configurations", type: :system, js: true do
fab!(:admin)
let(:page_header) { PageObjects::Components::DPageHeader.new }
+ let(:form) { PageObjects::Components::FormKit.new("form") }
before { sign_in(admin) }
@@ -16,8 +17,8 @@ RSpec.describe "Managing Embeddings configurations", type: :system, js: true do
find("[data-preset-id='text-embedding-3-small'] button").click()
- find("input.ai-embedding-editor__api-key").fill_in(with: api_key)
- find(".ai-embedding-editor__save").click()
+ form.field("api_key").fill_in(api_key)
+ form.submit
expect(page).to have_current_path("/admin/plugins/discourse-ai/ai-embeddings")
@@ -45,35 +46,27 @@ RSpec.describe "Managing Embeddings configurations", type: :system, js: true do
find("[data-preset-id='manual'] button").click()
- find("input.ai-embedding-editor__display-name").fill_in(with: "text-embedding-3-small")
-
- select_kit = PageObjects::Components::SelectKit.new(".ai-embedding-editor__provider")
- select_kit.expand
- select_kit.select_row_by_value(EmbeddingDefinition::OPEN_AI)
-
- find("input.ai-embedding-editor__url").fill_in(with: "https://api.openai.com/v1/embeddings")
- find("input.ai-embedding-editor__api-key").fill_in(with: api_key)
-
- select_kit = PageObjects::Components::SelectKit.new(".ai-embedding-editor__tokenizer")
- select_kit.expand
- select_kit.select_row_by_value("DiscourseAi::Tokenizer::OpenAiTokenizer")
+ form.field("display_name").fill_in("text-embedding-3-small")
+ form.field("provider").select(EmbeddingDefinition::OPEN_AI)
+ form.field("url").fill_in("https://api.openai.com/v1/embeddings")
+ form.field("api_key").fill_in(api_key)
+ form.field("tokenizer_class").select("DiscourseAi::Tokenizer::OpenAiTokenizer")
embed_prefix = "On creation:"
search_prefix = "On search:"
- find(".ai-embedding-editor__embed_prompt").fill_in(with: embed_prefix)
- find(".ai-embedding-editor__search_prompt").fill_in(with: search_prefix)
+ form.field("embed_prompt").fill_in(embed_prefix)
+ form.field("search_prompt").fill_in(search_prefix)
+ form.field("dimensions").fill_in(1536)
+ form.field("max_sequence_length").fill_in(8191)
+ form.field("pg_function").select("<=>")
+ form.field("provider_params.model_name").fill_in("text-embedding-3-small")
- find("input.ai-embedding-editor__dimensions").fill_in(with: 1536)
- find("input.ai-embedding-editor__max_sequence_length").fill_in(with: 8191)
-
- select_kit = PageObjects::Components::SelectKit.new(".ai-embedding-editor__distance_functions")
- select_kit.expand
- select_kit.select_row_by_value("<=>")
- find(".ai-embedding-editor__save").click()
+ form.submit
expect(page).to have_current_path("/admin/plugins/discourse-ai/ai-embeddings")
embedding_def = EmbeddingDefinition.order(:id).last
+
expect(embedding_def.api_key).to eq(api_key)
preset = EmbeddingDefinition.presets.find { |p| p[:preset_id] == "text-embedding-3-small" }
diff --git a/svg-icons/icons-sprite.svg b/svg-icons/icons-sprite.svg
index 4a2b63df..9d0511c2 100644
--- a/svg-icons/icons-sprite.svg
+++ b/svg-icons/icons-sprite.svg
@@ -14,16 +14,6 @@