File size: 3,603 Bytes
bc27e65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
<script>

	import { createEventDispatcher, getContext } from 'svelte';



	import Modal from '$lib/components/common/Modal.svelte';

	import { addNewMemory, updateMemoryById } from '$lib/apis/memories';

	import { toast } from 'svelte-sonner';



	const dispatch = createEventDispatcher();



	export let show;

	const i18n = getContext('i18n');



	let loading = false;

	let content = '';



	const submitHandler = async () => {

		loading = true;



		const res = await addNewMemory(localStorage.token, content).catch((error) => {

			toast.error(`${error}`);



			return null;

		});



		if (res) {

			console.log(res);

			toast.success($i18n.t('Memory added successfully'));

			content = '';

			show = false;

			dispatch('save');

		}



		loading = false;

	};

</script>

<Modal bind:show size="sm">
	<div>
		<div class=" flex justify-between dark:text-gray-300 px-5 pt-4 pb-2">
			<div class=" text-lg font-medium self-center">
				{$i18n.t('Add Memory')}
			</div>
			<button

				class="self-center"

				on:click={() => {
					show = false;
				}}
			>
				<svg

					xmlns="http://www.w3.org/2000/svg"

					viewBox="0 0 20 20"

					fill="currentColor"

					class="w-5 h-5"

				>
					<path

						d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"

					/>
				</svg>
			</button>
		</div>

		<div class="flex flex-col md:flex-row w-full px-5 pb-4 md:space-x-4 dark:text-gray-200">
			<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
				<form

					class="flex flex-col w-full"

					on:submit|preventDefault={() => {
						submitHandler();
					}}
				>
					<div class="">
						<textarea

							bind:value={content}

							class=" bg-transparent w-full text-sm resize-none rounded-xl p-3 outline outline-1 outline-gray-100 dark:outline-gray-800"

							rows="3"

							placeholder={$i18n.t('Enter a detail about yourself for your LLMs to recall')}

						/>

						<div class="text-xs text-gray-500">
							ⓘ {$i18n.t('Refer to yourself as "User" (e.g., "User is learning Spanish")')}
						</div>
					</div>

					<div class="flex justify-end pt-1 text-sm font-medium">
						<button

							class=" px-4 py-2 bg-emerald-700 hover:bg-emerald-800 text-gray-100 transition rounded-3xl flex flex-row space-x-1 items-center {loading

								? ' cursor-not-allowed'

								: ''}"

							type="submit"

							disabled={loading}

						>
							{$i18n.t('Add')}

							{#if loading}
								<div class="ml-2 self-center">
									<svg

										class=" w-4 h-4"

										viewBox="0 0 24 24"

										fill="currentColor"

										xmlns="http://www.w3.org/2000/svg"

										><style>

											.spinner_ajPY {

												transform-origin: center;

												animation: spinner_AtaB 0.75s infinite linear;

											}

											@keyframes spinner_AtaB {

												100% {

													transform: rotate(360deg);

												}

											}

										</style><path

											d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"

											opacity=".25"

										/><path

											d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"

											class="spinner_ajPY"

										/></svg
									>
								</div>
							{/if}
						</button>
					</div>
				</form>
			</div>
		</div>
	</div>
</Modal>