Преглед на файлове

enh: regenerate menu toggle setting

Timothy Jaeryang Baek преди 2 месеца
родител
ревизия
497471d16b
променени са 2 файла, в които са добавени 106 реда и са изтрити 39 реда
  1. 83 39
      src/lib/components/chat/Messages/ResponseMessage.svelte
  2. 23 0
      src/lib/components/chat/Settings/Interface.svelte

+ 83 - 39
src/lib/components/chat/Messages/ResponseMessage.svelte

@@ -1349,51 +1349,95 @@
 										</Tooltip>
 									{/if}
 
-									<button
-										type="button"
-										class="hidden regenerate-response-button"
-										on:click={() => {
-											showRateComment = false;
-											regenerateResponse(message);
-
-											(model?.actions ?? []).forEach((action) => {
-												dispatch('action', {
-													id: action.id,
-													event: {
-														id: 'regenerate-response',
-														data: {
-															messageId: message.id
+									{#if $settings?.regenerateMenu ?? true}
+										<button
+											type="button"
+											class="hidden regenerate-response-button"
+											on:click={() => {
+												showRateComment = false;
+												regenerateResponse(message);
+
+												(model?.actions ?? []).forEach((action) => {
+													dispatch('action', {
+														id: action.id,
+														event: {
+															id: 'regenerate-response',
+															data: {
+																messageId: message.id
+															}
 														}
-													}
+													});
 												});
-											});
-										}}
-									/>
-
-									<RegenerateMenu
-										onRegenerate={(prompt = null) => {
-											showRateComment = false;
-											regenerateResponse(message, prompt);
-
-											(model?.actions ?? []).forEach((action) => {
-												dispatch('action', {
-													id: action.id,
-													event: {
-														id: 'regenerate-response',
-														data: {
-															messageId: message.id
+											}}
+										/>
+
+										<RegenerateMenu
+											onRegenerate={(prompt = null) => {
+												showRateComment = false;
+												regenerateResponse(message, prompt);
+
+												(model?.actions ?? []).forEach((action) => {
+													dispatch('action', {
+														id: action.id,
+														event: {
+															id: 'regenerate-response',
+															data: {
+																messageId: message.id
+															}
 														}
-													}
+													});
 												});
-											});
-										}}
-									>
+											}}
+										>
+											<Tooltip content={$i18n.t('Regenerate')} placement="bottom">
+												<div
+													aria-label={$i18n.t('Regenerate')}
+													class="{isLastMessage
+														? 'visible'
+														: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
+												>
+													<svg
+														xmlns="http://www.w3.org/2000/svg"
+														fill="none"
+														viewBox="0 0 24 24"
+														stroke-width="2.3"
+														aria-hidden="true"
+														stroke="currentColor"
+														class="w-4 h-4"
+													>
+														<path
+															stroke-linecap="round"
+															stroke-linejoin="round"
+															d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"
+														/>
+													</svg>
+												</div>
+											</Tooltip>
+										</RegenerateMenu>
+									{:else}
 										<Tooltip content={$i18n.t('Regenerate')} placement="bottom">
-											<div
+											<button
+												type="button"
 												aria-label={$i18n.t('Regenerate')}
 												class="{isLastMessage
 													? 'visible'
-													: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
+													: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
+												on:click={() => {
+													showRateComment = false;
+													regenerateResponse(message);
+
+													(model?.actions ?? []).forEach((action) => {
+														dispatch('action', {
+															id: action.id,
+															event: {
+																id: 'regenerate-response',
+																data: {
+																	messageId: message.id
+																}
+															}
+														});
+													});
+												}}
 											>
 												<svg
 													xmlns="http://www.w3.org/2000/svg"
@@ -1410,9 +1454,9 @@
 														d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"
 													/>
 												</svg>
-											</div>
+											</button>
 										</Tooltip>
-									</RegenerateMenu>
+									{/if}
 
 									{#if siblings.length > 1}
 										<Tooltip content={$i18n.t('Delete')} placement="bottom">

+ 23 - 0
src/lib/components/chat/Settings/Interface.svelte

@@ -52,6 +52,8 @@
 	let keepFollowUpPrompts = false;
 	let insertFollowUpPrompt = false;
 
+	let regenerateMenu = true;
+
 	let landingPageMode = '';
 	let chatBubble = true;
 	let chatDirection: 'LTR' | 'RTL' | 'auto' = 'auto';
@@ -200,6 +202,8 @@
 		keepFollowUpPrompts = $settings?.keepFollowUpPrompts ?? false;
 		insertFollowUpPrompt = $settings?.insertFollowUpPrompt ?? false;
 
+		regenerateMenu = $settings?.regenerateMenu ?? true;
+
 		largeTextAsFile = $settings?.largeTextAsFile ?? false;
 		copyFormatted = $settings?.copyFormatted ?? false;
 
@@ -709,6 +713,25 @@
 				</div>
 			</div>
 
+			<div>
+				<div class=" py-0.5 flex w-full justify-between">
+					<div id="regenerate-menu-label" class=" self-center text-xs">
+						{$i18n.t('Regenerate Menu')}
+					</div>
+
+					<div class="flex items-center gap-2 p-1">
+						<Switch
+							ariaLabelledbyId="regenerate-menu-label"
+							tooltip={true}
+							bind:state={regenerateMenu}
+							on:change={() => {
+								saveSettings({ regenerateMenu });
+							}}
+						/>
+					</div>
+				</div>
+			</div>
+
 			<div>
 				<div class=" py-0.5 flex w-full justify-between">
 					<div id="always-collapse-label" class=" self-center text-xs">