in scripts/populate.ts [47:147]
async function generateMessages(preprompt?: string): Promise<Message[]> {
const isLinear = faker.datatype.boolean(0.5);
const isInterrupted = faker.datatype.boolean(0.05);
const messages: Message[] = [];
messages.push({
id: crypto.randomUUID(),
from: "system",
content: preprompt ?? "",
createdAt: faker.date.recent({ days: 30 }),
updatedAt: faker.date.recent({ days: 30 }),
});
let isUser = true;
let lastId = messages[0].id;
if (isLinear) {
const convLength = faker.number.int({ min: 1, max: 25 }) * 2; // must always be even
for (let i = 0; i < convLength; i++) {
const hasReasoning = Math.random() < 0.2;
lastId = addChildren(
{
messages,
rootMessageId: messages[0].id,
},
{
from: isUser ? "user" : "assistant",
content:
faker.lorem.sentence({
min: 10,
max: isUser ? 50 : 200,
}) +
(!isUser && Math.random() < 0.1
? "\n```\n" + faker.helpers.arrayElement(samples) + "\n```\n"
: ""),
createdAt: faker.date.recent({ days: 30 }),
updatedAt: faker.date.recent({ days: 30 }),
reasoning: hasReasoning ? faker.lorem.paragraphs(2) : undefined,
updates: hasReasoning
? [
{
type: MessageUpdateType.Reasoning,
subtype: MessageReasoningUpdateType.Status,
uuid: crypto.randomUUID(),
status: "thinking",
},
]
: [],
interrupted: !isUser && i === convLength - 1 && isInterrupted,
},
lastId
);
isUser = !isUser;
}
} else {
const convLength = faker.number.int({ min: 2, max: 200 });
for (let i = 0; i < convLength; i++) {
const hasReasoning = Math.random() < 0.2;
addChildren(
{
messages,
rootMessageId: messages[0].id,
},
{
from: isUser ? "user" : "assistant",
content:
faker.lorem.sentence({
min: 10,
max: isUser ? 50 : 200,
}) +
(!isUser && Math.random() < 0.1
? "\n```\n" + faker.helpers.arrayElement(samples) + "\n```\n"
: ""),
reasoning: hasReasoning ? faker.lorem.paragraphs(2) : undefined,
updates: hasReasoning
? [
{
type: MessageUpdateType.Reasoning,
subtype: MessageReasoningUpdateType.Status,
uuid: crypto.randomUUID(),
status: "thinking",
},
]
: [],
createdAt: faker.date.recent({ days: 30 }),
updatedAt: faker.date.recent({ days: 30 }),
interrupted: !isUser && i === convLength - 1 && isInterrupted,
},
faker.helpers.arrayElement([
messages[0].id,
...messages.filter((m) => m.from === (isUser ? "assistant" : "user")).map((m) => m.id),
])
);
isUser = !isUser;
}
}
return messages;
}