File size: 1,653 Bytes
5da61b4
 
 
0bfcf81
5da61b4
0bfcf81
 
cf7ac8d
151571d
1b66f8d
 
0bfcf81
 
 
 
 
06e879d
 
 
cf7ac8d
06e879d
 
0bfcf81
06e879d
 
 
 
0bfcf81
06e879d
 
0bfcf81
06e879d
 
 
 
0bfcf81
 
1b66f8d
 
 
0bfcf81
5da61b4
0bfcf81
 
 
06e879d
1b66f8d
 
5da61b4
06e879d
1b66f8d
 
 
 
5da61b4
1b66f8d
5da61b4
1b66f8d
 
7b62aec
 
b94fb23
7b62aec
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
import type { RequestHandler } from "./$types";
import { collections } from "$lib/server/database";
import { ObjectId } from "mongodb";
import { error, redirect } from "@sveltejs/kit";
import { base } from "$app/paths";
import { z } from "zod";
import type { Message } from "$lib/types/Message";
import { models } from "$lib/server/models";
import { validateModel } from "$lib/utils/models";

export const POST: RequestHandler = async (input) => {
	const body = await input.request.text();

	let title = "";
	let messages: Message[] = [];

	const values = z
		.object({
			fromShare: z.string().optional(),
			model: validateModel(models),
		})
		.parse(JSON.parse(body));

	if (values.fromShare) {
		const conversation = await collections.sharedConversations.findOne({
			_id: values.fromShare,
		});

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

		title = conversation.title;
		messages = conversation.messages;
		values.model = conversation.model;
	}

	const res = await collections.conversations.insertOne({
		_id: new ObjectId(),
		title:
			title ||
			"Untitled " +
				((await collections.conversations.countDocuments({ sessionId: input.locals.sessionId })) +
					1),
		messages,
		model: values.model,
		createdAt: new Date(),
		updatedAt: new Date(),
		sessionId: input.locals.sessionId,
		...(values.fromShare ? { meta: { fromShareId: values.fromShare } } : {}),
	});

	return new Response(
		JSON.stringify({
			conversationId: res.insertedId.toString(),
		}),
		{ headers: { "Content-Type": "application/json" } }
	);
};

export const GET: RequestHandler = async () => {
	throw redirect(302, base || "/");
};