import { PUBLIC_ASSISTANT_MESSAGE_TOKEN, PUBLIC_MAX_INPUT_TOKENS, PUBLIC_PREPROMPT, PUBLIC_SEP_TOKEN, PUBLIC_USER_MESSAGE_TOKEN, } from "$env/static/public"; import type { Message } from "./types/Message"; /** * Convert [{user: "assistant", content: "hi"}, {user: "user", content: "hello"}] to: * * <|assistant|>hi<|endoftext|><|prompter|>hello<|endoftext|><|assistant|> */ export function buildPrompt(messages: Message[]): string { const prompt = messages .map( (m) => (m.from === "user" ? PUBLIC_USER_MESSAGE_TOKEN + m.content : PUBLIC_ASSISTANT_MESSAGE_TOKEN + m.content) + (m.content.endsWith(PUBLIC_SEP_TOKEN) ? "" : PUBLIC_SEP_TOKEN) ) .join("") + PUBLIC_ASSISTANT_MESSAGE_TOKEN; // Not super precise, but it's truncated in the model's backend anyway return ( PUBLIC_PREPROMPT + "\n-----\n" + prompt.split(" ").slice(-parseInt(PUBLIC_MAX_INPUT_TOKENS)).join(" ") ); }