@prexo/ai-chat-sdk
Version:
AI Chat Component with Persistent History
73 lines (72 loc) • 2.12 kB
JavaScript
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
};