export async function GET()

in src/routes/conversation/[id]/message/[messageId]/prompt/+server.ts [10:78]


export async function GET({ params, locals }) {
	const conv =
		params.id.length === 7
			? await collections.sharedConversations.findOne({
					_id: params.id,
				})
			: await collections.conversations.findOne({
					_id: new ObjectId(params.id),
					...authCondition(locals),
				});

	if (conv === null) {
		error(404, "Conversation not found");
	}

	const messageId = params.messageId;

	const messageIndex = conv.messages.findIndex((msg) => msg.id === messageId);

	if (!isMessageId(messageId) || messageIndex === -1) {
		error(404, "Message not found");
	}

	const model = models.find((m) => m.id === conv.model);

	if (!model) {
		error(404, "Conversation model not found");
	}

	let assistant;
	if (conv.assistantId) {
		assistant = await collections.assistants.findOne({
			_id: new ObjectId(conv.assistantId),
		});
	}

	const messagesUpTo = buildSubtree(conv, messageId);

	const prompt = await buildPrompt({
		preprompt: conv.preprompt,
		messages: messagesUpTo,
		model,
	}).catch((err) => {
		console.error(err);
		return "Prompt generation failed";
	});

	return Response.json({
		prompt,
		model: model.name,
		assistant: assistant?.name,
		parameters: {
			...model.parameters,
			...(assistant?.generateSettings || {}),
			return_full_text: false,
		},
		messages: messagesUpTo.map((msg) => ({
			role: msg.from,
			content: msg.content,
			createdAt: msg.createdAt,
			updatedAt: msg.updatedAt,
			reasoning: msg.reasoning,
			updates: msg.updates?.filter(
				(u) => (u.type === "webSearch" && u.subtype === "sources") || u.type === "title"
			),
			files: msg.files,
		})),
	});
}