import { Tables } from "@/supabase/types" import { ChatFile, ChatMessage, ChatSettings, LLM, MessageImage, OpenRouterLLM, WorkspaceImage } from "@/types" import { AssistantImage } from "@/types/images/assistant-image" import { VALID_ENV_KEYS } from "@/types/valid-keys" import { Dispatch, SetStateAction, createContext } from "react" interface ChatbotUIContext { // PROFILE STORE profile: Tables<"profiles"> | null setProfile: Dispatch | null>> // ITEMS STORE assistants: Tables<"assistants">[] setAssistants: Dispatch[]>> collections: Tables<"collections">[] setCollections: Dispatch[]>> chats: Tables<"chats">[] setChats: Dispatch[]>> files: Tables<"files">[] setFiles: Dispatch[]>> folders: Tables<"folders">[] setFolders: Dispatch[]>> models: Tables<"models">[] setModels: Dispatch[]>> presets: Tables<"presets">[] setPresets: Dispatch[]>> prompts: Tables<"prompts">[] setPrompts: Dispatch[]>> tools: Tables<"tools">[] setTools: Dispatch[]>> workspaces: Tables<"workspaces">[] setWorkspaces: Dispatch[]>> // MODELS STORE envKeyMap: Record setEnvKeyMap: Dispatch>> availableHostedModels: LLM[] setAvailableHostedModels: Dispatch> availableLocalModels: LLM[] setAvailableLocalModels: Dispatch> availableOpenRouterModels: OpenRouterLLM[] setAvailableOpenRouterModels: Dispatch> // WORKSPACE STORE selectedWorkspace: Tables<"workspaces"> | null setSelectedWorkspace: Dispatch | null>> workspaceImages: WorkspaceImage[] setWorkspaceImages: Dispatch> // PRESET STORE selectedPreset: Tables<"presets"> | null setSelectedPreset: Dispatch | null>> // ASSISTANT STORE selectedAssistant: Tables<"assistants"> | null setSelectedAssistant: Dispatch | null>> assistantImages: AssistantImage[] setAssistantImages: Dispatch> openaiAssistants: any[] setOpenaiAssistants: Dispatch> // PASSIVE CHAT STORE userInput: string setUserInput: Dispatch> chatMessages: ChatMessage[] setChatMessages: Dispatch> chatSettings: ChatSettings | null setChatSettings: Dispatch> selectedChat: Tables<"chats"> | null setSelectedChat: Dispatch | null>> chatFileItems: Tables<"file_items">[] setChatFileItems: Dispatch[]>> // ACTIVE CHAT STORE abortController: AbortController | null setAbortController: Dispatch> firstTokenReceived: boolean setFirstTokenReceived: Dispatch> isGenerating: boolean setIsGenerating: Dispatch> // CHAT INPUT COMMAND STORE isPromptPickerOpen: boolean setIsPromptPickerOpen: Dispatch> slashCommand: string setSlashCommand: Dispatch> isFilePickerOpen: boolean setIsFilePickerOpen: Dispatch> hashtagCommand: string setHashtagCommand: Dispatch> isToolPickerOpen: boolean setIsToolPickerOpen: Dispatch> toolCommand: string setToolCommand: Dispatch> focusPrompt: boolean setFocusPrompt: Dispatch> focusFile: boolean setFocusFile: Dispatch> focusTool: boolean setFocusTool: Dispatch> focusAssistant: boolean setFocusAssistant: Dispatch> atCommand: string setAtCommand: Dispatch> isAssistantPickerOpen: boolean setIsAssistantPickerOpen: Dispatch> // ATTACHMENTS STORE chatFiles: ChatFile[] setChatFiles: Dispatch> chatImages: MessageImage[] setChatImages: Dispatch> newMessageFiles: ChatFile[] setNewMessageFiles: Dispatch> newMessageImages: MessageImage[] setNewMessageImages: Dispatch> showFilesDisplay: boolean setShowFilesDisplay: Dispatch> // RETRIEVAL STORE useRetrieval: boolean setUseRetrieval: Dispatch> sourceCount: number setSourceCount: Dispatch> // TOOL STORE selectedTools: Tables<"tools">[] setSelectedTools: Dispatch[]>> toolInUse: string setToolInUse: Dispatch> } export const ChatbotUIContext = createContext({ // PROFILE STORE profile: null, setProfile: () => {}, // ITEMS STORE assistants: [], setAssistants: () => {}, collections: [], setCollections: () => {}, chats: [], setChats: () => {}, files: [], setFiles: () => {}, folders: [], setFolders: () => {}, models: [], setModels: () => {}, presets: [], setPresets: () => {}, prompts: [], setPrompts: () => {}, tools: [], setTools: () => {}, workspaces: [], setWorkspaces: () => {}, // MODELS STORE envKeyMap: {}, setEnvKeyMap: () => {}, availableHostedModels: [], setAvailableHostedModels: () => {}, availableLocalModels: [], setAvailableLocalModels: () => {}, availableOpenRouterModels: [], setAvailableOpenRouterModels: () => {}, // WORKSPACE STORE selectedWorkspace: null, setSelectedWorkspace: () => {}, workspaceImages: [], setWorkspaceImages: () => {}, // PRESET STORE selectedPreset: null, setSelectedPreset: () => {}, // ASSISTANT STORE selectedAssistant: null, setSelectedAssistant: () => {}, assistantImages: [], setAssistantImages: () => {}, openaiAssistants: [], setOpenaiAssistants: () => {}, // PASSIVE CHAT STORE userInput: "", setUserInput: () => {}, selectedChat: null, setSelectedChat: () => {}, chatMessages: [], setChatMessages: () => {}, chatSettings: null, setChatSettings: () => {}, chatFileItems: [], setChatFileItems: () => {}, // ACTIVE CHAT STORE isGenerating: false, setIsGenerating: () => {}, firstTokenReceived: false, setFirstTokenReceived: () => {}, abortController: null, setAbortController: () => {}, // CHAT INPUT COMMAND STORE isPromptPickerOpen: false, setIsPromptPickerOpen: () => {}, slashCommand: "", setSlashCommand: () => {}, isFilePickerOpen: false, setIsFilePickerOpen: () => {}, hashtagCommand: "", setHashtagCommand: () => {}, isToolPickerOpen: false, setIsToolPickerOpen: () => {}, toolCommand: "", setToolCommand: () => {}, focusPrompt: false, setFocusPrompt: () => {}, focusFile: false, setFocusFile: () => {}, focusTool: false, setFocusTool: () => {}, focusAssistant: false, setFocusAssistant: () => {}, atCommand: "", setAtCommand: () => {}, isAssistantPickerOpen: false, setIsAssistantPickerOpen: () => {}, // ATTACHMENTS STORE chatFiles: [], setChatFiles: () => {}, chatImages: [], setChatImages: () => {}, newMessageFiles: [], setNewMessageFiles: () => {}, newMessageImages: [], setNewMessageImages: () => {}, showFilesDisplay: false, setShowFilesDisplay: () => {}, // RETRIEVAL STORE useRetrieval: false, setUseRetrieval: () => {}, sourceCount: 4, setSourceCount: () => {}, // TOOL STORE selectedTools: [], setSelectedTools: () => {}, toolInUse: "none", setToolInUse: () => {} })