Repository Analysis

The-Vibe-Company/Quivr

Opiniated RAG for integrating GenAI in your apps 🧠 Focus on your product rather than the RAG. Easy integration in existing products with customisation! Any LLM: GPT4, Groq, Llama. Any Vectorstore: PGVector, Faiss. Any Files. Anyway you want.

9.4 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of The-Vibe-Company/Quivr, a Python project with 39,452 GitHub stars. SynthScan v2.0 examined 20,189 lines of code across 177 source files, recording 137 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 9.4 places this repository in the Low 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).

9.4
Adjusted Score
9.4
Raw Score
100%
Time Factor
2026-08-31
Last Push
39.5K
Stars
Python
Language
20.2K
Lines of Code
177
Files
137
Pattern Hits
2026-09-02
Scan Date
0.01
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 1MEDIUM 23LOW 113

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 137 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.

Hyper-Verbose Identifiers49 hits · 52 pts
SeverityFileLineSnippetContext
LOWcore/tests/test_brain.py14def test_brain_empty_files_no_vectordb(fake_llm, embedder):CODE
LOWcore/tests/test_brain.py37async def test_brain_from_files_success(CODE
LOWcore/tests/test_brain.py60async def test_brain_from_langchain_docs(embedder, fake_llm, mem_vector_store):CODE
LOWcore/tests/test_utils.py13def test_model_supports_function_calling():CODE
LOWcore/tests/test_utils.py18def test_get_prev_message_incorrect_message():CODE
LOWcore/tests/test_utils.py27def test_get_prev_message_str():CODE
LOWcore/tests/test_utils.py44def test_parse_chunk_response_nofunc_calling():CODE
LOWcore/tests/test_utils.py62def test_parse_chunk_response_func_calling(chunks_stream_answer):CODE
LOWcore/tests/test_chat_history.py19def test_chat_history_constructor():CODE
LOWcore/tests/test_chat_history.py37def test_chat_history_get_history(ai_message: AIMessage, human_message: HumanMessage):CODE
LOWcore/tests/test_chat_history.py56def test_chat_history_iter_pairs_invalid(CODE
LOWcore/tests/test_chat_history.py66def test_chat_history_iter_pais(ai_message: AIMessage, human_message: HumanMessage):CODE
LOWcore/tests/test_llm_endpoint.py11def test_llm_endpoint_from_config_default():CODE
LOWcore/tests/test_llm_endpoint.py29def test_llm_endpoint_from_config():CODE
LOWcore/tests/test_llm_endpoint.py42def test_llm_endpoint_constructor():CODE
LOWcore/tests/test_config.py21def test_default_retrievalconfig():CODE
LOWcore/tests/test_quivr_file.py25def test_create_file_add_metadata():CODE
LOWcore/tests/processor/test_registry.py26def test_get_default_processors_cls():CODE
LOWcore/tests/processor/test_registry.py38def test_get_default_processors_cls_core():CODE
LOWcore/tests/processor/test_registry.py46def test_append_proc_mapping_empty():CODE
LOWcore/tests/processor/test_registry.py63def test_append_proc_mapping_priority():CODE
LOWcore/tests/processor/test_registry.py142def test_get_processor_cls_import_error(caplog):CODE
LOWcore/tests/processor/test_registry.py150def test_get_processor_cls_error():CODE
LOWcore/tests/processor/test_registry.py156def test_register_new_proc_noappend():CODE
LOWcore/tests/processor/test_registry.py162def test_register_new_proc_append(caplog):CODE
LOWcore/tests/processor/test_registry.py191def test_register_non_processor():CODE
LOWcore/tests/processor/test_registry.py199def test_register_override_proc():CODE
LOWcore/tests/processor/test_registry.py215def test_register_override_error():CODE
LOWcore/tests/processor/test_registry.py233def test_available_processors():CODE
LOWcore/tests/processor/test_simple_txt_processor.py11def test_recursive_character_splitter():CODE
LOWcore/tests/processor/test_tika_processor.py18async def test_send_parse_tika_exception(quivr_pdf):CODE
LOW…tests/processor/pdf/test_unstructured_pdf_processor.py14async def test_unstructured_pdf_processor():CODE
LOW…tests/processor/pdf/test_unstructured_pdf_processor.py34async def test_unstructured_pdf_processor_fail(ext):CODE
LOW…e/tests/processor/community/test_markdown_processor.py30async def test_markdown_processor_fail(quivr_txt):CODE
LOWcore/quivr_core/llm/llm_endpoint.py66 def _calculate_tokenizer_size(self) -> int:CODE
LOW…core/processor/implementations/simple_txt_processor.py12def recursive_character_splitter(CODE
LOWcore/quivr_core/rag/quivr_rag_langgraph.py198 def has_non_completable_tasks(self) -> bool:CODE
LOWcore/quivr_core/rag/quivr_rag_langgraph.py521 def filter_chunks_by_relevance(self, chunks: List[Document], **kwargs):CODE
LOWcore/quivr_core/rag/quivr_rag_langgraph.py770 async def retrieve_full_documents_context(self, state: AgentState) -> AgentState:CODE
LOWcore/quivr_core/rag/quivr_rag_langgraph.py1157 def _is_final_node_and_chat_model_stream(self, event: StreamEvent) -> bool:CODE
LOWcore/quivr_core/rag/quivr_rag_langgraph.py1175 async def ainvoke_structured_output(CODE
LOWcore/quivr_core/rag/utils.py26def model_supports_function_calling(model_name: str):CODE
LOWcore/quivr_core/rag/utils.py32def format_history_to_openai_mesages(CODE
LOWcore/quivr_core/rag/utils.py117def get_answers_from_tool_calls(tool_calls):CODE
LOWcore/quivr_core/rag/entities/config.py24def normalize_to_env_variable_name(name: str) -> str:CODE
LOWcore/quivr_core/rag/entities/config.py281 def get_supplier_by_model_name(cls, model: str) -> DefaultModelSuppliers | None:CODE
LOWcore/quivr_core/rag/entities/config.py510 def resolve_special_edges_in_name_and_edges(self):CODE
LOWcore/quivr_core/rag/entities/config.py563 def check_first_node_is_start(self):CODE
LOWcore/quivr_core/brain/brain.py402 async def afrom_langchain_documents(CODE
Decorative Section Separators16 hits · 41 pts
SeverityFileLineSnippetContext
MEDIUMcore/quivr_core/rag/prompts.py33 # ---------------------------------------------------------------------------COMMENT
MEDIUMcore/quivr_core/rag/prompts.py35 # ---------------------------------------------------------------------------COMMENT
MEDIUMcore/quivr_core/rag/prompts.py57 # ---------------------------------------------------------------------------COMMENT
MEDIUMcore/quivr_core/rag/prompts.py59 # ---------------------------------------------------------------------------COMMENT
MEDIUMcore/quivr_core/rag/prompts.py111 # ---------------------------------------------------------------------------COMMENT
MEDIUMcore/quivr_core/rag/prompts.py113 # ---------------------------------------------------------------------------COMMENT
MEDIUMcore/quivr_core/rag/prompts.py119 # ---------------------------------------------------------------------------COMMENT
MEDIUMcore/quivr_core/rag/prompts.py121 # ---------------------------------------------------------------------------COMMENT
MEDIUMcore/quivr_core/rag/prompts.py142 # ---------------------------------------------------------------------------STRING
MEDIUMcore/quivr_core/rag/prompts.py144 # ---------------------------------------------------------------------------STRING
MEDIUMcore/quivr_core/rag/prompts.py166 # ---------------------------------------------------------------------------STRING
MEDIUMcore/quivr_core/rag/prompts.py168 # ---------------------------------------------------------------------------STRING
MEDIUMcore/quivr_core/rag/prompts.py196 # ---------------------------------------------------------------------------STRING
MEDIUMcore/quivr_core/rag/prompts.py198 # ---------------------------------------------------------------------------STRING
MEDIUMcore/quivr_core/rag/prompts.py233 # ---------------------------------------------------------------------------STRING
MEDIUMcore/quivr_core/rag/prompts.py235 # ---------------------------------------------------------------------------STRING
Fake / Example Data22 hits · 22 pts
SeverityFileLineSnippetContext
LOWexamples/chatbot/.chainlit/translations/mr.json125 "placeholder": "\u0924\u0941\u092e\u091a\u093e \u092e\u0947\u0938\u0947\u091c \u0907\u0925\u0947CODE
LOWexamples/chatbot/.chainlit/translations/bn.json125 "placeholder": "\u098f\u0996\u09be\u09a8\u09c7 \u0986\u09aa\u09a8\u09be\u09b0 \u09ac\u09be\u09b0CODE
LOWexamples/chatbot/.chainlit/translations/ta.json125 "placeholder": "\u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bbf\u0baf\CODE
LOWexamples/chatbot/.chainlit/translations/zh-CN.json123 "placeholder": "\u5728\u8fd9\u91cc\u8f93\u5165\u60a8\u7684\u6d88\u606f..."CODE
LOWexamples/chatbot/.chainlit/translations/ml.json125 "placeholder": "\u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 \u0d38\u0d28\u0d4d\u0d26\CODE
LOWexamples/chatbot/.chainlit/translations/kn.json125 "placeholder": "\u0ca8\u0cbf\u0cae\u0ccd\u0cae \u0cb8\u0c82\u0ca6\u0cc7\u0cb6\u0cb5\u0ca8\u0ccd\CODE
LOWexamples/chatbot/.chainlit/translations/gu.json125 "placeholder": "\u0aa4\u0aae\u0abe\u0ab0\u0acb \u0ab8\u0a82\u0aa6\u0ac7\u0ab6\u0acb \u0a85\u0ab9CODE
LOWexamples/chatbot/.chainlit/translations/hi.json125 "placeholder": "\u0905\u092a\u0928\u093e \u0938\u0902\u0926\u0947\u0936 \u092f\u0939\u093e\u0901CODE
LOWexamples/chatbot/.chainlit/translations/te.json125 "placeholder": "\u0c2e\u0c40 \u0c38\u0c02\u0c26\u0c47\u0c36\u0c3e\u0c28\u0c4d\u0c28\u0c3f \u0c07CODE
LOWexamples/chatbot/.chainlit/translations/he-IL.json125 "placeholder": "\u05db\u05ea\u05d5\u05d1 \u05d4\u05d5\u05d3\u05e2\u05d4 \u05db\u05d0\u05df..."CODE
LOWexamples/chatbot/.chainlit/translations/en-US.json123 "placeholder": "Type your message here..."CODE
LOWexamples/chatbot_voice/.chainlit/translations/mr.json125 "placeholder": "\u0924\u0941\u092e\u091a\u093e \u092e\u0947\u0938\u0947\u091c \u0907\u0925\u0947CODE
LOWexamples/chatbot_voice/.chainlit/translations/bn.json125 "placeholder": "\u098f\u0996\u09be\u09a8\u09c7 \u0986\u09aa\u09a8\u09be\u09b0 \u09ac\u09be\u09b0CODE
LOWexamples/chatbot_voice/.chainlit/translations/ta.json125 "placeholder": "\u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bbf\u0baf\CODE
LOW…amples/chatbot_voice/.chainlit/translations/zh-CN.json123 "placeholder": "\u5728\u8fd9\u91cc\u8f93\u5165\u60a8\u7684\u6d88\u606f..."CODE
LOWexamples/chatbot_voice/.chainlit/translations/ml.json125 "placeholder": "\u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 \u0d38\u0d28\u0d4d\u0d26\CODE
LOWexamples/chatbot_voice/.chainlit/translations/kn.json125 "placeholder": "\u0ca8\u0cbf\u0cae\u0ccd\u0cae \u0cb8\u0c82\u0ca6\u0cc7\u0cb6\u0cb5\u0ca8\u0ccd\CODE
LOWexamples/chatbot_voice/.chainlit/translations/gu.json125 "placeholder": "\u0aa4\u0aae\u0abe\u0ab0\u0acb \u0ab8\u0a82\u0aa6\u0ac7\u0ab6\u0acb \u0a85\u0ab9CODE
LOWexamples/chatbot_voice/.chainlit/translations/hi.json125 "placeholder": "\u0905\u092a\u0928\u093e \u0938\u0902\u0926\u0947\u0936 \u092f\u0939\u093e\u0901CODE
LOWexamples/chatbot_voice/.chainlit/translations/te.json125 "placeholder": "\u0c2e\u0c40 \u0c38\u0c02\u0c26\u0c47\u0c36\u0c3e\u0c28\u0c4d\u0c28\u0c3f \u0c07CODE
LOW…amples/chatbot_voice/.chainlit/translations/he-IL.json125 "placeholder": "\u05db\u05ea\u05d5\u05d1 \u05d4\u05d5\u05d3\u05e2\u05d4 \u05db\u05d0\u05df..."CODE
LOW…amples/chatbot_voice/.chainlit/translations/en-US.json123 "placeholder": "Type your message here..."CODE
Modern AI Meta-Vocabulary5 hits · 16 pts
SeverityFileLineSnippetContext
MEDIUMREADME.md80#### Basic RAGCOMMENT
MEDIUMcore/quivr_core/rag/prompts.py58 # Prompt for RAGCOMMENT
MEDIUMcore/quivr_core/brain/brain.py132 # RAG dependencies:COMMENT
MEDIUMdocs/docs/workflows/examples/basic_rag.md1# Basic RAGCOMMENT
MEDIUMdocs/docs/workflows/examples/rag_with_web_search.md1# RAG with web searchCOMMENT
Redundant / Tautological Comments9 hits · 14 pts
SeverityFileLineSnippetContext
LOWcore/quivr_core/llm/llm_endpoint.py101 # Check if adding this would exceed either cache limitCOMMENT
LOWcore/quivr_core/llm/llm_endpoint.py162 # Check if the model name matches or starts with the base model nameCOMMENT
LOWcore/quivr_core/rag/quivr_rag_langgraph.py980 # Check if there is a system message in messagesCOMMENT
LOWcore/quivr_core/rag/entities/config.py28 # Check if the normalized name starts with a digitCOMMENT
LOWcore/quivr_core/rag/entities/config.py284 # Check if the model name or a base part of the model name is in the supplier's modelsCOMMENT
LOWcore/quivr_core/rag/entities/config.py353 # Check if the corresponding API key environment variable is setCOMMENT
LOWcore/quivr_core/rag/entities/config.py458 # Check if the corresponding API key environment variable is setCOMMENT
LOWexamples/simple_question_megaparse.py33 # Check if user wants to exitCOMMENT
LOWexamples/pdf_parsing_tika.py30 # Check if user wants to exitCOMMENT
Deep Nesting12 hits · 12 pts
SeverityFileLineSnippetContext
LOWcore/quivr_core/__init__.py9CODE
LOWcore/quivr_core/llm/llm_endpoint.py145CODE
LOWcore/quivr_core/llm/llm_endpoint.py212CODE
LOWcore/quivr_core/rag/quivr_rag_langgraph.py393CODE
LOWcore/quivr_core/rag/quivr_rag_langgraph.py844CODE
LOWcore/quivr_core/rag/quivr_rag_langgraph.py1164CODE
LOWcore/quivr_core/rag/utils.py130CODE
LOWcore/quivr_core/rag/quivr_rag.py188CODE
LOWcore/quivr_core/rag/entities/config.py478CODE
LOWcore/quivr_core/rag/entities/config.py510CODE
LOWcore/quivr_core/rag/entities/config.py574CODE
LOWcore/quivr_core/brain/brain.py47CODE
Unused Imports7 hits · 7 pts
SeverityFileLineSnippetContext
LOWcore/quivr_core/__init__.py3CODE
LOWcore/quivr_core/__init__.py4CODE
LOWcore/quivr_core/llm/__init__.py1CODE
LOWcore/quivr_core/files/__init__.py1CODE
LOWcore/quivr_core/brain/__init__.py1CODE
LOWexamples/quivr-whisper/app.py5CODE
LOWexamples/quivr-whisper/app.py8CODE
Over-Commented Block7 hits · 7 pts
SeverityFileLineSnippetContext
LOWdocs/docs/vectorstores/pgvector.md1# PGVectorCOMMENT
LOWdocs/docs/vectorstores/faiss.md1# FaissCOMMENT
LOWdocs/docs/examples/index.md1# ExamplesCOMMENT
LOWexamples/chatbot/basic_rag_workflow.yaml21# Maximum number of previous conversation iterationsCOMMENT
LOWexamples/chatbot/.chainlit/config.toml61# Large size content are by default collapsed for a cleaner uiCOMMENT
LOWexamples/chatbot_voice/basic_rag_workflow.yaml21max_history: 10COMMENT
LOWexamples/chatbot_voice/.chainlit/config.toml61# Large size content are by default collapsed for a cleaner uiCOMMENT
Self-Referential Comments2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMcore/scripts/run_tests_buildx.sh19 # Create the builder if it doesn't existCOMMENT
MEDIUMcore/quivr_core/rag/quivr_rag_langgraph.py658 # Create a tuple of the retrieval task and task_idCOMMENT
Docstring Block Structure1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHcore/quivr_core/brain/brain.py50 Process files in storage. This function takes a StorageBase and return a list of langchain documents. Args:STRING
Modern Structural Boilerplate4 hits · 4 pts
SeverityFileLineSnippetContext
LOWcore/quivr_core/__init__.py6__all__ = ["Brain", "registry", "register_processor"]CODE
LOWcore/quivr_core/llm/__init__.py3__all__ = ["LLMEndpoint"]CODE
LOWcore/quivr_core/files/__init__.py3__all__ = ["QuivrFile"]CODE
LOWcore/quivr_core/brain/__init__.py3__all__ = ["Brain"]CODE
Excessive Try-Catch Wrapping2 hits · 2 pts
SeverityFileLineSnippetContext
LOWcore/quivr_core/llm/llm_endpoint.py185 except Exception as e:CODE
LOW…quivr_core/processor/implementations/tika_processor.py62 except Exception as e:CODE
AI Structural Patterns1 hit · 1 pts
SeverityFileLineSnippetContext
LOWcore/quivr_core/rag/quivr_rag.py186CODE