AI Slop Code RIsk Monitor

google-gemini/cookbook

Examples and guides for using the Gemini API

27.9 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for google-gemini/cookbook, a Jupyter Notebook project with 17,818 GitHub stars. SynthScan examined 15,494 lines of code across 94 source files, recording 231 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 27.9 (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.

27.9
Adjusted Signal
27.9
Raw Pattern Score
100%
Time Factor
2026-10-09
Last Push
17.8K
Stars
Jupyter Notebook
Language
15.5K
Lines of Code
94
Files
231
Pattern Hits
2026-10-12
Scan Date
0.37
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 28.6/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 25.6/100 · MEDIUM

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

Agent Over-Engineering Ratio 55.8/100 · HIGH

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

PR Review Velocity Impact 77.2/100 · CRITICAL

Which changes need focused human review? 231 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 35MEDIUM 26LOW 170

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 231 distinct pattern matches across 15 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.

Empty Error Handlers21 hits · 105 pts
SeverityFileLineSnippetContext
HIGHexamples/fastrtc_ui.py66except (ImportError, ModuleNotFoundError):CODE
HIGHquickstarts/Get_started_LiveAPI.py150except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveAPI.py169except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveAPI.py206except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveAPI.py246except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveAPI.py276except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveAPI.py292except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveAPI.py305except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveAPI.py336except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveTranslate.py112except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveTranslate.py135except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveTranslate.py159except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveTranslate.py179except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveTranslate.py204except asyncio.CancelledError:CODE
HIGHquickstarts/Get_started_LiveTranslate.py185except Exception:CODE
HIGHquickstarts/Get_started_LiveTranslate.py210except Exception:CODE
HIGHquickstarts/Get_started_LiveTranslate.py119except Exception:CODE
HIGHquickstarts/Get_started_LiveAPI_NativeAudio.py169except asyncio.CancelledError:CODE
HIGHquickstarts/websockets/Get_started_LiveAPI.py285except asyncio.CancelledError:CODE
HIGHquickstarts/websockets/Get_started_LiveAPI.py225except KeyError:CODE
HIGHquickstarts/websockets/Get_started_LiveAPI.py233except KeyError:CODE
Decorative Section Separators16 hits · 54 pts
SeverityFileLineSnippetContext
MEDIUM⚡tools/config.py33# ==============================================================================COMMENT
MEDIUM⚡tools/config.py35# ==============================================================================COMMENT
MEDIUM⚡tools/config.py41# ==============================================================================COMMENT
MEDIUM⚡tools/config.py43# ==============================================================================COMMENT
MEDIUMtools/config.py89# ==============================================================================COMMENT
MEDIUMtools/config.py91# ==============================================================================COMMENT
MEDIUMtools/config.py105# ==============================================================================COMMENT
MEDIUMtools/config.py107# ==============================================================================COMMENT
MEDIUMtools/config.py124# ==============================================================================COMMENT
MEDIUMtools/config.py126# ==============================================================================COMMENT
MEDIUMtools/config.py149# ==============================================================================COMMENT
MEDIUMtools/config.py151# ==============================================================================COMMENT
MEDIUMtools/config.py232# ==============================================================================COMMENT
MEDIUMtools/config.py234# ==============================================================================COMMENT
MEDIUMtools/config.py249# ==============================================================================COMMENT
MEDIUMtools/config.py251# ==============================================================================COMMENT
Excessive Try-Catch Wrapping39 hits · 49 pts
SeverityFileLineSnippetContext
LOWtools/check_all_links.py243 except Exception as e:CODE
LOWtools/check_all_links.py314 except Exception:CODE
LOWtools/check_all_links.py363 except Exception as e:CODE
LOWtools/check_all_links.py451 except Exception as e:CODE
LOWtools/check_all_links.py478 except Exception as get_err:CODE
LOWtools/check_all_links.py481 except Exception as e:CODE
LOWtools/check_readme_links.py170 except Exception as e:CODE
LOWtools/nb_tester/comparator.py352 except Exception as e:CODE
LOWtools/nb_tester/reporter.py145 except Exception as e:CODE
LOWtools/nb_tester/reporter.py192 except Exception as e:CODE
LOWtools/nb_tester/rules.py114 except Exception as e:CODE
LOWtools/nb_tester/cli.py182 except Exception as e:CODE
LOWtools/nb_tester/cli.py228 except Exception as e:CODE
LOWtools/nb_tester/cli.py567 except Exception as ex:CODE
LOWtools/nb_tester/llm_judge.py214 except Exception as e:CODE
LOWtools/nb_tester/grounded_verifier.py197 except Exception as e:CODE
LOWtools/nb_tester/ai_security_auditor.py191 except Exception as e:CODE
LOWtools/nb_tester/executor.py198 except Exception as e:CODE
LOWtools/nb_tester/executor.py365 except Exception as ex:CODE
LOWtools/nb_tester/executor.py443 except Exception as kernel_exc:CODE
LOWtools/nblint/linter.py170 except Exception as e:CODE
LOWtools/nblint/rules/model_selector.py75 except Exception as e:CODE
LOWtools/nbfmt/formatter.py207 except Exception as e:CODE
LOWexamples/gradio_audio.py128 except Exception as e:CODE
LOWexamples/gradio_audio.py151 except Exception as e:CODE
MEDIUMexamples/gradio_audio.py152 print(f"Error in receive: {str(e)}")CODE
LOWexamples/gradio_audio.py189 except Exception as e:CODE
LOWexamples/gradio_audio.py221 except Exception as e:CODE
MEDIUMquickstarts/Get_started_LyriaRealTime.py143 print("Error: Matching enum not found.")CODE
MEDIUM⚡quickstarts/Get_started_LyriaRealTime.py175 print(f"Error: Empty prompt text in segment '{segment_str_raw}'. Skipping this segment."CODE
MEDIUM⚡quickstarts/Get_started_LyriaRealTime.py182 print(f"Error: Invalid weight '{weight_s}' in segment '{segment_str_raw}'. Must be a numCODE
MEDIUM⚡quickstarts/Get_started_LyriaRealTime.py187 print(f"Error: Segment '{segment_str_raw}' is not in 'text:weight' format. Skipping this segCODE
MEDIUMquickstarts/Get_started_LyriaRealTime.py199 print("Error: Input contained ':' suggesting multi-prompt format, but no valid 'text:weight' segCODE
MEDIUMquickstarts/Get_started_LiveAPI.py267def capture_screen(self):CODE
LOWquickstarts/Get_started_LiveTranslate.py119 except Exception:CODE
LOWquickstarts/Get_started_LiveTranslate.py161 except Exception as e:CODE
LOWquickstarts/Get_started_LiveTranslate.py185 except Exception:CODE
LOWquickstarts/Get_started_LiveTranslate.py210 except Exception:CODE
LOWquickstarts/Get_started_LiveTranslate.py264 except Exception as e:CODE
Over-Commented Block40 hits · 40 pts
SeverityFileLineSnippetContext
LOWtools/nblint_cli.py1#!/usr/bin/env python3COMMENT
LOWtools/config.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/check_all_links.py1#!/usr/bin/env python3COMMENT
LOWtools/__init__.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/check_readme_links.py1#!/usr/bin/env python3COMMENT
LOWtools/nbfmt_cli.py1#!/usr/bin/env python3COMMENT
LOWtools/test_check_all_links.py1#!/usr/bin/env python3COMMENT
LOWtools/nb_tester/config.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nb_tester/comparator.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nb_tester/model_override.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nb_tester/reporter.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nb_tester/__init__.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nb_tester/rules.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nb_tester/logger.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nb_tester/cli.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nb_tester/security_scanner.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nb_tester/llm_judge.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nb_tester/grounded_verifier.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nb_tester/ai_security_auditor.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nb_tester/executor.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nblint/__init__.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nblint/linter.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nblint/rules/style.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nblint/rules/__init__.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nblint/rules/gemini.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nblint/rules/structure.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nblint/rules/syntax.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nblint/rules/model_selector.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nbfmt/formatter.py1# Copyright 2026 Google LLCCOMMENT
LOWtools/nbfmt/__init__.py1# Copyright 2026 Google LLCCOMMENT
LOWexamples/fastrtc_ui.py1# -*- coding: utf-8 -*-COMMENT
LOWexamples/gradio_audio.py1# -*- coding: utf-8 -*-COMMENT
LOWquickstarts/Get_started_LyriaRealTime.py1# -*- coding: utf-8 -*-COMMENT
LOWquickstarts/Get_started_LiveAPI.py1# -*- coding: utf-8 -*-COMMENT
LOWquickstarts/Get_started_LiveTranslate.py1# -*- coding: utf-8 -*-COMMENT
LOWquickstarts/Get_started_LiveAPI_NativeAudio.py1# -*- coding: utf-8 -*-COMMENT
LOWquickstarts/websockets/Get_started_LiveAPI.py1# -*- coding: utf-8 -*-COMMENT
LOWquickstarts/websockets/shell_websockets.sh1#!/bin/bashCOMMENT
LOWquickstarts/file-api/sample.sh1#!/bin/bashCOMMENT
LOWquickstarts/file-api/sample.py1# Copyright 2026 Google LLCCOMMENT
Unused Imports34 hits · 34 pts
SeverityFileLineSnippetContext
LOWtools/nblint_cli.py39CODE
LOWtools/nbfmt_cli.py39CODE
LOWtools/nbfmt_cli.py49CODE
LOWtools/nb_tester/comparator.py35CODE
LOWtools/nb_tester/comparator.py37CODE
LOWtools/nb_tester/comparator.py40CODE
LOWtools/nb_tester/comparator.py41CODE
LOWtools/nb_tester/comparator.py42CODE
LOWtools/nb_tester/reporter.py36CODE
LOWtools/nb_tester/reporter.py36CODE
LOWtools/nb_tester/reporter.py40CODE
LOWtools/nb_tester/reporter.py41CODE
LOWtools/nb_tester/reporter.py42CODE
LOWtools/nb_tester/__init__.py22CODE
LOWtools/nb_tester/logger.py40CODE
LOWtools/nb_tester/cli.py39CODE
LOWtools/nb_tester/cli.py47CODE
LOWtools/nb_tester/cli.py54CODE
LOWtools/nb_tester/grounded_verifier.py39CODE
LOWtools/nb_tester/executor.py41CODE
LOWtools/nb_tester/executor.py49CODE
LOWtools/nb_tester/executor.py53CODE
LOWtools/nblint/__init__.py17CODE
LOWtools/nblint/__init__.py17CODE
LOWtools/nblint/__init__.py17CODE
LOWtools/nblint/linter.py32CODE
LOWtools/nblint/rules/style.py30CODE
LOWtools/nblint/rules/structure.py29CODE
LOWtools/nblint/rules/model_selector.py32CODE
LOWtools/nbfmt/formatter.py31CODE
LOWtools/nbfmt/formatter.py31CODE
LOWtools/nbfmt/formatter.py35CODE
LOWtools/nbfmt/__init__.py17CODE
LOWtools/nbfmt/__init__.py17CODE
Cross-Language Confusion (JS/TS)5 hits · 32 pts
SeverityFileLineSnippetContext
HIGH⚡quickstarts-js/Get_Started.js732 return FalseCODE
HIGH⚡quickstarts-js/Get_Started.js735 return FalseCODE
HIGH⚡quickstarts-js/Get_Started.js736 return TrueCODE
HIGHquickstarts-js/Get_Started.js747print(f'The first 50 prime numbers are: {primes}')CODE
HIGHquickstarts-js/Get_Started.js748print(f'The sum of the first 50 prime numbers is: {sum_of_primes}')CODE
Deep Nesting28 hits · 28 pts
SeverityFileLineSnippetContext
LOWtools/nblint_cli.py125CODE
LOWtools/config.py160CODE
LOWtools/check_all_links.py211CODE
LOWtools/check_all_links.py320CODE
LOWtools/check_all_links.py439CODE
LOWtools/check_all_links.py487CODE
LOWtools/check_readme_links.py235CODE
LOWtools/nbfmt_cli.py113CODE
LOWtools/nbfmt_cli.py130CODE
LOWtools/nb_tester/comparator.py83CODE
LOWtools/nb_tester/cli.py57CODE
LOWtools/nb_tester/cli.py406CODE
LOWtools/nb_tester/security_scanner.py145CODE
LOWtools/nb_tester/security_scanner.py221CODE
LOWtools/nb_tester/llm_judge.py74CODE
LOWtools/nb_tester/grounded_verifier.py83CODE
LOWtools/nb_tester/ai_security_auditor.py77CODE
LOWtools/nb_tester/executor.py146CODE
LOWtools/nblint/rules/style.py85CODE
LOWtools/nblint/rules/style.py136CODE
LOWtools/nblint/rules/structure.py102CODE
LOWtools/nblint/rules/syntax.py45CODE
LOWtools/nbfmt/formatter.py110CODE
LOWexamples/gradio_audio.py226CODE
LOWquickstarts/Get_started_LyriaRealTime.py64CODE
LOWquickstarts/Get_started_LyriaRealTime.py88CODE
LOWquickstarts/Get_started_LiveAPI.py176CODE
LOWquickstarts/Get_started_LiveTranslate.py138CODE
Magic Placeholder Names5 hits · 25 pts
SeverityFileLineSnippetContext
HIGHtools/nb_tester/README.md60export GEMINI_API_KEY="your-api-key"CODE
HIGHtools/nb_tester/security_scanner.py162 or "YOUR_API_KEY" in upper_lineCODE
HIGHtools/nb_tester/security_scanner.py164 or "YOUR-API-KEY" in upper_lineCODE
HIGHquickstarts/file-api/README.md28echo "GOOGLE_API_KEY='YOUR_API_KEY'" >> .envCODE
HIGHquickstarts/file-api/README.md43echo "GOOGLE_API_KEY='YOUR_API_KEY'" >> .envCODE
Hyper-Verbose Identifiers17 hits · 17 pts
SeverityFileLineSnippetContext
LOWtools/check_all_links.py170def extract_anchors_from_content(content: str) -> Set[str]:CODE
LOWtools/check_all_links.py295def get_changed_files_from_git(repo_root: pathlib.Path) -> List[str]:CODE
LOWtools/test_check_all_links.py102 def test_extract_anchors_from_content(self) -> None:CODE
LOWtools/test_check_all_links.py116 def test_extract_links_skips_data_uris(self) -> None:CODE
LOWtools/test_check_all_links.py126 def test_validate_internal_link_success(self) -> None:CODE
LOWtools/test_check_all_links.py145 def test_validate_internal_link_failures(self) -> None:CODE
LOWtools/test_check_all_links.py162 def test_normalize_cell_source(self) -> None:CODE
LOWtools/test_check_all_links.py187 def test_extract_links_handles_source_variations(self) -> None:CODE
LOWtools/test_check_all_links.py213 def test_get_file_anchors_handles_source_variations(self) -> None:CODE
LOWtools/test_check_all_links.py237 def test_uppercase_scheme_link_handling(self) -> None:CODE
LOWtools/test_check_all_links.py264 def test_github_blob_url_with_query_params_and_casing(self) -> None:CODE
LOWtools/nb_tester/comparator.py325 def _compare_schema_validation(CODE
LOWtools/nb_tester/reporter.py149 def write_github_step_summary(self, suite_report: SuiteReport) -> None:CODE
LOWtools/nb_tester/rules.py204 def resolve_cell_action_and_strategy(CODE
LOWtools/nblint/rules/gemini.py111def check_api_key_secret_name(CODE
LOWtools/nblint/rules/gemini.py147def check_no_hardcoded_api_keys(CODE
LOWtools/nblint/rules/gemini.py188def check_no_youtube_downloaders(CODE
Cross-File Repetition3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHtools/nblint_cli.py0configures root logger format and verbosity. args: verbose: if true, set logging level to debug, else info.STRING
HIGHtools/check_readme_links.py0configures root logger format and verbosity. args: verbose: if true, set logging level to debug, else info.STRING
HIGHtools/nbfmt_cli.py0configures root logger format and verbosity. args: verbose: if true, set logging level to debug, else info.STRING
Modern Structural Boilerplate13 hits · 13 pts
SeverityFileLineSnippetContext
LOWtools/nblint_cli.py52logger = logging.getLogger(__name__)CODE
LOWtools/check_readme_links.py44logger = logging.getLogger(__name__)CODE
LOWtools/nbfmt_cli.py51logger = logging.getLogger(__name__)CODE
LOWtools/nb_tester/__init__.py25__all__ = ["ModelOverrideTransformer"]CODE
LOWtools/nblint/__init__.py19__all__ = ["NotebookLinter", "LintDiagnostic", "LintResult"]CODE
LOWtools/nblint/linter.py40logger = logging.getLogger(__name__)CODE
LOWtools/nblint/rules/style.py37logger = logging.getLogger(__name__)CODE
LOWtools/nblint/rules/gemini.py36logger = logging.getLogger(__name__)CODE
LOWtools/nblint/rules/structure.py36logger = logging.getLogger(__name__)CODE
LOWtools/nblint/rules/syntax.py39logger = logging.getLogger(__name__)CODE
LOWtools/nblint/rules/model_selector.py36logger = logging.getLogger(__name__)CODE
LOWtools/nbfmt/formatter.py41logger = logging.getLogger(__name__)CODE
LOWtools/nbfmt/__init__.py19__all__ = ["NotebookFormatter", "FormatResult"]CODE
Redundant / Tautological Comments6 hits · 9 pts
SeverityFileLineSnippetContext
LOWtools/check_readme_links.py213 # Check if located in an ignored directory (e.g. tools/, .github/)COMMENT
LOWtools/nblint/rules/style.py115 # Check if line should be skipped (e.g. blockquote, code line, form parameter)COMMENT
LOWtools/nblint/rules/structure.py145 # Check if href URL existsCOMMENT
LOWquickstarts/Get_started_LiveAPI.py215 # Check if the frame was read successfullyCOMMENT
LOWquickstarts/Get_started_LiveTranslate.py155 # Print output (translated) transcriptCOMMENT
LOWquickstarts/websockets/Get_started_LiveAPI.py119 # Check if the frame was read successfullyCOMMENT
Modern AI Meta-Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMquickstarts/Get_started_LiveAPI.py86# Trigger tokens sent so that model does not hallucinate in long conversationsCOMMENT
MEDIUMquickstarts/Get_started_LiveAPI.py87# Sliding window to retain the context within the context window limitCOMMENT
Synthetic Comment Markers1 hit · 2 pts
SeverityFileLineSnippetContext
HIGHtools/nb_tester/ai_security_auditor.py53 """Structured security audit result generated by Gemini."""STRING
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMquickstarts-js/Audio.js253The video presents a compelling review of Google's new Gemini 2.5 Pro Experimental AI, asserting its superiority asCODE