Browse Source

Merge pull request #2699 from cheahjs/feat/error-message-separate

refac: error message separate from content
Timothy Jaeryang Baek 11 months ago
parent
commit
950231acf7

+ 14 - 16
src/lib/components/chat/Chat.svelte

@@ -680,9 +680,10 @@
 									responseMessage.done = true;
 									responseMessage.done = true;
 
 
 									if (responseMessage.content == '') {
 									if (responseMessage.content == '') {
-										responseMessage.error = true;
-										responseMessage.content =
-											'Oops! No text generated from Ollama, Please try again.';
+										responseMessage.error = {
+											code: 400,
+											content: `Oops! No text generated from Ollama, Please try again.`
+										};
 									}
 									}
 
 
 									responseMessage.context = data.context ?? null;
 									responseMessage.context = data.context ?? null;
@@ -754,24 +755,21 @@
 				console.log(error);
 				console.log(error);
 				if ('detail' in error) {
 				if ('detail' in error) {
 					toast.error(error.detail);
 					toast.error(error.detail);
-					responseMessage.content = error.detail;
+					responseMessage.error = { content: error.detail };
 				} else {
 				} else {
 					toast.error(error.error);
 					toast.error(error.error);
-					responseMessage.content = error.error;
+					responseMessage.error = { content: error.error };
 				}
 				}
 			} else {
 			} else {
 				toast.error(
 				toast.error(
 					$i18n.t(`Uh-oh! There was an issue connecting to {{provider}}.`, { provider: 'Ollama' })
 					$i18n.t(`Uh-oh! There was an issue connecting to {{provider}}.`, { provider: 'Ollama' })
 				);
 				);
-				responseMessage.content = $i18n.t(`Uh-oh! There was an issue connecting to {{provider}}.`, {
-					provider: 'Ollama'
-				});
+				responseMessage.error = {
+					content: $i18n.t(`Uh-oh! There was an issue connecting to {{provider}}.`, {
+						provider: 'Ollama'
+					})
+				};
 			}
 			}
-
-			responseMessage.error = true;
-			responseMessage.content = $i18n.t(`Uh-oh! There was an issue connecting to {{provider}}.`, {
-				provider: 'Ollama'
-			});
 			responseMessage.done = true;
 			responseMessage.done = true;
 			messages = messages;
 			messages = messages;
 		}
 		}
@@ -1035,13 +1033,13 @@
 			errorMessage = innerError.message;
 			errorMessage = innerError.message;
 		}
 		}
 
 
-		responseMessage.error = true;
-		responseMessage.content =
-			$i18n.t(`Uh-oh! There was an issue connecting to {{provider}}.`, {
+		responseMessage.error = {
+			content: $i18n.t(`Uh-oh! There was an issue connecting to {{provider}}.`, {
 				provider: model.name ?? model.id
 				provider: model.name ?? model.id
 			}) +
 			}) +
 			'\n' +
 			'\n' +
 			errorMessage;
 			errorMessage;
+		};
 		responseMessage.done = true;
 		responseMessage.done = true;
 
 
 		messages = messages;
 		messages = messages;

+ 22 - 21
src/lib/components/chat/Messages/ResponseMessage.svelte

@@ -451,7 +451,27 @@
 						</div>
 						</div>
 					{:else}
 					{:else}
 						<div class="w-full">
 						<div class="w-full">
-							{#if message?.error === true}
+							{#if message.content === '' && !message.error}
+								<Skeleton />
+							{:else if !message.error}
+								{#each tokens as token, tokenIdx}
+									{#if token.type === 'code'}
+										<CodeBlock
+											id={`${message.id}-${tokenIdx}`}
+											lang={token?.lang ?? ''}
+											code={revertSanitizedResponseContent(token?.text ?? '')}
+										/>
+									{:else}
+										{@html marked.parse(token.raw, {
+											...defaults,
+											gfm: true,
+											breaks: true,
+											renderer
+										})}
+									{/if}
+								{/each}
+							{/if}
+							{#if message.error}
 								<div
 								<div
 									class="flex mt-2 mb-4 space-x-2 border px-4 py-3 border-red-800 bg-red-800/30 font-medium rounded-lg"
 									class="flex mt-2 mb-4 space-x-2 border px-4 py-3 border-red-800 bg-red-800/30 font-medium rounded-lg"
 								>
 								>
@@ -471,28 +491,9 @@
 									</svg>
 									</svg>
 
 
 									<div class=" self-center">
 									<div class=" self-center">
-										{message.content}
+										{message?.error?.content ?? message.content}
 									</div>
 									</div>
 								</div>
 								</div>
-							{:else if message.content === ''}
-								<Skeleton />
-							{:else}
-								{#each tokens as token, tokenIdx}
-									{#if token.type === 'code'}
-										<CodeBlock
-											id={`${message.id}-${tokenIdx}`}
-											lang={token?.lang ?? ''}
-											code={revertSanitizedResponseContent(token?.text ?? '')}
-										/>
-									{:else}
-										{@html marked.parse(token.raw, {
-											...defaults,
-											gfm: true,
-											breaks: true,
-											renderer
-										})}
-									{/if}
-								{/each}
 							{/if}
 							{/if}
 
 
 							{#if message.citations}
 							{#if message.citations}