diff --git a/src/public/app/widgets/type_widgets/options/ai_settings.ts b/src/public/app/widgets/type_widgets/options/ai_settings.ts
index 854c4c629..8622bbcef 100644
--- a/src/public/app/widgets/type_widgets/options/ai_settings.ts
+++ b/src/public/app/widgets/type_widgets/options/ai_settings.ts
@@ -160,6 +160,16 @@ export default class AiSettingsWidget extends OptionsWidget {
${t("ai_llm.openai_url_description")}
+
+
@@ -374,6 +384,11 @@ export default class AiSettingsWidget extends OptionsWidget {
await this.updateOption('openaiDefaultModel', $openaiDefaultModel.val() as string);
});
+ const $openaiEmbeddingModel = this.$widget.find('.openai-embedding-model');
+ $openaiEmbeddingModel.on('change', async () => {
+ await this.updateOption('openaiEmbeddingModel', $openaiEmbeddingModel.val() as string);
+ });
+
const $openaiBaseUrl = this.$widget.find('.openai-base-url');
$openaiBaseUrl.on('change', async () => {
await this.updateOption('openaiBaseUrl', $openaiBaseUrl.val() as string);
@@ -575,11 +590,12 @@ export default class AiSettingsWidget extends OptionsWidget {
this.setCheckboxState(this.$widget.find('.ollama-enabled'), options.ollamaEnabled || 'false');
this.$widget.find('.ai-provider-precedence').val(options.aiProviderPrecedence || 'openai,anthropic,ollama');
- this.$widget.find('.ai-temperature').val(options.aiTemperature || '0.7');
this.$widget.find('.ai-system-prompt').val(options.aiSystemPrompt || '');
+ this.$widget.find('.ai-temperature').val(options.aiTemperature || '0.7');
this.$widget.find('.openai-api-key').val(options.openaiApiKey || '');
this.$widget.find('.openai-default-model').val(options.openaiDefaultModel || 'gpt-4o');
+ this.$widget.find('.openai-embedding-model').val(options.openaiEmbeddingModel || 'text-embedding-3-small');
this.$widget.find('.openai-base-url').val(options.openaiBaseUrl || 'https://api.openai.com/v1');
this.$widget.find('.anthropic-api-key').val(options.anthropicApiKey || '');
diff --git a/src/routes/api/options.ts b/src/routes/api/options.ts
index c26a94589..c5e0874bc 100644
--- a/src/routes/api/options.ts
+++ b/src/routes/api/options.ts
@@ -83,6 +83,7 @@ const ALLOWED_OPTIONS = new Set([
"aiEnabled",
"openaiApiKey",
"openaiDefaultModel",
+ "openaiEmbeddingModel",
"openaiBaseUrl",
"anthropicApiKey",
"anthropicDefaultModel",
diff --git a/src/services/llm/embeddings/providers.ts b/src/services/llm/embeddings/providers.ts
index b0a9b609e..e3fc908b6 100644
--- a/src/services/llm/embeddings/providers.ts
+++ b/src/services/llm/embeddings/providers.ts
@@ -224,7 +224,7 @@ export async function initializeDefaultProviders() {
// Register OpenAI provider if API key is configured
const openaiApiKey = await options.getOption('openaiApiKey');
if (openaiApiKey) {
- const openaiModel = await options.getOption('openaiDefaultModel') || 'text-embedding-3-small';
+ const openaiModel = await options.getOption('openaiEmbeddingModel') || 'text-embedding-3-small';
const openaiBaseUrl = await options.getOption('openaiBaseUrl') || 'https://api.openai.com/v1';
registerEmbeddingProvider(new OpenAIEmbeddingProvider({
diff --git a/src/services/options_init.ts b/src/services/options_init.ts
index d4534f097..ebc4b5f36 100644
--- a/src/services/options_init.ts
+++ b/src/services/options_init.ts
@@ -172,6 +172,7 @@ const defaultOptions: DefaultOption[] = [
{ name: "aiEnabled", value: "false", isSynced: true },
{ name: "openaiApiKey", value: "", isSynced: false },
{ name: "openaiDefaultModel", value: "gpt-4o", isSynced: true },
+ { name: "openaiEmbeddingModel", value: "text-embedding-3-small", isSynced: true },
{ name: "openaiBaseUrl", value: "https://api.openai.com/v1", isSynced: true },
{ name: "anthropicApiKey", value: "", isSynced: false },
{ name: "anthropicDefaultModel", value: "claude-3-opus-20240229", isSynced: true },
diff --git a/src/services/options_interface.ts b/src/services/options_interface.ts
index f0d132dc9..e540de880 100644
--- a/src/services/options_interface.ts
+++ b/src/services/options_interface.ts
@@ -48,8 +48,12 @@ export interface OptionDefinitions extends KeyboardShortcutsOptions