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_llm": false,
"post_correct_model": "qwen:2b", "post_correct_model": "qwen:2b",
"llm_paragraph": false, "llm_paragraph": false,
"only_translate_llm": false,
"temperature_fallback": [0.0, 0.2, 0.4, 0.6, 0.8, 1.0], "temperature_fallback": [0.0, 0.2, 0.4, 0.6, 0.8, 1.0],
"logprob_threshold": -0.8, "logprob_threshold": -0.8,
"compression_threshold": 2.2, "compression_threshold": 2.2,
+19 -1
View File
@@ -57,10 +57,28 @@ def run_distribution(in_queue, args):
log_debug(lang_msg) log_debug(lang_msg)
if args.ingest: if args.ingest:
# 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 delay, max_delay, success = 1, 15, False
while not success: while not success:
try: try:
response = requests.post(INGEST_URL, json=payload, timeout=5) response = requests.post(INGEST_URL, json=ingest_payload, timeout=5)
if response.status_code == 200: success = True if response.status_code == 200: success = True
else: print(f"[Distribute Error] {response.status_code}. Retrying...") else: print(f"[Distribute Error] {response.status_code}. Retrying...")
except Exception as e: except Exception as e:
+9 -3
View File
@@ -77,11 +77,17 @@ def run_translation(in_queue, out_queue, args):
"speaker": item.get("speaker"), "speaker": item.get("speaker"),
"ts": item.get("ts", time.time()) "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 text_to_translate = paragraph_text or corrected_text or raw_text
if text_to_translate: if args.en:
if translation_engines: payload["en"] = corrected_text or raw_text
if text_to_translate and translation_engines:
for lang_key, (model, tokenizer) in translation_engines.items(): for lang_key, (model, tokenizer) in translation_engines.items():
chunks = split_text_for_translation(text_to_translate, args.mt_max_chars) chunks = split_text_for_translation(text_to_translate, args.mt_max_chars)
translated_parts = [] translated_parts = []
+8
View File
@@ -57,6 +57,7 @@ def main():
parser.add_argument("-fr", action="store_true", default=defaults.get("fr", False)) 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("-ar", action="store_true", default=defaults.get("ar", False))
parser.add_argument("-en", action="store_true", default=defaults.get("en", 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-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-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)) 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() 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 # Handle device listing
if args.list_devices: if args.list_devices:
list_audio_devices() list_audio_devices()
+6 -2
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-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-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("--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-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-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)") 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 args.post_correct = True
print("[SYSTEM]: Enabling --post-correct because --post-correct-llm was requested.") print("[SYSTEM]: Enabling --post-correct because --post-correct-llm was requested.")
log_session("[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) file_glossary_pairs = load_glossary_file(args.glossary_file)
merged_glossary_pairs = file_glossary_pairs + args.glossary_pair merged_glossary_pairs = file_glossary_pairs + args.glossary_pair
if file_glossary_pairs: if file_glossary_pairs:
@@ -1064,9 +1069,8 @@ def main():
rolling_context = (rolling_context + " " + original_text)[-200:].strip() rolling_context = (rolling_context + " " + original_text)[-200:].strip()
# 3. Translate from English to other languages # 3. Translate from English to other languages
if not args.llm_paragraph and english_for_translation and translation_engines: 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) english_chunks = split_text_for_translation(english_for_translation, max_chars=args.mt_max_chars)
for lang_key, (model, tokenizer) in translation_engines.items(): for lang_key, (model, tokenizer) in translation_engines.items():
# Skip if we already filled this (e.g. detected lang was 'es') # Skip if we already filled this (e.g. detected lang was 'es')
if lang_key in payload: if lang_key in payload: