Command: python -c "import base64;exec(base64.b64decode('CmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAppbXBvcnQganNvbixyZSxvcwpyb290cz1bUGF0aChyIkM6XFxQcm9ncmFtRGF0YVxcQXVkaW9Qcm9jZXNzXFxjdXJyZW50IiksUGF0aChyIkM6XFxQcm9ncmFtRGF0YVxcV2hpc3BlckRpc3RyaWJ1dGVkSHViIildCm91dD17InJvb3RzIjp7fSwiaGl0cyI6W10sIndoaXNwZXJfZmlsZXMiOltdfQpmb3Igcm9vdCBpbiByb290czoKICAgIGluZm89eyJleGlzdHMiOnJvb3QuZXhpc3RzKCksImZpbGVzIjpbXX0KICAgIGlmIHJvb3QuZXhpc3RzKCk6CiAgICAgICAgZm9yIHAgaW4gcm9vdC5yZ2xvYigiKiIpOgogICAgICAgICAgICBpZiBwLmlzX2ZpbGUoKToKICAgICAgICAgICAgICAgIHJlbD1zdHIocC5yZWxhdGl2ZV90byhyb290KSkKICAgICAgICAgICAgICAgIGlmIGxlbihpbmZvWyJmaWxlcyJdKTwyNTA6IGluZm9bImZpbGVzIl0uYXBwZW5kKHJlbCkKICAgICAgICAgICAgICAgIGlmICJ3aGlzcGVyIiBpbiBwLm5hbWUubG93ZXIoKSBvciBwLnN1ZmZpeC5sb3dlcigpIGluICgiLmV4ZSIsIi5iYXQiLCIuY21kIik6CiAgICAgICAgICAgICAgICAgICAgaWYgbGVuKG91dFsid2hpc3Blcl9maWxlcyJdKTwxMjA6IG91dFsid2hpc3Blcl9maWxlcyJdLmFwcGVuZChzdHIocCkpCiAgICAgICAgICAgICAgICBpZiBwLnN1ZmZpeC5sb3dlcigpIGluICgiLnB5IiwiLnBzMSIsIi5iYXQiLCIuY21kIiwiLm1kIik6CiAgICAgICAgICAgICAgICAgICAgdHJ5OnQ9cC5yZWFkX3RleHQoZW5jb2Rpbmc9InV0Zi04IixlcnJvcnM9InJlcGxhY2UiKQogICAgICAgICAgICAgICAgICAgIGV4Y2VwdDpjb250aW51ZQogICAgICAgICAgICAgICAgICAgIGZvciBpLGxpbmUgaW4gZW51bWVyYXRlKHQuc3BsaXRsaW5lcygpLDEpOgogICAgICAgICAgICAgICAgICAgICAgICBsbz1saW5lLmxvd2VyKCkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgYW55KGsgaW4gbG8gZm9yIGsgaW4gKCJ3aGlzcGVyIiwidHJhbnNjcmliIiwicXVldWUiLCJzdWJtaXQiLCJmaWxlX3BhdGgiLCJzb3VyY2VfcGF0aCIsImxvY2FsX2ZpbGUiLCJhZGRfYXJndW1lbnQiLCJAYXBwLiIsIkByb3V0ZXIuIiwicm91dGUoIikpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYW55KGsgaW4gbG8gZm9yIGsgaW4gKCJzZWNyZXQiLCJwYXNzd29yZCIsInRva2VuIiwiYXBpX2tleSIsImF1dGhvcml6YXRpb24iKSk6IGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzPWxpbmUuc3RyaXAoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHMpPjI2MDpzPXNbOjI2MF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dFsiaGl0cyJdLmFwcGVuZCh7ImZpbGUiOnN0cihwKSwibGluZSI6aSwidGV4dCI6c30pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4ob3V0WyJoaXRzIl0pPj0yMjA6IGJyZWFrCiAgICAgICAgICAgICAgICAgICAgaWYgbGVuKG91dFsiaGl0cyJdKT49MjIwOiBicmVhawogICAgICAgICAgICBpZiBsZW4ob3V0WyJoaXRzIl0pPj0yMjA6IGJyZWFrCiAgICBvdXRbInJvb3RzIl1bc3RyKHJvb3QpXT1pbmZvCnByaW50KGpzb24uZHVtcHMob3V0LHNlcGFyYXRvcnM9KCIsIiwiOiIpKSkK'))"
Directory: projects
Status: SUCCESS
Exit code: 0
Cancel Job Rerun Command Refresh
{"roots":{"C:\\ProgramData\\AudioProcess\\current":{"exists":true,"files":["chirp_dashboard_server.py","chirp_direct_server.py"]},"C:\\ProgramData\\WhisperDistributedHub":{"exists":false,"files":[]}},"hits":[{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":34,"text":"from unified_queue import UnifiedProcessorQueue"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":40,"text":"EXTERNAL_HUB_DB = Path(r\"C:\\ProgramData\\WhisperDistributedHub\\data\\jobs.sqlite3\")"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":41,"text":"EXTERNAL_MONITOR_STATE = Path(r\"C:\\ProgramData\\WhisperDistributedHub\\data\\processor-monitor-state.json\")"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":104,"text":"self.recovery_report_path = self.data_dir / \"queue-recovery-last.json\""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":115,"text":"self.processor_heartbeat_path = self.data_dir / \"whisper-processor-heartbeat.json\""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":121,"text":"self.processor_queue: UnifiedProcessorQueue | None = ("},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":122,"text":"UnifiedProcessorQueue(self.app, config_path)"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":123,"text":"if bool(initial_config.get(\"unified_queue_enabled\", False)) else None"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":132,"text":"if self.processor_queue is not None:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":134,"text":"target=self.processor_queue.run_maintenance,"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":136,"text":"name=\"unified-queue-maintenance\","},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":152,"text":"root = Path(str(config.get(\"model_repository_root\") or r\"C:\\ProgramData\\WhisperDistributedHub\\models\")).resolve()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":204,"text":"if self.processor_queue is not None:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":205,"text":"self.processor_queue.app = self.app"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":245,"text":"def _external_whisper_focus_parent_job_id(self) -> str:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":259,"text":"if status not in {\"processing\", \"transcribing\", \"in_use\"}:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":277,"text":"WHERE r.job_id=? AND r.mode='transcribe'"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":301,"text":"WHERE r.mode='transcribe'"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":315,"text":"logging.exception(\"External Whisper focus parent lookup failed\")"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":346,"text":"focus_parent_job_id = self._external_whisper_focus_parent_job_id()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":370,"text":"elif status in {\"extracting\", \"extracting_audio\", \"audio_ready\", \"transcribing\", \"saving\"}:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":405,"text":"def external_whisper_processing_parents(self) -> set[str]:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":416,"text":"WHERE r.mode='transcribe'"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":422,"text":"logging.exception(\"External Whisper processing snapshot failed\")"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":425,"text":"def external_whisper_job_counts(self) -> dict[str, dict[str, int]]:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":444,"text":"WHERE r.mode='transcribe'"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":458,"text":"logging.exception(\"External Whisper job snapshot failed\")"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":461,"text":"def external_whisper_chunk_rows(self) -> list[dict[str, Any]]:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":495,"text":"WHERE r.mode='transcribe'"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":527,"text":"logging.exception(\"External Whisper chunk snapshot failed\")"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":538,"text":"# `chirp` is intentionally paused in this install because Whisper"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":553,"text":"\"whisper_bridge_ok\": True,"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":554,"text":"\"whisper_cli_ok\": True,"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":555,"text":"\"whisper_model_ok\": True,"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":556,"text":"\"whisper_ready\": True,"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":557,"text":"\"whisper_cli_path\": \"External Whisper bridge only\","},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":558,"text":"\"whisper_model_path\": \"External Whisper bridge only\","},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":566,"text":"if self.processor_queue is not None:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":567,"text":"result = self.processor_queue.dashboard_snapshot()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":584,"text":"\"whisper_bridge_ok\": True,"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":585,"text":"\"whisper_ready\": True,"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":601,"text":"heartbeat[\"alive\"] = bool(self.worker_alive and not self.processor_queue.last_error)"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":606,"text":"\"CASE status WHEN 'translating' THEN 0 WHEN 'transcribing' THEN 1 WHEN 'audio_ready' THEN 2 \""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":665,"text":"external_whisper_by_job = self.external_whisper_job_counts()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":666,"text":"external_whisper_rows = self.external_whisper_chunk_rows()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":667,"text":"external_processing_parents = self.external_whisper_processing_parents()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":668,"text":"focus_parent_job_id = self._external_whisper_focus_parent_job_id()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":671,"text":"# audio_ready -> Audio Extraction completed / Whisper pending"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":672,"text":"# transcribing -> Whisper processing"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":673,"text":"# original_ready -> Whisper completed / Translation pending"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":689,"text":"elif status in {\"chirp_uploading\", \"chirp_submitted\", \"chirp_polling\"}:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":698,"text":"# so they are intentionally not counted as active queue cards."},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":735,"text":"\"whisper\": blank_stage_map(),"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":754,"text":"if section == \"whisper\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":757,"text":"if status == \"transcribing\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":785,"text":"if status == \"transcribing\" and focus_parent_job_id and jid and jid != focus_parent_job_id:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":787,"text":"if status in {\"extracting\", \"extracting_audio\", \"audio_ready\", \"transcribing\", \"original_ready\", \"translating\", \"saving\", \"pending\", \"retry\"}:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":825,"text":"active_chunks = int(sum(c.get(x, 0) for x in (\"chirp_uploading\", \"chirp_submitted\", \"chirp_polling\")))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":826,"text":"queued_chunks = int(sum(c.get(x, 0) for x in (\"audio_ready\", \"chirp_retry\")))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":831,"text":"if t1 == \"processing\" and status == \"transcribing\" and focus_parent_job_id and jid != focus_parent_job_id:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":854,"text":"# audio_ready/transcribing by a previous patch."},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":864,"text":"whisper_bucket = summary_bucket(\"whisper\", status, jid)"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":871,"text":"if whisper_bucket:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":872,"text":"whisper_chunks = total_chunks if whisper_bucket in {\"pending\", \"completed\"} else active_chunks or total_chunks"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":873,"text":"add_stage(\"whisper\", whisper_bucket, whisper_chunks, 1, row_age, row_label)"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":901,"text":"active_chunks = sum(c.get(x, 0) for x in (\"chirp_uploading\", \"chirp_submitted\", \"chirp_polling\"))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":902,"text":"queued_chunks = sum(c.get(x, 0) for x in (\"audio_ready\", \"chirp_retry\"))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":906,"text":"row[\"chunk_queued\"] = queued_chunks"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":942,"text":"\"\"\"Make table/current status reflect live stage queues instead of stale job.status."},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":945,"text":"Chirp queue state. v2.24.6 derives display labels and progress from both so"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":955,"text":"active = int(counts.get(\"chirp_uploading\", 0) + counts.get(\"chirp_submitted\", 0) + counts.get(\"chirp_polling\", 0))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":977,"text":"# Chirp stage display from real chunk queue."},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1029,"text":"\"chirp_submitted\": 35.0,"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1057,"text":"active_statuses = {\"chirp_uploading\", \"chirp_submitted\", \"chirp_polling\", \"external_processing\", \"chirp_retry\", \"chirp_parked_stale\", \"chirp_failed\", \"need_resplit\"}"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1090,"text":"whisper_chunk_bucket = {"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1093,"text":"\"chirp_submitted\": \"processing\","},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1103,"text":"external_whisper_chunk_bucket = {"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1123,"text":"if total_chunks or has_original or has_english or status in {\"audio_ready\", \"transcribing\", \"original_ready\", \"translating\", \"done\", \"done_no_speech\", \"translate_retry\"}:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1127,"text":"def derive_whisper_stage(row: dict[str, Any], chunk_counts: dict[str, int], total_chunks: int, external: bool = False) -> str:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1132,"text":"# Final subtitle artifacts outrank any live queue snapshot. Once a"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1133,"text":"# job has its original or English output, Whisper is complete even"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1172,"text":"active = int(chunk_counts.get(\"chirp_uploading\", 0) + chunk_counts.get(\"chirp_submitted\", 0) + chunk_counts.get(\"chirp_polling\", 0) + chunk_counts.get(\"external_processing\", 0))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1199,"text":"# Not in Argos queue yet; keep these out of the Translation card totals."},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1209,"text":"def reduce_all_stage(audio_stage: str, whisper_stage: str, translation_stage: str) -> str:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1210,"text":"if \"failed\" in (audio_stage, whisper_stage, translation_stage):"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1212,"text":"if \"retry\" in (audio_stage, whisper_stage, translation_stage):"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1214,"text":"if audio_stage == whisper_stage == translation_stage == \"completed\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1216,"text":"if \"processing\" in (audio_stage, whisper_stage, translation_stage):"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1247,"text":"external_counts = external_whisper_by_job.get(jid, {})"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1252,"text":"whisper_stage = derive_whisper_stage(row, source_counts, total_chunks, external=use_external)"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1258,"text":"all_stage = reduce_all_stage(audio_stage, whisper_stage, translation_stage)"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1261,"text":"row[\"whisper_status\"] = whisper_stage"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1262,"text":"row[\"chirp_status\"] = whisper_stage"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1263,"text":"row[\"transcription_status\"] = whisper_stage"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1274,"text":"queued_chunks = int(source_counts.get(\"pending\", 0))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1277,"text":"active_chunks = int(local_counts.get(\"chirp_uploading\", 0) + local_counts.get(\"chirp_submitted\", 0) + local_counts.get(\"chirp_polling\", 0))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1278,"text":"queued_chunks = int(local_counts.get(\"audio_ready\", 0) + local_counts.get(\"chirp_retry\", 0))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1283,"text":"row[\"chunk_queued\"] = queued_chunks"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1286,"text":"if whisper_stage == \"processing\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1287,"text":"row[\"detail\"] = \"External Whisper bridge active\""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1288,"text":"elif whisper_stage == \"pending\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1289,"text":"row[\"detail\"] = \"External Whisper queue waiting\""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1290,"text":"elif whisper_stage == \"failed\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1291,"text":"row[\"detail\"] = \"External Whisper bridge failed\""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1293,"text":"if whisper_stage == \"processing\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1295,"text":"elif whisper_stage == \"pending\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1297,"text":"elif whisper_stage == \"completed\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1299,"text":"elif whisper_stage == \"failed\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1309,"text":"external_counts = external_whisper_by_job.get(jid, {})"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1314,"text":"whisper_stage = derive_whisper_stage(current, source_counts, total_chunks, external=use_external)"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1321,"text":"current[\"whisper_status\"] = whisper_stage"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1322,"text":"current[\"chirp_status\"] = whisper_stage"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1323,"text":"current[\"transcription_status\"] = whisper_stage"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1325,"text":"current[\"all_status\"] = reduce_all_stage(audio_stage, whisper_stage, translation_stage)"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1332,"text":"queued_chunks = int(source_counts.get(\"pending\", 0))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1337,"text":"active_chunks = int(local_counts.get(\"chirp_uploading\", 0) + local_counts.get(\"chirp_submitted\", 0) + local_counts.get(\"chirp_polling\", 0))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1338,"text":"queued_chunks = int(local_counts.get(\"audio_ready\", 0) + local_counts.get(\"chirp_retry\", 0))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1342,"text":"current[\"chunk_queued\"] = queued_chunks"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1344,"text":"if whisper_stage == \"processing\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1345,"text":"current[\"detail\"] = \"External Whisper bridge active\""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1346,"text":"elif whisper_stage == \"pending\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1347,"text":"current[\"detail\"] = \"External Whisper queue waiting\""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1348,"text":"elif whisper_stage == \"failed\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1349,"text":"current[\"detail\"] = \"External Whisper bridge failed\""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1351,"text":"if whisper_stage == \"processing\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1353,"text":"elif whisper_stage == \"pending\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1355,"text":"elif whisper_stage == \"completed\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1357,"text":"elif whisper_stage == \"failed\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1365,"text":"for ext in external_whisper_rows:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1385,"text":"if status in {\"chirp_uploading\", \"chirp_submitted\", \"chirp_polling\"}:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1418,"text":"row[\"whisper_status\"] = display_status"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1474,"text":"\"whisper_status\": display_status,"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1503,"text":"chunk_status_priority.get(str(x.get(\"whisper_status\") or \"pending\"), 9),"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1523,"text":"\"stage\": str(row.get(\"translation_status\") or row.get(\"whisper_status\") or row.get(\"audio_status\") or \"pending\"),"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1538,"text":"if str(row.get(\"whisper_status\") or \"\") not in {\"failed\", \"retry\"} and int(row.get(\"failure_count\") or 0) <= 0 and not str(row.get(\"error\") or \"\").strip():"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1550,"text":"\"stage\": \"whisper\","},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1551,"text":"\"status\": str(row.get(\"whisper_status\") or \"\"),"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1589,"text":"processor_heartbeat[\"external_whisper_processing\"] = len(external_processing_parents)"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1590,"text":"processor_heartbeat[\"external_whisper_focus_parent_job_id\"] = focus_parent_job_id"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1631,"text":"\"whisper_cli_path\": config.get(\"whisper_cli_path\", \"\"),"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1632,"text":"\"whisper_model_path\": config.get(\"whisper_model_path\", \"\"),"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1633,"text":"\"whisper_language\": config.get(\"whisper_language\", \"auto\"),"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1634,"text":"\"whisper_threads\": config.get(\"whisper_threads\", 4),"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1726,"text":"\"whisper_threads\": (1, 16),"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1727,"text":"\"whisper_timeout_seconds\": (600, 43200),"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1735,"text":"for key in (\"public_url\", \"jellyfin_url\", \"dashboard_title\", \"whisper_cli_path\", \"whisper_model_path\", \"whisper_language\", \"argos_source_language\", \"argos_target_language\"):"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1746,"text":"if provider in {\"whisper\", \"local\", \"local_whisper\"}:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1748,"text":"allowed_provider = {\"external_bridge\", \"whisper_local\"}"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1768,"text":"def queue_action(self, action: str, job_id: str = \"\") -> dict[str, Any]:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1788,"text":"result = self.app.safe_recover_queue(dry_run=False, source=\"dashboard-button\")"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":1790,"text":"result = self.app.safe_recover_queue(dry_run=True, source=\"dashboard-dry-run\")"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2120,"text":"queue = self.host.processor_queue"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2121,"text":"if queue is None:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2125,"text":"identity = queue.authenticate(header[7:].strip())"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2131,"text":"return queue.ensure_direct_device("},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2287,"text":"<div class=\"hero\"><div><div class=\"eyebrow\">Unified subtitle pipeline</div><h1>{title}</h1><div class=\"muted\">Audio extraction \u2192 Whisper chunks \u2192 Argos chunks \u2192 completed parent</div></div><div class=\"hero-actions\"><form method=\"post\" action=\"/logout\"><button>"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2292,"text":"<h2>Parent Jobs</h2><div class=\"data-box\"><div class=\"table-tools\"><b>Parent jobs</b><span class=\"muted\">Flow status from parent job queue</span><input id=\"jobSearch\" placeholder=\"Cari job/status/path/error...\" oninput=\"renderJobs()\"></div><div class=\"table-sc"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2336,"text":"['whisper', 'Whisper'],"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2346,"text":"return `${tag('Audio', row.audio_status || 'pending')} ${tag('Whisper', row.whisper_status || row.chirp_status || row.transcription_status || 'pending')} ${tag('Translate', row.translation_status || 'pending')} ${tag('All', row.all_status || 'pending')}`;"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2353,"text":"let chunkDetails = `<details><summary>${e(x.chunk_total || 0)} chunks \u00b7 ${e(x.chunk_active || 0)} processing \u00b7 ${e(x.chunk_done || 0)} whisper completed</summary>${chunkList || '<div class=\"muted\">Tiada chunk.</div>'}</details>`;"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2358,"text":"if (!c) { currentBox.innerHTML = '<b>Idle</b> \u00b7 menunggu queue baharu'; return; }"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2359,"text":"const liveStatus = c.whisper_status || c.chirp_status || c.translation_status || c.transcription_status || c.status || 'pending';"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2375,"text":"pageStatus.textContent = 'Online \u00b7 ' + now + ' \u00b7 v' + d.app_version + ' \u00b7 jobs ' + d.total + ' \u00b7 whisper ' + e(hb.external_whisper_processing || 0) + ' parent job(s) \u00b7 update ' + (u.state || 'idle');"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2376,"text":"preflightBox.innerHTML = `<b class=\"${pf.ok ? 'online' : 'failed'}\">${pf.ok ? 'READY' : 'NEED SETUP'}</b><br>Whisper bridge: <b class=\"online\">EXTERNAL ONLY</b><br>Argos EN: <b class=\"${pf.argos_ready ? 'online' : 'failed'}\">${pf.argos_ready ? 'OK' : 'MISSING'"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2377,"text":"processorHeartbeatBox.innerHTML = `Heartbeat: <b class=\"${hb.alive ? 'online' : 'failed'}\">${hb.alive ? 'ONLINE' : 'OFFLINE/STALE'}</b> \u00b7 age ${e(hb.age_seconds || 0)}s<br>Worker supervisor: <b class=\"${d.worker?.alive ? 'online' : 'failed'}\">${d.worker?.alive"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2381,"text":"gapAuditBox.innerHTML = `Audit: <b class=\"${ga.ok ? 'online' : 'warning'}\">${ga.ok ? 'OK' : 'PENDING'}</b> \u00b7 inspected ${e(ga.inspected || 0)} jobs<br>Clean ${e(ga.clean || 0)} \u00b7 transcribe gap ${e(ga.transcribe_gap || 0)} \u00b7 combine mismatch ${e(ga.combine_mis"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2384,"text":"pageStatus.textContent = 'Online \u00b7 ' + now + ' \u00b7 v' + d.app_version + ' \u00b7 jobs ' + d.total + ' \u00b7 whisper ' + e(hb.external_whisper_processing || 0) + ' parent job(s) \u00b7 update ' + (u.state || 'idle');"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2444,"text":"if self.host.processor_queue is not None:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2445,"text":"inv = self.host.processor_queue.invariants()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2449,"text":"\"queue_engine\": \"unified\", \"invariants\": inv,"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2496,"text":"if self.host.processor_queue is not None and path in {\"/api/summary\", \"/api/worker-config\"}:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2500,"text":"self.host.processor_queue.summary()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2501,"text":"if path == \"/api/summary\" else self.host.processor_queue.worker_config()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2505,"text":"if self.host.processor_queue is not None and path == \"/api/models/manifest\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2518,"text":"if self.host.processor_queue is not None and model_match:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2521,"text":"root = Path(str(self.config().get(\"model_repository_root\") or r\"C:\\ProgramData\\WhisperDistributedHub\\models\")).resolve()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2527,"text":"if self.host.processor_queue is not None and path == \"/api/processor-update/manifest\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2533,"text":"root = Path(str(self.config().get(\"processor_update_root\") or r\"C:\\ProgramData\\WhisperDistributedHub\\processor-updates\")).resolve()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2534,"text":"relative = \"windows/WHISPER_PROCESSOR_WINDOWS.ps1\" if platform == \"windows\" else \"android/WHISPER_PROCESSOR_ANDROID.sh\""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2551,"text":"if self.host.processor_queue is not None and update_match:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2554,"text":"root = Path(str(self.config().get(\"processor_update_root\") or r\"C:\\ProgramData\\WhisperDistributedHub\\processor-updates\")).resolve()"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2555,"text":"relative = \"windows/WHISPER_PROCESSOR_WINDOWS.ps1\" if update_match.group(1) == \"windows\" else \"android/WHISPER_PROCESSOR_ANDROID.sh\""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2562,"text":"if self.host.processor_queue is not None and job_match:"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2567,"text":"self.send_json(200, self.host.processor_queue.audio_status(job_match.group(1), identity[1]))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2569,"text":"self.send_file(self.host.processor_queue.audio_file(job_match.group(1), identity[1]), \"audio/wav\")"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2576,"text":"file_path = self.host.app.completed_english_xlsx_path"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2577,"text":"if not file_path.exists():"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2582,"text":"file_path.read_bytes(),"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2608,"text":"queue = self.host.processor_queue"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2609,"text":"if queue is not None and path == \"/api/register\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2610,"text":"self.send_json(200, queue.register(self.read_json()))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2612,"text":"if queue is not None and path.startswith(\"/api/\") and not path.startswith(\"/api/admin/\"):"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2619,"text":"self.send_json(200, queue.claim(device_id, device_name, bool(body.get(\"resume\", False))))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2622,"text":"self.send_json(200, queue.report(device_id, device_name, self.read_json()))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2632,"text":"self.send_json(200, queue.prepare(pid, device_name))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2634,"text":"self.send_json(200, queue.heartbeat(pid, device_name, self.read_json()))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2636,"text":"self.send_json(200, queue.update_status(pid, device_name, self.read_json()))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2638,"text":"self.send_json(200, queue.fail(pid, device_name, self.read_json()))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2643,"text":"result = queue.upload_subtitle("},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2655,"text":"if path == \"/api/admin/queue-recover\":"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2656,"text":"result = self.host.app.safe_recover_queue(dry_run=False, source=\"api\")"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2701,"text":"result = self.host.queue_action(str(body.get(\"action\", \"\")), str(body.get(\"job_id\", \"\")))"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2734,"text":"parser.add_argument(\"--config\", required=True, type=Path)"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_dashboard_server.py","line":2735,"text":"parser.add_argument(\"--check\", action=\"store_true\")"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":527,"text":"self.recovery_report_path = self.data_dir / \"queue-recovery-last.json\""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":535,"text":"self.processor_heartbeat_path = self.data_dir / \"whisper-processor-heartbeat.json\""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":550,"text":"# Keep local Whisper pressure low even if an older config still says 6/16."},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":566,"text":"# Unified mode treats persisted queue state as authoritative. Recovery is"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":568,"text":"if not bool(self.config.get(\"unified_queue_enabled\", False)):"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":570,"text":"self.safe_recover_queue(dry_run=False, source=\"startup\")"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":938,"text":"\"transcribe\": \"chirp\","},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":940,"text":"\"whisper\": \"chirp\","},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":941,"text":"\"whisper_local\": \"chirp\","},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":1005,"text":"\"UPDATE audio_chunks SET status='audio_ready',progress=20,detail='Stopped by dashboard: transcribe held before submit',worker_id=NULL,processing_started_at=NULL,next_retry=0,error=NULL,updated_at=? \""},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":1026,"text":"taking over the queue again."},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":1066,"text":"# backoff so one bad Google/Argos provider does not keep blocking the queue."},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":1088,"text":"\"\"\"Create or migrate the local queue database safely."},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":1093,"text":"submitting the same long audio again."},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":1286,"text":"needs_requeue INTEGER NOT NULL DEFAULT 0,"},{"file":"C:\\ProgramData\\AudioProcess\\current\\chirp_direct_server.py","line":1293,"text":"requeue_count INTEGER NOT NULL DEFAULT 0,"}],"whisper_files":[]}