Files
perry/conversation.js
T
2026-09-04 22:46:16 -05:00

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 };