| import type { MemoriesResponse, TUserMemory, MemoryArtifact } from 'librechat-data-provider'; |
|
|
| type HandleMemoryArtifactParams = { |
| memoryArtifact: MemoryArtifact; |
| currentData: MemoriesResponse; |
| }; |
|
|
| |
| |
| |
| |
| |
| export function handleMemoryArtifact({ |
| memoryArtifact, |
| currentData, |
| }: HandleMemoryArtifactParams): MemoriesResponse | undefined { |
| const { type, key, value, tokenCount = 0 } = memoryArtifact; |
|
|
| if (type === 'update' && !value) { |
| return undefined; |
| } |
|
|
| const memories = currentData.memories; |
| const existingIndex = memories.findIndex((m) => m.key === key); |
|
|
| if (type === 'delete') { |
| if (existingIndex === -1) { |
| return undefined; |
| } |
|
|
| const deletedMemory = memories[existingIndex]; |
| const newMemories = [...memories]; |
| newMemories.splice(existingIndex, 1); |
|
|
| const totalTokens = currentData.totalTokens - (deletedMemory.tokenCount || 0); |
| const usagePercentage = currentData.tokenLimit |
| ? Math.min(100, Math.round((totalTokens / currentData.tokenLimit) * 100)) |
| : null; |
|
|
| return { |
| ...currentData, |
| memories: newMemories, |
| totalTokens, |
| usagePercentage, |
| }; |
| } |
|
|
| if (type === 'update') { |
| const timestamp = new Date().toISOString(); |
| let totalTokens = currentData.totalTokens; |
| let newMemories: TUserMemory[]; |
|
|
| if (existingIndex >= 0) { |
| const oldTokenCount = memories[existingIndex].tokenCount || 0; |
| totalTokens = totalTokens - oldTokenCount + tokenCount; |
|
|
| newMemories = [...memories]; |
| newMemories[existingIndex] = { |
| key, |
| value: value!, |
| tokenCount, |
| updated_at: timestamp, |
| }; |
| } else { |
| totalTokens = totalTokens + tokenCount; |
| newMemories = [ |
| ...memories, |
| { |
| key, |
| value: value!, |
| tokenCount, |
| updated_at: timestamp, |
| }, |
| ]; |
| } |
|
|
| const usagePercentage = currentData.tokenLimit |
| ? Math.min(100, Math.round((totalTokens / currentData.tokenLimit) * 100)) |
| : null; |
|
|
| return { |
| ...currentData, |
| memories: newMemories, |
| totalTokens, |
| usagePercentage, |
| }; |
| } |
|
|
| return undefined; |
| } |
|
|