fix: move refund to uapi_request except, remove gen() try/except that re-raised causing 500
gen() try/except re-raised internal errors from uapi_request → 500 response. Moved refund_balance to uapi_request's except block where errors are properly handled (yield error, normal generator exit).
This commit is contained in:
parent
9da343b2e1
commit
670325e8eb
@ -93,6 +93,15 @@ async def uapi_request(request, llm, callerid, callerorgid, params_kw=None):
|
|||||||
llmusage.accounting_status = 'created'
|
llmusage.accounting_status = 'created'
|
||||||
await write_llmusage(llmusage)
|
await write_llmusage(llmusage)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
# Refund balance reservation on failure
|
||||||
|
try:
|
||||||
|
from .balance import refund_balance
|
||||||
|
from ahserver.serverenv import ServerEnv
|
||||||
|
reserve_luid = params_kw.get('_luid') if params_kw else None
|
||||||
|
if reserve_luid:
|
||||||
|
await refund_balance(ServerEnv(), reserve_luid)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
exception(f'{e=},{format_exc()}')
|
exception(f'{e=},{format_exc()}')
|
||||||
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}
|
||||||
|
|||||||
@ -1,19 +1,13 @@
|
|||||||
async def gen():
|
async def gen():
|
||||||
env = request._run_ns.copy()
|
env = request._run_ns.copy()
|
||||||
f = partial(inference_generator, request, params_kw=params_kw)
|
f = partial(inference_generator, request, params_kw=params_kw)
|
||||||
try:
|
if params_kw.stream:
|
||||||
if params_kw.stream:
|
async for l in f():
|
||||||
async for l in f():
|
yield f'data: {l}\\n'
|
||||||
yield f'data: {l}\n'
|
yield 'data: [DONE]\\n\\n'
|
||||||
yield 'data: [DONE]\n\n'
|
else:
|
||||||
else:
|
async for l in f():
|
||||||
async for l in f():
|
yield l
|
||||||
yield l
|
|
||||||
except Exception as e:
|
|
||||||
luid = params_kw.get('_luid')
|
|
||||||
if luid:
|
|
||||||
await env.refund_balance(luid)
|
|
||||||
raise
|
|
||||||
|
|
||||||
debug_params('params_kw', params_kw)
|
debug_params('params_kw', params_kw)
|
||||||
catelogid = params_kw.catelogid or 't2t'
|
catelogid = params_kw.catelogid or 't2t'
|
||||||
@ -43,8 +37,7 @@ params_kw.llmid = llmid
|
|||||||
params_kw.llmcatelogid = catelogid
|
params_kw.llmcatelogid = catelogid
|
||||||
|
|
||||||
debug(f'{params_kw.llmid=}')
|
debug(f'{params_kw.llmid=}')
|
||||||
import uuid
|
luid = getID()
|
||||||
luid = str(uuid.uuid4())
|
|
||||||
reserved = await env.reserve_balance(params_kw.llmid, userorgid, luid)
|
reserved = await env.reserve_balance(params_kw.llmid, userorgid, luid)
|
||||||
if not reserved.get('ok'):
|
if not reserved.get('ok'):
|
||||||
debug(f'{userid=} balance not enough: {reserved}')
|
debug(f'{userid=} balance not enough: {reserved}')
|
||||||
@ -55,6 +48,4 @@ f = await checkCustomerBalance(params_kw.llmid, userid, userorgid)
|
|||||||
if not f and reserved.get('no_redis'):
|
if not f and reserved.get('no_redis'):
|
||||||
debug(f'{userid=} balance not enough (DB fallback)')
|
debug(f'{userid=} balance not enough (DB fallback)')
|
||||||
return openai_429()
|
return openai_429()
|
||||||
# debug(f'{tools=}, {request._run_ns.tools=}')
|
|
||||||
return await env.stream_response(request, gen, content_type='application/json')
|
return await env.stream_response(request, gen, content_type='application/json')
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user