48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import { localStorageKey } from '@/constants/localStorage'
|
|
import { create } from 'zustand'
|
|
import { persist } from 'zustand/middleware'
|
|
|
|
interface AssistantState {
|
|
assistants: Assistant[]
|
|
currentAssistant: Assistant
|
|
addAssistant: (assistant: Assistant) => void
|
|
updateAssistant: (assistant: Assistant) => void
|
|
deleteAssistant: (id: string) => void
|
|
setCurrentAssistant: (assistant: Assistant) => void
|
|
}
|
|
|
|
export const defaultAssistant: Assistant = {
|
|
avatar: '',
|
|
id: 'jan',
|
|
name: 'Jan',
|
|
created_at: 1747029866.542,
|
|
description: 'A default assistant that can use all downloaded models.',
|
|
instructions: '',
|
|
parameters: {},
|
|
}
|
|
|
|
export const useAssistant = create<AssistantState>()(
|
|
persist(
|
|
(set, get) => ({
|
|
assistants: [defaultAssistant],
|
|
currentAssistant: defaultAssistant,
|
|
addAssistant: (assistant) =>
|
|
set({ assistants: [...get().assistants, assistant] }),
|
|
updateAssistant: (assistant) =>
|
|
set({
|
|
assistants: get().assistants.map((a) =>
|
|
a.id === assistant.id ? assistant : a
|
|
),
|
|
}),
|
|
deleteAssistant: (id) =>
|
|
set({ assistants: get().assistants.filter((a) => a.id !== id) }),
|
|
setCurrentAssistant: (assistant) => {
|
|
set({ currentAssistant: assistant })
|
|
},
|
|
}),
|
|
{
|
|
name: localStorageKey.assistant,
|
|
}
|
|
)
|
|
)
|