|
|
|
|
|
|
|
|
export let chatSessions = []; |
|
|
export let activeChatId = null; |
|
|
export let attachedFile = null; |
|
|
export let isGenerating = false; |
|
|
export let globalAbortController = null; |
|
|
export let currentUploadXHR = null; |
|
|
export let activeToolPrefix = null; |
|
|
export let activeTool = null; |
|
|
|
|
|
|
|
|
const DAILY_MESSAGE_LIMIT = 10; |
|
|
const MESSAGE_LIMIT_KEY = 'alphaChatDailyLimit'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getTodayDateString() { |
|
|
const today = new Date(); |
|
|
const year = today.getFullYear(); |
|
|
const month = String(today.getMonth() + 1).padStart(2, '0'); |
|
|
const day = String(today.getDate()).padStart(2, '0'); |
|
|
return `${year}-${month}-${day}`; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getUsageData() { |
|
|
try { |
|
|
const saved = localStorage.getItem(MESSAGE_LIMIT_KEY); |
|
|
return saved ? JSON.parse(saved) : { count: 0, date: getTodayDateString() }; |
|
|
} catch (e) { |
|
|
console.error("Failed to parse usage data from localStorage:", e); |
|
|
return { count: 0, date: getTodayDateString() }; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function saveUsageData(data) { |
|
|
try { |
|
|
localStorage.setItem(MESSAGE_LIMIT_KEY, JSON.stringify(data)); |
|
|
} catch (e) { |
|
|
console.error("Failed to save usage data to localStorage:", e); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function isMessageLimitReached(isPremium) { |
|
|
if (isPremium) { |
|
|
return false; |
|
|
} |
|
|
|
|
|
let usageData = getUsageData(); |
|
|
const today = getTodayDateString(); |
|
|
|
|
|
if (usageData.date !== today) { |
|
|
|
|
|
usageData = { count: 0, date: today }; |
|
|
saveUsageData(usageData); |
|
|
} |
|
|
|
|
|
return usageData.count >= DAILY_MESSAGE_LIMIT; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function incrementMessageCount(isPremium) { |
|
|
if (isPremium) { |
|
|
return; |
|
|
} |
|
|
|
|
|
let usageData = getUsageData(); |
|
|
const today = getTodayDateString(); |
|
|
|
|
|
if (usageData.date !== today) { |
|
|
|
|
|
usageData = { count: 1, date: today }; |
|
|
} else { |
|
|
usageData.count += 1; |
|
|
} |
|
|
|
|
|
saveUsageData(usageData); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
export function setActiveTool(toolName) { |
|
|
activeTool = toolName; |
|
|
} |
|
|
|
|
|
export function getActiveTool() { |
|
|
return activeTool; |
|
|
} |
|
|
|
|
|
export function setActiveToolPrefix(prefix) { |
|
|
activeToolPrefix = prefix; |
|
|
} |
|
|
|
|
|
export function getActiveToolPrefix() { |
|
|
return activeToolPrefix; |
|
|
} |
|
|
|
|
|
export function setChatSessions(newSessions) { |
|
|
chatSessions = newSessions; |
|
|
} |
|
|
|
|
|
export function setActiveChatId(id) { |
|
|
activeChatId = id; |
|
|
} |
|
|
|
|
|
export function setAttachedFile(file) { |
|
|
attachedFile = file; |
|
|
} |
|
|
|
|
|
export function setGenerating(status) { |
|
|
isGenerating = status; |
|
|
} |
|
|
|
|
|
export function setGlobalAbortController(controller) { |
|
|
globalAbortController = controller; |
|
|
} |
|
|
|
|
|
export function setCurrentUploadXHR(xhr) { |
|
|
currentUploadXHR = xhr; |
|
|
} |
|
|
|
|
|
export function getActiveChat() { |
|
|
return chatSessions.find(s => s.id === activeChatId); |
|
|
} |
|
|
|
|
|
export function saveSessions() { |
|
|
try { |
|
|
const sessionsToSave = JSON.parse(JSON.stringify(chatSessions)); |
|
|
|
|
|
sessionsToSave.forEach(session => { |
|
|
session.messages.forEach(message => { |
|
|
if (message.parts) { |
|
|
message.parts.forEach(part => { |
|
|
if (part.base64Data) { |
|
|
delete part.base64Data; |
|
|
} |
|
|
if (part.blobUrl) { |
|
|
delete part.blobUrl; |
|
|
} |
|
|
}); |
|
|
} |
|
|
}); |
|
|
}); |
|
|
|
|
|
localStorage.setItem('alphaChatSessions', JSON.stringify(sessionsToSave)); |
|
|
} catch (e) { |
|
|
console.error("Failed to save sessions to localStorage:", e); |
|
|
} |
|
|
} |
|
|
|
|
|
export function loadSessions() { |
|
|
try { |
|
|
const saved = localStorage.getItem('alphaChatSessions'); |
|
|
chatSessions = saved ? JSON.parse(saved) : []; |
|
|
chatSessions.forEach(session => { |
|
|
if (session.showThoughts === undefined) { |
|
|
session.showThoughts = false; |
|
|
} |
|
|
|
|
|
session.messages.forEach(message => { |
|
|
if (message.role === 'assistant' && message.wasGeneratedWithThoughts === undefined) { |
|
|
message.wasGeneratedWithThoughts = false; |
|
|
} |
|
|
}); |
|
|
|
|
|
}); |
|
|
} catch (e) { |
|
|
console.error("Failed to load sessions from localStorage:", e); |
|
|
chatSessions = []; |
|
|
} |
|
|
} |
|
|
|
|
|
export function findLastIndex(array, predicate) { |
|
|
for (let i = array.length - 1; i >= 0; i--) { |
|
|
if (predicate(array[i])) { return i; } |
|
|
} |
|
|
return -1; |
|
|
} |
|
|
|
|
|
export function deleteMessage(chatId, messageIndex) { |
|
|
const chat = chatSessions.find(s => s.id === chatId); |
|
|
if (chat && chat.messages[messageIndex]) { |
|
|
chat.messages.splice(messageIndex, 1); |
|
|
saveSessions(); |
|
|
} |
|
|
} |