File size: 1,365 Bytes
1dded5e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { Chat } from "jsr:@mumulhl/duckduckgo-ai-chat@3";

type Messages = { content: string; role: "user" | "assistant" | "system" }[];

const chatCache = new Map<string, Chat>();

function setCache(chat: Chat) {
  const messages_only_content = chat.messages.map((m) => m.content);
  const stringify = JSON.stringify(messages_only_content);
  chatCache.set(stringify, chat);
}

function setRedoCache(chat: Chat) {
  const chatRedo = structuredClone(chat);
  chatRedo.messages.pop();
  chatRedo.messages.pop();
  chatRedo.newVqd = chatRedo.oldVqd;
  setCache(chatRedo);
}

function findCache(messages: Messages): Chat | undefined {
  const messages_only_content = messages.map((m) => m.content);
  const stringifyRedo = JSON.stringify(messages_only_content);
  let chat = chatCache.get(stringifyRedo);
  if (chat) {
    // redo
    return chat;
  } else {
    messages_only_content.pop();
    const stringify = JSON.stringify(messages_only_content);
    chat = chatCache.get(stringify);
    removeCache(messages_only_content);

    messages_only_content.pop();
    messages_only_content.pop();
    removeCache(messages_only_content);

    return chat;
  }
}

function removeCache(messages_only_content: string[]) {
  const stringify = JSON.stringify(messages_only_content);
  chatCache.delete(stringify);
}

export { chatCache, findCache, setCache, setRedoCache };