Fraser commited on
Commit
5650eb2
Β·
1 Parent(s): 44cedc5

client reset

Browse files
Files changed (2) hide show
  1. src/App.svelte +12 -0
  2. 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;