Spaces:
Running
Running
File size: 2,973 Bytes
151571d 5da61b4 831f161 b7b2c8c 64d3841 7c4fdc9 cad3e14 b8a746c cad3e14 151571d cad3e14 831f161 82fcab7 151571d 2e28042 151571d d975e5d 151571d 2e28042 831f161 b7b2c8c ed27197 b7b2c8c cad3e14 2e28042 cad3e14 2606dde cad3e14 2606dde cad3e14 5da61b4 cad3e14 2606dde 5da61b4 82fcab7 64d3841 82fcab7 64d3841 6f7b315 cd6894d 82fcab7 2606dde cf7ac8d 2606dde ce2231f 2606dde ce2231f 2606dde 12c3a5a 2606dde cd6894d 2606dde b7b2c8c fa3b3b4 64d3841 7c4fdc9 cad3e14 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
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 the active model in settings is not valid, set it to the default model. This can happen if model was disabled.
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,
};
};
|