mirror of
https://github.com/open-webui/open-webui
synced 2024-11-08 17:49:57 +00:00
68 lines
1.4 KiB
TypeScript
68 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}`;
|
||
|
};
|