Skip to content

Commit e604b84

Browse files
committed
Return HTTP errors immediately to avoid AI character hanging
- When the server responds with a non-2xx HTTP status, send an immediate error response containing the status code. - This prevents the AI character from hanging until the network timeout on HTTP errors.
1 parent 44f2d34 commit e604b84

File tree

5 files changed

+60
-5
lines changed

5 files changed

+60
-5
lines changed

Plugins/AIAvatarKitServiceWebGL.jslib

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,21 @@ mergeInto(LibraryManager.library, {
2121
body: aakStreamRequest,
2222
signal: document.aakAbortController.signal
2323
})
24-
.then((response) => response.body.getReader())
24+
.then(response => {
25+
if (!response.ok) {
26+
SendMessage(
27+
targetObjectName,
28+
"SetAIAvatarKitMessageStreamChunk",
29+
sessionId + "::Error: " + response.status
30+
);
31+
}
32+
return response.body.getReader();
33+
})
2534
.then((reader) => {
2635
const readChunk = function({done, value}) {
2736
if(done) {
37+
// Send empty message to ensure to stop stream handling
38+
SendMessage(targetObjectName, "SetAIAvatarKitMessageStreamChunk", sessionId + "::");
2839
reader.releaseLock();
2940
return;
3041
}

Plugins/ChatGPTServiceWebGL.jslib

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,21 @@ mergeInto(LibraryManager.library, {
2121
body: chatCompletionRequest,
2222
signal: document.chatGPTAbortController.signal
2323
})
24-
.then((response) => response.body.getReader())
24+
.then(response => {
25+
if (!response.ok) {
26+
SendMessage(
27+
targetObjectName,
28+
"SetChatCompletionStreamChunk",
29+
sessionId + "::Error: " + response.status
30+
);
31+
}
32+
return response.body.getReader();
33+
})
2534
.then((reader) => {
2635
const readChunk = function({done, value}) {
2736
if(done) {
37+
// Send empty message to ensure to stop stream handling
38+
SendMessage(targetObjectName, "SetChatCompletionStreamChunk", sessionId + "::");
2839
reader.releaseLock();
2940
return;
3041
}

Plugins/ClaudeServiceWebGL.jslib

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,21 @@ mergeInto(LibraryManager.library, {
2323
body: claudeStreamRequest,
2424
signal: document.claudeAbortController.signal
2525
})
26-
.then((response) => response.body.getReader())
26+
.then(response => {
27+
if (!response.ok) {
28+
SendMessage(
29+
targetObjectName,
30+
"SetClaudeMessageStreamChunk",
31+
sessionId + "::Error: " + response.status
32+
);
33+
}
34+
return response.body.getReader();
35+
})
2736
.then((reader) => {
2837
const readChunk = function({done, value}) {
2938
if(done) {
39+
// Send empty message to ensure to stop stream handling
40+
SendMessage(targetObjectName, "SetClaudeMessageStreamChunk", sessionId + "::");
3041
reader.releaseLock();
3142
return;
3243
}

Plugins/DifyServiceWebGL.jslib

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,21 @@ mergeInto(LibraryManager.library, {
2121
body: difyStreamRequest,
2222
signal: document.difyAbortController.signal
2323
})
24-
.then((response) => response.body.getReader())
24+
.then(response => {
25+
if (!response.ok) {
26+
SendMessage(
27+
targetObjectName,
28+
"SetDifyMessageStreamChunk",
29+
sessionId + "::Error: " + response.status
30+
);
31+
}
32+
return response.body.getReader();
33+
})
2534
.then((reader) => {
2635
const readChunk = function({done, value}) {
2736
if(done) {
37+
// Send empty message to ensure to stop stream handling
38+
SendMessage(targetObjectName, "SetDifyMessageStreamChunk", sessionId + "::");
2839
reader.releaseLock();
2940
return;
3041
}

Plugins/GeminiServiceWebGL.jslib

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,21 @@ mergeInto(LibraryManager.library, {
1919
body: geminiStreamRequest,
2020
signal: document.geminiAbortController.signal
2121
})
22-
.then((response) => response.body.getReader())
22+
.then(response => {
23+
if (!response.ok) {
24+
SendMessage(
25+
targetObjectName,
26+
"SetGeminiMessageStreamChunk",
27+
sessionId + "::Error: " + response.status
28+
);
29+
}
30+
return response.body.getReader();
31+
})
2332
.then((reader) => {
2433
const readChunk = function({done, value}) {
2534
if(done) {
35+
// Send empty message to ensure to stop stream handling
36+
SendMessage(targetObjectName, "SetGeminiMessageStreamChunk", sessionId + "::");
2637
reader.releaseLock();
2738
return;
2839
}

0 commit comments

Comments
 (0)