From 2ade7e1ca6ad6f88f892178e320779662851fc6e Mon Sep 17 00:00:00 2001 From: mARTin-B78 Date: Mon, 22 Jun 2026 11:39:01 +0200 Subject: [PATCH] feat: add seed samples API endpoints --- .gitignore | 3 + config/run_server.py | 29 +++++++++ config/seed_samples_progress.log | 106 +++++++++++++++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 config/seed_samples_progress.log diff --git a/.gitignore b/.gitignore index 8f62991..3aedd7b 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,9 @@ config/voices.json* # Converted private audio (M4A → WAV, generated at runtime) config/converted/ +# Seed finder pre-generated WAV samples (batch output, not source files) +config/seed_samples/ + # Editor backup files *.py~ *.yml~ diff --git a/config/run_server.py b/config/run_server.py index 984fa9e..9ba53f7 100644 --- a/config/run_server.py +++ b/config/run_server.py @@ -175,5 +175,34 @@ async def set_voice_seed(request: Request): return JSONResponse({"ok": True, "voice": voice_name, "seed": seed}) +_SEED_SAMPLES_DIR = '/config/seed_samples' + + +@openai_server.app.get('/seed-samples/{voice_name}') +async def list_seed_samples(voice_name: str): + """Return a sorted list of seed numbers for which a pre-generated WAV exists.""" + import re as _re + voice_dir = os.path.join(_SEED_SAMPLES_DIR, voice_name) + if not os.path.isdir(voice_dir): + return JSONResponse({"seeds": []}) + seeds = [] + for fname in os.listdir(voice_dir): + m = _re.match(r'^seed_(\d+)\.wav$', fname) + if m: + seeds.append(int(m.group(1))) + seeds.sort() + return JSONResponse({"seeds": seeds}) + + +@openai_server.app.get('/seed-sample/{voice_name}/{seed}') +async def get_seed_sample(voice_name: str, seed: int): + """Serve a pre-generated seed WAV file.""" + from fastapi.responses import FileResponse + path = os.path.join(_SEED_SAMPLES_DIR, voice_name, f'seed_{seed:05d}.wav') + if not os.path.isfile(path): + raise HTTPException(status_code=404, detail=f"No sample for seed {seed}") + return FileResponse(path, media_type='audio/wav') + + if __name__ == '__main__': openai_server.main() diff --git a/config/seed_samples_progress.log b/config/seed_samples_progress.log new file mode 100644 index 0000000..e663175 --- /dev/null +++ b/config/seed_samples_progress.log @@ -0,0 +1,106 @@ +voices : 96 +seeds : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] +output : /config/seed_samples/ +total : ~1440 requests + +[1/96] EN_F_NatashaNeural + text: The system administrator successfully configured the customized Docker stacks and benchmar... + seed 1 → OK (7.5s) + seed 2 → OK (6.4s) + seed 3 → OK (6.6s) + seed 4 → OK (6.9s) + seed 5 → OK (6.2s) + seed 6 → OK (6.2s) + seed 7 → OK (5.7s) + seed 8 → OK (6.0s) + seed 9 → OK (9.1s) + seed 10 → OK (6.1s) + seed 11 → OK (5.9s) + seed 12 → OK (6.2s) + seed 13 → OK (6.3s) + seed 14 → OK (5.8s) + seed 15 → OK (6.1s) + → 15/15 OK + +[2/96] EN_M_WilliamNeural + text: The system administrator successfully configured the customized Docker stacks and benchmar... + seed 1 → OK (5.6s) + seed 2 → OK (5.3s) + seed 3 → OK (5.2s) + seed 4 → OK (5.3s) + seed 5 → OK (5.4s) + seed 6 → OK (5.8s) + seed 7 → OK (5.3s) + seed 8 → OK (5.2s) + seed 9 → OK (5.1s) + seed 10 → OK (5.3s) + seed 11 → OK (5.4s) + seed 12 → OK (5.3s) + seed 13 → OK (5.2s) + seed 14 → OK (5.2s) + seed 15 → OK (5.4s) + → 15/15 OK + +[3/96] DE_5_28 + text: Die 3.500 neuen High-End Geräte für das Server-Update benötigen eine außergewöhnlich stark... + seed 1 → OK (12.6s) + seed 2 → OK (13.9s) + seed 3 → OK (12.6s) + seed 4 → OK (13.4s) + seed 5 → OK (12.9s) + seed 6 → OK (13.0s) + seed 7 → OK (12.4s) + seed 8 → OK (13.1s) + seed 9 → OK (13.2s) + seed 10 → OK (13.6s) + seed 11 → OK (12.5s) + seed 12 → OK (13.7s) + seed 13 → OK (13.3s) + seed 14 → OK (13.0s) + seed 15 → OK (14.5s) + → 15/15 OK + +[4/96] DE_Aliya_meine_Frau + text: Die 3.500 neuen High-End Geräte für das Server-Update benötigen eine außergewöhnlich stark... + seed 1 → OK (13.5s) + seed 2 → OK (12.9s) + seed 3 → OK (14.4s) + seed 4 → OK (13.6s) + seed 5 → OK (14.3s) + seed 6 → OK (12.7s) + seed 7 → OK (13.7s) + seed 8 → OK (14.1s) + seed 9 → OK (14.5s) + seed 10 → OK (13.3s) + seed 11 → OK (14.6s) + seed 12 → OK (13.8s) + seed 13 → OK (13.1s) + seed 14 → OK (13.7s) + seed 15 → OK (12.6s) + → 15/15 OK + +[5/96] DE_Anke_Harnack_U_Bahn_Hamburg_Stimme + text: Die 3.500 neuen High-End Geräte für das Server-Update benötigen eine außergewöhnlich stark... + seed 1 → OK (15.6s) + seed 2 → OK (14.4s) + seed 3 → OK (14.6s) + seed 4 → OK (15.8s) + seed 5 → OK (14.0s) + seed 6 → OK (29.5s) + seed 7 → OK (46.9s) + seed 8 → OK (75.1s) + seed 9 → FAILED: HTTPConnectionPool(host='localhost', port=8000): Read timed out. + seed 10 → OK (60.6s) + seed 11 → OK (14.7s) + seed 12 → OK (15.1s) + seed 13 → OK (15.0s) + seed 14 → OK (14.8s) + seed 15 → OK (14.7s) + → 14/15 OK + +[6/96] DE_Catrinja + text: Die 3.500 neuen High-End Geräte für das Server-Update benötigen eine außergewöhnlich stark... + seed 1 → OK (12.4s) + seed 2 → OK (12.7s) + seed 3 → OK (13.3s) + seed 4 → \ No newline at end of file