superxu520 commited on
Commit
378caa6
·
1 Parent(s): 25bce68

"fix_deep_stream_interrupted_and_timeout"

Browse files
app/frontend/script.js CHANGED
@@ -410,7 +410,14 @@ async function sendMessage() {
410
  signal: signal
411
  });
412
 
413
- if (!response.ok) throw new Error(`API 请求失败: ${response.status}`);
 
 
 
 
 
 
 
414
 
415
  // 如果检测到画图意图,使用非流式处理
416
  if (autoDetectDraw) {
 
410
  signal: signal
411
  });
412
 
413
+ if (!response.ok) {
414
+ if (response.status === 502 || response.status === 504) {
415
+ throw new Error('上游服务(Gemini)响应超时或连接中断,请稍后重试或更换图片。');
416
+ } else if (response.status === 503) {
417
+ throw new Error('服务器当前繁忙,请稍后重试。');
418
+ }
419
+ throw new Error(`API 请求失败: ${response.status}`);
420
+ }
421
 
422
  // 如果检测到画图意图,使用非流式处理
423
  if (autoDetectDraw) {
app/server/chat.py CHANGED
@@ -805,7 +805,13 @@ async def _send_with_split(
805
  raise e
806
 
807
  if attempt < max_retries:
808
- delay = 2.0 + random.uniform(0.1, 0.5) # 缩短延迟
 
 
 
 
 
 
809
  logger.warning(f"Stream failed to start (attempt {attempt+1}/{max_retries}). Retrying in {delay:.2f}s. Error: {e}")
810
  await asyncio.sleep(delay)
811
  else:
 
805
  raise e
806
 
807
  if attempt < max_retries:
808
+ # 如果是流中断,给予更长的冷却时间让上游恢复
809
+ if "interrupted" in error_str or "truncated" in error_str:
810
+ delay = 5.0 + random.uniform(1.0, 3.0)
811
+ logger.warning(f"Stream interrupted. Cooling down for {delay:.2f}s before retry...")
812
+ else:
813
+ delay = 2.0 + random.uniform(0.1, 0.5)
814
+
815
  logger.warning(f"Stream failed to start (attempt {attempt+1}/{max_retries}). Retrying in {delay:.2f}s. Error: {e}")
816
  await asyncio.sleep(delay)
817
  else:
app/services/client.py CHANGED
@@ -136,9 +136,8 @@ class GeminiClientWrapper(GeminiClient):
136
  "auto_refresh": auto_refresh,
137
  "refresh_interval": refresh_interval,
138
  "verbose": verbose,
 
139
  }
140
- if watchdog_timeout is not _UNSET:
141
- call_kwargs["watchdog_timeout"] = watchdog_timeout
142
  if kwargs:
143
  call_kwargs.update(kwargs)
144
 
 
136
  "auto_refresh": auto_refresh,
137
  "refresh_interval": refresh_interval,
138
  "verbose": verbose,
139
+ "watchdog_timeout": 120.0 if watchdog_timeout is _UNSET else watchdog_timeout, # 增加看门狗超时
140
  }
 
 
141
  if kwargs:
142
  call_kwargs.update(kwargs)
143
 
config/config.yaml CHANGED
@@ -22,7 +22,7 @@ gemini:
22
  secure_1psid: "g.a0006ghLMuTMAgxpLCPEErGijJmoYdaeoQ8jQvccH014n1gYV_A6_9K7SUzPUYqsFZYeKCFj0QACgYKAe8SARcSFQHGX2MiQREdDmeRiaB-meb6rxWh1RoVAUF8yKqKLXLomJGmcEm899BsY1K90076"
23
  secure_1psidts: "sidts-CjEB7I_69ImkFO--6ZoqrN9V6ThAw-I__6wzxDni5ELJR7Ia4najVtYeQCmjpk01XH0yEAA"
24
  proxy: null # Optional proxy URL (null/empty means direct connection)
25
- timeout: 120 # Init timeout in seconds
26
  auto_refresh: true # Auto-refresh session cookies
27
  refresh_interval: 3600 # Refresh interval in seconds
28
  verbose: false # Enable verbose logging for Gemini requests
 
22
  secure_1psid: "g.a0006ghLMuTMAgxpLCPEErGijJmoYdaeoQ8jQvccH014n1gYV_A6_9K7SUzPUYqsFZYeKCFj0QACgYKAe8SARcSFQHGX2MiQREdDmeRiaB-meb6rxWh1RoVAUF8yKqKLXLomJGmcEm899BsY1K90076"
23
  secure_1psidts: "sidts-CjEB7I_69ImkFO--6ZoqrN9V6ThAw-I__6wzxDni5ELJR7Ia4najVtYeQCmjpk01XH0yEAA"
24
  proxy: null # Optional proxy URL (null/empty means direct connection)
25
+ timeout: 300 # Init timeout in seconds (increased for stability)
26
  auto_refresh: true # Auto-refresh session cookies
27
  refresh_interval: 3600 # Refresh interval in seconds
28
  verbose: false # Enable verbose logging for Gemini requests
requirements.txt CHANGED
@@ -1,5 +1,5 @@
1
  fastapi>=0.128.0
2
- gemini-webapi>=1.18.0
3
  lmdb>=1.7.5
4
  loguru>=0.7.3
5
  orjson>=3.11.7
 
1
  fastapi>=0.128.0
2
+ gemini-webapi>=1.20.0
3
  lmdb>=1.7.5
4
  loguru>=0.7.3
5
  orjson>=3.11.7