35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
function copyMessage(message, includeReasoning = true) {
|
|
const copy = { role: message.role, content: message.content };
|
|
if (includeReasoning && message.reasoning) copy.reasoning = message.reasoning;
|
|
return copy;
|
|
}
|
|
|
|
function create(systemPrompt, messages = []) {
|
|
const conversation = {
|
|
systemPrompt,
|
|
messages: messages.map(message => copyMessage(message)),
|
|
|
|
add(source) {
|
|
if (Array.isArray(source?.messages)) {
|
|
for (const message of source.messages) conversation.messages.push(copyMessage(message, false));
|
|
return conversation;
|
|
}
|
|
|
|
conversation.messages.push(copyMessage(source));
|
|
return conversation;
|
|
}
|
|
};
|
|
return conversation;
|
|
}
|
|
|
|
function start(systemPrompt = null) {
|
|
return create(systemPrompt);
|
|
}
|
|
|
|
function from(blob, fallbackSystemPrompt = null) {
|
|
const systemPrompt = blob.systemPrompt === undefined ? fallbackSystemPrompt : blob.systemPrompt;
|
|
return create(systemPrompt, blob.messages || []);
|
|
}
|
|
|
|
module.exports = { start, from };
|