File size: 3,787 Bytes
a8aec61 5b73d4d 5dfb055 a8aec61 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
import { create } from 'zustand'
import { persist, createJSONStorage } from 'zustand/middleware'
import {
type PlaygroundChatMessage,
type SessionEntry
} from '@/types/playground'
interface Agent {
value: string
label: string
model: {
provider: string
}
storage?: boolean
}
interface PlaygroundStore {
hydrated: boolean
setHydrated: () => void
streamingErrorMessage: string
setStreamingErrorMessage: (streamingErrorMessage: string) => void
endpoints: {
endpoint: string
id_playground_endpoint: string
}[]
setEndpoints: (
endpoints: {
endpoint: string
id_playground_endpoint: string
}[]
) => void
isStreaming: boolean
setIsStreaming: (isStreaming: boolean) => void
isEndpointActive: boolean
setIsEndpointActive: (isActive: boolean) => void
isEndpointLoading: boolean
setIsEndpointLoading: (isLoading: boolean) => void
messages: PlaygroundChatMessage[]
setMessages: (
messages:
| PlaygroundChatMessage[]
| ((prevMessages: PlaygroundChatMessage[]) => PlaygroundChatMessage[])
) => void
hasStorage: boolean
setHasStorage: (hasStorage: boolean) => void
chatInputRef: React.RefObject<HTMLTextAreaElement | null>
selectedEndpoint: string
setSelectedEndpoint: (selectedEndpoint: string) => void
agents: Agent[]
setAgents: (agents: Agent[]) => void
selectedModel: string
setSelectedModel: (model: string) => void
sessionsData: SessionEntry[] | null
setSessionsData: (
sessionsData:
| SessionEntry[]
| ((prevSessions: SessionEntry[] | null) => SessionEntry[] | null)
) => void
isSessionsLoading: boolean
setIsSessionsLoading: (isSessionsLoading: boolean) => void
}
export const usePlaygroundStore = create<PlaygroundStore>()(
persist(
(set) => ({
hydrated: false,
setHydrated: () => set({ hydrated: true }),
streamingErrorMessage: '',
setStreamingErrorMessage: (streamingErrorMessage) =>
set(() => ({ streamingErrorMessage })),
endpoints: [],
setEndpoints: (endpoints) => set(() => ({ endpoints })),
isStreaming: false,
setIsStreaming: (isStreaming) => set(() => ({ isStreaming })),
isEndpointActive: false,
setIsEndpointActive: (isActive) =>
set(() => ({ isEndpointActive: isActive })),
isEndpointLoading: true,
setIsEndpointLoading: (isLoading) =>
set(() => ({ isEndpointLoading: isLoading })),
messages: [],
setMessages: (messages) =>
set((state) => ({
messages:
typeof messages === 'function' ? messages(state.messages) : messages
})),
hasStorage: false,
setHasStorage: (hasStorage) => set(() => ({ hasStorage })),
chatInputRef: { current: null },
selectedEndpoint:
'https://sifa-classification-agentic-rag-99329044472.asia-south1.run.app',
setSelectedEndpoint: (selectedEndpoint) =>
set(() => ({ selectedEndpoint })),
agents: [],
setAgents: (agents) => set({ agents }),
selectedModel: '',
setSelectedModel: (selectedModel) => set(() => ({ selectedModel })),
sessionsData: null,
setSessionsData: (sessionsData) =>
set((state) => ({
sessionsData:
typeof sessionsData === 'function'
? sessionsData(state.sessionsData)
: sessionsData
})),
isSessionsLoading: false,
setIsSessionsLoading: (isSessionsLoading) =>
set(() => ({ isSessionsLoading }))
}),
{
name: 'endpoint-storage',
storage: createJSONStorage(() => localStorage),
partialize: (state) => ({
selectedEndpoint: state.selectedEndpoint
}),
onRehydrateStorage: () => (state) => {
state?.setHydrated?.()
}
}
)
)
|