fix: add finally block to write_llmusage — recover from GeneratorExit on client disconnect
When client disconnects mid-stream, Python GC kills the generator with GeneratorExit (BaseException subclass), which is NOT caught by except Exception. write_llmusage at line 93 was never reached, causing ~16% usage records lost. finally block ensures llmusage is written even on GeneratorExit.
This commit is contained in:
parent
06e14af6ab
commit
21bf30d2a6
@ -27,6 +27,7 @@ async def uapi_request(request, llm, callerid, callerorgid, params_kw=None):
|
||||
outlines = []
|
||||
txt = ''
|
||||
luid = getID()
|
||||
llmusage = None
|
||||
try:
|
||||
start_timestamp = time.time()
|
||||
responsed_seconds = None
|
||||
@ -96,10 +97,18 @@ async def uapi_request(request, llm, callerid, callerorgid, params_kw=None):
|
||||
estr = erase_apikey(e)
|
||||
ed = {"error": f"ERROR:{estr}", "status": "FAILED" ,"llmusageid": luid}
|
||||
s = json.dumps(ed, ensure_ascii=False)
|
||||
s = ''.join(s.split('\n'))
|
||||
s = ''.join(s.split('\\n'))
|
||||
outlines.append(ed)
|
||||
yield f'{s}\n'
|
||||
yield f'{s}\\n'
|
||||
return
|
||||
finally:
|
||||
# GeneratorExit / client disconnect — flush partial usage
|
||||
if llmusage and llmusage.get('id') == luid:
|
||||
try:
|
||||
llmusage.status = llmusage.status or 'UNKNOWN'
|
||||
await write_llmusage(llmusage)
|
||||
except:
|
||||
pass
|
||||
|
||||
async def inference_generator(request, *args, params_kw=None, **kw):
|
||||
env = request._run_ns.copy()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user