forked from open-webui/open-webui
67 lines
1.4 KiB
TypeScript
67 lines
1.4 KiB
TypeScript
import { v4 as uuidv4 } from 'uuid';
|
|
import sha256 from 'js-sha256';
|
|
|
|
//////////////////////////
|
|
// Helper functions
|
|
//////////////////////////
|
|
|
|
export const splitStream = (splitOn) => {
|
|
let buffer = '';
|
|
return new TransformStream({
|
|
transform(chunk, controller) {
|
|
buffer += chunk;
|
|
const parts = buffer.split(splitOn);
|
|
parts.slice(0, -1).forEach((part) => controller.enqueue(part));
|
|
buffer = parts[parts.length - 1];
|
|
},
|
|
flush(controller) {
|
|
if (buffer) controller.enqueue(buffer);
|
|
}
|
|
});
|
|
};
|
|
|
|
export const convertMessagesToHistory = (messages) => {
|
|
let history = {
|
|
messages: {},
|
|
currentId: null
|
|
};
|
|
|
|
let parentMessageId = null;
|
|
let messageId = null;
|
|
|
|
for (const message of messages) {
|
|
messageId = uuidv4();
|
|
|
|
if (parentMessageId !== null) {
|
|
history.messages[parentMessageId].childrenIds = [
|
|
...history.messages[parentMessageId].childrenIds,
|
|
messageId
|
|
];
|
|
}
|
|
|
|
history.messages[messageId] = {
|
|
...message,
|
|
id: messageId,
|
|
parentId: parentMessageId,
|
|
childrenIds: []
|
|
};
|
|
|
|
parentMessageId = messageId;
|
|
}
|
|
|
|
history.currentId = messageId;
|
|
return history;
|
|
};
|
|
|
|
export const getGravatarURL = (email) => {
|
|
// Trim leading and trailing whitespace from
|
|
// an email address and force all characters
|
|
// to lower case
|
|
const address = String(email).trim().toLowerCase();
|
|
|
|
// Create a SHA256 hash of the final string
|
|
const hash = sha256(address);
|
|
|
|
// Grab the actual image URL
|
|
return `https://www.gravatar.com/avatar/${hash}`;
|
|
};
|