client reset
Browse files- src/App.svelte +12 -0
- src/lib/utils/qwenTimeout.ts +25 -1
src/App.svelte
CHANGED
@@ -9,6 +9,7 @@
|
|
9 |
import Encounters from './lib/components/Pages/Encounters.svelte';
|
10 |
import Pictuary from './lib/components/Pages/Pictuary.svelte';
|
11 |
import type { HuggingFaceLibs, GradioLibs, GradioClient } from './lib/types';
|
|
|
12 |
|
13 |
// These will be loaded from window after HF libs are loaded
|
14 |
let hfAuth: HuggingFaceLibs | null = $state(null);
|
@@ -118,6 +119,17 @@
|
|
118 |
);
|
119 |
|
120 |
authStore.setBannerMessage("");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
} catch (err) {
|
122 |
console.error(err);
|
123 |
authStore.setBannerMessage(`β Failed to connect: ${err}`);
|
|
|
9 |
import Encounters from './lib/components/Pages/Encounters.svelte';
|
10 |
import Pictuary from './lib/components/Pages/Pictuary.svelte';
|
11 |
import type { HuggingFaceLibs, GradioLibs, GradioClient } from './lib/types';
|
12 |
+
import { setQwenClientResetter } from './lib/utils/qwenTimeout';
|
13 |
|
14 |
// These will be loaded from window after HF libs are loaded
|
15 |
let hfAuth: HuggingFaceLibs | null = $state(null);
|
|
|
119 |
);
|
120 |
|
121 |
authStore.setBannerMessage("");
|
122 |
+
|
123 |
+
// Set up qwen client reset function
|
124 |
+
setQwenClientResetter(async () => {
|
125 |
+
console.log('π Resetting qwen client connection...');
|
126 |
+
const opts = hfToken ? { hf_token: hfToken } : {};
|
127 |
+
qwenClient = await gradioClient.Client.connect(
|
128 |
+
"Qwen/Qwen3-Demo",
|
129 |
+
opts
|
130 |
+
);
|
131 |
+
});
|
132 |
+
|
133 |
} catch (err) {
|
134 |
console.error(err);
|
135 |
authStore.setBannerMessage(`β Failed to connect: ${err}`);
|
src/lib/utils/qwenTimeout.ts
CHANGED
@@ -1,6 +1,13 @@
|
|
1 |
import pRetry, { AbortError } from 'p-retry';
|
2 |
import pTimeout from 'p-timeout';
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
export async function withQwenTimeout<T>(
|
5 |
fn: () => Promise<T>,
|
6 |
{ totalTimeout = 70_000, retries = 2 } = {}
|
@@ -10,9 +17,26 @@ export async function withQwenTimeout<T>(
|
|
10 |
try {
|
11 |
return await pTimeout(fn(), { milliseconds: totalTimeout });
|
12 |
} catch (error) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
// Convert non-Error objects to proper Error objects for p-retry
|
14 |
if (error && typeof error === 'object' && !(error instanceof Error)) {
|
15 |
-
const errorMessage = error.message || error.toString() || 'Network connection error';
|
16 |
throw new Error(errorMessage);
|
17 |
}
|
18 |
throw error;
|
|
|
1 |
import pRetry, { AbortError } from 'p-retry';
|
2 |
import pTimeout from 'p-timeout';
|
3 |
|
4 |
+
// Global reference to reset qwen client
|
5 |
+
let qwenClientResetter: (() => Promise<void>) | null = null;
|
6 |
+
|
7 |
+
export function setQwenClientResetter(resetFn: () => Promise<void>) {
|
8 |
+
qwenClientResetter = resetFn;
|
9 |
+
}
|
10 |
+
|
11 |
export async function withQwenTimeout<T>(
|
12 |
fn: () => Promise<T>,
|
13 |
{ totalTimeout = 70_000, retries = 2 } = {}
|
|
|
17 |
try {
|
18 |
return await pTimeout(fn(), { milliseconds: totalTimeout });
|
19 |
} catch (error) {
|
20 |
+
// Check if this is a session/connection error that requires client reset
|
21 |
+
const errorMessage = (error as any)?.message || error?.toString() || '';
|
22 |
+
const isSessionError = errorMessage.includes('Session not found') ||
|
23 |
+
errorMessage.includes('network error') ||
|
24 |
+
errorMessage.includes('ERR_HTTP2_PROTOCOL_ERROR') ||
|
25 |
+
errorMessage.includes('Connection errored out');
|
26 |
+
|
27 |
+
if (isSessionError && qwenClientResetter) {
|
28 |
+
console.log('π Qwen client session error detected, resetting client...');
|
29 |
+
try {
|
30 |
+
await qwenClientResetter();
|
31 |
+
console.log('β
Qwen client reset successfully');
|
32 |
+
} catch (resetError) {
|
33 |
+
console.error('β Failed to reset qwen client:', resetError);
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
// Convert non-Error objects to proper Error objects for p-retry
|
38 |
if (error && typeof error === 'object' && !(error instanceof Error)) {
|
39 |
+
const errorMessage = (error as any).message || error.toString() || 'Network connection error';
|
40 |
throw new Error(errorMessage);
|
41 |
}
|
42 |
throw error;
|