AgentGPT-Web-GUI / next /src /stores /modelSettingsStore.ts
dia-gov's picture
Upload 569 files
cd6f98e verified
raw
history blame
1.6 kB
import type { StateCreator } from "zustand";
import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
import { createSelectors } from "./helpers";
import type { ModelSettings } from "../types";
import { getDefaultModelSettings } from "../utils/constants";
const resetters: (() => void)[] = [];
interface ModelSettingsSlice {
modelSettings: ModelSettings;
updateSettings: <Key extends keyof ModelSettings>(key: Key, value: ModelSettings[Key]) => void;
}
const initialModelSettingsState = {
modelSettings: getDefaultModelSettings(),
};
const createModelSettingsSlice: StateCreator<ModelSettingsSlice> = (set) => {
resetters.push(() => set(initialModelSettingsState));
return {
...initialModelSettingsState,
updateSettings: <Key extends keyof ModelSettings>(key: Key, value: ModelSettings[Key]) => {
set((state) => ({
modelSettings: { ...state.modelSettings, [key]: value },
}));
},
};
};
export const useModelSettingsStore = createSelectors(
create<ModelSettingsSlice>()(
persist(
(...a) => ({
...createModelSettingsSlice(...a),
}),
{
name: "agentgpt-settings-storage-v2",
storage: createJSONStorage(() => localStorage),
partialize: (state) => ({
modelSettings: {
...state.modelSettings,
customModelName: "gpt-3.5-turbo",
maxTokens: Math.min(state.modelSettings.maxTokens, 4000),
},
}),
}
)
)
);
export const resetSettings = () => resetters.forEach((resetter) => resetter());