File size: 2,391 Bytes
e3c83d9
3b05d51
 
 
67577d7
98051f8
ffb0dba
3b05d51
ef7aeda
01b06a3
ad37578
98051f8
e3c83d9
 
3b05d51
 
 
ef7aeda
3b05d51
 
 
 
 
 
 
 
 
3c110ed
3b05d51
 
 
 
ffb0dba
 
3b05d51
 
 
 
 
ef7aeda
231a23d
ffb0dba
 
ef7aeda
3b05d51
 
af319d7
 
 
 
ad37578
af319d7
e3c83d9
 
e68d3eb
 
 
 
af319d7
5d291ff
 
 
770735d
ef7aeda
 
 
 
 
 
 
af319d7
ef7aeda
 
 
 
 
 
 
 
c202241
01b06a3
 
3c110ed
67577d7
 
 
af319d7
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)}
/>