AI Slop Code RIsk Monitor

fishaudio/fish-speech

SOTA Open Source TTS

7.2 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for fishaudio/fish-speech, a Python project with 32,994 GitHub stars. SynthScan examined 25,530 lines of code across 157 source files, recording 147 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 7.2 (Moderate 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.

7.2
Adjusted Signal
7.2
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
33.0K
Stars
Python
Language
25.5K
Lines of Code
157
Files
147
Pattern Hits
2026-10-12
Scan Date
0.03
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 15.2/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 64 finding(s).

Hallucinated Dependency & Supply Chain Risk 12.3/100 · LOW

Are imports declared and package/API names verified? 55 finding(s).

Agent Over-Engineering Ratio 11.8/100 · LOW

Are wrappers, guards, and repeated structures necessary? 59 finding(s).

PR Review Velocity Impact 30.4/100 · MEDIUM

Which changes need focused human review? 147 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 4MEDIUM 9LOW 134

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 147 distinct pattern matches across 13 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.

Unused Imports52 hits · 52 pts
SeverityFileLineSnippetContext
LOWtools/api_server.py10CODE
LOWtools/api_client.py2CODE
LOWtools/vqgan/extract_vq.py8CODE
LOWtools/server/model_utils.py2CODE
LOWtools/server/model_utils.py6CODE
LOWtools/server/views.py4CODE
LOWtools/server/views.py27CODE
LOWtools/llama/merge_lora.py1CODE
LOWtools/llama/merge_lora.py6CODE
LOWtools/llama/merge_lora.py13CODE
LOWtools/llama/build_dataset.py5CODE
LOWfish_speech/conversation.py8CODE
LOWfish_speech/tokenizer.py1CODE
LOWfish_speech/tokenizer.py3CODE
LOWfish_speech/tokenizer.py10CODE
LOWfish_speech/train.py4CODE
LOWfish_speech/train.py13CODE
LOWfish_speech/callbacks/grad_norm.py3CODE
LOWfish_speech/callbacks/__init__.py1CODE
LOWfish_speech/callbacks/__init__.py2CODE
LOWfish_speech/datasets/concat_repeat.py2CODE
LOWfish_speech/datasets/semantic.py3CODE
LOWfish_speech/datasets/semantic.py9CODE
LOWfish_speech/datasets/semantic.py12CODE
LOWfish_speech/datasets/semantic.py13CODE
LOWfish_speech/datasets/semantic.py615CODE
LOWfish_speech/utils/__init__.py1CODE
LOWfish_speech/utils/__init__.py2CODE
LOWfish_speech/utils/__init__.py3CODE
LOWfish_speech/utils/__init__.py4CODE
LOWfish_speech/utils/__init__.py4CODE
LOWfish_speech/utils/__init__.py5CODE
LOWfish_speech/utils/__init__.py6CODE
LOWfish_speech/utils/__init__.py7CODE
LOWfish_speech/utils/__init__.py7CODE
LOWfish_speech/utils/__init__.py8CODE
LOWfish_speech/utils/__init__.py8CODE
LOWfish_speech/utils/__init__.py8CODE
LOWfish_speech/utils/__init__.py8CODE
LOWfish_speech/utils/spectrogram.py4CODE
LOWfish_speech/utils/schema.py2CODE
LOWfish_speech/utils/schema.py3CODE
LOWfish_speech/utils/schema.py4CODE
LOWfish_speech/utils/schema.py7CODE
LOWfish_speech/utils/schema.py12CODE
LOWfish_speech/utils/schema.py12CODE
LOWfish_speech/models/dac/modded_dac.py8CODE
LOWfish_speech/models/text2semantic/lit_module.py1CODE
LOWfish_speech/models/text2semantic/inference.py37CODE
LOWfish_speech/models/text2semantic/inference.py37CODE
LOWfish_speech/text/__init__.py1CODE
LOWfish_speech/i18n/__init__.py1CODE
Self-Referential Comments8 hits · 24 pts
SeverityFileLineSnippetContext
MEDIUMtools/run_webui.py76 # Create the inference engineCOMMENT
MEDIUMtools/vqgan/extract_vq.py23# This file is used to convert the audio files to text files using the Whisper model.COMMENT
MEDIUMtools/server/views.py235 # Create a temporary file for the audio dataCOMMENT
MEDIUMfish_speech/tokenizer.py81 # Create a lookup tensor to handle potential gaps in token IDs safelyCOMMENT
MEDIUMfish_speech/inference_engine/reference_loader.py36 # Define the torchaudio backendCOMMENT
MEDIUMfish_speech/inference_engine/__init__.py166 # Create a queue to get the responseCOMMENT
MEDIUMfish_speech/i18n/scan.py55# Define the standard file nameCOMMENT
MEDIUMfish_speech/i18n/scan.py78# Define the standard file nameCOMMENT
Excessive Try-Catch Wrapping21 hits · 22 pts
SeverityFileLineSnippetContext
LOWtools/api_server.py109 except Exception as exc:CODE
LOWtools/vqgan/create_train_split.py48 except Exception as e:CODE
LOWtools/vqgan/extract_vq.py101 except Exception as e:CODE
LOWtools/server/api_utils.py146 except Exception as e:CODE
LOWtools/server/views.py108 except Exception as e:CODE
LOWtools/server/views.py139 except Exception as e:CODE
LOWtools/server/views.py201 except Exception as e:CODE
LOWtools/server/views.py271 except Exception as e:CODE
LOWtools/server/views.py310 except Exception as e:CODE
LOWtools/server/views.py372 except Exception as e:CODE
LOWtools/server/views.py480 except Exception as e:CODE
LOWtools/llama/build_dataset.py40 except Exception as e:CODE
LOWtools/llama/build_dataset.py87 except Exception as e:CODE
LOWfish_speech/datasets/vqgan.py70 except Exception as e:CODE
MEDIUMfish_speech/datasets/vqgan.py67def __getitem__(self, idx):CODE
LOWfish_speech/utils/utils.py72 except Exception as ex:CODE
LOWfish_speech/utils/schema.py72 except Exception:CODE
LOWfish_speech/models/text2semantic/llama.py527 except Exception as e:CODE
LOWfish_speech/models/text2semantic/inference.py811 except Exception as e:CODE
LOWfish_speech/inference_engine/reference_loader.py245 except Exception as e:CODE
LOWfish_speech/inference_engine/reference_loader.py282 except Exception as e:CODE
Hyper-Verbose Identifiers22 hits · 22 pts
SeverityFileLineSnippetContext
LOWtools/server/model_utils.py55def cached_vqgan_batch_encode(model, audios: list[bytes]):CODE
LOWtools/server/api_utils.py79async def buffer_to_async_generator(buffer):CODE
LOWtools/llama/quantize.py22def dynamically_quantize_per_channel(x, quant_min, quant_max, target_dtype):CODE
LOWtools/llama/quantize.py101def group_quantize_tensor_from_qparams(w, scales, zeros, n_bit=4, groupsize=128):CODE
LOWtools/llama/quantize.py137def group_dequantize_tensor_from_qparams(CODE
LOWtools/llama/quantize.py168 def create_quantized_state_dict(self) -> "StateDict":CODE
LOWtools/llama/quantize.py195 def create_quantized_state_dict(self):CODE
LOWtools/llama/quantize.py310 def create_quantized_state_dict(self):CODE
LOWfish_speech/scheduler.py4def get_cosine_schedule_with_warmup_lr_lambda(CODE
LOWfish_speech/scheduler.py28def get_constant_schedule_with_warmup_lr_lambda(CODE
LOWfish_speech/models/dac/modded_dac.py225 def _compute_conformer_pos_scores(self, q: Tensor, seqlen: int) -> Tensor:CODE
LOWfish_speech/models/text2semantic/llama.py984 def eq_scaled_dot_product_attention(CODE
LOWfish_speech/models/text2semantic/inference.py44def multinomial_sample_one_no_sync(probs_sort):CODE
LOWtests/test_visualization.py36def test_content_sequence_visualize_without_color(monkeypatch, capsys):CODE
LOWtests/test_visualization.py47def test_content_sequence_visualize_merges_audio_and_semantic_tokens(CODE
LOWtests/test_visualization.py73def test_conversation_visualize_forwards_options(monkeypatch):CODE
LOWtests/test_active_kv_attention.py90 def test_attention_passes_only_active_kv_prefix_to_sdpa(self) -> None:CODE
LOWtests/test_active_kv_attention.py116 def test_active_prefix_matches_masked_full_cache_with_tolerance(self) -> None:CODE
LOWtests/test_active_kv_attention.py201 def test_prefill_first_decode_and_maximum_prefix(self) -> None:CODE
LOWtests/test_active_kv_attention.py322 def test_real_decode_chain_preserves_greedy_tokens_and_distributions(self) -> None:CODE
LOWtests/test_active_kv_attention.py359 def test_legacy_decode_callback_remains_supported(self) -> None:CODE
LOWtests/test_active_kv_attention.py408 def test_compiled_decode_uses_one_dynamic_graph(self) -> None:CODE
Redundant / Tautological Comments10 hits · 14 pts
SeverityFileLineSnippetContext
LOWtools/run_webui.py48 # Check if MPS or CUDA is availableCOMMENT
LOWtools/vqgan/extract_vq.py37 import torchaudio.io._load_audio_fileobj # Check if ffmpeg backend is availableCODE
LOWtools/server/model_manager.py30 # Check if MPS or CUDA is availableCOMMENT
LOWtools/server/views.py158 # Check if the text is too longCOMMENT
LOWtools/server/views.py165 # Check if streaming is enabledCOMMENT
LOWfish_speech/utils/schema.py69 ): # Check if audio is a string (Base64)CODE
LOWfish_speech/inference_engine/reference_loader.py170 # Check if directory contains at least one audio file and corresponding .lab fileCOMMENT
LOWfish_speech/inference_engine/reference_loader.py177 # Check if corresponding .lab file exists for at least one audio fileCOMMENT
LOWfish_speech/inference_engine/reference_loader.py206 # Check if reference already existsCOMMENT
LOWfish_speech/inference_engine/reference_loader.py211 # Check if audio file existsCOMMENT
Deep Nesting13 hits · 13 pts
SeverityFileLineSnippetContext
LOWtools/vqgan/create_train_split.py20CODE
LOWtools/server/api_utils.py83CODE
LOWtools/webui/__init__.py9CODE
LOWtools/llama/quantize.py267CODE
LOWtools/llama/quantize.py310CODE
LOWfish_speech/content_sequence.py87CODE
LOWfish_speech/datasets/semantic.py118CODE
LOWfish_speech/datasets/semantic.py341CODE
LOWfish_speech/utils/logger.py27CODE
LOWfish_speech/utils/braceexpand.py105CODE
LOWfish_speech/utils/braceexpand.py156CODE
LOWfish_speech/models/text2semantic/llama.py500CODE
LOWfish_speech/models/text2semantic/inference.py861CODE
Cross-Language Confusion2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHtools/server/views.py70 {"error": "WebUI not built. Run: cd awesome_webui && npm run build"},CODE
HIGHtools/webui/__init__.py17 js="() => {const params = new URLSearchParams(window.location.search);if (!params.has('__theme')) {params.seCODE
AI Structural Patterns9 hits · 9 pts
SeverityFileLineSnippetContext
LOWfish_speech/datasets/semantic.py73CODE
LOWfish_speech/datasets/semantic.py283CODE
LOWfish_speech/datasets/semantic.py300CODE
LOWfish_speech/utils/spectrogram.py63CODE
LOWfish_speech/models/dac/modded_dac.py195CODE
LOWfish_speech/models/dac/modded_dac.py805CODE
LOWfish_speech/models/dac/rvq.py205CODE
LOWfish_speech/models/text2semantic/llama.py874CODE
LOWfish_speech/models/text2semantic/inference.py545CODE
Modern Structural Boilerplate6 hits · 6 pts
SeverityFileLineSnippetContext
LOWfish_speech/tokenizer.py12logger = logging.getLogger(__name__)CODE
LOWfish_speech/callbacks/__init__.py4__all__ = ["GradNormMonitor", "GradAccumProgressBar"]CODE
LOWfish_speech/utils/__init__.py10__all__ = [CODE
LOWfish_speech/utils/braceexpand.py12__all__ = ["braceexpand", "alphabet", "UnbalancedBracesError"]CODE
LOWfish_speech/text/__init__.py3__all__ = ["clean_text"]CODE
LOWfish_speech/i18n/__init__.py3__all__ = ["i18n"]CODE
Magic Placeholder Names1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHtools/api_client.py133 default="YOUR_API_KEY",CODE
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHfish_speech/utils/schema.py72except Exception:CODE
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtools/llama/build_dataset.py65def run_task(task):CODE
Over-Commented Block1 hit · 1 pts
SeverityFileLineSnippetContext
LOWfish_speech/configs/base.yaml81 # log_model: False # upload lightning ckptsCOMMENT