From a5c79c92ede72e0f847485777dc38ed6baf37921 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sat, 15 Feb 2025 12:52:27 +0530 Subject: [PATCH] feat(settings): add embedding provider settings --- src/routes/search.ts | 6 +- ui/app/settings/page.tsx | 145 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 140 insertions(+), 11 deletions(-) diff --git a/src/routes/search.ts b/src/routes/search.ts index a29f64b..57d90a3 100644 --- a/src/routes/search.ts +++ b/src/routes/search.ts @@ -85,10 +85,12 @@ router.post('/', async (req, res) => { if (body.chatModel?.provider === 'custom_openai') { llm = new ChatOpenAI({ modelName: body.chatModel?.model || getCustomOpenaiModelName(), - openAIApiKey: body.chatModel?.customOpenAIKey || getCustomOpenaiApiKey(), + openAIApiKey: + body.chatModel?.customOpenAIKey || getCustomOpenaiApiKey(), temperature: 0.7, configuration: { - baseURL: body.chatModel?.customOpenAIBaseURL || getCustomOpenaiApiUrl(), + baseURL: + body.chatModel?.customOpenAIBaseURL || getCustomOpenaiApiUrl(), }, }) as unknown as BaseChatModel; } else if ( diff --git a/ui/app/settings/page.tsx b/ui/app/settings/page.tsx index 4026f16..371d091 100644 --- a/ui/app/settings/page.tsx +++ b/ui/app/settings/page.tsx @@ -223,11 +223,11 @@ const Page = () => { setChatModels(data.chatModelProviders || {}); setEmbeddingModels(data.embeddingModelProviders || {}); - const currentProvider = selectedChatModelProvider; - const newProviders = Object.keys(data.chatModelProviders || {}); + const currentChatProvider = selectedChatModelProvider; + const newChatProviders = Object.keys(data.chatModelProviders || {}); - if (!currentProvider && newProviders.length > 0) { - const firstProvider = newProviders[0]; + if (!currentChatProvider && newChatProviders.length > 0) { + const firstProvider = newChatProviders[0]; const firstModel = data.chatModelProviders[firstProvider]?.[0]?.name; if (firstModel) { @@ -237,11 +237,11 @@ const Page = () => { localStorage.setItem('chatModel', firstModel); } } else if ( - currentProvider && + currentChatProvider && (!data.chatModelProviders || - !data.chatModelProviders[currentProvider] || - !Array.isArray(data.chatModelProviders[currentProvider]) || - data.chatModelProviders[currentProvider].length === 0) + !data.chatModelProviders[currentChatProvider] || + !Array.isArray(data.chatModelProviders[currentChatProvider]) || + data.chatModelProviders[currentChatProvider].length === 0) ) { const firstValidProvider = Object.entries( data.chatModelProviders || {}, @@ -267,6 +267,55 @@ const Page = () => { } } + const currentEmbeddingProvider = selectedEmbeddingModelProvider; + const newEmbeddingProviders = Object.keys( + data.embeddingModelProviders || {}, + ); + + if (!currentEmbeddingProvider && newEmbeddingProviders.length > 0) { + const firstProvider = newEmbeddingProviders[0]; + const firstModel = + data.embeddingModelProviders[firstProvider]?.[0]?.name; + + if (firstModel) { + setSelectedEmbeddingModelProvider(firstProvider); + setSelectedEmbeddingModel(firstModel); + localStorage.setItem('embeddingModelProvider', firstProvider); + localStorage.setItem('embeddingModel', firstModel); + } + } else if ( + currentEmbeddingProvider && + (!data.embeddingModelProviders || + !data.embeddingModelProviders[currentEmbeddingProvider] || + !Array.isArray( + data.embeddingModelProviders[currentEmbeddingProvider], + ) || + data.embeddingModelProviders[currentEmbeddingProvider].length === 0) + ) { + const firstValidProvider = Object.entries( + data.embeddingModelProviders || {}, + ).find( + ([_, models]) => Array.isArray(models) && models.length > 0, + )?.[0]; + + if (firstValidProvider) { + setSelectedEmbeddingModelProvider(firstValidProvider); + setSelectedEmbeddingModel( + data.embeddingModelProviders[firstValidProvider][0].name, + ); + localStorage.setItem('embeddingModelProvider', firstValidProvider); + localStorage.setItem( + 'embeddingModel', + data.embeddingModelProviders[firstValidProvider][0].name, + ); + } else { + setSelectedEmbeddingModelProvider(null); + setSelectedEmbeddingModel(null); + localStorage.removeItem('embeddingModelProvider'); + localStorage.removeItem('embeddingModel'); + } + } + setConfig(data); } @@ -278,6 +327,10 @@ const Page = () => { localStorage.setItem('chatModelProvider', value); } else if (key === 'chatModel') { localStorage.setItem('chatModel', value); + } else if (key === 'embeddingModelProvider') { + localStorage.setItem('embeddingModelProvider', value); + } else if (key === 'embeddingModel') { + localStorage.setItem('embeddingModel', value); } } catch (err) { console.error('Failed to save:', err); @@ -436,7 +489,6 @@ const Page = () => { const value = e.target.value; setSelectedChatModelProvider(value); saveConfig('chatModelProvider', value); - // Auto-select first model of new provider const firstModel = config.chatModelProviders[value]?.[0]?.name; if (firstModel) { @@ -554,6 +606,81 @@ const Page = () => { )} + + {config.embeddingModelProviders && ( +
+ Embedding Model Provider +
++ Embedding Model +
+