File size: 2,391 Bytes
fc15a4c
0bfcf81
 
 
5d07536
5da61b4
fe2328e
0bfcf81
4a6603b
2606dde
2804c18
5da61b4
fc15a4c
 
0bfcf81
 
 
4a6603b
0bfcf81
 
 
 
 
 
 
 
 
002f606
0bfcf81
 
 
 
fe2328e
 
0bfcf81
 
 
 
 
4a6603b
34857c4
fe2328e
 
4a6603b
0bfcf81
 
9405a81
 
 
 
2804c18
9405a81
fc15a4c
 
b56bba1
 
 
 
9405a81
5b779a6
 
 
6434339
4a6603b
 
 
 
 
 
 
9405a81
4a6603b
 
 
 
 
 
 
 
b7b2c8c
2606dde
 
002f606
5d07536
 
 
9405a81
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
<script lang="ts">
	import { goto } from "$app/navigation";
	import { base } from "$app/paths";
	import { page } from "$app/stores";
	import { PUBLIC_APP_DISCLAIMER } from "$env/static/public";
	import ChatWindow from "$lib/components/chat/ChatWindow.svelte";
	import { ERROR_MESSAGES, error } from "$lib/stores/errors";
	import { pendingMessage } from "$lib/stores/pendingMessage";
	import { pendingMessageIdToRetry } from "$lib/stores/pendingMessageIdToRetry";
	import { findCurrentModel } from "$lib/utils/models";
	import { share } from "$lib/utils/share";
	import type { PageData } from "./$types";

	export let data: PageData;

	let loading = false;

	async function createConversation() {
		try {
			loading = true;
			const res = await fetch(`${base}/conversation`, {
				method: "POST",
				headers: {
					"Content-Type": "application/json",
				},
				body: JSON.stringify({
					fromShare: $page.params.id,
					model: data.model,
				}),
			});

			if (!res.ok) {
				error.set("Error while creating conversation, try again.");
				console.error("Error while creating conversation: " + (await res.text()));
				return;
			}

			const { conversationId } = await res.json();

			return conversationId;
		} catch (err) {
			error.set(ERROR_MESSAGES.default);
			console.error(String(err));
			throw err;
		}
	}

	async function shareConversation() {
		const url = `${window.location.origin}${window.location.pathname}`;

		share(url, data.title);
	}
</script>

<svelte:head>
	<title>{data.title}</title>
</svelte:head>

<ChatWindow
	{loading}
	shared={true}
	messages={data.messages}
	searches={data.searches}
	on:message={(ev) =>
		createConversation()
			.then((convId) => {
				$pendingMessage = ev.detail;
				return goto(`${base}/conversation/${convId}`, { invalidateAll: true });
			})
			.finally(() => (loading = false))}
	on:share={shareConversation}
	on:retry={(ev) =>
		createConversation()
			.then((convId) => {
				$pendingMessageIdToRetry = ev.detail.id;
				$pendingMessage = ev.detail.content;
				return goto(`${base}/conversation/${convId}`, { invalidateAll: true });
			})
			.finally(() => (loading = false))}
	models={data.models}
	currentModel={findCurrentModel(data.models, data.model)}
	settings={data.settings}
	loginRequired={!$page.error &&
		(data.requiresLogin
			? !data.user
			: !data.settings.ethicsModalAcceptedAt && !!PUBLIC_APP_DISCLAIMER)}
/>