| 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, oldModels, validateModel } from "$lib/server/models"; |
| import { authCondition, requiresUser } from "$lib/server/auth"; |
| import { DEFAULT_SETTINGS } from "$lib/types/Settings"; |
| import { SERPAPI_KEY, SERPER_API_KEY, MESSAGES_BEFORE_LOGIN } from "$env/static/private"; |
|
|
| export const load: LayoutServerLoad = async ({ locals, depends, url }) => { |
| 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( |
| authCondition(locals), |
| { $set: { activeModel: urlModel } }, |
| { upsert: true } |
| ); |
| } |
|
|
| throw redirect(302, url.pathname); |
| } |
|
|
| const settings = await collections.settings.findOne(authCondition(locals)); |
|
|
| |
| if (settings && !validateModel(models).safeParse(settings?.activeModel).success) { |
| settings.activeModel = defaultModel.id; |
| await collections.settings.updateOne(authCondition(locals), { |
| $set: { activeModel: defaultModel.id }, |
| }); |
| } |
|
|
| return { |
| conversations: await conversations |
| .find(authCondition(locals)) |
| .sort({ updatedAt: -1 }) |
| .project<Pick<Conversation, "title" | "model" | "_id" | "updatedAt" | "createdAt">>({ |
| 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 ?? |
| DEFAULT_SETTINGS.shareConversationsWithModelAuthors, |
| ethicsModalAcceptedAt: settings?.ethicsModalAcceptedAt ?? null, |
| activeModel: settings?.activeModel ?? DEFAULT_SETTINGS.activeModel, |
| searchEnabled: !!(SERPAPI_KEY || SERPER_API_KEY), |
| customPrompts: settings?.customPrompts ?? {}, |
| }, |
| models: models.map((model) => ({ |
| id: model.id, |
| name: model.name, |
| websiteUrl: model.websiteUrl, |
| modelUrl: model.modelUrl, |
| datasetName: model.datasetName, |
| datasetUrl: model.datasetUrl, |
| displayName: model.displayName, |
| description: model.description, |
| promptExamples: model.promptExamples, |
| parameters: model.parameters, |
| preprompt: model.preprompt, |
| })), |
| oldModels, |
| user: locals.user && { |
| username: locals.user.username, |
| avatarUrl: locals.user.avatarUrl, |
| email: locals.user.email, |
| }, |
| requiresLogin: requiresUser, |
| messagesBeforeLogin: MESSAGES_BEFORE_LOGIN ? parseInt(MESSAGES_BEFORE_LOGIN) : 0, |
| }; |
| }; |
|
|