import { base } from "$app/paths"; import { redirect } from "@sveltejs/kit"; import type { LayoutServerLoad } from "./$types"; import { collections } from "$lib/server/database"; import type { Conversation } from "$lib/types/Conversation"; import { UrlDependency } from "$lib/types/UrlDependency"; import { defaultModel, models } from "$lib/server/models"; import { validateModel } from "$lib/utils/models"; export const load: LayoutServerLoad = async ({ locals, depends, url, request }) => { const { conversations } = collections; const urlModel = url.searchParams.get("model"); depends(UrlDependency.ConversationList); if (urlModel) { const isValidModel = validateModel(models).safeParse(urlModel).success; if (isValidModel) { await collections.settings.updateOne( { sessionId: locals.sessionId }, { $set: { activeModel: urlModel } }, { upsert: true } ); } throw redirect(302, url.pathname); } const settings = await collections.settings.findOne({ sessionId: locals.sessionId }); return { conversations: await conversations .find({ sessionId: locals.sessionId, }) .sort({ updatedAt: -1 }) .project>({ title: 1, model: 1, _id: 1, updatedAt: 1, createdAt: 1, }) .map((conv) => ({ id: conv._id.toString(), title: conv.title, model: conv.model ?? defaultModel, })) .toArray(), settings: { shareConversationsWithModelAuthors: settings?.shareConversationsWithModelAuthors ?? true, ethicsModalAcceptedAt: settings?.ethicsModalAcceptedAt ?? null, activeModel: settings?.activeModel ?? defaultModel.name, }, models: models.map((model) => ({ name: model.name, websiteUrl: model.websiteUrl, datasetName: model.datasetName, displayName: model.displayName, description: model.description, promptExamples: model.promptExamples, parameters: model.parameters, })), }; };