Spaces:
Build error
Build error
| import type { BackendModel } from "./server/models"; | |
| import type { Message } from "./types/Message"; | |
| import { collections } from "$lib/server/database"; | |
| import { ObjectId } from "mongodb"; | |
| import { authCondition } from "./server/auth"; | |
| /** | |
| * Convert [{user: "assistant", content: "hi"}, {user: "user", content: "hello"}] to: | |
| * | |
| * <|assistant|>hi<|endoftext|><|prompter|>hello<|endoftext|><|assistant|> | |
| */ | |
| interface buildPromptOptions { | |
| messages: Pick<Message, "from" | "content">[]; | |
| model: BackendModel; | |
| locals?: App.Locals; | |
| webSearchId?: string; | |
| preprompt?: string; | |
| } | |
| export async function buildPrompt({ | |
| messages, | |
| model, | |
| locals, | |
| webSearchId, | |
| preprompt, | |
| }: buildPromptOptions): Promise<string> { | |
| if (webSearchId) { | |
| const webSearch = await collections.webSearches.findOne({ | |
| _id: new ObjectId(webSearchId), | |
| }); | |
| if (!webSearch) throw new Error("Web search not found"); | |
| if (!locals) throw new Error("User not authenticated"); | |
| const conversation = await collections.conversations.findOne({ | |
| _id: webSearch.convId, | |
| ...authCondition(locals), | |
| }); | |
| if (!conversation) throw new Error("Conversation not found"); | |
| if (webSearch.summary) { | |
| messages = [ | |
| { | |
| from: "assistant", | |
| content: `The following context was found while searching the internet: ${webSearch.summary}`, | |
| }, | |
| ...messages, | |
| ]; | |
| } | |
| } | |
| return ( | |
| model | |
| .chatPromptRender({ messages, preprompt }) | |
| // Not super precise, but it's truncated in the model's backend anyway | |
| .split(" ") | |
| .slice(-(model.parameters?.truncate ?? 0)) | |
| .join(" ") | |
| ); | |
| } | |