mirror of
https://github.com/decolua/9router.git
synced 2026-05-08 12:01:28 +00:00
feat: enhance disconnect handling and request tracking in chatCore.js (#126)
Co-authored-by: zx <me@char.moe>
This commit is contained in:
@@ -417,7 +417,20 @@ export async function handleChatCore({ body, modelInfo, credentials, log, onCred
|
||||
log?.debug?.("REQUEST", `${provider.toUpperCase()} | ${model} | ${msgCount} msgs`);
|
||||
|
||||
// Create stream controller for disconnect detection
|
||||
const streamController = createStreamController({ onDisconnect, log, provider, model });
|
||||
const streamController = createStreamController({
|
||||
onDisconnect: (reason) => {
|
||||
// Track request finished (disconnected)
|
||||
trackPendingRequest(model, provider, connectionId, false);
|
||||
if (onDisconnect) onDisconnect(reason);
|
||||
},
|
||||
onError: (error) => {
|
||||
// Track request finished (error/zombie)
|
||||
trackPendingRequest(model, provider, connectionId, false);
|
||||
},
|
||||
log,
|
||||
provider,
|
||||
model
|
||||
});
|
||||
|
||||
// Execute request using executor (handles URL building, headers, fallback, transform)
|
||||
let providerResponse;
|
||||
|
||||
@@ -13,7 +13,7 @@ function getTimeString() {
|
||||
* @param {string} options.provider - Provider name
|
||||
* @param {string} options.model - Model name
|
||||
*/
|
||||
export function createStreamController({ onDisconnect, log, provider, model } = {}) {
|
||||
export function createStreamController({ onDisconnect, onError, log, provider, model } = {}) {
|
||||
const abortController = new AbortController();
|
||||
const startTime = Date.now();
|
||||
let disconnected = false;
|
||||
@@ -61,6 +61,9 @@ export function createStreamController({ onDisconnect, log, provider, model } =
|
||||
|
||||
// Call on error
|
||||
handleError: (error) => {
|
||||
if (disconnected) return;
|
||||
disconnected = true;
|
||||
|
||||
if (abortTimeout) {
|
||||
clearTimeout(abortTimeout);
|
||||
abortTimeout = null;
|
||||
@@ -72,6 +75,7 @@ export function createStreamController({ onDisconnect, log, provider, model } =
|
||||
}
|
||||
|
||||
logStream(`error: ${error.message}`);
|
||||
onError?.(error);
|
||||
},
|
||||
|
||||
abort: () => abortController.abort()
|
||||
|
||||
Reference in New Issue
Block a user