Spaces:
Sleeping
Sleeping
File size: 2,166 Bytes
6bd5f9f |
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 75 76 77 78 |
import { browser } from "$app/environment";
export interface BranchStateSnapshot {
messageId: string;
personaId: string;
personaName: string;
}
export interface BranchTrackingSnapshot {
messageId: string | null;
personaId: string | null;
}
const BRANCH_STATE_PREFIX = "branchState_";
const BRANCH_TRACKING_PREFIX = "branchTracking_";
function getBranchStateKey(conversationId: string): string {
return `${BRANCH_STATE_PREFIX}${conversationId}`;
}
function getBranchTrackingKey(conversationId: string): string {
return `${BRANCH_TRACKING_PREFIX}${conversationId}`;
}
export function loadBranchState(conversationId: string): BranchStateSnapshot | null {
if (!browser) return null;
const stored = localStorage.getItem(getBranchStateKey(conversationId));
if (!stored) return null;
try {
return JSON.parse(stored) as BranchStateSnapshot;
} catch {
localStorage.removeItem(getBranchStateKey(conversationId));
return null;
}
}
export function persistBranchState(
conversationId: string,
state: BranchStateSnapshot | null
): void {
if (!browser) return;
const key = getBranchStateKey(conversationId);
if (state) {
localStorage.setItem(key, JSON.stringify(state));
} else {
localStorage.removeItem(key);
}
}
export function loadBranchTracking(conversationId: string): BranchTrackingSnapshot {
if (!browser) return { messageId: null, personaId: null };
const stored = localStorage.getItem(getBranchTrackingKey(conversationId));
if (!stored) return { messageId: null, personaId: null };
try {
const parsed = JSON.parse(stored) as BranchTrackingSnapshot;
return {
messageId: parsed.messageId ?? null,
personaId: parsed.personaId ?? null,
};
} catch {
localStorage.removeItem(getBranchTrackingKey(conversationId));
return { messageId: null, personaId: null };
}
}
export function persistBranchTracking(
conversationId: string,
tracking: BranchTrackingSnapshot | null
): void {
if (!browser) return;
const key = getBranchTrackingKey(conversationId);
if (tracking && (tracking.messageId || tracking.personaId)) {
localStorage.setItem(key, JSON.stringify(tracking));
} else {
localStorage.removeItem(key);
}
}
|