Files
AI-VideoAssistant/web/stores/debugPrefsStore.ts

70 lines
2.2 KiB
TypeScript

import { create } from 'zustand';
import { persist } from 'zustand/middleware';
type DebugPrefsState = {
wsUrl: string;
aecEnabled: boolean;
nsEnabled: boolean;
agcEnabled: boolean;
fastgptInteractiveVoiceEnabled: boolean;
clientToolEnabledMap: Record<string, boolean>;
setWsUrl: (value: string) => void;
setAecEnabled: (value: boolean) => void;
setNsEnabled: (value: boolean) => void;
setAgcEnabled: (value: boolean) => void;
setFastgptInteractiveVoiceEnabled: (value: boolean) => void;
setClientToolEnabled: (toolId: string, enabled: boolean) => void;
hydrateClientToolDefaults: (toolIds: string[]) => void;
};
const getDefaultWsUrl = (): string => {
if (typeof window === 'undefined') {
return 'ws://localhost:8000/ws';
}
const defaultHost = window.location.hostname || 'localhost';
return `ws://${defaultHost}:8000/ws`;
};
export const useDebugPrefsStore = create<DebugPrefsState>()(
persist(
(set, get) => ({
wsUrl: getDefaultWsUrl(),
aecEnabled: true,
nsEnabled: true,
agcEnabled: true,
fastgptInteractiveVoiceEnabled: true,
clientToolEnabledMap: {},
setWsUrl: (value) => set({ wsUrl: value }),
setAecEnabled: (value) => set({ aecEnabled: value }),
setNsEnabled: (value) => set({ nsEnabled: value }),
setAgcEnabled: (value) => set({ agcEnabled: value }),
setFastgptInteractiveVoiceEnabled: (value) => set({ fastgptInteractiveVoiceEnabled: value }),
setClientToolEnabled: (toolId, enabled) =>
set((state) => ({
clientToolEnabledMap: {
...state.clientToolEnabledMap,
[toolId]: enabled,
},
})),
hydrateClientToolDefaults: (toolIds) => {
const current = get().clientToolEnabledMap;
let changed = false;
const nextMap: Record<string, boolean> = { ...current };
for (const toolId of toolIds) {
if (!(toolId in nextMap)) {
nextMap[toolId] = true;
changed = true;
}
}
if (changed) {
set({ clientToolEnabledMap: nextMap });
}
},
}),
{
name: 'assistants-debug-prefs',
version: 1,
}
)
);