Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
File size: 2,016 Bytes
bdbcdab 4b58d20 bdbcdab 4b58d20 bdbcdab | 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 | /**
* Lightweight localStorage persistence for UIMessage arrays,
* keyed by session ID.
*
* Uses the same storage namespace (`hf-agent-messages`) that the
* old Zustand-based store used, so existing data is compatible.
*/
import type { UIMessage } from 'ai';
import { logger } from '@/utils/logger';
const STORAGE_KEY = 'hf-agent-messages';
const MAX_SESSIONS = 50;
type MessagesMap = Record<string, UIMessage[]>;
function readAll(): MessagesMap {
try {
const raw = localStorage.getItem(STORAGE_KEY);
if (!raw) return {};
const parsed = JSON.parse(raw);
// Legacy format was { messagesBySession: {...} }
if (parsed.messagesBySession) return parsed.messagesBySession;
// New flat format
if (typeof parsed === 'object' && !Array.isArray(parsed)) return parsed;
return {};
} catch {
return {};
}
}
function writeAll(map: MessagesMap): void {
try {
localStorage.setItem(STORAGE_KEY, JSON.stringify(map));
} catch (e) {
logger.warn('Failed to persist messages:', e);
}
}
export function loadMessages(sessionId: string): UIMessage[] {
const map = readAll();
const messages = map[sessionId] ?? [];
console.log('[chat-message-store] 📖 Loading messages from localStorage:', {
sessionId,
count: messages.length,
messages,
});
return messages;
}
export function saveMessages(sessionId: string, messages: UIMessage[]): void {
console.log('[chat-message-store] 💾 Writing messages to localStorage:', {
sessionId,
count: messages.length,
lastMessage: messages[messages.length - 1],
});
const map = readAll();
map[sessionId] = messages;
// Evict oldest sessions if we exceed the cap
const keys = Object.keys(map);
if (keys.length > MAX_SESSIONS) {
const toRemove = keys.slice(0, keys.length - MAX_SESSIONS);
for (const k of toRemove) delete map[k];
}
writeAll(map);
}
export function deleteMessages(sessionId: string): void {
const map = readAll();
delete map[sessionId];
writeAll(map);
}
|