"""Synthetic-only ASR -> full-utterance enrollment -> reply integration check. Pass a locally generated public synthetic voice saying Hey Robo in a sentence. It uses the actual running EARS/TTS/Luna services, not a physical microphone. No transcript, audio or embeddings are written by this test. """ import argparse import asyncio import json from pathlib import Path import struct import subprocess import time import aiohttp import numpy as np async def run(args): result=subprocess.run(['ffmpeg','-nostdin','-v','error','-i',args.audio,'-ar','16000','-ac','1','-f','f32le','pipe:1'],capture_output=True,check=True) audio=np.frombuffer(result.stdout,'0 if args.report:Path(args.report).write_text(json.dumps(report,indent=2)) finally: await ws.close();task.cancel();await asyncio.gather(task,return_exceptions=True) if __name__=='__main__': parser=argparse.ArgumentParser();parser.add_argument('--audio',required=True) parser.add_argument('--url',default='http://127.0.0.1:8793');parser.add_argument('--report') asyncio.run(run(parser.parse_args()))