Repository Analysis

ssrajadh/sentrysearch

Semantic search over videos using Gemini Embedding 2 or Qwen3-VL.

52.3 Strong AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of ssrajadh/sentrysearch, a Python project with 4,400 GitHub stars. SynthScan v2.0 examined 10,527 lines of code across 45 source files, recording 345 pattern matches distributed across 7 syntactic categories. The overall adjusted score of 52.3 places this repository in the Strong 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).

52.3
Adjusted Score
52.3
Raw Score
100%
Time Factor
2026-07-23
Last Push
4.4K
Stars
Python
Language
10.5K
Lines of Code
45
Files
345
Pattern Hits
2026-08-02
Scan Date
0.00
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

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.

CRITICAL 0HIGH 0MEDIUM 70LOW 275

Directory Score Breakdown

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.

Pattern Findings

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

Decorative Section Separators70 hits · 267 pts
SeverityFileLineSnippetContext
MEDIUMsentrysearch/store.py149 # ------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/store.py151 # ------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/store.py205 # ------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/store.py207 # ------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/overlay.py51# ---------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/overlay.py53# ---------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/overlay.py137# ---------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/overlay.py139# ---------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/_toolkit_cache.py122# ----------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/_toolkit_cache.py126# ----------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/gemini_embedder.py21# ---------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/gemini_embedder.py23# ---------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/gemini_embedder.py43# ---------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/gemini_embedder.py45# ---------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/gemini_embedder.py55# ---------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/gemini_embedder.py57# ---------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/gemini_embedder.py91# ---------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/gemini_embedder.py93# ---------------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py652# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py654# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py986# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py988# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py1120# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py1122# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py1288# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py1290# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py313# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py315# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py391# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py393# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py1323# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py1325# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py1355# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py1357# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py1395# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py1397# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py1448# -----------------------------------------------------------------------COMMENT
MEDIUMsentrysearch/cli.py1450# -----------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py9# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py11# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py33# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py35# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py62# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py64# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py74# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py76# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunker.py46# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunker.py48# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunker.py69# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunker.py71# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunker.py83# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunker.py85# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunker.py155# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunker.py157# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunker.py174# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunker.py176# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunker.py21# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunker.py23# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_store.py148# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_store.py150# ---------------------------------------------------------------------------COMMENT
10 more matches not shown…
Hyper-Verbose Identifiers215 hits · 233 pts
SeverityFileLineSnippetContext
LOWsentrysearch/metadata.py112def _strip_emulation_prevention_bytes(data: bytes) -> bytes:CODE
LOWsentrysearch/chunker.py67def _parse_duration_from_ffmpeg_output(stderr_text: str) -> float:CODE
LOWsentrysearch/qwen_cloud_embedder.py33def default_dashscope_embedding_model() -> str:CODE
LOWsentrysearch/qwen_cloud_embedder.py68def _is_transient_transport_error(exc: BaseException) -> bool:CODE
LOWsentrysearch/qwen_cloud_embedder.py251 def _parse_embedding_response(resp) -> list[float]:CODE
LOWsentrysearch/cli.py29def _reject_conflicting_model_flags(CODE
LOWsentrysearch/cli.py94def _strip_private_result_fields(results: list[dict]) -> list[dict]:CODE
LOWtests/test_chunker.py40 def test_ffmpeg_error_message_raised(self):CODE
LOWtests/test_chunker.py57 def test_falls_back_to_imageio(self, _mock_which):CODE
LOWtests/test_chunker.py62 def test_raises_when_no_ffmpeg(self, _mock_which):CODE
LOWtests/test_chunker.py88 def test_short_video_single_chunk(self, tiny_video):CODE
LOWtests/test_chunker.py97 def test_splits_into_multiple_chunks(self, longer_video):CODE
LOWtests/test_chunker.py113 def test_overlap_equal_to_chunk_duration_raises(self, tiny_video):CODE
LOWtests/test_chunker.py117 def test_overlap_greater_than_chunk_duration_raises(self, tiny_video):CODE
LOWtests/test_chunker.py121 def test_nonexistent_file_raises(self):CODE
LOWtests/test_chunker.py127 def test_short_video_single_span(self):CODE
LOWtests/test_chunker.py131 def test_matches_chunk_video_starts(self, longer_video):CODE
LOWtests/test_chunker.py142 def test_invalid_overlap_raises(self):CODE
LOWtests/test_chunker.py146 def test_long_video_multiple_spans(self):CODE
LOWtests/test_chunker.py160 def test_creates_preprocessed_file(self, tiny_video, tmp_path):CODE
LOWtests/test_chunker.py167 def test_falls_back_on_invalid_input(self, tmp_path):CODE
LOWtests/test_chunker.py179 def test_finds_supported_video_files(self, tmp_path):CODE
LOWtests/test_search.py45 def test_n_results_limits_output(self, tmp_store, mock_embed_query):CODE
LOWtests/test_search.py57 def test_dedupe_drops_near_duplicates(self, tmp_store, mock_embed_query):CODE
LOWtests/test_search.py87 def test_dedupe_none_returns_all(self, tmp_store, mock_embed_query):CODE
LOWtests/test_search.py122 def test_dedupe_single_result(self, tmp_store, mock_embed_query):CODE
LOWtests/test_trimmer.py38 def test_special_chars_cleaned(self):CODE
LOWtests/test_trimmer.py51 def test_end_before_start_raises(self, tiny_video, tmp_path):CODE
LOWtests/test_trimmer.py56 def test_creates_output_directory(self, tiny_video, tmp_path):CODE
LOWtests/test_trimmer.py76 def test_empty_results_raises(self, tmp_path):CODE
LOWtests/test_trimmer.py82 def test_trims_multiple_results(self, tiny_video, tmp_path):CODE
LOWtests/test_trimmer.py103 def test_count_exceeding_results_trims_all(self, tiny_video, tmp_path):CODE
LOWtests/test_trimmer.py111 def test_reuses_rerank_clip_path(self, tmp_path, monkeypatch):CODE
LOWtests/test_trimmer.py138 def test_missing_rerank_clip_path_falls_back_to_trim(CODE
LOWtests/test_trimmer.py169 def test_empty_results_raises(self, tmp_path):CODE
LOWtests/test_gemini_reranker.py14 def test_raises_without_api_key(self):CODE
LOWtests/test_gemini_reranker.py21 def test_creates_client_with_key(self, mock_client_cls):CODE
LOWtests/test_gemini_reranker.py31 def test_score_uses_flash_json_retry_and_limiter(CODE
LOWtests/test_gemini_reranker.py62 def test_score_returns_none_for_unparseable_output(CODE
LOWtests/test_local_embedder.py22 def test_full_hf_id_passed_through(self):CODE
LOWtests/test_local_embedder.py26 def test_custom_model_name_passed_through(self):CODE
LOWtests/test_local_embedder.py30 def test_aliases_dict_has_expected_keys(self):CODE
LOWtests/test_local_embedder.py60 def test_quantize_none_by_default(self):CODE
LOWtests/test_local_embedder.py74 def test_missing_torch_raises_local_model_error(self):CODE
LOWtests/test_local_embedder.py80 def test_load_model_called_once(self):CODE
LOWtests/test_local_embedder.py88 def test_intel_mac_points_to_gemini_backend(self, monkeypatch):CODE
LOWtests/test_local_embedder.py97 def test_linux_cpu_only_uses_general_warning(self, monkeypatch):CODE
LOWtests/test_local_embedder.py106 def test_apple_silicon_cpu_only_uses_general_warning(self, monkeypatch):CODE
LOWtests/test_local_embedder.py117 def test_alias_returned_as_is(self):CODE
LOWtests/test_local_embedder.py121 def test_full_hf_id_reversed_to_alias(self):CODE
LOWtests/test_local_embedder.py125 def test_custom_model_sanitized(self):CODE
LOWtests/test_local_embedder.py153 def test_embed_query_calls_load_model(self):CODE
LOWtests/test_local_embedder.py162 def test_embed_video_chunk_calls_load_model(self):CODE
LOWtests/test_metadata.py13 def test_removes_prevention_byte(self):CODE
LOWtests/test_metadata.py17 def test_preserves_non_prevention_sequences(self):CODE
LOWtests/test_metadata.py28 def test_nonexistent_file_returns_empty(self):CODE
LOWtests/test_metadata.py31 def test_synthetic_video_no_sei(self, tiny_video):CODE
LOWtests/test_reranker.py22 def test_prompt_is_video_generic(self):CODE
LOWtests/test_reranker.py27 def test_schema_requires_score_fields(self):CODE
LOWtests/test_reranker.py38 def test_accepts_json_code_fence(self):CODE
155 more matches not shown…
Excessive Try-Catch Wrapping29 hits · 24 pts
SeverityFileLineSnippetContext
LOWsentrysearch/overlay.py37 except Exception:CODE
LOWsentrysearch/overlay.py191 except Exception:CODE
LOWsentrysearch/reranker.py134 except Exception as exc:CODE
LOWsentrysearch/chunker.py39 except Exception:CODE
LOWsentrysearch/chunker.py60 except Exception as exc: # pragma: no cover - environment specificCODE
LOWsentrysearch/chunker.py298 except Exception:CODE
LOWsentrysearch/chunker.py338 except Exception:CODE
LOWsentrysearch/_toolkit_cache.py44 except Exception:CODE
LOWsentrysearch/gemini_embedder.py65 except Exception as exc:CODE
LOWsentrysearch/qwen_cloud_embedder.py128 except Exception as exc: # noqa: BLE001 — narrow follow-up belowCODE
LOWsentrysearch/local_embedder.py64 except Exception:CODE
LOWsentrysearch/local_embedder.py124 except Exception:CODE
LOWsentrysearch/local_embedder.py259 except Exception as e:CODE
LOWsentrysearch/cli.py646 except Exception as e:CODE
LOWsentrysearch/cli.py980 except Exception as e:CODE
LOWsentrysearch/cli.py1114 except Exception as e:CODE
LOWsentrysearch/cli.py1282 except Exception as e:CODE
LOWsentrysearch/cli.py59 except Exception as e:CODE
LOWsentrysearch/cli.py87 except Exception as e:CODE
LOWsentrysearch/cli.py135 except Exception:CODE
LOWsentrysearch/cli.py183 except Exception as exc:CODE
LOWsentrysearch/cli.py374 except Exception as e:CODE
LOWsentrysearch/cli.py516 except Exception:CODE
LOWsentrysearch/cli.py807 except Exception as e:CODE
LOWsentrysearch/cli.py1270 except Exception as e:CODE
LOWsentrysearch/cli.py1306 except Exception as e:CODE
LOWsentrysearch/qwen_reranker.py70 except Exception:CODE
LOWsentrysearch/qwen_reranker.py147 except Exception as e:CODE
LOWsentrysearch/qwen_reranker.py158 except Exception:CODE
Unused Imports19 hits · 18 pts
SeverityFileLineSnippetContext
LOWsentrysearch/reranker.py3CODE
LOWsentrysearch/highlights.py8CODE
LOWsentrysearch/_toolkit_cache.py8CODE
LOWsentrysearch/qwen_cloud_embedder.py13CODE
LOWsentrysearch/local_embedder.py161CODE
LOWsentrysearch/qwen_reranker.py3CODE
LOWsentrysearch/qwen_reranker.py104CODE
LOWsentrysearch/search.py3CODE
LOWsentrysearch/embedder.py9CODE
LOWsentrysearch/embedder.py9CODE
LOWsentrysearch/embedder.py10CODE
LOWsentrysearch/embedder.py10CODE
LOWsentrysearch/embedder.py10CODE
LOWsentrysearch/gemini_reranker.py3CODE
LOWtests/test_search.py5CODE
LOWtests/test_metadata.py3CODE
LOWtests/test_toolkit_cache.py3CODE
LOWtests/test_toolkit_cache.py13CODE
LOWtests/test_highlights.py3CODE
Deep Nesting9 hits · 6 pts
SeverityFileLineSnippetContext
LOWsentrysearch/store.py41CODE
LOWsentrysearch/gemini_embedder.py59CODE
LOWsentrysearch/cli.py318CODE
LOWsentrysearch/cli.py425CODE
LOWsentrysearch/cli.py688CODE
LOWsentrysearch/cli.py921CODE
LOWsentrysearch/cli.py1022CODE
LOWsentrysearch/cli.py1158CODE
LOWsentrysearch/embedder.py19CODE
Redundant / Tautological Comments2 hits · 2 pts
SeverityFileLineSnippetContext
LOWsentrysearch/local_embedder.py119 # Check if model is already cached locallyCOMMENT
LOWsentrysearch/cli.py727 # Check if data exists under a different modelCOMMENT
AI Structural Patterns1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsentrysearch/local_embedder.py204CODE