Skip to content

Commit 6091596

Browse files
fix(client): throw/handle SSE errors properly
1 parent 47322e2 commit 6091596

File tree

1 file changed

+40
-35
lines changed

1 file changed

+40
-35
lines changed

src/ChatGPTClient.js

+40-35
Original file line numberDiff line numberDiff line change
@@ -71,42 +71,47 @@ export default class ChatGPTClient {
7171
body: JSON.stringify(modelOptions),
7272
};
7373
if (modelOptions.stream) {
74-
return new Promise((resolve, reject) => {
74+
return new Promise(async (resolve, reject) => {
7575
const controller = new AbortController();
76-
fetchEventSource(url, {
77-
...opts,
78-
signal: controller.signal,
79-
onopen(response) {
80-
if (response.status === 200) {
81-
return;
82-
}
83-
if (debug) {
84-
console.debug(response);
85-
}
86-
throw new Error(`Failed to send message. HTTP ${response.status} - ${response.statusText}`);
87-
},
88-
onclose() {
89-
throw new Error(`Failed to send message. Server closed the connection unexpectedly.`);
90-
},
91-
onerror(err) {
92-
if (debug) {
93-
console.debug(err);
94-
}
95-
reject(err);
96-
},
97-
onmessage(message) {
98-
if (debug) {
99-
console.debug(message);
100-
}
101-
if (message.data === '[DONE]') {
102-
onProgress('[DONE]');
103-
controller.abort();
104-
resolve();
105-
return;
106-
}
107-
onProgress(JSON.parse(message.data));
108-
},
109-
});
76+
try {
77+
await fetchEventSource(url, {
78+
...opts,
79+
signal: controller.signal,
80+
onopen(response) {
81+
if (response.status === 200) {
82+
return;
83+
}
84+
if (debug) {
85+
console.debug(response);
86+
}
87+
throw new Error(`Failed to send message. HTTP ${response.status} - ${response.statusText}`);
88+
},
89+
onclose() {
90+
throw new Error(`Failed to send message. Server closed the connection unexpectedly.`);
91+
},
92+
onerror(err) {
93+
if (debug) {
94+
console.debug(err);
95+
}
96+
// rethrow to stop the operation
97+
throw err;
98+
},
99+
onmessage(message) {
100+
if (debug) {
101+
console.debug(message);
102+
}
103+
if (message.data === '[DONE]') {
104+
onProgress('[DONE]');
105+
controller.abort();
106+
resolve();
107+
return;
108+
}
109+
onProgress(JSON.parse(message.data));
110+
},
111+
});
112+
} catch (err) {
113+
reject(err);
114+
}
110115
});
111116
}
112117
const response = await fetch(url, opts);

0 commit comments

Comments
 (0)