From 607f61eaebc9f2bef290f887a9f26074bcbcabff Mon Sep 17 00:00:00 2001 From: pablodanswer Date: Mon, 2 Dec 2024 09:23:01 -0800 Subject: [PATCH] Reusable function for search settings spread operation (#3301) * combine for clarity once and for all * remove logs * k --- .../embeddings/pages/EmbeddingFormPage.tsx | 56 +++++++++---------- web/src/app/admin/embeddings/pages/utils.ts | 30 ++++++++++ 2 files changed, 56 insertions(+), 30 deletions(-) diff --git a/web/src/app/admin/embeddings/pages/EmbeddingFormPage.tsx b/web/src/app/admin/embeddings/pages/EmbeddingFormPage.tsx index 8b4f29557..2e66b5b63 100644 --- a/web/src/app/admin/embeddings/pages/EmbeddingFormPage.tsx +++ b/web/src/app/admin/embeddings/pages/EmbeddingFormPage.tsx @@ -28,7 +28,8 @@ import { Modal } from "@/components/Modal"; import { useRouter } from "next/navigation"; import CardSection from "@/components/admin/CardSection"; -import { CardDescription } from "@/components/ui/card"; +import { combineSearchSettings } from "./utils"; + export default function EmbeddingForm() { const { formStep, nextFormStep, prevFormStep } = useEmbeddingFormContext(); const { popup, setPopup } = usePopup(); @@ -222,15 +223,14 @@ export default function EmbeddingForm() { }; const updateSearch = async () => { - const values: SavedSearchSettings = { - ...rerankingDetails, - ...advancedEmbeddingDetails, - ...selectedProvider, - provider_type: - selectedProvider.provider_type?.toLowerCase() as EmbeddingProvider | null, - }; + const searchSettings = combineSearchSettings( + selectedProvider, + advancedEmbeddingDetails, + rerankingDetails, + selectedProvider.provider_type?.toLowerCase() as EmbeddingProvider | null + ); - const response = await updateSearchSettings(values); + const response = await updateSearchSettings(searchSettings); if (response.ok) { return true; } else { @@ -247,39 +247,35 @@ export default function EmbeddingForm() { if (!selectedProvider) { return; } - let newModel: SavedSearchSettings; + let searchSettings: SavedSearchSettings; - // We use a spread operation to merge properties from multiple objects into a single object. - // Advanced embedding details may update default values. - // Do NOT modify the order unless you are positive the new hierarchy is correct. if (selectedProvider.provider_type != null) { // This is a cloud model - newModel = { - ...selectedProvider, - ...advancedEmbeddingDetails, - ...rerankingDetails, - provider_type: - (selectedProvider.provider_type - ?.toLowerCase() - .split(" ")[0] as EmbeddingProvider) || null, - }; + searchSettings = combineSearchSettings( + selectedProvider, + advancedEmbeddingDetails, + rerankingDetails, + selectedProvider.provider_type + ?.toLowerCase() + .split(" ")[0] as EmbeddingProvider | null + ); } else { // This is a locally hosted model - newModel = { - ...selectedProvider, - ...advancedEmbeddingDetails, - ...rerankingDetails, - provider_type: null, - }; + searchSettings = combineSearchSettings( + selectedProvider, + advancedEmbeddingDetails, + rerankingDetails, + null + ); } - newModel.index_name = null; + searchSettings.index_name = null; const response = await fetch( "/api/search-settings/set-new-search-settings", { method: "POST", - body: JSON.stringify(newModel), + body: JSON.stringify(searchSettings), headers: { "Content-Type": "application/json", }, diff --git a/web/src/app/admin/embeddings/pages/utils.ts b/web/src/app/admin/embeddings/pages/utils.ts index 3d3065b54..039b14242 100644 --- a/web/src/app/admin/embeddings/pages/utils.ts +++ b/web/src/app/admin/embeddings/pages/utils.ts @@ -1,3 +1,16 @@ +import { + CloudEmbeddingProvider, + HostedEmbeddingModel, +} from "@/components/embedding/interfaces"; + +import { + AdvancedSearchConfiguration, + SavedSearchSettings, +} from "../interfaces"; + +import { EmbeddingProvider } from "@/components/embedding/interfaces"; +import { RerankingDetails } from "../interfaces"; + export const deleteSearchSettings = async (search_settings_id: number) => { const response = await fetch(`/api/search-settings/delete-search-settings`, { method: "DELETE", @@ -42,3 +55,20 @@ export const testEmbedding = async ({ return testResponse; }; + +// We use a spread operation to merge properties from multiple objects into a single object. +// Advanced embedding details may update default values. +// Do NOT modify the order unless you are positive the new hierarchy is correct. +export const combineSearchSettings = ( + selectedProvider: CloudEmbeddingProvider | HostedEmbeddingModel, + advancedEmbeddingDetails: AdvancedSearchConfiguration, + rerankingDetails: RerankingDetails, + provider_type: EmbeddingProvider | null +): SavedSearchSettings => { + return { + ...selectedProvider, + ...advancedEmbeddingDetails, + ...rerankingDetails, + provider_type: provider_type, + }; +};