# -*- coding: utf-8 -*- """ttfb_test.py — misst die Stream-TTFB im SERIELLEN Pfad mit kurzem erstem Chunk an/aus. Ein Modell-Load, dann je Modus 3 Durchläufe -> Median. Belegt, ob keep_first_short Lucys Sprechbeginn beschleunigt, ohne den Rest zu verschlechtern. """ import time, statistics as st import numpy as np, librosa from pocket_tts import TTSModel import pocket_server as ps LONG = ("Guten Morgen, Commander. " "Das nächtliche Backup ist sauber durchgelaufen und es gab keine Fehler. " "Der Dienst läuft stabil und die Engine antwortet zügig. " "Ich habe die Modelle vorgewärmt und die Latenz im Blick behalten. " "Die Protokolle zeigen keine Auffälligkeiten in den letzten Stunden. " "Wenn du möchtest, fasse ich die offenen Punkte für heute zusammen. " "Danach kümmere ich mich um die anstehenden Updates und melde mich wieder.") m = TTSModel.load_model(language=ps.LANG, lsd_decode_steps=ps.LSD, temp=ps.TEMP, noise_clamp=ps.NOISE_CLAMP, quantize=ps.QUANTIZE) ref = ps._prep_ref() try: vs = m.get_state_for_audio_prompt(ps.VOICE_ST) except Exception: vs = m.get_state_for_audio_prompt(ref) ra, _ = librosa.load(ref, sr=m.sample_rate, mono=True) ps.STATE.clear() ps.STATE.update(m=m, vs=vs, sr=m.sample_rate, ref_fp=ps._fingerprint(ra, m.sample_rate)) def measure(keep_first): sents = ps._split_sentences(LONG, keep_first_short=keep_first) t0 = time.time(); first = None; total = 0 for i, a in enumerate(ps._gen_sentences_ordered(sents)): if i == 0: first = time.time() - t0 total += a.size return first, time.time() - t0, total / 24000.0, len(sents), sents[0] if __name__ == "__main__": for keep in (False, True): ttfbs, walls = [], [] n = s0 = None for _ in range(3): f, w, au, n, s0 = measure(keep) ttfbs.append(f); walls.append(w) print(f"keep_first_short={str(keep):5} | TTFB={st.median(ttfbs):4.2f}s wall={st.median(walls):5.2f}s " f"chunks={n} erster='{s0[:38]}'") print("TTFB_DONE")