File size: 3,095 Bytes
6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 d8e039b 6a50e97 |
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
import { ChatSession, Message } from '@/types/chat'
const STORAGE_KEYS = {
sessions: 'edge-llm-sessions',
currentSession: 'edge-llm-current-session'
}
function generateId(): string {
return Math.random().toString(36).substring(2) + Date.now().toString(36)
}
function generateMessageId(): string {
return generateId()
}
class ChatStorageManager {
getAllSessions(): ChatSession[] {
const stored = localStorage.getItem(STORAGE_KEYS.sessions)
return stored ? JSON.parse(stored) : []
}
getSession(sessionId: string): ChatSession | null {
const sessions = this.getAllSessions()
return sessions.find(s => s.id === sessionId) || null
}
createSession(title?: string, model?: string, systemPrompt?: string): ChatSession {
const newSession: ChatSession = {
id: generateId(),
title: title || `New Chat ${new Date().toLocaleString()}`,
messages: [],
model,
systemPrompt,
createdAt: Date.now(),
updatedAt: Date.now()
}
const sessions = this.getAllSessions()
sessions.unshift(newSession)
localStorage.setItem(STORAGE_KEYS.sessions, JSON.stringify(sessions))
return newSession
}
updateSession(sessionId: string, updates: Partial<ChatSession>): void {
const sessions = this.getAllSessions()
const sessionIndex = sessions.findIndex(s => s.id === sessionId)
if (sessionIndex !== -1) {
sessions[sessionIndex] = {
...sessions[sessionIndex],
...updates,
updatedAt: Date.now()
}
localStorage.setItem(STORAGE_KEYS.sessions, JSON.stringify(sessions))
}
}
deleteSession(sessionId: string): void {
const sessions = this.getAllSessions()
const filtered = sessions.filter(s => s.id !== sessionId)
localStorage.setItem(STORAGE_KEYS.sessions, JSON.stringify(filtered))
if (this.getCurrentSessionId() === sessionId) {
localStorage.removeItem(STORAGE_KEYS.currentSession)
}
}
addMessageToSession(sessionId: string, message: Omit<Message, 'id' | 'timestamp'>): void {
const sessions = this.getAllSessions()
const sessionIndex = sessions.findIndex(s => s.id === sessionId)
if (sessionIndex !== -1) {
const newMessage: Message = {
...message,
id: generateMessageId(),
timestamp: Date.now()
}
sessions[sessionIndex].messages.push(newMessage)
sessions[sessionIndex].updatedAt = Date.now()
localStorage.setItem(STORAGE_KEYS.sessions, JSON.stringify(sessions))
}
}
getCurrentSessionId(): string | null {
return localStorage.getItem(STORAGE_KEYS.currentSession)
}
getCurrentSession(): ChatSession | null {
const currentId = this.getCurrentSessionId()
return currentId ? this.getSession(currentId) : null
}
setCurrentSession(sessionId: string): void {
localStorage.setItem(STORAGE_KEYS.currentSession, sessionId)
}
clear(): void {
localStorage.removeItem(STORAGE_KEYS.sessions)
localStorage.removeItem(STORAGE_KEYS.currentSession)
}
}
export const chatStorage = new ChatStorageManager()
|