Spaces:
Running on Zero
Running on Zero
Fix timestamps alignment call
Browse files- src/mfa.py +18 -5
src/mfa.py
CHANGED
|
@@ -12,7 +12,7 @@ _ISTIATHA_TEXT = "أَعُوذُ بِٱللَّهِ مِنَ الشَّيْطَ
|
|
| 12 |
|
| 13 |
def _mfa_upload_and_submit(refs, audio_paths,
|
| 14 |
method=MFA_METHOD, beam=MFA_BEAM, retry_beam=MFA_RETRY_BEAM,
|
| 15 |
-
shared_cmvn=MFA_SHARED_CMVN):
|
| 16 |
"""Upload audio files and submit alignment batch to the MFA Space.
|
| 17 |
|
| 18 |
Returns (event_id, headers, base_url) so the caller can yield a progress
|
|
@@ -24,6 +24,7 @@ def _mfa_upload_and_submit(refs, audio_paths,
|
|
| 24 |
method: Alignment method ("kalpy", "align_one", "python_api", "cli").
|
| 25 |
beam: Viterbi beam width (default 10).
|
| 26 |
retry_beam: Retry beam width (default 40).
|
|
|
|
| 27 |
"""
|
| 28 |
import requests
|
| 29 |
|
|
@@ -59,12 +60,12 @@ def _mfa_upload_and_submit(refs, audio_paths,
|
|
| 59 |
for p in uploaded_paths
|
| 60 |
]
|
| 61 |
|
| 62 |
-
# Submit batch alignment (
|
| 63 |
submit_resp = requests.post(
|
| 64 |
f"{base}/gradio_api/call/align_batch",
|
| 65 |
headers={**headers, "Content-Type": "application/json"},
|
| 66 |
json={"data": [refs, file_data_list, method, str(beam), str(retry_beam),
|
| 67 |
-
str(shared_cmvn).lower()]},
|
| 68 |
timeout=MFA_TIMEOUT,
|
| 69 |
)
|
| 70 |
submit_resp.raise_for_status()
|
|
@@ -91,10 +92,19 @@ def _mfa_wait_result(event_id, headers, base):
|
|
| 91 |
if line and line.startswith("event: "):
|
| 92 |
current_event = line[7:]
|
| 93 |
elif line and line.startswith("data: "):
|
|
|
|
| 94 |
if current_event == "complete":
|
| 95 |
-
result_data =
|
| 96 |
elif current_event == "error":
|
| 97 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
|
| 99 |
if result_data is None:
|
| 100 |
raise RuntimeError("No data received from MFA align_batch SSE stream")
|
|
@@ -104,6 +114,9 @@ def _mfa_wait_result(event_id, headers, base):
|
|
| 104 |
if isinstance(parsed, list) and len(parsed) == 1:
|
| 105 |
parsed = parsed[0]
|
| 106 |
|
|
|
|
|
|
|
|
|
|
| 107 |
if not isinstance(parsed, dict) or parsed.get("status") != "ok":
|
| 108 |
raise RuntimeError(f"MFA align_batch failed: {parsed}")
|
| 109 |
|
|
|
|
| 12 |
|
| 13 |
def _mfa_upload_and_submit(refs, audio_paths,
|
| 14 |
method=MFA_METHOD, beam=MFA_BEAM, retry_beam=MFA_RETRY_BEAM,
|
| 15 |
+
shared_cmvn=MFA_SHARED_CMVN, padding="forward"):
|
| 16 |
"""Upload audio files and submit alignment batch to the MFA Space.
|
| 17 |
|
| 18 |
Returns (event_id, headers, base_url) so the caller can yield a progress
|
|
|
|
| 24 |
method: Alignment method ("kalpy", "align_one", "python_api", "cli").
|
| 25 |
beam: Viterbi beam width (default 10).
|
| 26 |
retry_beam: Retry beam width (default 40).
|
| 27 |
+
padding: Gap-padding strategy ("forward", "symmetric", "none").
|
| 28 |
"""
|
| 29 |
import requests
|
| 30 |
|
|
|
|
| 60 |
for p in uploaded_paths
|
| 61 |
]
|
| 62 |
|
| 63 |
+
# Submit batch alignment (7 params: refs, files, method, beam, retry_beam, shared_cmvn, padding)
|
| 64 |
submit_resp = requests.post(
|
| 65 |
f"{base}/gradio_api/call/align_batch",
|
| 66 |
headers={**headers, "Content-Type": "application/json"},
|
| 67 |
json={"data": [refs, file_data_list, method, str(beam), str(retry_beam),
|
| 68 |
+
str(shared_cmvn).lower(), padding]},
|
| 69 |
timeout=MFA_TIMEOUT,
|
| 70 |
)
|
| 71 |
submit_resp.raise_for_status()
|
|
|
|
| 92 |
if line and line.startswith("event: "):
|
| 93 |
current_event = line[7:]
|
| 94 |
elif line and line.startswith("data: "):
|
| 95 |
+
data_str = line[6:]
|
| 96 |
if current_event == "complete":
|
| 97 |
+
result_data = data_str
|
| 98 |
elif current_event == "error":
|
| 99 |
+
# Gradio 6.x may send null as error data; provide actionable message
|
| 100 |
+
if data_str.strip() in ("null", ""):
|
| 101 |
+
raise RuntimeError(
|
| 102 |
+
"MFA align_batch failed: Space returned null error. "
|
| 103 |
+
"This usually means a parameter count mismatch or "
|
| 104 |
+
"Gradio input validation failure. Check that the "
|
| 105 |
+
"client sends all required parameters."
|
| 106 |
+
)
|
| 107 |
+
raise RuntimeError(f"MFA align_batch SSE error: {data_str}")
|
| 108 |
|
| 109 |
if result_data is None:
|
| 110 |
raise RuntimeError("No data received from MFA align_batch SSE stream")
|
|
|
|
| 114 |
if isinstance(parsed, list) and len(parsed) == 1:
|
| 115 |
parsed = parsed[0]
|
| 116 |
|
| 117 |
+
if parsed is None:
|
| 118 |
+
raise RuntimeError("MFA align_batch returned null result")
|
| 119 |
+
|
| 120 |
if not isinstance(parsed, dict) or parsed.get("status") != "ok":
|
| 121 |
raise RuntimeError(f"MFA align_batch failed: {parsed}")
|
| 122 |
|