Real-time, local speech-to-text with streaming ASR, speaker diarization, translation, and OpenAI/Deepgram-compatible APIs.
This report summarizes scanner evidence for QuentinFuxa/WhisperLiveKit, a Python project with 11,126 GitHub stars. SynthScan examined 55,042 lines of code across 207 source files, recording 765 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 22.2 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 393 finding(s).
Are imports declared and package/API names verified? 67 finding(s).
Are wrappers, guards, and repeated structures necessary? 624 finding(s).
Which changes need focused human review? 765 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 765 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | whisperlivekit/translation_mlx_llm_mt.py | 151 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | whisperlivekit/translation_mlx_llm_mt.py | 153 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | whisperlivekit/config.py | 274 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | whisperlivekit/config.py | 276 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | whisperlivekit/test_harness.py | 117 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/test_harness.py | 119 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/test_harness.py | 361 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/test_harness.py | 363 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/test_harness.py | 465 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/test_harness.py | 467 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/voxtral_mlx_asr.py | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/voxtral_mlx_asr.py | 52 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/voxtral_mlx_asr.py | 88 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/voxtral_mlx_asr.py | 90 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 614 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 616 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 1242 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 1244 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 1674 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 1676 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 149 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 151 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 277 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 279 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 317 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 319 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 454 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 456 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 780 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 782 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 904 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 906 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 1080 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 1082 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 1175 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 1177 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 1276 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 1278 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/translation_profiles.py | 103 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/translation_profiles.py | 105 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/translation_profiles.py | 148 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/translation_profiles.py | 150 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/basic_server.py | 191 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/basic_server.py | 193 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/basic_server.py | 207 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/basic_server.py | 209 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/translation_alignatt.py | 135 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | whisperlivekit/translation_alignatt.py | 137 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | whisperlivekit/translation_alignatt.py | 193 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | whisperlivekit/translation_alignatt.py | 195 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | whisperlivekit/test_data.py | 123 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/test_data.py | 125 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/test_data.py | 267 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/test_data.py | 269 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 75 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 77 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 227 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 229 | # --------------------------------------------------------------------------- | COMMENT |
| 74 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/translation_mlx_llm_mt.py | 294 | def validate_buffer_and_reset(self) -> Tuple[Optional[Translation], TimedText]: | CODE |
| LOW | whisperlivekit/metrics.py | 85 | def compute_timestamp_accuracy( | CODE |
| LOW | whisperlivekit/config.py | 12 | def validate_pause_segmentation_seconds(value: float) -> float: | CODE |
| LOW | whisperlivekit/backend_support.py | 32 | def voxtral_hf_backend_available(): | CODE |
| LOW | whisperlivekit/test_harness.py | 70 | def _load_audio_pcm_soundfile(audio_path: str, sample_rate: int) -> Optional[bytes]: | CODE |
| LOW | whisperlivekit/funasr_backend.py | 23 | def _load_funasr_dependencies(): | CODE |
| LOW | whisperlivekit/tokens_alignment.py | 20 | def resolve_retention_seconds(requested: Optional[float], mode: str) -> float: | CODE |
| LOW | whisperlivekit/tokens_alignment.py | 175 | def compute_punctuations_segments(self, tokens: Optional[List[ASRToken]] = None) -> List[PuncSegment]: | CODE |
| LOW | whisperlivekit/tokens_alignment.py | 207 | def compute_new_punctuations_segments(self) -> List[PuncSegment]: | CODE |
| LOW | whisperlivekit/tokens_alignment.py | 236 | def concatenate_diar_segments(self) -> List[SpeakerSegment]: | CODE |
| LOW | whisperlivekit/tokens_alignment.py | 310 | def _segment_from_token_group(tokens: List[ASRToken], speaker: int) -> Optional[Segment]: | CODE |
| LOW | whisperlivekit/tokens_alignment.py | 346 | def build_token_speaker_segments( | CODE |
| LOW | whisperlivekit/simul_mt_capture.py | 129 | def committed_src_end_from_text(tokenizer, source_ids, committed_text): | CODE |
| LOW | whisperlivekit/core.py | 505 | def online_diarization_factory(args, diarization_backend): | CODE |
| LOW | whisperlivekit/core.py | 520 | def online_translation_factory(args, translation_model): | CODE |
| LOW⚡ | whisperlivekit/audio_processor.py | 799 | async def _update_diarization_state(self, diarization_segments) -> None: | CODE |
| LOW⚡ | whisperlivekit/audio_processor.py | 808 | async def _drain_diarization_buffer(self) -> None: | CODE |
| LOW | whisperlivekit/audio_processor.py | 253 | async def _emit_stream_event_after_snapshot( | CODE |
| LOW | whisperlivekit/audio_processor.py | 271 | async def _queue_tokens_for_translation(self, tokens: List[ASRToken]) -> None: | CODE |
| LOW | whisperlivekit/audio_processor.py | 318 | async def _flush_pending_translation_tokens(self) -> None: | CODE |
| LOW | whisperlivekit/audio_processor.py | 325 | async def _queue_hypothesis_tail_for_translation(self, buffer_transcript) -> None: | CODE |
| LOW | whisperlivekit/audio_processor.py | 377 | def _is_pause_segmentation_boundary(self, silence: Silence) -> bool: | CODE |
| LOW | whisperlivekit/audio_processor.py | 433 | def _latest_committed_transcription_end(self) -> float: | CODE |
| LOW | whisperlivekit/audio_processor.py | 511 | async def _run_counted_transcription_call(self, method, *args): | CODE |
| LOW | whisperlivekit/audio_processor.py | 523 | async def _run_counted_process_iter(self): | CODE |
| LOW | whisperlivekit/audio_processor.py | 1159 | async def _finalize_current_silence_at_stream_end(self) -> None: | CODE |
| LOW | whisperlivekit/timed_objects.py | 18 | def format_subtitle_timestamp(seconds: float, fmt: str) -> str: | CODE |
| LOW | whisperlivekit/session_asr_proxy.py | 30 | def normalize_session_context(context: Optional[str]) -> Optional[str]: | CODE |
| LOW | whisperlivekit/session_asr_proxy.py | 64 | def session_context_capability(args, asr) -> dict: | CODE |
| LOW⚡ | whisperlivekit/cli.py | 606 | def _apply_diarization_cli_kwargs(parsed, kwargs): | CODE |
| LOW | whisperlivekit/cli.py | 589 | def _add_diarization_cli_arguments(parser): | CODE |
| LOW | whisperlivekit/cli.py | 717 | def _format_verbose_json_result(result, duration: float, language: str) -> dict: | CODE |
| LOW | whisperlivekit/translation_mlx_llm_mt_simul.py | 211 | def validate_buffer_and_reset(self): | CODE |
| LOW | whisperlivekit/deepgram_compat.py | 919 | async def handle_deepgram_websocket( | CODE |
| LOW⚡ | whisperlivekit/basic_server.py | 196 | async def deepgram_websocket_endpoint(websocket: WebSocket): | CODE |
| LOW | whisperlivekit/basic_server.py | 292 | def _speaker_label_from_index(index: int) -> str: | CODE |
| LOW | whisperlivekit/translation.py | 18 | def session_translation_factory(args, translation_model, target_language, source_language=None): | CODE |
| LOW | whisperlivekit/translation_alignatt.py | 164 | def validate_buffer_and_reset(self) -> Tuple[Optional[Translation], TimedText]: | CODE |
| LOW | whisperlivekit/thread_safety.py | 104 | def print_deployment_recommendations(): | CODE |
| LOW⚡ | whisperlivekit/test_data.py | 127 | def _download_librispeech_samples(n_samples: int = 3) -> List[Dict]: | CODE |
| LOW | whisperlivekit/benchmark/compat.py | 32 | def backend_supports_language(backend: str, language: str) -> bool: | CODE |
| LOW | whisperlivekit/benchmark/compat.py | 50 | def detect_available_backends() -> List[str]: | CODE |
| LOW | whisperlivekit/web/live_transcription.js | 930 | async function checkAndRequestPermissions() { | CODE |
| LOW⚡ | whisperlivekit/voxtral_mlx/model.py | 280 | def forward_transformer_incremental(self, x, cache_list): | CODE |
| LOW | whisperlivekit/simul_whisper/backend.py | 176 | def _reset_after_unstable_output(self, reason: str) -> None: | CODE |
| LOW | whisperlivekit/simul_whisper/backend.py | 219 | def _remember_committed_words(self, tokens: List[ASRToken]) -> None: | CODE |
| LOW | whisperlivekit/simul_whisper/backend.py | 445 | def _decoder_path_from_config(self) -> Optional[str]: | CODE |
| LOW | whisperlivekit/simul_whisper/align_att_base.py | 153 | def _detect_language_if_needed(self, encoder_feature): | CODE |
| LOW | whisperlivekit/simul_whisper/align_att_base.py | 340 | def _normalize_token_timestamps(timestamps, expected_len): | CODE |
| LOW | whisperlivekit/simul_whisper/align_att_base.py | 592 | def _get_logits_and_cross_attn(self, tokens, encoder_feature): | CODE |
| LOW | whisperlivekit/simul_whisper/simul_whisper.py | 79 | def _encoder_features_to_tensor(value: Any, device: str) -> torch.Tensor: | CODE |
| LOW | whisperlivekit/simul_whisper/simul_whisper.py | 357 | def _get_logits_and_cross_attn(self, tokens, encoder_feature): | CODE |
| LOW | whisperlivekit/simul_whisper/mlx/simul_whisper.py | 315 | def _get_logits_and_cross_attn(self, tokens, encoder_feature): | CODE |
| LOW | whisperlivekit/local_agreement/online_asr.py | 154 | def get_audio_buffer_end_time(self) -> float: | CODE |
| LOW | whisperlivekit/local_agreement/whisper_online.py | 196 | def _normalize_backend_choice( | CODE |
| LOW | whisperlivekit/whisper/__init__.py | 599 | def convert_encoder_to_coreml( | CODE |
| LOW | whisperlivekit/whisper/tokenizer.py | 238 | def sot_sequence_including_notimestamps(self) -> Tuple[int]: | CODE |
| LOW | whisperlivekit/whisper/normalizers/basic.py | 27 | def remove_symbols_and_diacritics(s: str, keep=""): | CODE |
| LOW | tests/test_deepgram_compat.py | 98 | def test_deepgram_options_parse_supported_values(params, expected): | CODE |
| LOW | tests/test_deepgram_compat.py | 122 | def test_context_option_is_preserved_for_the_session_processor(): | CODE |
| 252 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | whisperlivekit/test_harness.py | 747 | except (asyncio.TimeoutError, asyncio.CancelledError): | CODE |
| HIGH | whisperlivekit/ffmpeg_manager.py | 132 | except ProcessLookupError: | CODE |
| HIGH | whisperlivekit/ffmpeg_manager.py | 140 | except ProcessLookupError: | CODE |
| HIGH | whisperlivekit/cli.py | 44 | except ImportError: | CODE |
| HIGH | whisperlivekit/cli.py | 261 | except Exception: | CODE |
| HIGH | whisperlivekit/cli.py | 1041 | except KeyboardInterrupt: | CODE |
| HIGH | whisperlivekit/cli.py | 1039 | except asyncio.TimeoutError: | CODE |
| HIGH | whisperlivekit/basic_server.py | 244 | except (BrokenPipeError, ConnectionResetError): | CODE |
| HIGH | whisperlivekit/basic_server.py | 273 | except ProcessLookupError: | CODE |
| HIGH | whisperlivekit/model_paths.py | 62 | except (json.JSONDecodeError, IOError): | CODE |
| HIGH | whisperlivekit/model_paths.py | 91 | except (json.JSONDecodeError, IOError): | CODE |
| HIGH | whisperlivekit/translation_alignatt.py | 216 | except Exception: | CODE |
| HIGH | whisperlivekit/thread_safety.py | 78 | except RuntimeError: | CODE |
| HIGH | whisperlivekit/test_client.py | 262 | except Exception: | CODE |
| HIGH | whisperlivekit/benchmark/metrics.py | 242 | except PackageNotFoundError: | CODE |
| HIGH | whisperlivekit/benchmark/compat.py | 57 | except ImportError: | CODE |
| HIGH | whisperlivekit/benchmark/compat.py | 63 | except ImportError: | CODE |
| HIGH | whisperlivekit/benchmark/compat.py | 69 | except ImportError: | CODE |
| HIGH | whisperlivekit/benchmark/compat.py | 77 | except ImportError: | CODE |
| HIGH | whisperlivekit/benchmark/compat.py | 83 | except ImportError: | CODE |
| HIGH | whisperlivekit/benchmark/resources.py | 33 | except ImportError: | CODE |
| HIGH | whisperlivekit/qwen3_streaming/_shim.py | 12 | except ModuleNotFoundError: | CODE |
| HIGH | whisperlivekit/simul_whisper/backend.py | 289 | except Exception: | CODE |
| HIGH | tests/test_pipeline.py | 33 | except ImportError: | CODE |
| HIGH | tests/test_pipeline.py | 41 | except ImportError: | CODE |
| HIGH | tests/test_pipeline.py | 58 | except (ImportError, Exception): | CODE |
| HIGH | tests/test_pipeline.py | 49 | except (ImportError, Exception): | CODE |
| HIGH | tests/test_pipeline.py | 257 | except TimeoutError: | CODE |
| HIGH | …chmarks/archive/h100_20260711/run_scatter_benchmark.py | 110 | except (ImportError, Exception): | CODE |
| HIGH | …chmarks/archive/h100_20260711/run_scatter_benchmark.py | 144 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/translation_mlx_llm_mt.py | 48 | except Exception: | CODE |
| LOW | whisperlivekit/translation_mlx_llm_mt.py | 274 | except Exception as exc: | CODE |
| LOW | whisperlivekit/test_harness.py | 83 | except Exception: | CODE |
| LOW | whisperlivekit/funasr_backend.py | 62 | except Exception as exc: | CODE |
| LOW | whisperlivekit/voxtral_mlx_asr.py | 208 | except Exception as e: | CODE |
| MEDIUM | whisperlivekit/voxtral_mlx_asr.py | 205 | def process_iter(self, is_last=False) -> Tuple[List[ASRToken], float]: | CODE |
| LOW | whisperlivekit/canary_backend.py | 154 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | whisperlivekit/ffmpeg_manager.py | 89 | except Exception as e: | STRING |
| LOW | whisperlivekit/ffmpeg_manager.py | 175 | except Exception as e: | CODE |
| LOW | whisperlivekit/ffmpeg_manager.py | 197 | except Exception as e: | CODE |
| LOW | whisperlivekit/ffmpeg_manager.py | 216 | except Exception as e: | CODE |
| LOW | whisperlivekit/ffmpeg_manager.py | 235 | except Exception as e: | CODE |
| MEDIUM | whisperlivekit/ffmpeg_manager.py | 57 | def start(self) -> bool: | CODE |
| MEDIUM | whisperlivekit/ffmpeg_manager.py | 224 | def _drain_stderr(self): | CODE |
| LOW | whisperlivekit/voxtral_hf_streaming.py | 175 | except Exception as e: | CODE |
| LOW | whisperlivekit/voxtral_hf_streaming.py | 345 | except Exception as e: | CODE |
| MEDIUM | whisperlivekit/voxtral_hf_streaming.py | 172 | def process_iter(self, is_last=False) -> Tuple[List[ASRToken], float]: | CODE |
| MEDIUM | whisperlivekit/voxtral_hf_streaming.py | 331 | def run_generate(): | CODE |
| LOW | whisperlivekit/core.py | 228 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 613 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 785 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 847 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 854 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 939 | except Exception: | CODE |
| LOW | whisperlivekit/audio_processor.py | 1009 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 1019 | except Exception: | CODE |
| LOW | whisperlivekit/audio_processor.py | 1034 | except Exception as e: | CODE |
| LOW | whisperlivekit/warmup.py | 27 | except Exception as e: | CODE |
| LOW | whisperlivekit/warmup.py | 39 | except Exception as e: | CODE |
| LOW | whisperlivekit/warmup.py | 53 | except Exception as e: | CODE |
| LOW⚡ | whisperlivekit/cli.py | 1234 | except Exception as e: | CODE |
| LOW⚡ | whisperlivekit/cli.py | 1683 | except Exception: | CODE |
| LOW | whisperlivekit/cli.py | 261 | except Exception: | CODE |
| LOW | whisperlivekit/cli.py | 580 | except Exception as e: | CODE |
| LOW | whisperlivekit/cli.py | 1029 | except Exception as e: | CODE |
| LOW | whisperlivekit/cli.py | 1334 | except Exception as e: | CODE |
| LOW | whisperlivekit/cli.py | 1430 | except Exception as e: | CODE |
| LOW | whisperlivekit/cli.py | 1438 | except Exception as e: | CODE |
| LOW | whisperlivekit/translation_mlx_llm_mt_simul.py | 204 | except Exception as exc: | CODE |
| LOW | whisperlivekit/deepgram_compat.py | 958 | except Exception: | CODE |
| LOW | whisperlivekit/deepgram_compat.py | 987 | except Exception: | CODE |
| LOW | whisperlivekit/deepgram_compat.py | 1011 | except Exception: | CODE |
| LOW | whisperlivekit/deepgram_compat.py | 1120 | except Exception: | CODE |
| MEDIUM | whisperlivekit/deepgram_compat.py | 970 | def consume_results() -> None: | CODE |
| MEDIUM | whisperlivekit/deepgram_compat.py | 993 | def consume_events() -> None: | CODE |
| LOW | whisperlivekit/basic_server.py | 90 | except Exception as e: | CODE |
| LOW | whisperlivekit/basic_server.py | 170 | except Exception as e: | CODE |
| LOW | whisperlivekit/basic_server.py | 178 | except Exception: | CODE |
| LOW | whisperlivekit/translation_alignatt.py | 160 | except Exception as exc: # translation must never kill the session | CODE |
| LOW | whisperlivekit/translation_alignatt.py | 216 | except Exception: | CODE |
| LOW | whisperlivekit/translation_alignatt.py | 285 | except Exception as exc: | CODE |
| LOW | whisperlivekit/translation_alignatt.py | 329 | except Exception as exc: | CODE |
| MEDIUM | whisperlivekit/translation_alignatt.py | 157 | def process(self) -> Tuple[Optional[Translation], TimedText]: | CODE |
| LOW | whisperlivekit/audio_input.py | 96 | except Exception as exc: | CODE |
| LOW | whisperlivekit/test_data.py | 302 | except Exception as e: | CODE |
| LOW | whisperlivekit/test_data.py | 307 | except Exception as e: | CODE |
| LOW | whisperlivekit/test_client.py | 240 | except Exception as e: | CODE |
| LOW | whisperlivekit/test_client.py | 262 | except Exception: | CODE |
| MEDIUM | whisperlivekit/test_client.py | 359 | print(f"Error: file not found: {audio_path}", file=sys.stderr) | CODE |
| MEDIUM | whisperlivekit/test_client.py | 226 | def receive_results(): | CODE |
| 29 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/translation_mlx_llm_mt.py | 2 | CODE | |
| LOW | whisperlivekit/simul_mt_capture.py | 6 | CODE | |
| LOW | whisperlivekit/__init__.py | 5 | CODE | |
| LOW | whisperlivekit/__init__.py | 6 | CODE | |
| LOW | whisperlivekit/cli.py | 929 | CODE | |
| LOW | whisperlivekit/translation_hunyuan_mlx.py | 7 | CODE | |
| LOW | whisperlivekit/translation_profiles.py | 11 | CODE | |
| LOW | whisperlivekit/translation_mlx_llm_mt_simul.py | 2 | CODE | |
| LOW | whisperlivekit/translation_alignatt.py | 31 | CODE | |
| LOW | whisperlivekit/simul_mt_calibration.py | 2 | CODE | |
| LOW | whisperlivekit/qwen3_vllm_asr.py | 3 | CODE | |
| LOW | whisperlivekit/qwen3_vllm_asr.py | 9 | CODE | |
| LOW | whisperlivekit/benchmark/compat.py | 55 | CODE | |
| LOW | whisperlivekit/benchmark/compat.py | 61 | CODE | |
| LOW | whisperlivekit/benchmark/compat.py | 67 | CODE | |
| LOW | whisperlivekit/benchmark/compat.py | 73 | CODE | |
| LOW | whisperlivekit/benchmark/compat.py | 75 | CODE | |
| LOW | whisperlivekit/benchmark/compat.py | 81 | CODE | |
| LOW | whisperlivekit/benchmark/__init__.py | 21 | CODE | |
| LOW | whisperlivekit/benchmark/__init__.py | 21 | CODE | |
| LOW | whisperlivekit/benchmark/__init__.py | 25 | CODE | |
| LOW | whisperlivekit/benchmark/__init__.py | 25 | CODE | |
| LOW | whisperlivekit/benchmark/__init__.py | 26 | CODE | |
| LOW | whisperlivekit/qwen3_streaming/__init__.py | 7 | CODE | |
| LOW | whisperlivekit/qwen3_streaming/__init__.py | 7 | CODE | |
| LOW | whisperlivekit/voxtral_mlx/__init__.py | 3 | CODE | |
| LOW | whisperlivekit/voxtral_mlx/__init__.py | 4 | CODE | |
| LOW | whisperlivekit/simul_whisper/__init__.py | 1 | CODE | |
| LOW | whisperlivekit/simul_whisper/__init__.py | 1 | CODE | |
| LOW | whisperlivekit/simul_whisper/mlx/__init__.py | 1 | CODE | |
| LOW | whisperlivekit/simul_whisper/mlx/__init__.py | 2 | CODE | |
| LOW | whisperlivekit/simul_whisper/mlx/__init__.py | 2 | CODE | |
| LOW | whisperlivekit/simul_whisper/mlx/__init__.py | 2 | CODE | |
| LOW | whisperlivekit/simul_whisper/mlx/__init__.py | 3 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 14 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 14 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 14 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 15 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 15 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 15 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 15 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 17 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 18 | CODE | |
| LOW | whisperlivekit/whisper/decoding.py | 15 | CODE | |
| LOW | whisperlivekit/whisper/timing.py | 16 | CODE | |
| LOW | whisperlivekit/whisper/transcribe.py | 18 | CODE | |
| LOW | whisperlivekit/whisper/normalizers/__init__.py | 1 | CODE | |
| LOW | whisperlivekit/whisper/normalizers/__init__.py | 2 | CODE | |
| LOW | tests/test_translation_alignatt.py | 9 | CODE | |
| LOW | tests/test_sortformer_real_fixture.py | 3 | CODE | |
| LOW | tests/test_silent_backend_guard.py | 9 | CODE | |
| LOW | tests/test_pipeline.py | 29 | CODE | |
| LOW | tests/test_pipeline.py | 31 | CODE | |
| LOW | tests/test_pipeline.py | 39 | CODE | |
| LOW | tests/test_pipeline.py | 55 | CODE | |
| LOW | tests/test_pipeline.py | 56 | CODE | |
| LOW | …chmarks/archive/h100_20260711/run_scatter_benchmark.py | 98 | CODE | |
| LOW | …chmarks/archive/h100_20260711/run_scatter_benchmark.py | 100 | CODE | |
| LOW | …chmarks/archive/h100_20260711/run_scatter_benchmark.py | 102 | CODE | |
| LOW | …chmarks/archive/h100_20260711/run_scatter_benchmark.py | 104 | CODE | |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/voxtral_mlx_asr.py | 344 | CODE | |
| LOW | whisperlivekit/tokens_alignment.py | 125 | CODE | |
| LOW | whisperlivekit/tokens_alignment.py | 426 | CODE | |
| LOW | whisperlivekit/simul_mt_capture.py | 27 | CODE | |
| LOW | whisperlivekit/ffmpeg_manager.py | 115 | CODE | |
| LOW | whisperlivekit/core.py | 73 | CODE | |
| LOW | whisperlivekit/audio_processor.py | 529 | CODE | |
| LOW | whisperlivekit/audio_processor.py | 616 | CODE | |
| LOW | whisperlivekit/audio_processor.py | 822 | CODE | |
| LOW | whisperlivekit/audio_processor.py | 861 | CODE | |
| LOW | whisperlivekit/audio_processor.py | 985 | CODE | |
| LOW | whisperlivekit/warmup.py | 6 | CODE | |
| LOW | whisperlivekit/cli.py | 321 | CODE | |
| LOW | whisperlivekit/cli.py | 350 | CODE | |
| LOW | whisperlivekit/cli.py | 467 | CODE | |
| LOW | whisperlivekit/cli.py | 668 | CODE | |
| LOW | whisperlivekit/cli.py | 1179 | CODE | |
| LOW | whisperlivekit/cli.py | 1313 | CODE | |
| LOW | whisperlivekit/cli.py | 1410 | CODE | |
| LOW | whisperlivekit/translation_mlx_llm_mt_simul.py | 91 | CODE | |
| LOW | whisperlivekit/translation_mlx_llm_mt_simul.py | 164 | CODE | |
| LOW | whisperlivekit/deepgram_compat.py | 919 | CODE | |
| LOW | whisperlivekit/deepgram_compat.py | 760 | CODE | |
| LOW | whisperlivekit/deepgram_compat.py | 855 | CODE | |
| LOW | whisperlivekit/deepgram_compat.py | 993 | CODE | |
| LOW | whisperlivekit/basic_server.py | 322 | CODE | |
| LOW | whisperlivekit/model_paths.py | 68 | CODE | |
| LOW | whisperlivekit/audio_input.py | 64 | CODE | |
| LOW | whisperlivekit/processing_queue.py | 48 | CODE | |
| LOW | whisperlivekit/translation_processor.py | 24 | CODE | |
| LOW | whisperlivekit/benchmark/runner.py | 74 | CODE | |
| LOW | whisperlivekit/benchmark/datasets.py | 458 | CODE | |
| LOW | whisperlivekit/simul_whisper/backend.py | 297 | CODE | |
| LOW | whisperlivekit/simul_whisper/simul_whisper.py | 390 | CODE | |
| LOW | whisperlivekit/simul_whisper/mlx/decoders.py | 82 | CODE | |
| LOW | whisperlivekit/simul_whisper/mlx/simul_whisper.py | 351 | CODE | |
| LOW | whisperlivekit/diarization/sortformer_backend.py | 68 | CODE | |
| LOW | whisperlivekit/diarization/diart_backend.py | 230 | CODE | |
| LOW | whisperlivekit/diarization/diart_backend.py | 30 | CODE | |
| LOW | whisperlivekit/diarization/diart_backend.py | 104 | CODE | |
| LOW | whisperlivekit/local_agreement/online_asr.py | 29 | CODE | |
| LOW | whisperlivekit/local_agreement/online_asr.py | 59 | CODE | |
| LOW | whisperlivekit/local_agreement/whisper_online.py | 74 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 57 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 163 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 466 | CODE | |
| LOW | whisperlivekit/whisper/__init__.py | 172 | CODE | |
| LOW | whisperlivekit/whisper/decoding.py | 317 | CODE | |
| LOW | whisperlivekit/whisper/decoding.py | 378 | CODE | |
| LOW | whisperlivekit/whisper/timing.py | 58 | CODE | |
| LOW | whisperlivekit/whisper/timing.py | 83 | CODE | |
| LOW | whisperlivekit/whisper/timing.py | 279 | CODE | |
| LOW | whisperlivekit/whisper/utils.py | 123 | CODE | |
| LOW | whisperlivekit/whisper/utils.py | 142 | CODE | |
| LOW | whisperlivekit/whisper/transcribe.py | 21 | CODE | |
| LOW | whisperlivekit/whisper/normalizers/english.py | 165 | CODE | |
| LOW | tests/test_streaming_lifecycle.py | 207 | CODE | |
| LOW | tests/test_streaming_lifecycle.py | 273 | CODE | |
| LOW | …chmarks/archive/h100_20260711/run_scatter_benchmark.py | 95 | CODE | |
| LOW | …chmarks/archive/h100_20260711/run_scatter_benchmark.py | 115 | CODE | |
| 2 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/translation_mlx_llm_mt.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/config.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/backend_support.py | 5 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/test_harness.py | 50 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/voxtral_mlx_asr.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/canary_backend.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/ffmpeg_manager.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/__init__.py | 19 | __all__ = ["WhisperLiveKitConfig", "parse_args", *_LAZY_EXPORTS] | CODE |
| LOW | whisperlivekit/voxtral_hf_streaming.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/core.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | whisperlivekit/audio_processor.py | 799 | async def _update_diarization_state(self, diarization_segments) -> None: | CODE |
| LOW | whisperlivekit/audio_processor.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/metrics_collector.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/warmup.py | 4 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | whisperlivekit/cli.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/translation_hunyuan_mlx.py | 13 | __all__ = ["HunyuanMlxTranslation", "MlxLlmTranslation"] | CODE |
| LOW | whisperlivekit/deepgram_compat.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/basic_server.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/translation.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/translation_alignatt.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/thread_safety.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/audio_input.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/test_data.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/test_client.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/translation_processor.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/benchmark/runner.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/benchmark/compat.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/benchmark/datasets.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/benchmark/__init__.py | 28 | __all__ = [ | CODE |
| LOW | whisperlivekit/web/web_interface.py | 5 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/qwen3_streaming/__init__.py | 9 | __all__ = ["Qwen3StreamingASR", "Qwen3StreamingOnlineProcessor"] | CODE |
| LOW | whisperlivekit/voxtral_mlx/__init__.py | 6 | __all__ = ["load_voxtral_model", "VoxtralMLXModel"] | CODE |
| LOW⚡ | whisperlivekit/voxtral_mlx/loader.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/simul_whisper/backend.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/simul_whisper/eow_detection.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/simul_whisper/__init__.py | 3 | __all__ = [ | CODE |
| LOW | whisperlivekit/simul_whisper/align_att_base.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/simul_whisper/simul_whisper.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/simul_whisper/mlx/__init__.py | 5 | __all__ = [ | CODE |
| LOW | whisperlivekit/simul_whisper/mlx/simul_whisper.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/diarization/sortformer_backend.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/diarization/diart_backend.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/local_agreement/online_asr.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/local_agreement/whisper_online.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/local_agreement/backends.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/test_asr_coalescing_pipeline.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tests/test_pipeline.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | scripts/create_long_samples.py | 13 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | whisperlivekit/translation_mlx_llm_mt.py | 208 | # bare prompt hallucinates and rambles past EOS). | COMMENT |
| MEDIUM | whisperlivekit/voxtral_mlx_asr.py | 39 | # produces hallucination. 20s / 80ms per token = 250 tokens. | COMMENT |
| MEDIUM | whisperlivekit/voxtral_mlx_asr.py | 214 | # flush+reset to prevent hallucination even without VAD silence. | COMMENT |
| MEDIUM | whisperlivekit/voxtral_mlx_asr.py | 233 | # silence padding), so positions beyond this produce hallucination. | COMMENT |
| MEDIUM | whisperlivekit/voxtral_hf_streaming.py | 227 | # uses an event-driven blocking drain with short timeouts. | COMMENT |
| MEDIUM | whisperlivekit/whisper/transcribe.py | 401 | # skip silence before possible hallucinations | COMMENT |
| MEDIUM⚡ | whisperlivekit/whisper/transcribe.py | 413 | # if first segment might be a hallucination, skip leading silence | COMMENT |
| MEDIUM⚡ | whisperlivekit/whisper/transcribe.py | 421 | # skip silence before any possible hallucination that is surrounded | COMMENT |
| MEDIUM⚡ | whisperlivekit/whisper/transcribe.py | 422 | # by silence or more hallucinations | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | whisperlivekit/voxtral_mlx_asr.py | 0 | flush and return the previous speaker's final tokens before reset. | STRING |
| HIGH | whisperlivekit/voxtral_hf_streaming.py | 0 | flush and return the previous speaker's final tokens before reset. | STRING |
| HIGH | whisperlivekit/simul_whisper/backend.py | 0 | flush and return the previous speaker's final tokens before reset. | STRING |
| HIGH | whisperlivekit/local_agreement/online_asr.py | 0 | flush and return the previous speaker's final tokens before reset. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/translation_mlx_llm_mt_simul.py | 29 | CODE | |
| LOW | whisperlivekit/silero_vad_iterator.py | 125 | CODE | |
| LOW | whisperlivekit/benchmark/runner.py | 19 | CODE | |
| LOW | whisperlivekit/voxtral_mlx/model.py | 210 | CODE | |
| LOW | whisperlivekit/voxtral_mlx/model.py | 369 | CODE | |
| LOW | whisperlivekit/local_agreement/backends.py | 77 | CODE | |
| LOW | whisperlivekit/whisper/transcribe.py | 21 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | whisperlivekit/ffmpeg_manager.py | 16 | sudo apt update && sudo apt install ffmpeg | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | whisperlivekit/local_agreement/whisper_online.py | 180 | # Create the tokenizer | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/whisper/__init__.py | 312 | # Check if it's already a valid local path | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/web/live_transcription.js | 61 | const linesTranscriptDiv = document.getElementById("linesTranscript"); | COMMENT |