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 = []
|
outlines = []
|
||||||
txt = ''
|
txt = ''
|
||||||
luid = getID()
|
luid = getID()
|
||||||
|
llmusage = None
|
||||||
try:
|
try:
|
||||||
start_timestamp = time.time()
|
start_timestamp = time.time()
|
||||||
responsed_seconds = None
|
responsed_seconds = None
|
||||||
@ -96,10 +97,18 @@ async def uapi_request(request, llm, callerid, callerorgid, params_kw=None):
|
|||||||
estr = erase_apikey(e)
|
estr = erase_apikey(e)
|
||||||
ed = {"error": f"ERROR:{estr}", "status": "FAILED" ,"llmusageid": luid}
|
ed = {"error": f"ERROR:{estr}", "status": "FAILED" ,"llmusageid": luid}
|
||||||
s = json.dumps(ed, ensure_ascii=False)
|
s = json.dumps(ed, ensure_ascii=False)
|
||||||
s = ''.join(s.split('\n'))
|
s = ''.join(s.split('\\n'))
|
||||||
outlines.append(ed)
|
outlines.append(ed)
|
||||||
yield f'{s}\n'
|
yield f'{s}\\n'
|
||||||
return
|
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):
|
async def inference_generator(request, *args, params_kw=None, **kw):
|
||||||
env = request._run_ns.copy()
|
env = request._run_ns.copy()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user