25 lines
1.5 KiB
Bash
25 lines
1.5 KiB
Bash
docker exec -i im-admin-knowledge-worker-1 python - <<'PY'
|
|
import asyncio,json,time,httpx
|
|
from pathlib import Path
|
|
from model_gateway import Catalog,call_outlet
|
|
c=Catalog(Path('/data/backend.db')); c.refresh(); outlets,*_=c.plan()
|
|
async def main():
|
|
if not outlets:
|
|
print('no configured outlet'); return
|
|
outlet=outlets[0]
|
|
for deadline in (12,60):
|
|
started=time.monotonic()
|
|
try:
|
|
async with httpx.AsyncClient() as client:
|
|
result=await call_outlet(client,outlet,[{'role':'user','content':'请把以下虚构客服问答整理为 JSON,仅含 title、question、answer、conditions、category、kind 六个字符串字段,kind 为 qa。问题:测试门店周日营业吗?答:测试门店周日 9 点到 17 点营业,仅供测试。'}],deadline=deadline,max_tokens=2048)
|
|
error=result.get('error',''); text=result.get('text','').strip(); valid=False
|
|
try:
|
|
raw=text.split('\n',1)[-1].rsplit('```',1)[0] if text.startswith('```') else text
|
|
valid=isinstance(json.loads(raw),dict)
|
|
except ValueError: pass
|
|
print(json.dumps({'model':outlet.id,'deadline':deadline,'seconds':round(time.monotonic()-started,2),'error_type':('timeout' if any(x in error.lower() for x in ('时限','timeout','超时')) else 'upstream_error' if error else ''),'output_chars':len(text),'json_valid':valid},ensure_ascii=False),flush=True)
|
|
except Exception as e:
|
|
print(json.dumps({'deadline':deadline,'seconds':round(time.monotonic()-started,2),'exception_type':type(e).__name__}),flush=True)
|
|
asyncio.run(main())
|
|
PY
|