Simultaneous speech-to-text models
This report presents the forensic synthetic code analysis of QuentinFuxa/WhisperLiveKit, a Python project with 10,533 GitHub stars. SynthScan v2.0 examined 34,943 lines of code across 154 source files, recording 486 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 23.4 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 486 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | whisperlivekit/config.py | 161 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | whisperlivekit/config.py | 163 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | whisperlivekit/test_harness.py | 90 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/test_harness.py | 92 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/test_harness.py | 332 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/test_harness.py | 334 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/test_harness.py | 436 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/test_harness.py | 438 | # --------------------------------------------------------------------------- | 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 | 24 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 569 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 571 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 1182 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 1184 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 1615 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/cli.py | 1617 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 137 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 139 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 265 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 267 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 305 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 307 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 441 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 443 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 746 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 748 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 850 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 852 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 1027 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 1029 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 1122 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 1124 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 1216 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/cli.py | 1218 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/basic_server.py | 162 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/basic_server.py | 164 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/basic_server.py | 174 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | whisperlivekit/basic_server.py | 176 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/translation_alignatt.py | 129 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | whisperlivekit/translation_alignatt.py | 131 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | whisperlivekit/translation_alignatt.py | 183 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | whisperlivekit/translation_alignatt.py | 185 | # ------------------------------------------------------------------ | 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 | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 214 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 216 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 252 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 254 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 441 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 443 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 476 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | whisperlivekit/benchmark/datasets.py | 478 | # --------------------------------------------------------------------------- | COMMENT |
| 68 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/metrics.py | 85 | def compute_timestamp_accuracy( | CODE |
| LOW | whisperlivekit/backend_support.py | 32 | def voxtral_hf_backend_available(): | CODE |
| LOW | whisperlivekit/tokens_alignment.py | 18 | def resolve_retention_seconds(requested: Optional[float], mode: str) -> float: | CODE |
| LOW | whisperlivekit/tokens_alignment.py | 124 | def compute_punctuations_segments(self, tokens: Optional[List[ASRToken]] = None) -> List[PuncSegment]: | CODE |
| LOW | whisperlivekit/tokens_alignment.py | 156 | def compute_new_punctuations_segments(self) -> List[PuncSegment]: | CODE |
| LOW | whisperlivekit/tokens_alignment.py | 185 | def concatenate_diar_segments(self) -> List[SpeakerSegment]: | CODE |
| LOW | whisperlivekit/core.py | 339 | def online_diarization_factory(args, diarization_backend): | CODE |
| LOW | whisperlivekit/core.py | 351 | def online_translation_factory(args, translation_model): | CODE |
| LOW⚡ | whisperlivekit/audio_processor.py | 618 | async def _update_diarization_state(self, diarization_segments) -> None: | CODE |
| LOW⚡ | whisperlivekit/audio_processor.py | 627 | async def _drain_diarization_buffer(self) -> None: | CODE |
| LOW | whisperlivekit/audio_processor.py | 175 | async def _queue_tokens_for_translation(self, tokens: List[ASRToken]) -> None: | CODE |
| LOW | whisperlivekit/audio_processor.py | 222 | async def _flush_pending_translation_tokens(self) -> None: | CODE |
| LOW | whisperlivekit/audio_processor.py | 229 | async def _queue_hypothesis_tail_for_translation(self, buffer_transcript) -> None: | CODE |
| LOW | whisperlivekit/audio_processor.py | 310 | def _latest_committed_transcription_end(self) -> float: | CODE |
| LOW | whisperlivekit/cli.py | 673 | def _format_verbose_json_result(result, duration: float, language: str) -> dict: | CODE |
| LOW | whisperlivekit/deepgram_compat.py | 219 | async def handle_deepgram_websocket(websocket: WebSocket, transcription_engine, config): | CODE |
| LOW⚡ | whisperlivekit/basic_server.py | 167 | async def deepgram_websocket_endpoint(websocket: WebSocket): | CODE |
| LOW | whisperlivekit/translation.py | 18 | def session_translation_factory(args, translation_model, target_language): | CODE |
| LOW | whisperlivekit/translation_alignatt.py | 158 | def validate_buffer_and_reset(self) -> Tuple[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 | 23 | def backend_supports_language(backend: str, language: str) -> bool: | CODE |
| LOW | whisperlivekit/benchmark/compat.py | 31 | def detect_available_backends() -> List[str]: | CODE |
| LOW | whisperlivekit/web/live_transcription.js | 915 | 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 | 172 | def _reset_after_unstable_output(self, reason: str) -> None: | CODE |
| LOW | whisperlivekit/simul_whisper/backend.py | 215 | def _remember_committed_words(self, tokens: List[ASRToken]) -> None: | CODE |
| LOW | whisperlivekit/simul_whisper/backend.py | 437 | 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 | 153 | def get_audio_buffer_end_time(self) -> float: | CODE |
| LOW | whisperlivekit/local_agreement/whisper_online.py | 164 | 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_translation_alignatt.py | 127 | def test_partial_process_fills_buffer_not_segments(sidecar): | CODE |
| LOW | tests/test_translation_alignatt.py | 141 | def test_punctuation_triggers_final_segment_with_span(sidecar): | CODE |
| LOW | tests/test_translation_alignatt.py | 159 | def test_tail_words_are_sent_untimestamped_and_buffered(sidecar): | CODE |
| LOW | tests/test_translation_alignatt.py | 175 | def test_quality_latency_preset_disables_tail(sidecar): | CODE |
| LOW | tests/test_translation_alignatt.py | 180 | def test_pacing_skips_tail_only_updates_but_not_commits(sidecar): | CODE |
| LOW | tests/test_translation_alignatt.py | 195 | def test_validate_buffer_and_reset_returns_streamed_partial(sidecar): | CODE |
| LOW | tests/test_translation_alignatt.py | 212 | def test_translation_segments_are_monotone_nonoverlapping(sidecar): | CODE |
| LOW | tests/test_translation_alignatt.py | 231 | def test_sidecar_down_degrades_gracefully(caplog): | CODE |
| LOW | tests/test_translation_alignatt.py | 250 | def test_reconnect_resumes_with_accepted_prefix(sidecar): | CODE |
| LOW | tests/test_translation_alignatt.py | 275 | def test_unsupported_direction_warns_and_stays_empty(sidecar, caplog): | CODE |
| LOW | tests/test_translation_alignatt.py | 288 | def test_factory_routes_alignatt_engine(): | CODE |
| LOW | tests/test_translation_alignatt.py | 308 | def test_translation_processor_plumbing_with_fake_sidecar(sidecar): | CODE |
| LOW | tests/test_retention.py | 20 | def test_resolve_retention_policy(): | CODE |
| LOW | tests/test_retention.py | 48 | def test_prune_drops_old_tokens_with_bounded_retention(): | CODE |
| LOW | tests/test_retention.py | 57 | def test_unlimited_retention_keeps_full_history(): | CODE |
| LOW⚡ | tests/test_silent_backend_guard.py | 45 | def test_warmup_asr_raises_when_inference_is_broken(tmp_path): | CODE |
| LOW⚡ | tests/test_silent_backend_guard.py | 52 | def test_warmup_asr_passes_and_skips(tmp_path): | CODE |
| LOW⚡ | tests/test_silent_backend_guard.py | 62 | def test_alignatt_warmup_raises_when_inference_is_broken(): | CODE |
| LOW | tests/test_silent_backend_guard.py | 93 | def test_silent_backend_watchdog_fires_once(caplog): | CODE |
| LOW | tests/test_silent_backend_guard.py | 104 | def test_silent_backend_watchdog_respects_real_output(caplog): | CODE |
| LOW⚡ | tests/test_backend_deep_bugs.py | 800 | def test_parse_cors_origins_defaults_to_disabled(): | CODE |
| 43 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/test_harness.py | 517 | except Exception as e: | 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/ffmpeg_manager.py | 95 | except Exception as e: | STRING |
| LOW | whisperlivekit/ffmpeg_manager.py | 137 | except Exception as e: | CODE |
| LOW | whisperlivekit/ffmpeg_manager.py | 158 | except Exception as e: | CODE |
| LOW | whisperlivekit/ffmpeg_manager.py | 181 | except Exception as e: | CODE |
| LOW | whisperlivekit/ffmpeg_manager.py | 200 | except Exception as e: | CODE |
| MEDIUM | whisperlivekit/ffmpeg_manager.py | 189 | def _drain_stderr(self): | CODE |
| LOW | whisperlivekit/voxtral_hf_streaming.py | 175 | except Exception as e: | CODE |
| LOW | whisperlivekit/voxtral_hf_streaming.py | 344 | 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 | 330 | def run_generate(): | CODE |
| LOW | whisperlivekit/core.py | 70 | except Exception: | CODE |
| LOW | whisperlivekit/audio_processor.py | 408 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 488 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 602 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 664 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 671 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 705 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 759 | except Exception: | CODE |
| LOW | whisperlivekit/audio_processor.py | 828 | except Exception as e: | CODE |
| LOW | whisperlivekit/audio_processor.py | 848 | 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 | 560 | except Exception as e: | CODE |
| LOW⚡ | whisperlivekit/cli.py | 1174 | except Exception as e: | CODE |
| LOW⚡ | whisperlivekit/cli.py | 1624 | except Exception: | CODE |
| LOW | whisperlivekit/cli.py | 249 | except Exception: | CODE |
| LOW | whisperlivekit/cli.py | 976 | except Exception as e: | CODE |
| LOW | whisperlivekit/cli.py | 1274 | except Exception as e: | CODE |
| LOW | whisperlivekit/cli.py | 1370 | except Exception as e: | CODE |
| LOW | whisperlivekit/cli.py | 1378 | except Exception as e: | CODE |
| LOW | whisperlivekit/deepgram_compat.py | 251 | except Exception as e: | CODE |
| LOW | whisperlivekit/deepgram_compat.py | 300 | except Exception as e: | CODE |
| MEDIUM | whisperlivekit/deepgram_compat.py | 245 | def handle_results(): | CODE |
| LOW | whisperlivekit/basic_server.py | 84 | except Exception as e: | CODE |
| LOW | whisperlivekit/basic_server.py | 128 | except Exception as e: | CODE |
| LOW⚡ | whisperlivekit/basic_server.py | 145 | except Exception as e: | CODE |
| LOW⚡ | whisperlivekit/basic_server.py | 155 | except Exception as e: | CODE |
| LOW | whisperlivekit/translation_alignatt.py | 154 | except Exception as exc: # translation must never kill the session | CODE |
| LOW | whisperlivekit/translation_alignatt.py | 205 | except Exception: | CODE |
| LOW | whisperlivekit/translation_alignatt.py | 265 | except Exception as exc: | CODE |
| MEDIUM | whisperlivekit/translation_alignatt.py | 151 | def process(self) -> Tuple[Optional[Translation], TimedText]: | 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 | 238 | except Exception as e: | CODE |
| LOW | whisperlivekit/test_client.py | 260 | except Exception: | CODE |
| MEDIUM | whisperlivekit/test_client.py | 353 | print(f"Error: file not found: {audio_path}", file=sys.stderr) | CODE |
| MEDIUM | whisperlivekit/test_client.py | 224 | def receive_results(): | CODE |
| LOW⚡ | whisperlivekit/benchmark/metrics.py | 222 | except Exception: | CODE |
| LOW⚡ | whisperlivekit/benchmark/metrics.py | 231 | except Exception: | CODE |
| LOW⚡ | whisperlivekit/benchmark/metrics.py | 237 | except Exception: | CODE |
| LOW | whisperlivekit/benchmark/datasets.py | 532 | except Exception as e: | CODE |
| LOW | whisperlivekit/web/web_interface.py | 12 | except Exception as e: | CODE |
| LOW | whisperlivekit/web/web_interface.py | 92 | except Exception as e: | CODE |
| LOW | whisperlivekit/simul_whisper/backend.py | 262 | except Exception as e: | CODE |
| LOW | whisperlivekit/simul_whisper/backend.py | 277 | except Exception as e: | CODE |
| LOW | whisperlivekit/simul_whisper/backend.py | 285 | except Exception: | CODE |
| 17 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/__init__.py | 1 | CODE | |
| LOW | whisperlivekit/__init__.py | 2 | CODE | |
| LOW | whisperlivekit/__init__.py | 3 | CODE | |
| LOW | whisperlivekit/__init__.py | 4 | CODE | |
| LOW | whisperlivekit/__init__.py | 5 | CODE | |
| LOW | whisperlivekit/__init__.py | 5 | CODE | |
| LOW | whisperlivekit/__init__.py | 6 | CODE | |
| LOW | whisperlivekit/__init__.py | 6 | CODE | |
| LOW | whisperlivekit/__init__.py | 7 | CODE | |
| LOW | whisperlivekit/__init__.py | 7 | CODE | |
| LOW | whisperlivekit/cli.py | 875 | CODE | |
| LOW | whisperlivekit/translation_alignatt.py | 29 | CODE | |
| LOW | whisperlivekit/qwen3_vllm_asr.py | 3 | CODE | |
| LOW | whisperlivekit/qwen3_vllm_asr.py | 9 | CODE | |
| LOW | whisperlivekit/benchmark/compat.py | 36 | CODE | |
| LOW | whisperlivekit/benchmark/compat.py | 42 | CODE | |
| LOW | whisperlivekit/benchmark/compat.py | 48 | CODE | |
| LOW | whisperlivekit/benchmark/compat.py | 54 | CODE | |
| LOW | whisperlivekit/benchmark/compat.py | 56 | CODE | |
| LOW | whisperlivekit/benchmark/compat.py | 62 | 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_silent_backend_guard.py | 9 | CODE | |
| LOW | tests/test_pipeline.py | 31 | CODE | |
| LOW | tests/test_pipeline.py | 33 | CODE | |
| LOW | tests/test_pipeline.py | 41 | CODE | |
| LOW | tests/test_pipeline.py | 57 | CODE | |
| LOW | tests/test_pipeline.py | 58 | CODE | |
| LOW | scripts/determine_alignment_heads.py | 2 | CODE | |
| LOW | scripts/run_scatter_benchmark.py | 98 | CODE | |
| LOW | scripts/run_scatter_benchmark.py | 100 | CODE | |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/config.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/backend_support.py | 5 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/test_harness.py | 53 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/voxtral_mlx_asr.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/ffmpeg_manager.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/__init__.py | 9 | __all__ = [ | CODE |
| LOW | whisperlivekit/voxtral_hf_streaming.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/core.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | whisperlivekit/audio_processor.py | 618 | async def _update_diarization_state(self, diarization_segments) -> None: | CODE |
| LOW | whisperlivekit/audio_processor.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/metrics_collector.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/warmup.py | 4 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | whisperlivekit/cli.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/deepgram_compat.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/basic_server.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/translation.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/translation_alignatt.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/thread_safety.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/test_data.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/test_client.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | whisperlivekit/benchmark/runner.py | 12 | 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_pipeline.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | scripts/create_long_samples.py | 13 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/voxtral_mlx_asr.py | 344 | CODE | |
| LOW | whisperlivekit/tokens_alignment.py | 206 | CODE | |
| LOW | whisperlivekit/tokens_alignment.py | 239 | CODE | |
| LOW | whisperlivekit/core.py | 80 | CODE | |
| LOW | whisperlivekit/audio_processor.py | 371 | CODE | |
| LOW | whisperlivekit/audio_processor.py | 433 | CODE | |
| LOW | whisperlivekit/audio_processor.py | 492 | CODE | |
| LOW | whisperlivekit/audio_processor.py | 641 | CODE | |
| LOW | whisperlivekit/audio_processor.py | 675 | CODE | |
| LOW | whisperlivekit/audio_processor.py | 804 | CODE | |
| LOW | whisperlivekit/warmup.py | 6 | CODE | |
| LOW | whisperlivekit/cli.py | 309 | CODE | |
| LOW | whisperlivekit/cli.py | 338 | CODE | |
| LOW | whisperlivekit/cli.py | 454 | CODE | |
| LOW | whisperlivekit/cli.py | 623 | CODE | |
| LOW | whisperlivekit/cli.py | 1126 | CODE | |
| LOW | whisperlivekit/cli.py | 1253 | CODE | |
| LOW | whisperlivekit/cli.py | 1350 | CODE | |
| LOW | whisperlivekit/deepgram_compat.py | 219 | CODE | |
| LOW | whisperlivekit/model_paths.py | 68 | CODE | |
| LOW | whisperlivekit/benchmark/datasets.py | 445 | CODE | |
| LOW | whisperlivekit/simul_whisper/backend.py | 293 | 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 | 64 | 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 | 67 | 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 | scripts/run_scatter_benchmark.py | 95 | CODE | |
| LOW | scripts/run_scatter_benchmark.py | 115 | CODE | |
| LOW | scripts/python_support_matrix.py | 446 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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 |
|---|---|---|---|---|
| MEDIUM | whisperlivekit/local_agreement/whisper_online.py | 148 | # Create the tokenizer | COMMENT |
| MEDIUM | whisperlivekit/whisper/val.py | 92 | # Define the model architecture: a stateless function mapping token sequence and parameters to logits over what comes ne | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | whisperlivekit/ffmpeg_manager.py | 18 | sudo apt update && sudo apt install ffmpeg | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/silero_vad_iterator.py | 125 | 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 |
|---|---|---|---|---|
| LOW | whisperlivekit/audio_processor.py | 605 | if 'pcm_array' in locals() and pcm_array is not SENTINEL : # Check if pcm_array was assigned from queue | CODE |
| LOW | whisperlivekit/deepgram_compat.py | 206 | # Check if there's new silence after our last speech | COMMENT |
| LOW | whisperlivekit/whisper/__init__.py | 312 | # Check if it's already a valid local path | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | whisperlivekit/benchmark/runner.py | 75 | # Build harness kwargs | COMMENT |
| MEDIUM | whisperlivekit/benchmark/report.py | 45 | """Print a comprehensive benchmark report to the terminal.""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | whisperlivekit/web/live_transcription.js | 61 | const linesTranscriptDiv = document.getElementById("linesTranscript"); | COMMENT |