Reusable function for search settings spread operation (#3301)

* combine for clarity once and for all

* remove logs

* k
This commit is contained in:
pablodanswer
2024-12-02 09:23:01 -08:00
committed by GitHub
parent de66f7adb2
commit 607f61eaeb
2 changed files with 56 additions and 30 deletions

View File

@@ -28,7 +28,8 @@ import { Modal } from "@/components/Modal";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import CardSection from "@/components/admin/CardSection"; import CardSection from "@/components/admin/CardSection";
import { CardDescription } from "@/components/ui/card"; import { combineSearchSettings } from "./utils";
export default function EmbeddingForm() { export default function EmbeddingForm() {
const { formStep, nextFormStep, prevFormStep } = useEmbeddingFormContext(); const { formStep, nextFormStep, prevFormStep } = useEmbeddingFormContext();
const { popup, setPopup } = usePopup(); const { popup, setPopup } = usePopup();
@@ -222,15 +223,14 @@ export default function EmbeddingForm() {
}; };
const updateSearch = async () => { const updateSearch = async () => {
const values: SavedSearchSettings = { const searchSettings = combineSearchSettings(
...rerankingDetails, selectedProvider,
...advancedEmbeddingDetails, advancedEmbeddingDetails,
...selectedProvider, rerankingDetails,
provider_type: selectedProvider.provider_type?.toLowerCase() as EmbeddingProvider | null
selectedProvider.provider_type?.toLowerCase() as EmbeddingProvider | null, );
};
const response = await updateSearchSettings(values); const response = await updateSearchSettings(searchSettings);
if (response.ok) { if (response.ok) {
return true; return true;
} else { } else {
@@ -247,39 +247,35 @@ export default function EmbeddingForm() {
if (!selectedProvider) { if (!selectedProvider) {
return; 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) { if (selectedProvider.provider_type != null) {
// This is a cloud model // This is a cloud model
newModel = { searchSettings = combineSearchSettings(
...selectedProvider, selectedProvider,
...advancedEmbeddingDetails, advancedEmbeddingDetails,
...rerankingDetails, rerankingDetails,
provider_type: selectedProvider.provider_type
(selectedProvider.provider_type ?.toLowerCase()
?.toLowerCase() .split(" ")[0] as EmbeddingProvider | null
.split(" ")[0] as EmbeddingProvider) || null, );
};
} else { } else {
// This is a locally hosted model // This is a locally hosted model
newModel = { searchSettings = combineSearchSettings(
...selectedProvider, selectedProvider,
...advancedEmbeddingDetails, advancedEmbeddingDetails,
...rerankingDetails, rerankingDetails,
provider_type: null, null
}; );
} }
newModel.index_name = null; searchSettings.index_name = null;
const response = await fetch( const response = await fetch(
"/api/search-settings/set-new-search-settings", "/api/search-settings/set-new-search-settings",
{ {
method: "POST", method: "POST",
body: JSON.stringify(newModel), body: JSON.stringify(searchSettings),
headers: { headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
}, },

View File

@@ -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) => { export const deleteSearchSettings = async (search_settings_id: number) => {
const response = await fetch(`/api/search-settings/delete-search-settings`, { const response = await fetch(`/api/search-settings/delete-search-settings`, {
method: "DELETE", method: "DELETE",
@@ -42,3 +55,20 @@ export const testEmbedding = async ({
return testResponse; 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,
};
};