Spaces:
Sleeping
Sleeping
File size: 4,721 Bytes
612f16b 65df4d4 d0e2923 65df4d4 612f16b 7bf1507 612f16b 7bf1507 612f16b 725337f 65df4d4 612f16b 7bf1507 612f16b 7bf1507 612f16b 7bf1507 612f16b 7bf1507 612f16b 725337f 65df4d4 7bf1507 612f16b 7bf1507 612f16b 7bf1507 612f16b 7bf1507 612f16b 5ad620b 612f16b |
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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
import { Elysia } from "elysia";
import { authPlugin } from "$api/authPlugin";
import { defaultModel } from "$lib/server/models";
import { collections } from "$lib/server/database";
import { authCondition } from "$lib/server/auth";
import { models, validateModel } from "$lib/server/models";
import { DEFAULT_SETTINGS, type SettingsEditable } from "$lib/types/Settings";
import { z } from "zod";
const personaSchema = z.object({
id: z.string().min(1),
name: z.string().min(1).max(100),
occupation: z.string().max(200).default(""),
stance: z.string().max(200).default(""),
prompt: z.string().max(10000).default(""),
age: z.string().default(""),
gender: z.string().default(""),
isDefault: z.boolean(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date(),
});
export const userGroup = new Elysia()
.use(authPlugin)
.get("/login", () => {
// todo: login
throw new Error("Not implemented");
})
.get("/login/callback", () => {
// todo: login callback
throw new Error("Not implemented");
})
.post("/logout", () => {
// todo: logout
throw new Error("Not implemented");
})
.group("/user", (app) => {
return app
.get("/", ({ locals }) => {
return locals.user
? {
id: locals.user._id.toString(),
username: locals.user.username,
avatarUrl: locals.user.avatarUrl,
email: locals.user.email,
logoutDisabled: locals.user.logoutDisabled,
isAdmin: locals.user.isAdmin ?? false,
isEarlyAccess: locals.user.isEarlyAccess ?? false,
}
: null;
})
.get("/settings", async ({ locals }) => {
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 },
});
}
// if the model is unlisted, set the active model to the default model
if (
settings?.activeModel &&
models.find((m) => m.id === settings?.activeModel)?.unlisted === true
) {
settings.activeModel = defaultModel.id;
await collections.settings.updateOne(authCondition(locals), {
$set: { activeModel: defaultModel.id },
});
}
// todo: get user settings
return {
welcomeModalSeen: !!settings?.welcomeModalSeenAt,
welcomeModalSeenAt: settings?.welcomeModalSeenAt ?? null,
activeModel: settings?.activeModel ?? DEFAULT_SETTINGS.activeModel,
activePersonas: settings?.activePersonas ?? DEFAULT_SETTINGS.activePersonas,
personas: settings?.personas ?? DEFAULT_SETTINGS.personas,
disableStream: settings?.disableStream ?? DEFAULT_SETTINGS.disableStream,
directPaste: settings?.directPaste ?? DEFAULT_SETTINGS.directPaste,
hidePromptExamples: settings?.hidePromptExamples ?? DEFAULT_SETTINGS.hidePromptExamples,
shareConversationsWithModelAuthors:
settings?.shareConversationsWithModelAuthors ??
DEFAULT_SETTINGS.shareConversationsWithModelAuthors,
multimodalOverrides: settings?.multimodalOverrides ?? {},
};
})
.post("/settings", async ({ locals, request }) => {
const body = await request.json();
const { welcomeModalSeen, ...settings } = z
.object({
shareConversationsWithModelAuthors: z
.boolean()
.default(DEFAULT_SETTINGS.shareConversationsWithModelAuthors),
welcomeModalSeen: z.boolean().optional(),
activeModel: z.string().default(DEFAULT_SETTINGS.activeModel),
activePersonas: z.array(z.string()).min(1).default(DEFAULT_SETTINGS.activePersonas),
personas: z.array(personaSchema).min(1).default(DEFAULT_SETTINGS.personas),
multimodalOverrides: z.record(z.boolean()).default({}),
disableStream: z.boolean().default(false),
directPaste: z.boolean().default(false),
hidePromptExamples: z.record(z.boolean()).default({}),
})
.parse(body) satisfies SettingsEditable;
// Tools removed: ignore tools updates
await collections.settings.updateOne(
authCondition(locals),
{
$set: {
...settings,
...(welcomeModalSeen && { welcomeModalSeenAt: new Date() }),
updatedAt: new Date(),
},
$setOnInsert: {
createdAt: new Date(),
},
},
{
upsert: true,
}
);
// return ok response
return new Response();
})
.get("/reports", async ({ locals }) => {
if (!locals.user || !locals.sessionId) {
return [];
}
const reports = await collections.reports
.find({
createdBy: locals.user?._id ?? locals.sessionId,
})
.toArray();
return reports;
});
});
|