scvcoder commited on
Commit
f160777
·
verified ·
1 Parent(s): 617c061

Force streamer.end() in finally — transformers 5.x doesn't always auto-call it

Browse files
Files changed (1) hide show
  1. src/kpaa/llm/zerogpu_backend.py +10 -2
src/kpaa/llm/zerogpu_backend.py CHANGED
@@ -159,9 +159,17 @@ class ZeroGPUBackend:
159
  print(f"[kpaa.zerogpu] generate() returned normally", flush=True)
160
  except Exception as e:
161
  print(f"[kpaa.zerogpu] generate() raised: {type(e).__name__}: {e}", flush=True)
162
- # streamer 의 종료 신호 — 이게 없으면 next(streamer) 가 영원히 블록.
163
- streamer.end()
164
  raise
 
 
 
 
 
 
 
 
 
 
165
 
166
  gen_thread = Thread(target=_generate_target, daemon=True)
167
  gen_thread.start()
 
159
  print(f"[kpaa.zerogpu] generate() returned normally", flush=True)
160
  except Exception as e:
161
  print(f"[kpaa.zerogpu] generate() raised: {type(e).__name__}: {e}", flush=True)
 
 
162
  raise
163
+ finally:
164
+ # transformers 5.x 에서 streamer.end() 가 generate 종료 시점에
165
+ # 자동 호출되지 않는 케이스가 있음 → next(streamer) 가 영원히
166
+ # 블록. 성공/실패 모두 명시적으로 end() 호출해 stop_signal
167
+ # 을 큐에 넣어 consumer 의 StopIteration 을 보장.
168
+ try:
169
+ streamer.end()
170
+ print(f"[kpaa.zerogpu] streamer.end() called", flush=True)
171
+ except Exception as e:
172
+ print(f"[kpaa.zerogpu] streamer.end() failed: {e}", flush=True)
173
 
174
  gen_thread = Thread(target=_generate_target, daemon=True)
175
  gen_thread.start()