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'
|
||||
await write_llmusage(llmusage)
|
||||
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()}')
|
||||
estr = erase_apikey(e)
|
||||
ed = {"error": f"ERROR:{estr}", "status": "FAILED" ,"llmusageid": luid}
|
||||
|
||||
@ -1,19 +1,13 @@
|
||||
async def gen():
|
||||
env = request._run_ns.copy()
|
||||
f = partial(inference_generator, request, params_kw=params_kw)
|
||||
try:
|
||||
if params_kw.stream:
|
||||
async for l in f():
|
||||
yield f'data: {l}\n'
|
||||
yield 'data: [DONE]\n\n'
|
||||
else:
|
||||
async for l in f():
|
||||
yield l
|
||||
except Exception as e:
|
||||
luid = params_kw.get('_luid')
|
||||
if luid:
|
||||
await env.refund_balance(luid)
|
||||
raise
|
||||
if params_kw.stream:
|
||||
async for l in f():
|
||||
yield f'data: {l}\\n'
|
||||
yield 'data: [DONE]\\n\\n'
|
||||
else:
|
||||
async for l in f():
|
||||
yield l
|
||||
|
||||
debug_params('params_kw', params_kw)
|
||||
catelogid = params_kw.catelogid or 't2t'
|
||||
@ -43,8 +37,7 @@ params_kw.llmid = llmid
|
||||
params_kw.llmcatelogid = catelogid
|
||||
|
||||
debug(f'{params_kw.llmid=}')
|
||||
import uuid
|
||||
luid = str(uuid.uuid4())
|
||||
luid = getID()
|
||||
reserved = await env.reserve_balance(params_kw.llmid, userorgid, luid)
|
||||
if not reserved.get('ok'):
|
||||
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'):
|
||||
debug(f'{userid=} balance not enough (DB fallback)')
|
||||
return openai_429()
|
||||
# debug(f'{tools=}, {request._run_ns.tools=}')
|
||||
return await env.stream_response(request, gen, content_type='application/json')
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user