Checkpoint current transcription pipeline state

This commit is contained in:
Adolfo Reyna
2026-03-16 21:11:51 -04:00
parent 50f58dbc22
commit ffeb996d7e
5 changed files with 68 additions and 31 deletions
+1
View File
@@ -19,6 +19,7 @@
"post_correct_llm": false,
"post_correct_model": "qwen:2b",
"llm_paragraph": false,
"only_translate_llm": false,
"temperature_fallback": [0.0, 0.2, 0.4, 0.6, 0.8, 1.0],
"logprob_threshold": -0.8,
"compression_threshold": 2.2,
+30 -12
View File
@@ -57,18 +57,36 @@ def run_distribution(in_queue, args):
log_debug(lang_msg)
if args.ingest:
delay, max_delay, success = 1, 15, False
while not success:
try:
response = requests.post(INGEST_URL, json=payload, timeout=5)
if response.status_code == 200: success = True
else: print(f"[Distribute Error] {response.status_code}. Retrying...")
except Exception as e:
print(f"[Distribute Error] {e}. Retrying...")
if not success:
time.sleep(delay)
delay = min(delay * 2, max_delay)
# Flat JSON Schema: Keep only what's needed for the server
ingest_payload = {
"original": payload.get("original"),
"speaker": payload.get("speaker"),
"ts": payload.get("ts")
}
has_any_translation = False
for lang in ["es", "fr", "ar", "en"]:
if payload.get(lang):
ingest_payload[lang] = payload[lang]
has_any_translation = True
# If only-translate-llm is on, ONLY send when we have a translation (paragraph-level)
should_send = True
if getattr(args, "only_translate_llm", False) and not has_any_translation:
should_send = False
if should_send:
delay, max_delay, success = 1, 15, False
while not success:
try:
response = requests.post(INGEST_URL, json=ingest_payload, timeout=5)
if response.status_code == 200: success = True
else: print(f"[Distribute Error] {response.status_code}. Retrying...")
except Exception as e:
print(f"[Distribute Error] {e}. Retrying...")
if not success:
time.sleep(delay)
delay = min(delay * 2, max_delay)
except Exception as e:
print(f"[Distribute] Error: {e}")
+22 -16
View File
@@ -77,23 +77,29 @@ def run_translation(in_queue, out_queue, args):
"speaker": item.get("speaker"),
"ts": item.get("ts", time.time())
}
if args.en: payload["en"] = corrected_text or raw_text
if args.only_translate_llm:
text_to_translate = paragraph_text
if args.en and paragraph_text:
payload["en"] = paragraph_text
else:
text_to_translate = paragraph_text or corrected_text or raw_text
if args.en:
payload["en"] = corrected_text or raw_text
text_to_translate = paragraph_text or corrected_text or raw_text
if text_to_translate:
if translation_engines:
for lang_key, (model, tokenizer) in translation_engines.items():
chunks = split_text_for_translation(text_to_translate, args.mt_max_chars)
translated_parts = []
for chunk in chunks:
inputs = tokenizer(chunk, return_tensors="pt", padding=True).to(device)
with torch.no_grad():
translated_tokens = model.generate(**inputs, max_new_tokens=args.mt_max_new_tokens, num_beams=args.mt_num_beams)
translated_parts.append(tokenizer.decode(translated_tokens[0], skip_special_tokens=True).strip())
payload[lang_key] = " ".join(translated_parts)
# ALWAYS put in queue, even if no translations were done
out_queue.put(payload)
if text_to_translate and translation_engines:
for lang_key, (model, tokenizer) in translation_engines.items():
chunks = split_text_for_translation(text_to_translate, args.mt_max_chars)
translated_parts = []
for chunk in chunks:
inputs = tokenizer(chunk, return_tensors="pt", padding=True).to(device)
with torch.no_grad():
translated_tokens = model.generate(**inputs, max_new_tokens=args.mt_max_new_tokens, num_beams=args.mt_num_beams)
translated_parts.append(tokenizer.decode(translated_tokens[0], skip_special_tokens=True).strip())
payload[lang_key] = " ".join(translated_parts)
# ALWAYS put in queue, even if no translations were done
out_queue.put(payload)
except Exception as e: print(f"[Translate] Error: {e}")
if __name__ == "__main__":
+8
View File
@@ -57,6 +57,7 @@ def main():
parser.add_argument("-fr", action="store_true", default=defaults.get("fr", False))
parser.add_argument("-ar", action="store_true", default=defaults.get("ar", False))
parser.add_argument("-en", action="store_true", default=defaults.get("en", False))
parser.add_argument("--only-translate-llm", action="store_true", default=defaults.get("only_translate_llm", False), help="Only translate when the LLM produces a refined paragraph.")
parser.add_argument("--mt-max-chars", type=int, default=defaults.get("mt_max_chars", 250))
parser.add_argument("--mt-max-new-tokens", type=int, default=defaults.get("mt_max_new_tokens", 150))
parser.add_argument("--mt-num-beams", type=int, default=defaults.get("mt_num_beams", 4))
@@ -66,6 +67,13 @@ def main():
args = parser.parse_args()
# Auto-enable required flags
if args.post_correct_llm and not args.post_correct:
args.post_correct = True
if args.only_translate_llm and not args.llm_paragraph:
print("[Main] Enabling --llm-paragraph because --only-translate-llm was requested.")
args.llm_paragraph = True
# Handle device listing
if args.list_devices:
list_audio_devices()
+7 -3
View File
@@ -610,6 +610,7 @@ def main():
parser.add_argument("--mt-max-chars", type=int, default=250, help="Max chars per translation chunk before sentence-aware splitting (default: 250)")
parser.add_argument("--mt-max-new-tokens", type=int, default=150, help="Max new tokens per translation chunk (default: 150)")
parser.add_argument("--mt-num-beams", type=int, default=4, help="Beam size for Marian translation generation (default: 4)")
parser.add_argument("--only-translate-llm", action="store_true", help="Only translate into target languages when a refined LLM paragraph is available.")
parser.add_argument("--mt-no-repeat-ngram-size", type=int, default=3, help="No-repeat n-gram size for Marian generation (default: 3)")
parser.add_argument("--mt-length-penalty", type=float, default=1.0, help="Length penalty for Marian generation (default: 1.0)")
parser.add_argument("--mt-repetition-penalty", type=float, default=1.05, help="Repetition penalty for Marian generation (default: 1.05)")
@@ -648,6 +649,10 @@ def main():
args.post_correct = True
print("[SYSTEM]: Enabling --post-correct because --post-correct-llm was requested.")
log_session("[SYSTEM]: Enabling --post-correct because --post-correct-llm was requested.")
if args.only_translate_llm and not args.llm_paragraph:
args.llm_paragraph = True
print("[SYSTEM]: Enabling --llm-paragraph because --only-translate-llm was requested.")
log_session("[SYSTEM]: Enabling --llm-paragraph because --only-translate-llm was requested.")
file_glossary_pairs = load_glossary_file(args.glossary_file)
merged_glossary_pairs = file_glossary_pairs + args.glossary_pair
if file_glossary_pairs:
@@ -1064,9 +1069,8 @@ def main():
rolling_context = (rolling_context + " " + original_text)[-200:].strip()
# 3. Translate from English to other languages
if not args.llm_paragraph and english_for_translation and translation_engines:
english_chunks = split_text_for_translation(english_for_translation, max_chars=args.mt_max_chars)
if not args.llm_paragraph and not args.only_translate_llm and english_for_translation and translation_engines:
english_chunks = split_text_for_translation(english_for_translation, max_chars=args.mt_max_chars)
for lang_key, (model, tokenizer) in translation_engines.items():
# Skip if we already filled this (e.g. detected lang was 'es')
if lang_key in payload: