stores/useConversationStore.ts (33 lines of code) (raw):

import { create } from "zustand"; import { Item } from "@/lib/assistant"; import { ChatCompletionMessageParam } from "openai/resources/chat/completions"; import { INITIAL_MESSAGE } from "@/config/constants"; interface ConversationState { // Items displayed in the chat chatMessages: Item[]; // Items sent to the Responses API conversationItems: any[]; setChatMessages: (items: Item[]) => void; setConversationItems: (messages: any[]) => void; addChatMessage: (item: Item) => void; addConversationItem: (message: ChatCompletionMessageParam) => void; rawSet: (state: any) => void; } const useConversationStore = create<ConversationState>((set) => ({ chatMessages: [ { type: "message", role: "assistant", content: [{ type: "output_text", text: INITIAL_MESSAGE }], }, ], conversationItems: [], setChatMessages: (items) => set({ chatMessages: items }), setConversationItems: (messages) => set({ conversationItems: messages }), addChatMessage: (item) => set((state) => ({ chatMessages: [...state.chatMessages, item] })), addConversationItem: (message) => set((state) => ({ conversationItems: [...state.conversationItems, message], })), rawSet: set, })); export default useConversationStore;