mirror of
https://github.com/steveseguin/caption-local.git
synced 2026-10-09 17:49:30 +00:00
71 lines
3.6 KiB
Python
71 lines
3.6 KiB
Python
"""Lose a real inference response, restart our server, then verify retained retry."""
|
|
import argparse
|
|
import hashlib
|
|
import json
|
|
from pathlib import Path
|
|
from playwright.sync_api import sync_playwright
|
|
from browser_support import browser_options, authenticate
|
|
from service_test_support import TestService
|
|
|
|
parser=argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument('--port',type=int,default=8774)
|
|
parser.add_argument('--page',choices=['/', '/capture-local.html'],default='/')
|
|
parser.add_argument('--model',default='small')
|
|
parser.add_argument('--device',choices=['cpu','cuda'],default='cpu')
|
|
parser.add_argument('--compute-type',default='int8')
|
|
parser.add_argument('--workers',type=int,default=1)
|
|
parser.add_argument('--threads',type=int,default=4)
|
|
parser.add_argument('--beam-size',type=int,default=5)
|
|
parser.add_argument('--output',type=Path,required=True)
|
|
args=parser.parse_args()
|
|
args.output.parent.mkdir(parents=True,exist_ok=True)
|
|
root=Path(__file__).resolve().parents[1]
|
|
service=TestService(args.port,args.output.with_suffix('.server.log'),[
|
|
'--model',args.model,'--device',args.device,'--compute-type',args.compute_type,
|
|
'--workers',str(args.workers),'--threads',str(args.threads),'--beam-size',str(args.beam_size)])
|
|
report={'requests':[],'lost_response':None,'passed':False,
|
|
'configuration':{key:value for key,value in vars(args).items() if key!='output'}}
|
|
try:
|
|
report['initial_health']=service.start()
|
|
assert report['initial_health']['device']==args.device
|
|
with sync_playwright() as p:
|
|
browser=p.chromium.launch(**browser_options(),headless=True,args=[
|
|
'--use-fake-ui-for-media-stream','--use-fake-device-for-media-stream',
|
|
f'--use-file-for-fake-audio-capture={root/"samples/jfk.wav"}'])
|
|
context=browser.new_context(permissions=['microphone'])
|
|
context.route('**/*',lambda route: route.continue_() if route.request.url.startswith(
|
|
('http://127.0.0.1:','http://localhost:')) else route.abort())
|
|
context.route_web_socket('**/*',lambda socket: socket.close())
|
|
page=context.new_page()
|
|
def infer(route):
|
|
request=route.request
|
|
report['requests'].append({'id':request.headers['x-request-id'],
|
|
'sha256':hashlib.sha256(request.post_data_buffer).hexdigest()})
|
|
if report['lost_response'] is None:
|
|
actual=route.fetch()
|
|
assert actual.status==200
|
|
report['lost_response']=actual.json()
|
|
route.abort('failed')
|
|
service.stop()
|
|
report['restarted_health']=service.start()
|
|
assert report['restarted_health']['device']==args.device
|
|
else:
|
|
route.continue_()
|
|
page.route('**/transcribe?*',infer)
|
|
page.goto(f'http://127.0.0.1:{args.port}{args.page}')
|
|
authenticate(page)
|
|
page.locator('#start').click()
|
|
page.wait_for_function('() => transcript.length>0',timeout=60000)
|
|
assert report['requests'][0]==report['requests'][1]
|
|
assert page.evaluate('() => transcript[0]')==report['lost_response']['text']
|
|
page.locator('#stop').click()
|
|
page.wait_for_function('() => !processing && !stopping',timeout=60000)
|
|
assert page.evaluate('() => !failed && !pending && buffer.length<=8000')
|
|
report.update(passed=True,restarted=True,same_audio_and_request_id=True,
|
|
duplicate_lost_response_not_displayed=True)
|
|
browser.close()
|
|
finally:
|
|
service.stop()
|
|
args.output.write_text(json.dumps(report,indent=2),encoding='utf-8')
|
|
print('Real response loss, server restart, retained retry and drain passed')
|