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