AI Slop Code RIsk Monitor

Future-House/paper-qa

High accuracy RAG for answering questions from scientific documents with citations

5.1 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for Future-House/paper-qa, a Python project with 9,345 GitHub stars. SynthScan examined 79,463 lines of code across 146 source files, recording 368 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 5.1 (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.

5.1
Adjusted Signal
5.1
Raw Pattern Score
100%
Time Factor
2026-09-25
Last Push
9.3K
Stars
Python
Language
79.5K
Lines of Code
146
Files
368
Pattern Hits
2026-10-12
Scan Date
0.05
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 13.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 6.3/100 · LOW

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

Agent Over-Engineering Ratio 13.7/100 · LOW

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

PR Review Velocity Impact 23.5/100 · LOW

Which changes need focused human review? 368 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 7MEDIUM 11LOW 350

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

Hyper-Verbose Identifiers175 hits · 164 pts
SeverityFileLineSnippetContext
LOWtests/test_configs.py27def test_prompt_settings_validation() -> None:CODE
LOWtests/test_configs.py40def test_get_formatted_variables() -> None:CODE
LOWtests/test_configs.py53def test_get_settings_with_valid_config(value: MaybeSettings) -> None:CODE
LOWtests/test_configs.py58def test_get_settings_missing_file() -> None:CODE
LOWtests/test_configs.py69def test_settings_default_instantiation(tmpdir, subtests: SubTests) -> None:CODE
LOWtests/test_configs.py106def test_router_kwargs_present_in_models() -> None:CODE
LOW⚡tests/test_configs.py204def test_matches_filter_criteria(doc_class, doc_data, filter_criteria, expected_result):CODE
LOW⚡tests/test_configs.py209def test_citation_prompt_current_year():CODE
LOW⚡tests/test_configs.py218def test_validity_of_bundled_configs(subtests: SubTests) -> None:CODE
LOWtests/test_configs.py230def test_readme_settings_cheatsheet_accuracy(subtests: SubTests) -> None:CODE
LOWtests/test_utils.py4def test_citation_to_docname_acronym_title() -> None:CODE
LOWtests/test_utils.py9def test_citation_to_docname_non_text_fallback_is_deterministic() -> None:CODE
LOWtests/conftest.py56def _defeat_litellm_callbacks() -> None:CODE
LOWtests/conftest.py61def _patch_litellm_logging_worker_for_race_condition() -> Iterator[None]:CODE
LOWtests/conftest.py92 def ensure_initialized_and_enqueue(self, async_coroutine: Coroutine) -> None:CODE
LOWtests/conftest.py184def stub_data_dir_w_near_dupes(stub_data_dir: Path, tmp_path: Path) -> Iterator[Path]:CODE
LOWtests/conftest.py219async def _vcr_handle_async_request(CODE
LOWtests/conftest.py245def _build_response_with_raw_headers(vcr_request, vcr_response, history):CODE
LOW⚡tests/test_paperqa.py146def test_citations_with_pages() -> None:CODE
LOW⚡tests/test_paperqa.py151def test_citations_without_space() -> None:CODE
LOW⚡tests/test_paperqa.py156def test_citations_with_commas() -> None:CODE
LOW⚡tests/test_paperqa.py3197 def test_basic_json_extraction(self, input_text: str) -> None:CODE
LOW⚡tests/test_paperqa.py3260 def test_relevance_score_parsing(self, input_text: str) -> None:CODE
LOW⚡tests/test_paperqa.py3338 def test_json_broken_formatting(self, input_text: str) -> None:CODE
LOW⚡tests/test_paperqa.py3366 def test_llm_parse_json_with_escaped_characters(self, input_text, expected_output):CODE
LOWtests/test_paperqa.py181def test_citations_with_special_characters() -> None:CODE
LOWtests/test_paperqa.py186def test_citations_with_nonstandard_chars() -> None:CODE
LOWtests/test_paperqa.py816 async def acompletion_that_breaks_first_context(*args, **kwargs):CODE
LOWtests/test_paperqa.py844async def test_nonduplicate_contexts() -> None:CODE
LOWtests/test_paperqa.py899 async def acompletion_that_breaks_first_context(*args, **kwargs):CODE
LOWtests/test_paperqa.py1018async def test_custom_context_str_fn(docs_fixture) -> None:CODE
LOWtests/test_paperqa.py1043async def test_aquery_groups_contexts_by_question(docs_fixture) -> None:CODE
LOWtests/test_paperqa.py1118async def test_query_with_iteration(docs_fixture) -> None:CODE
LOWtests/test_paperqa.py1253async def test_docs_with_custom_embedding(CODE
LOWtests/test_paperqa.py1386async def test_custom_llm_custom_media(stub_data_dir: Path) -> None:CODE
LOWtests/test_paperqa.py1565async def test_pdf_reader_w_no_match_doc_details(stub_data_dir: Path) -> None:CODE
LOWtests/test_paperqa.py1584async def test_pdf_reader_w_no_chunks(stub_data_dir: Path) -> None:CODE
LOWtests/test_paperqa.py1605async def test_partly_embedded_texts(defer_embeddings: bool) -> None:CODE
LOWtests/test_paperqa.py1651async def test_pdf_reader_match_doc_details(stub_data_dir: Path) -> None:CODE
LOWtests/test_paperqa.py1793async def test_chunk_metadata_reader(CODE
LOWtests/test_paperqa.py1916def test_parsed_media_data_or_url() -> None:CODE
LOWtests/test_paperqa.py1942def test_parsed_media_url_only_hash_eq() -> None:CODE
LOWtests/test_paperqa.py2000async def test_read_doc_images_metadata(stub_data_dir: Path) -> None:CODE
LOWtests/test_paperqa.py2052async def test_read_doc_images_concurrency(stub_data_dir: Path) -> None:CODE
LOWtests/test_paperqa.py2114 def test_should_parse_and_enrich_media(CODE
LOWtests/test_paperqa.py2136async def test_image_enrichment_normal_use(stub_data_dir: Path) -> None:CODE
LOWtests/test_paperqa.py2266async def test_image_enrichment_invalid_image(caplog) -> None:CODE
LOWtests/test_paperqa.py2287async def test_image_enrichment_with_oversized_image(caplog) -> None:CODE
LOWtests/test_paperqa.py2425async def test_duplicate_media_context_creation(stub_data_dir: Path) -> None:CODE
LOWtests/test_paperqa.py2563def test_missing_page_doesnt_crash_us() -> None:CODE
LOWtests/test_paperqa.py2676async def test_context_inner_outer_prompt(stub_data_dir: Path) -> None:CODE
LOWtests/test_paperqa.py2717def test_get_index_name_uniqueness(CODE
LOWtests/test_paperqa.py2731def test_case_insensitive_matching():CODE
LOWtests/test_paperqa.py2752def test_dois_resolve_to_correct_journals(doi_journals):CODE
LOWtests/test_paperqa.py2765def test_docdetails_merge_with_non_list_fields() -> None:CODE
LOWtests/test_paperqa.py2799def test_docdetails_merge_with_list_fields() -> None:CODE
LOWtests/test_paperqa.py2833def test_docdetails_deserialization(tmp_path) -> None:CODE
LOWtests/test_paperqa.py2892def test_docdetails_doc_id_roundtrip() -> None:CODE
LOWtests/test_paperqa.py3048async def test_partitioning_fn_docs(use_partition: bool) -> None:CODE
LOWtests/test_paperqa.py3378 def test_llm_subquotes_and_newlines(self, input_text: str) -> None:CODE
115 more matches not shown…
Unused Imports66 hits · 64 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py1CODE
LOWtests/test_paperqa.py12CODE
LOWtests/test_clients.py1CODE
LOWtests/test_clients.py7CODE
LOWtests/test_clients.py7CODE
LOWtests/test_clients.py24CODE
LOWtests/test_clients.py24CODE
LOWtests/test_agents.py1CODE
LOW…kages/paper-qa-docling/src/paperqa_docling/__init__.py3CODE
LOWpackages/paper-qa-docling/src/paperqa_docling/reader.py30CODE
LOW…kages/paper-qa-pymupdf/src/paperqa_pymupdf/__init__.py1CODE
LOW…kages/paper-qa-pymupdf/src/paperqa_pymupdf/__init__.py1CODE
LOW…kages/paper-qa-pymupdf/src/paperqa_pymupdf/__init__.py1CODE
LOWpackages/paper-qa-pypdf/src/paperqa_pypdf/__init__.py1CODE
LOWpackages/paper-qa-pypdf/src/paperqa_pypdf/reader.py27CODE
LOW…ges/paper-qa-nemotron/src/paperqa_nemotron/__init__.py3CODE
LOWpackages/paper-qa-nemotron/src/paperqa_nemotron/api.py59CODE
LOWpackages/paper-qa-nemotron/src/paperqa_nemotron/api.py60CODE
LOWsrc/paperqa/readers.py1CODE
LOWsrc/paperqa/__init__.py1CODE
LOWsrc/paperqa/__init__.py1CODE
LOWsrc/paperqa/__init__.py1CODE
LOWsrc/paperqa/__init__.py1CODE
LOWsrc/paperqa/__init__.py1CODE
LOWsrc/paperqa/__init__.py1CODE
LOWsrc/paperqa/__init__.py1CODE
LOWsrc/paperqa/__init__.py1CODE
LOWsrc/paperqa/__init__.py1CODE
LOWsrc/paperqa/__init__.py13CODE
LOWsrc/paperqa/__init__.py14CODE
LOWsrc/paperqa/__init__.py15CODE
LOWsrc/paperqa/__init__.py15CODE
LOWsrc/paperqa/__init__.py16CODE
LOWsrc/paperqa/__init__.py16CODE
LOWsrc/paperqa/__init__.py16CODE
LOWsrc/paperqa/__init__.py21CODE
LOWsrc/paperqa/__init__.py21CODE
LOWsrc/paperqa/__init__.py22CODE
LOWsrc/paperqa/__init__.py22CODE
LOWsrc/paperqa/__init__.py22CODE
LOWsrc/paperqa/__init__.py22CODE
LOWsrc/paperqa/__init__.py23CODE
LOWsrc/paperqa/docs.py1CODE
LOWsrc/paperqa/types.py1CODE
LOWsrc/paperqa/_ldp_shims.py33CODE
LOWsrc/paperqa/_ldp_shims.py33CODE
LOWsrc/paperqa/settings.py49CODE
LOWsrc/paperqa/llms.py7CODE
LOWsrc/paperqa/clients/unpaywall.py1CODE
LOWsrc/paperqa/clients/journal_quality.py1CODE
LOWsrc/paperqa/clients/retractions.py1CODE
LOWsrc/paperqa/clients/__init__.py1CODE
LOWsrc/paperqa/clients/__init__.py5CODE
LOWsrc/paperqa/clients/client_models.py1CODE
LOWsrc/paperqa/clients/semantic_scholar.py1CODE
LOWsrc/paperqa/clients/openalex.py1CODE
LOWsrc/paperqa/clients/crossref.py1CODE
LOWsrc/paperqa/agents/models.py1CODE
LOWsrc/paperqa/agents/__init__.py1CODE
LOWsrc/paperqa/agents/search.py1CODE
6 more matches not shown…
Fake / Example Data38 hits · 40 pts
SeverityFileLineSnippetContext
LOW⚡tests/test_paperqa.py3168 '{\n"summary": "Lorem Ipsum",\n"relevance_score": 8\n}'CODE
LOW⚡tests/test_paperqa.py3174 '```json\n{\n"summary": "Lorem Ipsum",\n"relevance_score": 8\n}\n```'CODE
LOW⚡tests/test_paperqa.py3180 '```json { "summary": "Lorem Ipsum", "relevance_ score": 8 } ```',CODE
LOW⚡tests/test_paperqa.py3185 '{ "summary": "Lorem Ipsum", "relevance_score": 8 }'CODE
LOW⚡tests/test_paperqa.py3191 '{\n "summary": "Lorem Ipsum",\n "relevance_score": "8" \n}'CODE
LOW⚡tests/test_paperqa.py3198 output = {"summary": "Lorem Ipsum", "relevance_score": 8}CODE
LOW⚡tests/test_paperqa.py3206 ' Ipsum\n\ndolor sit amet",\n"relevance_score": 8\n}\nHope this helps!',CODE
LOW⚡tests/test_paperqa.py3212 output = {"summary": "Lorem Ipsum\n\ndolor sit amet", "relevance_score": 8}CODE
LOW⚡tests/test_paperqa.py3212 output = {"summary": "Lorem Ipsum\n\ndolor sit amet", "relevance_score": 8}CODE
LOW⚡tests/test_paperqa.py3221 '```json { "summary": "Lorem Ipsum", "relevance_score": 7.6 } ```'CODE
LOW⚡tests/test_paperqa.py3228 '```json { "summary": "Lorem Ipsum", "relevance_score": "8" } ```'CODE
LOW⚡tests/test_paperqa.py3234 ' "Lorem Ipsum", "relevance_score": "8/10" } ```Hope this helps!',CODE
LOW⚡tests/test_paperqa.py3240 '```json { "summary": "Lorem Ipsum", "relevance_score": "4/5" } ```'CODE
LOW⚡tests/test_paperqa.py3247 '```json { "summary": "Lorem Ipsum", "relevance_score": 8/10 } ```'CODE
LOW⚡tests/test_paperqa.py3254 '```json { "summary": "Lorem Ipsum", "relevance_score": 4/5 } ```'CODE
LOW⚡tests/test_paperqa.py3261 output = {"summary": "Lorem Ipsum", "relevance_score": 8}CODE
LOW⚡tests/test_paperqa.py3270 '```json { "summary": "Lorem Ipsum", "relevance-score": 8 } ```'CODE
LOW⚡tests/test_paperqa.py3277 '```json { "summary": "Lorem Ipsum", "relevance_ score": 8 } ```'CODE
LOW⚡tests/test_paperqa.py3284 '```json { "summary": "Lorem Ipsum", "score": 8 } ```'CODE
LOW⚡tests/test_paperqa.py3291 '```json { "summary": "Lorem Ipsum", "relevance score": 8 } ```'CODE
LOW⚡tests/test_paperqa.py3298 '```json { "summary": "Lorem Ipsum", "relevance": 8 } ```'CODE
LOW⚡tests/test_paperqa.py3305 output = {"summary": "Lorem Ipsum", "relevance_score": 8}CODE
LOW⚡tests/test_paperqa.py3314 '{ "summary": "Lorem Ipsum", "relevance_score": 8, }'CODE
LOW⚡tests/test_paperqa.py3321 '{ "summary": "Lorem Ipsum", , "relevance_score": 8 }'CODE
LOW⚡tests/test_paperqa.py3328 '{ , "summary": "Lorem Ipsum", "relevance_score": 8 }'CODE
LOW⚡tests/test_paperqa.py3333 '{ "summary": "Lorem Ipsum" "relevance_score": 8 }',CODE
LOW⚡tests/test_paperqa.py3339 output = {"summary": "Lorem Ipsum", "relevance_score": 8}CODE
LOW⚡tests/test_paperqa.py3346 "<think> Thinking </think>Lorem Ipsum. Hope this helps!",CODE
LOW⚡tests/test_paperqa.py3350 "Lorem Ipsum. Hope this helps!",CODE
LOW⚡tests/test_paperqa.py3356 output = {"summary": "Lorem Ipsum. Hope this helps!"}CODE
LOWtests/test_paperqa.py3894 author_name="John Doe",CODE
LOWtests/test_paperqa.py3902 author_name="John Doe",CODE
LOWtests/test_paperqa.py3940 author_name="John Doe",CODE
LOWtests/test_paperqa.py3957 author_name="John Doe", # Reversed order from context_with_extrasCODE
LOWtests/test_clients.py380 assert not await client.query(doi="placeholder")CODE
LOW⚡tests/test_clients.py759 ("Doe, John", "John Doe"),CODE
LOW⚡tests/test_clients.py762 ("Doe, Jane", "Jane Doe"),CODE
LOW⚡tests/test_clients.py767 ("Jane Doe", "Jane Doe"),CODE
Modern Structural Boilerplate32 hits · 32 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py43def _setup_default_logs() -> None:CODE
LOW…kages/paper-qa-docling/src/paperqa_docling/__init__.py5__all__ = ["parse_pdf_to_pages"]CODE
LOW…kages/paper-qa-pymupdf/src/paperqa_pymupdf/__init__.py3__all__ = [CODE
LOWpackages/paper-qa-pypdf/src/paperqa_pypdf/__init__.py3__all__ = [CODE
LOW…ges/paper-qa-nemotron/src/paperqa_nemotron/__init__.py5__all__ = ["parse_pdf_to_pages"]CODE
LOWpackages/paper-qa-nemotron/src/paperqa_nemotron/api.py62logger = logging.getLogger(__name__)CODE
LOW…kages/paper-qa-nemotron/src/paperqa_nemotron/reader.py36logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/__init__.py25__all__ = [CODE
LOWsrc/paperqa/docs.py42logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/core.py16logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/types.py56logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/_ldp_shims.py3__all__ = [CODE
LOWsrc/paperqa/utils.py33logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/settings.py86logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/llms.py47logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/clients/journal_quality.py28logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/clients/retractions.py15logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/clients/__init__.py23logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/clients/client_models.py24logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/clients/semantic_scholar.py30logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/clients/openalex.py31logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/clients/crossref.py38logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/agents/env.py42logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/agents/models.py18logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/agents/tools.py24logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/agents/__init__.py22logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/agents/search.py56logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/agents/main.py48logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/agents/helpers.py17logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/contrib/openreview_paper_helper.py21logger = logging.getLogger(__name__)CODE
LOWsrc/paperqa/contrib/__init__.py3__all__ = ["ZoteroDB"]CODE
LOWsrc/paperqa/sources/clinical_trials.py23logger = logging.getLogger(__name__)CODE
Cross-File Repetition4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHpackages/paper-qa-docling/tests/test_paperqa_docling.py0<html> <head><title>404 not found</title></head> <body> <center><h1>404 not found</h1></center> <hr><center>nginx</centeSTRING
HIGHpackages/paper-qa-pymupdf/tests/test_paperqa_pymupdf.py0<html> <head><title>404 not found</title></head> <body> <center><h1>404 not found</h1></center> <hr><center>nginx</centeSTRING
HIGHpackages/paper-qa-pypdf/tests/test_paperqa_pypdf.py0<html> <head><title>404 not found</title></head> <body> <center><h1>404 not found</h1></center> <hr><center>nginx</centeSTRING
HIGH…kages/paper-qa-nemotron/tests/test_paperqa_nemotron.py0<html> <head><title>404 not found</title></head> <body> <center><h1>404 not found</h1></center> <hr><center>nginx</centeSTRING
Deep Nesting18 hits · 18 pts
SeverityFileLineSnippetContext
LOWtests/test_agents.py68CODE
LOWpackages/paper-qa-docling/src/paperqa_docling/reader.py38CODE
LOWpackages/paper-qa-pymupdf/src/paperqa_pymupdf/reader.py127CODE
LOWpackages/paper-qa-pypdf/src/paperqa_pypdf/reader.py56CODE
LOWpackages/paper-qa-nemotron/src/paperqa_nemotron/api.py464CODE
LOWpackages/paper-qa-nemotron/src/paperqa_nemotron/api.py603CODE
LOWsrc/paperqa/readers.py203CODE
LOWsrc/paperqa/readers.py426CODE
LOWsrc/paperqa/core.py178CODE
LOWsrc/paperqa/types.py474CODE
LOWsrc/paperqa/types.py983CODE
LOWsrc/paperqa/types.py1267CODE
LOWsrc/paperqa/utils.py314CODE
LOWsrc/paperqa/utils.py589CODE
LOWsrc/paperqa/clients/crossref.py167CODE
LOWsrc/paperqa/agents/env.py47CODE
LOWsrc/paperqa/agents/search.py186CODE
LOWsrc/paperqa/contrib/zotero.py147CODE
Modern AI Meta-Vocabulary6 hits · 16 pts
SeverityFileLineSnippetContext
MEDIUMREADME.md36 - [Agentic Adding/Querying Documents](#agentic-addingquerying-documents)CODE
MEDIUMtests/test_paperqa.py1590 settings.summary_llm = "gpt-4o-mini" # context window needs to fit our one chunkCODE
MEDIUMtests/test_agents.py463 # https://docs.anthropic.com/en/docs/build-with-claude/tool-use#chain-of-thoughtCOMMENT
MEDIUMdocs/tutorials/where_do_I_get_papers.md20# 1Mil context window helps to suggest papers. These settings are not required, but useful for an initial setup.COMMENT
MEDIUMsrc/paperqa/llms.py551 # Recursively create each component embedding modelCOMMENT
MEDIUMsrc/paperqa/sources/clinical_trials.py294 # for embedding model context windows, we truncate at TRIAL_CHAR_TRUNCATION_SIZECOMMENT
Docstring Block Structure3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHpackages/paper-qa-pymupdf/src/paperqa_pymupdf/reader.py49Load a PDF page and extract its text. Args: file: An open (assumed) PyMuPDF document. page_num: ZerSTRING
HIGHsrc/paperqa/clients/openalex.py74Get paper details from OpenAlex given a DOI or paper title. Args: client: Async HTTP client for any requestSTRING
HIGHsrc/paperqa/agents/tools.py474Search for clinical trials, with support for repeated calls and concurrent execution. Will add new clinical triSTRING
Excessive Try-Catch Wrapping11 hits · 13 pts
SeverityFileLineSnippetContext
LOWsrc/paperqa/readers.py77 except Exception as exc:CODE
LOWsrc/paperqa/types.py1128 except Exception:CODE
LOWsrc/paperqa/utils.py328 except Exception:CODE
MEDIUMsrc/paperqa/utils.py227def get_loop() -> asyncio.AbstractEventLoop:CODE
LOWsrc/paperqa/llms.py297 except Exception as e:CODE
LOWsrc/paperqa/agents/search.py252 except Exception:CODE
LOWsrc/paperqa/agents/search.py477 except Exception:CODE
LOWsrc/paperqa/agents/search.py531 except Exception as e:CODE
MEDIUMsrc/paperqa/agents/search.py367def save_index(self) -> None:CODE
LOWsrc/paperqa/agents/main.py164 except Exception:CODE
LOWsrc/paperqa/sources/clinical_trials.py275 except Exception as e:CODE
Self-Referential Comments3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMsrc/paperqa/readers.py228 # Create a ParsedMedia objectCOMMENT
MEDIUMsrc/paperqa/settings.py1248 # Create a section with a question headingCOMMENT
MEDIUMsrc/paperqa/llms.py346 # Create a new event loop in a new thread to avoid nested loop issuesCOMMENT
AI Structural Patterns5 hits · 5 pts
SeverityFileLineSnippetContext
LOWpackages/paper-qa-pymupdf/src/paperqa_pymupdf/reader.py127CODE
LOW…kages/paper-qa-nemotron/src/paperqa_nemotron/reader.py136CODE
LOWsrc/paperqa/docs.py93CODE
LOWsrc/paperqa/docs.py156CODE
LOWsrc/paperqa/contrib/zotero.py147CODE
AI Slop Vocabulary2 hits · 3 pts
SeverityFileLineSnippetContext
LOWpackages/paper-qa-nemotron/src/paperqa_nemotron/api.py635 # We just use aiobotocore directly hereCOMMENT
LOWsrc/paperqa/clients/__init__.py253 # if we can't get metadata, just return the doc, but don't overwrite any fieldsCOMMENT
Redundant / Tautological Comments2 hits · 2 pts
SeverityFileLineSnippetContext
LOWpyproject.toml324# Set true to activate the evaluation score.COMMENT
LOWsrc/paperqa/utils.py89 # Check if the entropy is within a reasonable range for textSTRING
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippetContext
LOWpyproject.toml181mypy_path = "$MYPY_CONFIG_FILE_DIR/src,$MYPY_CONFIG_FILE_DIR/packages/paper-qa-pypdf/src,$MYPY_CONFIG_FILE_DIR/packages/COMMENT
LOWsrc/paperqa/settings.py1141 media.info["is_irrelevant"],COMMENT
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippetContext
LOWtests/test_paperqa.py1304 # For QdrantVectorStore, we need to check if collection exists and has pointsCOMMENT