""" FINAL COMPREHENSIVE EXPERIMENT — Everything Claude knows, all at once. Learnings applied: - Seed 100: best contour for most segments - Seed 42: best for seg_004 (EXCELLENT DTW), good for seg_002 - temp calibration: 1.0-1.15 for std<50, 1.8-1.95 for std>60, 2.0 for std>70 - top_p=0.7, top_k=15: tightest contour control - top_p=0.75, top_k=20: balanced (default) - tokens = duration * 12.5: perfect duration match - IPA lengthening (e): works on specific content words in longer sentences - Cross-reference: longer clips (seg_003/005) give better voice clone - ? mark: creates rising intonation, helped seg_005 - ... pauses: help rhythm on long sentences - Continuation mode: FAILS for JP->EN - Full IPA: HURTS — model handles full phoneme input differently - CAPS: mild effect, not reliable - rep_penalty: no significant effect - Wider top_p/top_k: more std but worse contour (tradeoff) Strategy: For each segment, run a grid of the most promising combinations. """ import requests, json, time, sys BASE = "https://yellow-yaks-matter.loca.lt" def gen(seg_id, attempt, text, temp=1.7, top_p=0.8, top_k=25, rep=1.0, tokens=None, seed=42, ref_seg=None): payload = { "seg_id": seg_id, "attempt": attempt, "text": text, "audio_temperature": temp, "audio_top_p": top_p, "audio_top_k": top_k, "audio_repetition_penalty": rep, "seed": seed, "mode": "generation", } if tokens: payload["tokens"] = tokens if ref_seg: payload["ref_seg_id"] = ref_seg try: r = requests.post(f"{BASE}/generate", json=payload, timeout=180) result = r.json() if "error" in result: return None s = result["score"] f = result["f0_dtw"] print(f" {seg_id}-{attempt:03d} | {s:>5.1f} | DTW={f:.3f}({result['f0_dtw_rating']:>9s}) | " f"F0={result['generated']['f0_mean']:.0f} std={result['generated']['f0_std']:.0f} | " f"t={temp} p={top_p} k={top_k} s={seed}") return result except Exception as e: print(f" {seg_id}-{attempt:03d} | FAIL: {str(e)[:40]}") return None requests.get(f"{BASE}/health", timeout=10) print("="*80) print("FINAL COMPREHENSIVE EXPERIMENT") print("="*80) att_counter = {1: 100, 2: 100, 3: 100, 4: 100, 5: 100} # start from attempt 100 def next_att(sid): att_counter[sid] += 1 return att_counter[sid] # ═══════════════════════════════════════════════════════════════════ # seg_001: F0=264, std=46 (calm). Best=22.9 # Known best: temp=1.1, seed=100, ref=seg_003, IPA /everyone/ # Grid: temp[1.0, 1.05, 1.1, 1.15, 1.2] x seed[42, 77, 100] x ref[1,3] # Plus IPA variants # ═══════════════════════════════════════════════════════════════════ print("\n" + "="*40) print("seg_001 — COMPREHENSIVE GRID (target: F0=264, std=46)") print("="*40) texts_1 = [ ("plain", "Hello everyone. Thank you all, for, joining us today."), ("ipa_everyone", "Hello /\u025bv\u0279iw\u028c\u02d0n/. Thank you all, for, joining us today."), ("ipa_both", "Hello /\u025bv\u0279iw\u028c\u02d0n/. Thank you all, for, joining us /t\u0259de\u026a\u02d0/."), ] for tname, text in texts_1: for temp in [1.0, 1.08, 1.15]: for seed in [42, 100]: for ref in [1, 3]: a = next_att(1) gen(1, a, text, temp=temp, top_p=0.7, top_k=15, tokens=41, seed=seed, ref_seg=ref) time.sleep(1.5) # ═══════════════════════════════════════════════════════════════════ # seg_002: F0=235, std=70 (most expressive). Best=25.9 # Hardest segment. Problem: can't get high std + good contour. # Grid: temp[1.6, 1.7, 1.8, 1.9] x seed[42, 77, 100, 123] x text variants # ═══════════════════════════════════════════════════════════════════ print("\n" + "="*40) print("seg_002 — COMPREHENSIVE GRID (target: F0=235, std=70)") print("="*40) texts_2 = [ ("plain", "I'm SUEYOSHI, from the Innovation Center."), ("dramatic", "I'm... SUEYOSHI! From the Innovation Center."), ("ipa_name", "I'm /su\u02d0e\u026ajo\u028a\u0283i\u02d0/, from the Innovation Center."), ] for tname, text in texts_2: for temp in [1.7, 1.8, 1.9]: for seed in [42, 77, 100]: a = next_att(2) gen(2, a, text, temp=temp, top_p=0.75, top_k=20, tokens=25, seed=seed) time.sleep(1.5) # Also try with different refs for seed in [42, 100]: for ref in [4, 5]: a = next_att(2) gen(2, a, "I'm SUEYOSHI, from the Innovation Center.", temp=1.8, top_p=0.75, top_k=20, tokens=25, seed=seed, ref_seg=ref) time.sleep(1.5) # ═══════════════════════════════════════════════════════════════════ # seg_003: F0=240, std=67. Best=20.8 # Already good with multi-IPA. Fine-tune around sweet spot. # Grid: temp[1.85, 1.88, 1.9, 1.92, 1.95] x seed[42, 100] x IPA variants # ═══════════════════════════════════════════════════════════════════ print("\n" + "="*40) print("seg_003 — FINE-TUNE GRID (target: F0=240, std=67)") print("="*40) texts_3 = [ ("ipa_2", "For this /s\u025b\u02d0\u0283\u0259n/... please feel free to relax, and listen to the talk, while enjoying your /l\u028c\u02d0nt\u0283/."), ("ipa_4", "For this /s\u025b\u02d0\u0283\u0259n/... please feel /f\u0279i\u02d0/ to /\u0279\u026a\u02d0l\u00e6ks/, and listen to the talk, while enjoying your /l\u028c\u02d0nt\u0283/."), ] for tname, text in texts_3: for temp in [1.87, 1.9, 1.93]: for seed in [42, 100]: a = next_att(3) gen(3, a, text, temp=temp, top_p=0.75, top_k=20, tokens=62, seed=seed) time.sleep(1.5) # ═══════════════════════════════════════════════════════════════════ # seg_004: F0=283, std=75. Best=19.8 (EXCELLENT!) # Already excellent. Grid around winner: temp[1.85-1.95] x seed[42] x top_p/k # ═══════════════════════════════════════════════════════════════════ print("\n" + "="*40) print("seg_004 — SQUEEZE MORE (target: F0=283, std=75)") print("="*40) for temp in [1.85, 1.88, 1.9, 1.92, 1.95]: for seed in [42, 100]: a = next_att(4) gen(4, a, "Before we begin,", temp=temp, top_p=0.75, top_k=20, tokens=21, seed=seed) time.sleep(1.5) # Tighter sampling with best temp for top_p, top_k in [(0.7, 15), (0.72, 18)]: a = next_att(4) gen(4, a, "Before we begin,", temp=1.9, top_p=top_p, top_k=top_k, tokens=21, seed=42) time.sleep(1.5) # ═══════════════════════════════════════════════════════════════════ # seg_005: F0=243, std=60. Best=19.9 (EXCELLENT!) # Grid: temp[1.82-1.88] x seed[42, 100] x text[? and plain] # ═══════════════════════════════════════════════════════════════════ print("\n" + "="*40) print("seg_005 — SQUEEZE MORE (target: F0=243, std=60)") print("="*40) for temp in [1.82, 1.84, 1.85, 1.86, 1.88]: for seed in [42, 100]: a = next_att(5) gen(5, a, "I'd like to ask, how familiar everyone here is with the Innovation Center?", temp=temp, top_p=0.75, top_k=20, tokens=63, seed=seed) time.sleep(1.5) # IPA + ? combo for seed in [42, 100]: a = next_att(5) gen(5, a, "I'd like to ask, how familiar everyone here is with the /\u026an\u0259ve\u026a\u02d0\u0283\u0259n s\u025bnt\u025a/?", temp=1.85, top_p=0.75, top_k=20, tokens=63, seed=seed) time.sleep(1.5) # ═══════════════════════════════════════════════════════════════════ # FINAL RESULTS # ═══════════════════════════════════════════════════════════════════ print("\n" + "="*80) print("FINAL RESULTS — ALL EXPERIMENTS") print("="*80) try: results = requests.get(f"{BASE}/results", timeout=30).json() for item in results: print(f" seg_{item['seg_id']:03d}: {item['total_attempts']:>3d} attempts | " f"best={item['best_score']:.1f} (#{item['best_attempt']}, " f"F0 DTW={item['best_f0_dtw']:.3f})") print(f"\n Total attempts: {sum(r['total_attempts'] for r in results)}") except Exception as e: print(f" {e}")