diff --git a/src/lib/components/chat/Messages.svelte b/src/lib/components/chat/Messages.svelte index aa7bde72..ad691bf1 100644 --- a/src/lib/components/chat/Messages.svelte +++ b/src/lib/components/chat/Messages.svelte @@ -655,7 +655,32 @@ {:else}
- {@html marked(message.content.replace('\\\\', '\\\\\\'))} + {#if message?.error === true} +
+ + + + +
+ {message.content} +
+
+ {:else} + {@html marked(message.content.replace('\\\\', '\\\\\\'))} + {/if} {#if message.done}
diff --git a/src/routes/(app)/+page.svelte b/src/routes/(app)/+page.svelte index c0d210fc..44c92397 100644 --- a/src/routes/(app)/+page.svelte +++ b/src/routes/(app)/+page.svelte @@ -189,82 +189,107 @@ }, format: $settings.requestFormat ?? undefined }) + }).catch((err) => { + console.log(err); + return null; }); - const reader = res.body - .pipeThrough(new TextDecoderStream()) - .pipeThrough(splitStream('\n')) - .getReader(); + if (res && res.ok) { + const reader = res.body + .pipeThrough(new TextDecoderStream()) + .pipeThrough(splitStream('\n')) + .getReader(); - while (true) { - const { value, done } = await reader.read(); - if (done || stopResponseFlag || _chatId !== $chatId) { - responseMessage.done = true; - messages = messages; - break; - } + while (true) { + const { value, done } = await reader.read(); + if (done || stopResponseFlag || _chatId !== $chatId) { + responseMessage.done = true; + messages = messages; + break; + } - try { - let lines = value.split('\n'); + try { + let lines = value.split('\n'); - for (const line of lines) { - if (line !== '') { - console.log(line); - let data = JSON.parse(line); + for (const line of lines) { + if (line !== '') { + console.log(line); + let data = JSON.parse(line); - if ('detail' in data) { - throw data; - } + if ('detail' in data) { + throw data; + } - if (data.done == false) { - if (responseMessage.content == '' && data.message.content == '\n') { - continue; + if (data.done == false) { + if (responseMessage.content == '' && data.message.content == '\n') { + continue; + } else { + responseMessage.content += data.message.content; + messages = messages; + } } else { - responseMessage.content += data.message.content; + responseMessage.done = true; + responseMessage.context = data.context ?? null; + responseMessage.info = { + total_duration: data.total_duration, + prompt_eval_count: data.prompt_eval_count, + prompt_eval_duration: data.prompt_eval_duration, + eval_count: data.eval_count, + eval_duration: data.eval_duration + }; messages = messages; } - } else { - responseMessage.done = true; - responseMessage.context = data.context ?? null; - responseMessage.info = { - total_duration: data.total_duration, - prompt_eval_count: data.prompt_eval_count, - prompt_eval_duration: data.prompt_eval_duration, - eval_count: data.eval_count, - eval_duration: data.eval_duration - }; - messages = messages; } } + } catch (error) { + console.log(error); + if ('detail' in error) { + toast.error(error.detail); + } + break; } - } catch (error) { + + if (autoScroll) { + window.scrollTo({ top: document.body.scrollHeight }); + } + + await $db.updateChatById(_chatId, { + title: title === '' ? 'New Chat' : title, + models: selectedModels, + system: $settings.system ?? undefined, + options: { + seed: $settings.seed ?? undefined, + temperature: $settings.temperature ?? undefined, + repeat_penalty: $settings.repeat_penalty ?? undefined, + top_k: $settings.top_k ?? undefined, + top_p: $settings.top_p ?? undefined, + num_ctx: $settings.num_ctx ?? undefined, + ...($settings.options ?? {}) + }, + messages: messages, + history: history + }); + } + } else { + if (res !== null) { + const error = await res.json(); console.log(error); if ('detail' in error) { toast.error(error.detail); + responseMessage.content = error.detail; + } else { + toast.error(error.error); + responseMessage.content = error.error; } - break; + } else { + toast.error(`Uh-oh! There was an issue connecting to Ollama.`); + responseMessage.content = `Uh-oh! There was an issue connecting to Ollama.`; } - if (autoScroll) { - window.scrollTo({ top: document.body.scrollHeight }); - } - - await $db.updateChatById(_chatId, { - title: title === '' ? 'New Chat' : title, - models: selectedModels, - system: $settings.system ?? undefined, - options: { - seed: $settings.seed ?? undefined, - temperature: $settings.temperature ?? undefined, - repeat_penalty: $settings.repeat_penalty ?? undefined, - top_k: $settings.top_k ?? undefined, - top_p: $settings.top_p ?? undefined, - num_ctx: $settings.num_ctx ?? undefined, - ...($settings.options ?? {}) - }, - messages: messages, - history: history - }); + responseMessage.error = true; + responseMessage.content = `Uh-oh! There was an issue connecting to Ollama.`; + responseMessage.done = true; + messages = messages; } stopResponseFlag = false; diff --git a/src/routes/(app)/c/[id]/+page.svelte b/src/routes/(app)/c/[id]/+page.svelte index fd61a4dc..c2685af5 100644 --- a/src/routes/(app)/c/[id]/+page.svelte +++ b/src/routes/(app)/c/[id]/+page.svelte @@ -216,82 +216,107 @@ }, format: $settings.requestFormat ?? undefined }) + }).catch((err) => { + console.log(err); + return null; }); - const reader = res.body - .pipeThrough(new TextDecoderStream()) - .pipeThrough(splitStream('\n')) - .getReader(); + if (res && res.ok) { + const reader = res.body + .pipeThrough(new TextDecoderStream()) + .pipeThrough(splitStream('\n')) + .getReader(); - while (true) { - const { value, done } = await reader.read(); - if (done || stopResponseFlag || _chatId !== $chatId) { - responseMessage.done = true; - messages = messages; - break; - } + while (true) { + const { value, done } = await reader.read(); + if (done || stopResponseFlag || _chatId !== $chatId) { + responseMessage.done = true; + messages = messages; + break; + } - try { - let lines = value.split('\n'); + try { + let lines = value.split('\n'); - for (const line of lines) { - if (line !== '') { - console.log(line); - let data = JSON.parse(line); + for (const line of lines) { + if (line !== '') { + console.log(line); + let data = JSON.parse(line); - if ('detail' in data) { - throw data; - } + if ('detail' in data) { + throw data; + } - if (data.done == false) { - if (responseMessage.content == '' && data.message.content == '\n') { - continue; + if (data.done == false) { + if (responseMessage.content == '' && data.message.content == '\n') { + continue; + } else { + responseMessage.content += data.message.content; + messages = messages; + } } else { - responseMessage.content += data.message.content; + responseMessage.done = true; + responseMessage.context = data.context ?? null; + responseMessage.info = { + total_duration: data.total_duration, + prompt_eval_count: data.prompt_eval_count, + prompt_eval_duration: data.prompt_eval_duration, + eval_count: data.eval_count, + eval_duration: data.eval_duration + }; messages = messages; } - } else { - responseMessage.done = true; - responseMessage.context = data.context ?? null; - responseMessage.info = { - total_duration: data.total_duration, - prompt_eval_count: data.prompt_eval_count, - prompt_eval_duration: data.prompt_eval_duration, - eval_count: data.eval_count, - eval_duration: data.eval_duration - }; - messages = messages; } } + } catch (error) { + console.log(error); + if ('detail' in error) { + toast.error(error.detail); + } + break; } - } catch (error) { + + if (autoScroll) { + window.scrollTo({ top: document.body.scrollHeight }); + } + + await $db.updateChatById(_chatId, { + title: title === '' ? 'New Chat' : title, + models: selectedModels, + system: $settings.system ?? undefined, + options: { + seed: $settings.seed ?? undefined, + temperature: $settings.temperature ?? undefined, + repeat_penalty: $settings.repeat_penalty ?? undefined, + top_k: $settings.top_k ?? undefined, + top_p: $settings.top_p ?? undefined, + num_ctx: $settings.num_ctx ?? undefined, + ...($settings.options ?? {}) + }, + messages: messages, + history: history + }); + } + } else { + if (res !== null) { + const error = await res.json(); console.log(error); if ('detail' in error) { toast.error(error.detail); + responseMessage.content = error.detail; + } else { + toast.error(error.error); + responseMessage.content = error.error; } - break; + } else { + toast.error(`Uh-oh! There was an issue connecting to Ollama.`); + responseMessage.content = `Uh-oh! There was an issue connecting to Ollama.`; } - if (autoScroll) { - window.scrollTo({ top: document.body.scrollHeight }); - } - - await $db.updateChatById(_chatId, { - title: title === '' ? 'New Chat' : title, - models: selectedModels, - system: $settings.system ?? undefined, - options: { - seed: $settings.seed ?? undefined, - temperature: $settings.temperature ?? undefined, - repeat_penalty: $settings.repeat_penalty ?? undefined, - top_k: $settings.top_k ?? undefined, - top_p: $settings.top_p ?? undefined, - num_ctx: $settings.num_ctx ?? undefined, - ...($settings.options ?? {}) - }, - messages: messages, - history: history - }); + responseMessage.error = true; + responseMessage.content = `Uh-oh! There was an issue connecting to Ollama.`; + responseMessage.done = true; + messages = messages; } stopResponseFlag = false;