UNPKG

@prexo/ai-chat-sdk

Version:

AI Chat Component with Persistent History

73 lines (72 loc) 2.12 kB
import { DEFAULT_CHAT_SESSION_ID, DEFAULT_HISTORY_LENGTH } from "../../lib/constants.js"; function getSessionKey(sessionId) { return DEFAULT_CHAT_SESSION_ID(sessionId); } function isLocalStorageAvailable() { try { return typeof window !== "undefined" && typeof window.localStorage !== "undefined"; } catch { return false; } } function handleStorageError(error, context) { console.warn(`[InMemoryHistory] ${context}:`, error); } class InMemoryHistory { constructor() { } async addMessage(params) { if (!isLocalStorageAvailable()) { handleStorageError("localStorage not available", "addMessage"); return; } const { message, sessionId } = params; const sessionKey = getSessionKey(sessionId); try { const item = window.localStorage.getItem(sessionKey); const oldMessages = item ? JSON.parse(item) : []; const newMessages = [message, ...oldMessages]; window.localStorage.setItem(sessionKey, JSON.stringify(newMessages)); } catch (error) { handleStorageError(error, "addMessage"); } } async deleteMessages({ sessionId }) { if (!isLocalStorageAvailable()) { handleStorageError("localStorage not available", "deleteMessages"); return; } const sessionKey = getSessionKey(sessionId); try { window.localStorage.setItem(sessionKey, JSON.stringify([])); } catch (error) { handleStorageError(error, "deleteMessages"); } } async getMessages({ sessionId, amount = DEFAULT_HISTORY_LENGTH, startIndex = 0 }) { if (!isLocalStorageAvailable()) { handleStorageError("localStorage not available", "getMessages"); return []; } const sessionKey = getSessionKey(sessionId || ""); try { const item = window.localStorage.getItem(sessionKey); const messages = item ? JSON.parse(item) : []; const slicedMessages = messages.slice(startIndex, startIndex + amount); return slicedMessages.reverse(); } catch (error) { handleStorageError(error, "getMessages"); return []; } } } export { InMemoryHistory };