mirror of
https://github.com/ollama/ollama.git
synced 2026-04-23 09:15:44 +02:00
85 lines
2.4 KiB
TypeScript
85 lines
2.4 KiB
TypeScript
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
|
import { Settings } from "@/gotypes";
|
|
import { getSettings, updateSettings } from "@/api";
|
|
import { useMemo, useCallback } from "react";
|
|
|
|
// TODO(hoyyeva): remove turboEnabled when we remove Migration logic in useSelectedModel.ts
|
|
interface SettingsState {
|
|
turboEnabled: boolean;
|
|
webSearchEnabled: boolean;
|
|
selectedModel: string;
|
|
sidebarOpen: boolean;
|
|
lastHomeView: string;
|
|
thinkEnabled: boolean;
|
|
thinkLevel: string;
|
|
}
|
|
|
|
// Type for partial settings updates
|
|
type SettingsUpdate = Partial<{
|
|
TurboEnabled: boolean;
|
|
WebSearchEnabled: boolean;
|
|
ThinkEnabled: boolean;
|
|
ThinkLevel: string;
|
|
SelectedModel: string;
|
|
SidebarOpen: boolean;
|
|
LastHomeView: string;
|
|
}>;
|
|
|
|
export function useSettings() {
|
|
const queryClient = useQueryClient();
|
|
|
|
// Fetch settings with useQuery
|
|
const { data: settingsData, error } = useQuery({
|
|
queryKey: ["settings"],
|
|
queryFn: getSettings,
|
|
});
|
|
|
|
// Update settings with useMutation
|
|
const updateSettingsMutation = useMutation({
|
|
mutationFn: updateSettings,
|
|
onSuccess: () => {
|
|
// Invalidate the query to ensure fresh data
|
|
queryClient.invalidateQueries({ queryKey: ["settings"] });
|
|
},
|
|
});
|
|
|
|
// Extract settings with defaults
|
|
const settings: SettingsState = useMemo(
|
|
() => ({
|
|
turboEnabled: settingsData?.settings?.TurboEnabled ?? false,
|
|
webSearchEnabled: settingsData?.settings?.WebSearchEnabled ?? false,
|
|
thinkEnabled: settingsData?.settings?.ThinkEnabled ?? false,
|
|
thinkLevel: settingsData?.settings?.ThinkLevel ?? "none",
|
|
selectedModel: settingsData?.settings?.SelectedModel ?? "",
|
|
sidebarOpen: settingsData?.settings?.SidebarOpen ?? false,
|
|
lastHomeView: settingsData?.settings?.LastHomeView ?? "chat",
|
|
}),
|
|
[settingsData?.settings],
|
|
);
|
|
|
|
// Single function to update most settings
|
|
const setSettings = useCallback(
|
|
async (updates: SettingsUpdate) => {
|
|
if (!settingsData?.settings) return;
|
|
|
|
const updatedSettings = new Settings({
|
|
...settingsData.settings,
|
|
...updates,
|
|
});
|
|
|
|
await updateSettingsMutation.mutateAsync(updatedSettings);
|
|
},
|
|
[settingsData?.settings, updateSettingsMutation],
|
|
);
|
|
|
|
return useMemo(
|
|
() => ({
|
|
settings,
|
|
settingsData: settingsData?.settings,
|
|
error,
|
|
setSettings,
|
|
}),
|
|
[settings, settingsData?.settings, error, setSettings],
|
|
);
|
|
}
|