Add chatGPT chat history Import functionality

This commit is contained in:
Brandon Hulston 2024-01-17 01:01:11 -07:00
parent 5e32db1c57
commit 27d5eb4684
3 changed files with 73 additions and 2 deletions

View file

@ -192,3 +192,71 @@ export const calculateSHA256 = async (file) => {
throw error;
}
};
export const getImportOrigin = (_chats) => {
// Check what external service chat imports are from
if ('mapping' in _chats[0]) {
return 'gpt';
}
return 'webui';
}
const convertGptMessages = (convo) => {
// Parse OpenAI chat messages and create chat dictionary for creating new chats
const mapping = convo["mapping"];
const messages = [];
let currentId = "";
for (let message_id in mapping) {
const message = mapping[message_id];
currentId = message_id;
if (message["message"] == null || message["message"]["content"]["parts"][0] == "") {
// Skip chat messages with no content
continue;
} else {
const new_chat = {
"id": message_id,
"parentId": messages.length > 0 ? message["parent"] : null,
"childrenIds": message["children"] || [],
"role": message["message"]?.["author"]?.["role"] !== "user" ? "assistant" : "user",
"content": message["message"]?.["content"]?.['parts']?.[0] || "",
"model": '',
"done": true,
"context": null,
}
messages.push(new_chat)
}
}
let history = {};
messages.forEach(obj => history[obj.id] = obj);
const chat = {
"history": {
"currentId": currentId,
"messages": history, // Need to convert this to not a list and instead a json object
},
"models": [""],
"messages": messages,
"options": {},
"timestamp": convo["create_time"],
"title": convo["title"],
}
return chat;
}
export const convertGptChats = (_chats) => {
// Create a list of dictionaries with each conversation from import
const chats = [];
for (let convo of _chats) {
const chat = {
"id": convo["id"],
"user_id": '',
"title": convo["title"],
"chat": convertGptMessages(convo),
"timestamp": convo["timestamp"],
}
chats.push(chat)
}
return chats;
}