Skip to content

Commit

Permalink
fix: Add better error handling for chat errors (#10408)
Browse files Browse the repository at this point in the history
  • Loading branch information
mutdmour authored Aug 14, 2024
1 parent 80c96a3 commit f82b6e4
Showing 1 changed file with 35 additions and 29 deletions.
64 changes: 35 additions & 29 deletions packages/editor-ui/src/utils/apiUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { ApplicationError, jsonParse, type GenericValue, type IDataObject } from
import type { IExecutionFlattedResponse, IExecutionResponse, IRestApiContext } from '@/Interface';
import { parse } from 'flatted';
import type { ChatRequest } from '@/types/assistant.types';
import { assert } from '@/utils/assert';

const BROWSER_ID_STORAGE_KEY = 'n8n-browserId';
let browserId = localStorage.getItem(BROWSER_ID_STORAGE_KEY);
Expand Down Expand Up @@ -214,41 +215,46 @@ export const streamRequest = async (
credentials: 'include',
body: JSON.stringify(payload),
};
const response = await fetch(`${context.baseUrl}${apiEndpoint}`, assistantRequest);

if (response.ok && response.body) {
// Handle the streaming response
const reader = response.body.getReader();
const decoder = new TextDecoder('utf-8');

async function readStream() {
const { done, value } = await reader.read();
if (done) {
onDone?.();
return;
}
try {
const response = await fetch(`${context.baseUrl}${apiEndpoint}`, assistantRequest);

if (response.ok && response.body) {
// Handle the streaming response
const reader = response.body.getReader();
const decoder = new TextDecoder('utf-8');

async function readStream() {
const { done, value } = await reader.read();
if (done) {
onDone?.();
return;
}

const chunk = decoder.decode(value);
const splitChunks = chunk.split(separator);

const chunk = decoder.decode(value);
const splitChunks = chunk.split(separator);

for (const splitChunk of splitChunks) {
if (splitChunk && onChunk) {
try {
onChunk(jsonParse(splitChunk, { errorMessage: 'Invalid json chunk in stream' }));
} catch (e: unknown) {
if (e instanceof Error) {
console.log(`${e.message}: ${splitChunk}`);
onError?.(e);
for (const splitChunk of splitChunks) {
if (splitChunk && onChunk) {
try {
onChunk(jsonParse(splitChunk, { errorMessage: 'Invalid json chunk in stream' }));
} catch (e: unknown) {
if (e instanceof Error) {
console.log(`${e.message}: ${splitChunk}`);
onError?.(e);
}
}
}
}
await readStream();
}

// Start reading the stream
await readStream();
} else if (onError) {
onError(new Error(response.statusText));
}

// Start reading the stream
await readStream();
} else if (onError) {
onError(new Error(response.statusText));
} catch (e: unknown) {
assert(e instanceof Error);
onError?.(e);
}
};

0 comments on commit f82b6e4

Please sign in to comment.