"RAG-Anything: All-in-One RAG Framework"
This report presents the forensic synthetic code analysis of HKUDS/RAG-Anything, a Python project with 23,096 GitHub stars. SynthScan v2.0 examined 31,022 lines of code across 88 source files, recording 779 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 34.7 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).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
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.
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.
The scanner identified 779 distinct pattern matches across 17 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 474 | async def process_multimodal_content(): | CODE |
| LOW | README.md | 601 | async def process_multimodal_content(self, modal_content, content_type, file_path, entity_name): | STRING |
| LOW | README.md | 819 | async def insert_content_list_example(): | CODE |
| LOW | README_zh.md | 454 | async def process_multimodal_content(): | CODE |
| LOW | README_zh.md | 581 | async def process_multimodal_content(self, modal_content, content_type, file_path, entity_name): | STRING |
| LOW | README_zh.md | 798 | async def insert_content_list_example(): | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 46 | def get_accuracy_evaluation_prompt( | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 491 | async def evaluate_multiple_results( | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 848 | async def evaluate_standard_rag_results( | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 1058 | def generate_evaluation_report(self, total_time: float): | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 1489 | def load_existing_evaluations(self): | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 1544 | def update_evaluation_results_list(self, new_results: List[Dict[str, Any]]): | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 1566 | def persist_single_evaluation(self, evaluation_result: Dict[str, Any]): | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 89 | def get_comprehensive_evaluation_prompt( | STRING |
| LOW | reproduce/llm_answer_evaluator.py | 213 | def create_fallback_evaluation(self, response: str) -> Dict[str, Any]: | STRING |
| LOW | tests/test_full_entities_merge.py | 10 | def _load_merge_logic_function_source(): | CODE |
| LOW | tests/test_full_entities_merge.py | 52 | def test_implementation_preserves_existing_metadata_fields(): | CODE |
| LOW | tests/test_full_entities_merge.py | 59 | def test_create_new_full_entities_entry(): | CODE |
| LOW | tests/test_full_entities_merge.py | 74 | def test_preserves_existing_fields_when_merging_multimodal_entities(): | CODE |
| LOW | tests/test_full_entities_merge.py | 95 | def test_deduplicates_new_entity_names_without_reordering_existing_ones(): | CODE |
| LOW | tests/test_callbacks.py | 36 | def on_multimodal_item_complete( | CODE |
| LOW | tests/test_callbacks.py | 64 | def test_register_and_dispatch(self): | CODE |
| LOW⚡ | tests/test_callbacks.py | 90 | def test_register_rejects_non_callback(self): | CODE |
| LOW⚡ | tests/test_callbacks.py | 95 | def test_dispatch_handles_callback_errors(self): | CODE |
| LOW⚡ | tests/test_callbacks.py | 105 | def test_dispatch_unknown_event(self): | CODE |
| LOW⚡ | tests/test_callbacks.py | 113 | def test_event_log_disabled_by_default(self): | CODE |
| LOW | tests/test_callbacks.py | 184 | def test_process_document_emits_callbacks(self, monkeypatch, tmp_path): | CODE |
| LOW | tests/test_callbacks.py | 255 | def test_query_emits_callbacks(self, monkeypatch): | CODE |
| LOW | tests/test_multimodal_chunks_list_merge.py | 32 | def _install_minimal_lightrag_stubs(): | CODE |
| LOW | tests/test_multimodal_chunks_list_merge.py | 93 | def test_merge_appends_new_chunk_ids_and_updates_count(): | CODE |
| LOW | tests/test_multimodal_chunks_list_merge.py | 108 | def test_reprocessing_same_ids_does_not_duplicate(): | CODE |
| LOW | tests/test_multimodal_chunks_list_merge.py | 122 | def test_partial_overlap_appends_only_missing_ids(): | CODE |
| LOW | tests/test_multimodal_chunks_list_merge.py | 137 | def test_missing_record_warns_instead_of_silently_skipping(): | CODE |
| LOW | tests/test_resilience.py | 22 | def test_retries_on_transient_error(self): | CODE |
| LOW | tests/test_resilience.py | 40 | def test_raises_after_max_attempts(self): | CODE |
| LOW | tests/test_resilience.py | 52 | def test_does_not_retry_non_retryable(self): | CODE |
| LOW | tests/test_resilience.py | 95 | def test_jitter_respects_max_delay(self, monkeypatch): | CODE |
| LOW | tests/test_resilience.py | 136 | async def test_retries_on_transient_error(self): | CODE |
| LOW | tests/test_resilience.py | 155 | async def test_raises_after_max_attempts(self): | CODE |
| LOW | tests/test_resilience.py | 168 | async def test_jitter_respects_max_delay(self, monkeypatch): | CODE |
| LOW | tests/test_resilience.py | 198 | def test_retry_rejects_invalid_max_attempts(self): | CODE |
| LOW | tests/test_resilience.py | 211 | def test_retry_rejects_invalid_delays(self): | CODE |
| LOW | tests/test_resilience.py | 225 | async def test_async_retry_rejects_invalid_max_attempts(self): | CODE |
| LOW | tests/test_resilience.py | 239 | async def test_async_retry_rejects_invalid_delays(self): | CODE |
| LOW | tests/test_resilience.py | 254 | def test_default_retry_does_not_retry_oserror_subclasses(self): | CODE |
| LOW | tests/test_resilience.py | 272 | def test_closed_state_allows_calls(self): | CODE |
| LOW | tests/test_resilience.py | 282 | def test_opens_after_threshold(self): | CODE |
| LOW | tests/test_resilience.py | 298 | def test_half_open_after_timeout(self): | CODE |
| LOW | tests/test_resilience.py | 314 | def test_failure_threshold_resets_outside_window(self): | CODE |
| LOW | tests/test_resilience.py | 346 | def test_application_error_does_not_trip_breaker(self): | CODE |
| LOW | tests/test_resilience.py | 362 | def test_half_open_allows_single_trial_call(self): | CODE |
| LOW | tests/test_mineru_error_hints.py | 36 | def test_pagechars_failure_is_recognized(): | CODE |
| LOW | tests/test_mineru_error_hints.py | 44 | def test_diagnosis_accepts_a_plain_string(): | CODE |
| LOW | tests/test_mineru_error_hints.py | 59 | def test_unknown_failures_produce_no_hint(error_msg): | CODE |
| LOW | tests/test_mineru_error_hints.py | 63 | def test_execution_error_message_includes_hint(): | CODE |
| LOW⚡ | tests/test_mineru_error_hints.py | 75 | def test_execution_error_without_known_signature_has_no_hint(): | CODE |
| LOW⚡ | tests/test_mineru_error_hints.py | 85 | def test_execution_error_keeps_positional_signature(): | CODE |
| LOW⚡ | tests/test_mineru_error_hints.py | 93 | def test_explicit_hint_overrides_diagnosis(): | CODE |
| LOW | tests/test_mineru_error_hints.py | 114 | def test_hint_survives_the_real_stderr_capture_path(mock_mkdir, mock_popen): | CODE |
| LOW | tests/test_mineru_error_hints.py | 136 | def test_unrelated_stderr_still_raises_without_a_hint(mock_mkdir, mock_popen): | CODE |
| 275 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 7 | # 🚀 RAG-Anything: All-in-One RAG Framework | COMMENT |
| MEDIUM | README.md | 1069 | - See **[docs/multimodal_rag_failure_modes.md](docs/multimodal_rag_failure_modes.md)** for a short checklist of common p | CODE |
| MEDIUM | README.md | 1082 | After parsing, each non-empty `img_path`, `table_img_path`, or `equation_img_path` may gain a sibling field `*_public_ur | CODE |
| MEDIUM | README.md | 1305 | <span style="color: #00d9ff; font-size: 18px;">Thank you for visiting RAG-Anything!</span> | CODE |
| MEDIUM | README_zh.md | 7 | # 🚀 RAG-Anything: All-in-One RAG System | COMMENT |
| MEDIUM | reproduce/query.py | 315 | # Process with RAG | COMMENT |
| MEDIUM | reproduce/index.py | 263 | # Process with RAG | COMMENT |
| MEDIUM⚡ | reproduce/llm_answer_evaluator.py | 1419 | # Check the RAG hybrid result error. | COMMENT |
| MEDIUM⚡ | reproduce/llm_answer_evaluator.py | 1426 | # Check the RAG mix result error. | COMMENT |
| MEDIUM⚡ | reproduce/llm_answer_evaluator.py | 1433 | # Check the RAG naive result error. | COMMENT |
| MEDIUM | reproduce/llm_answer_evaluator.py | 472 | # Load RAG evaluation results. | COMMENT |
| MEDIUM | reproduce/llm_answer_evaluator.py | 1465 | # RAG errors. | COMMENT |
| MEDIUM | reproduce/llm_answer_evaluator.py | 1743 | # Support multiple result-file inputs (RAG/VLM), which can coexist with the QA directory option. | COMMENT |
| MEDIUM | reproduce/llm_answer_evaluator.py | 616 | else: # RAG results | CODE |
| MEDIUM | docs/offline_setup.md | 1 | # Running RAG-Anything in an Offline Environment | COMMENT |
| MEDIUM | docs/batch_processing.md | 88 | ### Integration with RAG-Anything | COMMENT |
| MEDIUM | docs/batch_processing.md | 106 | ### Process Documents with RAG Integration | COMMENT |
| MEDIUM | docs/batch_processing.md | 109 | # Process documents in batch and then add them to RAG | COMMENT |
| MEDIUM | docs/enhanced_markdown.md | 292 | ## Integration with RAG-Anything | COMMENT |
| MEDIUM | docs/enhanced_markdown.md | 299 | # Initialize RAG-Anything | COMMENT |
| MEDIUM | docs/enhanced_markdown.md | 312 | # before being processed by the RAG system | COMMENT |
| MEDIUM | docs/multimodal_rag_failure_modes.md | 1 | # Multimodal RAG: common failure modes and quick checks | COMMENT |
| MEDIUM | docs/multimodal_rag_failure_modes.md | 5 | It is meant to stay small and easy to maintain (see discussion in [#207](https://github.com/HKUDS/RAG-Anything/issues/20 | CODE |
| MEDIUM | docs/multimodal_rag_failure_modes.md | 59 | - [#48](https://github.com/HKUDS/RAG-Anything/issues/48) style: large PDFs and OCR are inherently heavy—batch size and h | CODE |
| MEDIUM | docs/vllm_integration.md | 1 | # vLLM Integration Guide for RAG-Anything | COMMENT |
| MEDIUM | docs/vllm_integration.md | 94 | ### Qwen 2.5 (Recommended for RAG) | COMMENT |
| MEDIUM | docs/vllm_integration.md | 148 | # RAG chunks are typically <4K tokens; 8192 is often sufficient | COMMENT |
| MEDIUM | raganything/modalprocessors.py | 163 | # Check if item is within context window and matches filter criteria | COMMENT |
| MEDIUM | raganything/omml_extractor.py | 520 | # equation searchable for downstream RAG even when the operator is | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 386 | # Step 2: Process with RAG | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 387 | # Initialize RAG system | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 394 | # Then, process each successful file with RAG | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 402 | # Process files with RAG (this could be parallelized in the future) | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 405 | # Process the successfully parsed file with RAG | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 414 | # This would require additional tracking in the RAG system | COMMENT |
| MEDIUM | examples/ollama_integration_example.py | 19 | ollama pull nomic-embed-text # embedding model (768-dim) | STRING |
| MEDIUM | examples/ollama_integration_example.py | 39 | # RAG-Anything imports | COMMENT |
| MEDIUM | examples/raganything_example.py | 317 | # Process with RAG | COMMENT |
| MEDIUM⚡ | examples/batch_processing_example.py | 245 | # Initialize RAG-Anything with temporary storage | COMMENT |
| MEDIUM | examples/batch_processing_example.py | 262 | # Demonstrate batch processing with RAG integration | COMMENT |
| MEDIUM | examples/batch_processing_example.py | 265 | # Use the RAG-integrated batch processing | COMMENT |
| MEDIUM | examples/batch_processing_example.py | 281 | # Demonstrate batch processing with full RAG integration | COMMENT |
| MEDIUM | examples/batch_processing_example.py | 515 | # RAG integration | COMMENT |
| MEDIUM | examples/vllm_integration_example.py | 45 | # RAG-Anything imports | COMMENT |
| MEDIUM | examples/vllm_integration_example.py | 110 | # RAG-Anything configuration | COMMENT |
| MEDIUM | examples/vllm_integration_example.py | 331 | # Initialize RAG | COMMENT |
| MEDIUM | examples/minimax_integration_example.py | 44 | # RAG-Anything imports | COMMENT |
| MEDIUM | examples/minimax_integration_example.py | 57 | # Embedding configuration (MiniMax does not provide an embedding model; | COMMENT |
| MEDIUM | examples/minimax_integration_example.py | 137 | # RAG-Anything configuration | COMMENT |
| MEDIUM | examples/lmstudio_integration_example.py | 34 | # RAG-Anything imports | COMMENT |
| MEDIUM | examples/lmstudio_integration_example.py | 88 | # RAG-Anything configuration | COMMENT |
| MEDIUM | examples/lmstudio_integration_example.py | 309 | # Initialize RAG | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | reproduce/query.py | 270 | except Exception as e: | CODE |
| LOW | reproduce/index.py | 218 | except Exception as e: | CODE |
| MEDIUM⚡ | reproduce/llm_answer_evaluator.py | 1810 | print(f"Error: result file does not exist: {file_path}") | CODE |
| MEDIUM | reproduce/llm_answer_evaluator.py | 1797 | print("Error: an OpenAI API key is required") | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 442 | except Exception as e: | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 1518 | except Exception as e: | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 1601 | except Exception as e: | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 1621 | except Exception: | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 1868 | except Exception as e: | CODE |
| LOW | reproduce/llm_answer_evaluator.py | 209 | except Exception as e: | STRING |
| LOW⚡ | tests/test_close_event_loop.py | 37 | except Exception: | CODE |
| LOW⚡ | tests/test_close_event_loop.py | 41 | except Exception: | CODE |
| LOW | tests/testparser_kwargs.py | 77 | except Exception: | CODE |
| LOW | docs/enhanced_markdown.md | 485 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 116 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 448 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 860 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 961 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1028 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1161 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1223 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1349 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1406 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1523 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1569 | except Exception as e: | CODE |
| LOW | raganything/raganything.py | 169 | except Exception: | CODE |
| LOW | raganything/raganything.py | 173 | except Exception: | CODE |
| LOW | raganything/raganything.py | 340 | except Exception as e: | CODE |
| LOW | raganything/raganything.py | 412 | except Exception as e: | CODE |
| LOW | raganything/raganything.py | 417 | except Exception as e: | CODE |
| LOW⚡ | raganything/raganything.py | 470 | except Exception as e: | CODE |
| LOW | raganything/raganything.py | 569 | except Exception as e: | CODE |
| LOW | raganything/raganything.py | 607 | except Exception as e: | CODE |
| LOW | raganything/omml_extractor.py | 196 | except Exception as e: # pragma: no cover - defensive | CODE |
| LOW | raganything/query.py | 198 | except Exception as exc: | CODE |
| LOW | raganything/query.py | 314 | except Exception as e: | CODE |
| LOW | raganything/query.py | 357 | except Exception as e: | CODE |
| LOW | raganything/query.py | 369 | except Exception as e: | CODE |
| LOW | raganything/query.py | 490 | except Exception as e: | CODE |
| LOW | raganything/query.py | 527 | except Exception as e: | CODE |
| LOW | raganything/query.py | 679 | except Exception: | CODE |
| LOW | raganything/query.py | 689 | except Exception: | CODE |
| LOW | raganything/query.py | 723 | except Exception as e: | CODE |
| LOW | raganything/query.py | 847 | except Exception as e: | CODE |
| LOW⚡ | raganything/batch.py | 417 | except Exception as e: | CODE |
| LOW | raganything/batch.py | 144 | except Exception as e: | CODE |
| LOW | raganything/batch.py | 298 | except Exception: | CODE |
| LOW | raganything/processor.py | 315 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 385 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 553 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 679 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 716 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 801 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 873 | except Exception: | CODE |
| LOW | raganything/processor.py | 949 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 1157 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 1177 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 1271 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 1329 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 1522 | except Exception as e: | CODE |
| 107 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_close_event_loop.py | 15 | # ── Replicate the close() logic under test ────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_close_event_loop.py | 45 | # ── Tests ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_core_modules.py | 118 | # ── Content Separation Tests ───────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_core_modules.py | 177 | # ── Image Encoding Tests ───────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_core_modules.py | 23 | # ── DocStatus Tests ────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_core_modules.py | 44 | # ── RAGAnythingConfig Tests ────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_core_modules.py | 201 | # ── Image Validation Tests ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_core_modules.py | 241 | # ── Processor Type Mapping Tests ───────────────────────────────── | COMMENT |
| MEDIUM | tests/test_core_modules.py | 292 | # ── BatchProcessingResult Tests ────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_core_modules.py | 355 | # ── BatchParser Initialization Tests ───────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_minimax_integration.py | 167 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_minimax_integration.py | 169 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_minimax_integration.py | 367 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_minimax_integration.py | 369 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_minimax_integration.py | 21 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_minimax_integration.py | 23 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_minimax_integration.py | 113 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_minimax_integration.py | 115 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_minimax_integration.py | 282 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_minimax_integration.py | 284 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 30 | # ========================================== | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 32 | # ========================================== | COMMENT |
| MEDIUM | raganything/batch.py | 179 | # ========================================== | COMMENT |
| MEDIUM | raganything/batch.py | 181 | # ========================================== | COMMENT |
| MEDIUM | raganything/callbacks.py | 71 | # ── Parsing stage ───────────────────────────────────────────── | COMMENT |
| MEDIUM | raganything/callbacks.py | 90 | # ── Text insertion stage ────────────────────────────────────── | COMMENT |
| MEDIUM | raganything/callbacks.py | 101 | # ── Multimodal processing stage ─────────────────────────────── | COMMENT |
| MEDIUM | raganything/callbacks.py | 126 | # ── Query stage ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | raganything/callbacks.py | 149 | # ── Document complete ───────────────────────────────────────── | COMMENT |
| MEDIUM | raganything/callbacks.py | 168 | # ── Batch processing ────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | README.md | 338 | api_key = "your-api-key" | CODE |
| HIGH | README.md | 476 | api_key = "your-api-key" | CODE |
| HIGH | README.md | 694 | api_key = "your-api-key" | CODE |
| HIGH | README.md | 821 | api_key = "your-api-key" | CODE |
| HIGH | README.md | 1020 | python examples/raganything_example.py path/to/document.pdf --api-key YOUR_API_KEY --parser mineru | CODE |
| HIGH | README.md | 1023 | python examples/modalprocessors_example.py --api-key YOUR_API_KEY | CODE |
| HIGH | README_zh.md | 316 | api_key = "your-api-key" | CODE |
| HIGH | README_zh.md | 456 | api_key = "your-api-key" | CODE |
| HIGH | README_zh.md | 673 | api_key = "your-api-key" | CODE |
| HIGH | README_zh.md | 800 | api_key = "your-api-key" | CODE |
| HIGH | README_zh.md | 999 | python examples/raganything_example.py path/to/document.pdf --api-key YOUR_API_KEY --parser mineru | CODE |
| HIGH | README_zh.md | 1002 | python examples/modalprocessors_example.py --api-key YOUR_API_KEY | CODE |
| HIGH | examples/minimax_integration_example.py | 29 | export MINIMAX_API_KEY=your-api-key | STRING |
| HIGH | examples/minimax_integration_example.py | 72 | "Set it with: export MINIMAX_API_KEY=your-api-key" | CODE |
| HIGH | examples/minimax_integration_example.py | 154 | print(" Set it with: export MINIMAX_API_KEY=your-api-key") | CODE |
| HIGH | examples/minimax_integration_example.py | 266 | " MINIMAX_API_KEY=your-api-key\n" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 14 | CODE | |
| LOW | reproduce/query.py | 90 | CODE | |
| LOW | reproduce/llm_answer_evaluator.py | 159 | CODE | |
| LOW | reproduce/llm_answer_evaluator.py | 213 | CODE | |
| LOW | reproduce/llm_answer_evaluator.py | 286 | CODE | |
| LOW | reproduce/llm_answer_evaluator.py | 491 | CODE | |
| LOW | reproduce/llm_answer_evaluator.py | 759 | CODE | |
| LOW | reproduce/llm_answer_evaluator.py | 848 | CODE | |
| LOW | reproduce/llm_answer_evaluator.py | 1058 | CODE | |
| LOW | tests/test_full_entities_merge.py | 10 | CODE | |
| LOW | tests/test_close_event_loop.py | 18 | CODE | |
| LOW | raganything/modalprocessors.py | 68 | CODE | |
| LOW | raganything/modalprocessors.py | 139 | CODE | |
| LOW | raganything/modalprocessors.py | 179 | CODE | |
| LOW | raganything/modalprocessors.py | 212 | CODE | |
| LOW | raganything/modalprocessors.py | 244 | CODE | |
| LOW | raganything/modalprocessors.py | 285 | CODE | |
| LOW | raganything/modalprocessors.py | 607 | CODE | |
| LOW | raganything/raganything.py | 143 | CODE | |
| LOW | raganything/raganything.py | 258 | CODE | |
| LOW | raganything/omml_extractor.py | 111 | CODE | |
| LOW | raganything/omml_extractor.py | 218 | CODE | |
| LOW | raganything/query.py | 59 | CODE | |
| LOW | raganything/query.py | 221 | CODE | |
| LOW | raganything/query.py | 501 | CODE | |
| LOW | raganything/query.py | 615 | CODE | |
| LOW | raganything/query.py | 734 | CODE | |
| LOW | raganything/query.py | 644 | CODE | |
| LOW | raganything/processor.py | 202 | CODE | |
| LOW | raganything/processor.py | 388 | CODE | |
| LOW | raganything/processor.py | 609 | CODE | |
| LOW | raganything/processor.py | 727 | CODE | |
| LOW | raganything/processor.py | 1076 | CODE | |
| LOW | raganything/processor.py | 1275 | CODE | |
| LOW | raganything/processor.py | 1364 | CODE | |
| LOW | raganything/processor.py | 2109 | CODE | |
| LOW | raganything/parser.py | 2735 | CODE | |
| LOW | raganything/parser.py | 143 | CODE | |
| LOW | raganything/parser.py | 245 | CODE | |
| LOW | raganything/parser.py | 290 | CODE | |
| LOW | raganything/parser.py | 460 | CODE | |
| LOW | raganything/parser.py | 923 | CODE | |
| LOW | raganything/parser.py | 1172 | CODE | |
| LOW | raganything/parser.py | 1290 | CODE | |
| LOW | raganything/parser.py | 1370 | CODE | |
| LOW | raganything/parser.py | 1583 | CODE | |
| LOW | raganything/parser.py | 1776 | CODE | |
| LOW | raganything/parser.py | 2056 | CODE | |
| LOW | raganything/parser.py | 2309 | CODE | |
| LOW | raganything/parser.py | 2415 | CODE | |
| LOW | raganything/parser.py | 2447 | CODE | |
| LOW | raganything/parser.py | 2321 | CODE | |
| LOW | raganything/enhanced_markdown.py | 370 | CODE | |
| LOW | raganything/enhanced_markdown.py | 403 | CODE | |
| LOW | raganything/batch_parser.py | 575 | CODE | |
| LOW | raganything/batch_parser.py | 119 | CODE | |
| LOW | raganything/batch_parser.py | 360 | CODE | |
| LOW | raganything/resilience.py | 144 | CODE | |
| LOW | raganything/resilience.py | 186 | CODE | |
| LOW | raganything/resilience.py | 188 | CODE | |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | reproduce/llm_answer_evaluator.py | 1813 | # Create the configuration. | COMMENT |
| MEDIUM⚡ | reproduce/llm_answer_evaluator.py | 1816 | # Create the evaluator. | COMMENT |
| MEDIUM | raganything/query.py | 74 | # Create a normalized representation of the query parameters | COMMENT |
| MEDIUM | raganything/processor.py | 233 | # Create a content signature | COMMENT |
| MEDIUM | raganything/parser.py | 185 | # Create a temporary file with the correct extension | COMMENT |
| MEDIUM⚡ | examples/batch_processing_example.py | 323 | # Create a directory structure with nested files | COMMENT |
| MEDIUM⚡ | examples/batch_processing_example.py | 326 | # Create main directory files | COMMENT |
| MEDIUM | scripts/create_tiktoken_cache.py | 4 | # Define the directory where you want to store the cache | COMMENT |
| MEDIUM | scripts/create_tiktoken_cache.py | 9 | # Create the directory if it doesn't exist | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_asset_urls.py | 3 | CODE | |
| LOW | tests/test_raganything_example.py | 1 | CODE | |
| LOW | tests/test_omml_extractor.py | 8 | CODE | |
| LOW | raganything/omml_extractor.py | 40 | CODE | |
| LOW | raganything/batch.py | 16 | CODE | |
| LOW | raganything/prompt_manager.py | 18 | CODE | |
| LOW | raganything/__init__.py | 1 | CODE | |
| LOW | raganything/__init__.py | 2 | CODE | |
| LOW | raganything/__init__.py | 5 | CODE | |
| LOW | raganything/__init__.py | 9 | CODE | |
| LOW | raganything/__init__.py | 9 | CODE | |
| LOW | raganything/__init__.py | 9 | CODE | |
| LOW | raganything/__init__.py | 9 | CODE | |
| LOW | raganything/__init__.py | 21 | CODE | |
| LOW | raganything/__init__.py | 21 | CODE | |
| LOW | raganything/__init__.py | 21 | CODE | |
| LOW | raganything/__init__.py | 35 | CODE | |
| LOW | raganything/__init__.py | 35 | CODE | |
| LOW | raganything/__init__.py | 35 | CODE | |
| LOW | raganything/__init__.py | 35 | CODE | |
| LOW | raganything/__init__.py | 48 | CODE | |
| LOW | raganything/__init__.py | 48 | CODE | |
| LOW | raganything/__init__.py | 48 | CODE | |
| LOW | raganything/__init__.py | 48 | CODE | |
| LOW | raganything/__init__.py | 48 | CODE | |
| LOW | raganything/processor.py | 7 | CODE | |
| LOW | raganything/parser.py | 24 | CODE | |
| LOW | raganything/asset_urls.py | 14 | CODE | |
| LOW | raganything/utils.py | 7 | CODE | |
| LOW | raganything/callbacks.py | 23 | CODE | |
| LOW | raganything/prompts_zh.py | 11 | CODE | |
| LOW | raganything/prompt.py | 8 | CODE | |
| LOW | raganything/resilience.py | 11 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | reproduce/query.py | 305 | # Check if API key is provided | COMMENT |
| LOW | reproduce/index.py | 253 | # Check if API key is provided | COMMENT |
| LOW | raganything/modalprocessors.py | 163 | # Check if item is within context window and matches filter criteria | COMMENT |
| LOW | raganything/query.py | 151 | # Check if VLM enhanced query should be used | COMMENT |
| LOW | raganything/query.py | 662 | # Check if it's in the current working directory or subdirectories | COMMENT |
| LOW | raganything/processor.py | 654 | # Check if multimodal content is already processed | COMMENT |
| LOW | raganything/parser.py | 1198 | # Check if this subdirectory contains the expected JSON output file | COMMENT |
| LOW | raganything/parser.py | 1800 | # Check if input is a URL | COMMENT |
| LOW | raganything/enhanced_markdown.py | 36 | # Check if pandoc module exists (not used directly, just for detection) | COMMENT |
| LOW | raganything/enhanced_markdown.py | 104 | # Check if pandoc is installed on system | COMMENT |
| LOW | raganything/enhanced_markdown.py | 511 | # Check if input file is provided | COMMENT |
| LOW | raganything/utils.py | 266 | # Check if file exists and is not a symlink (for security) | COMMENT |
| LOW | examples/office_document_test.py | 55 | # Check if file exists and is a supported Office format | COMMENT |
| LOW | examples/raganything_example.py | 307 | # Check if API key is provided | COMMENT |
| LOW | examples/batch_processing_example.py | 162 | # Display results | COMMENT |
| LOW⚡ | examples/batch_processing_example.py | 220 | # Display results | COMMENT |
| LOW⚡ | examples/image_format_test.py | 60 | # Check if file exists and is a supported image format | COMMENT |
| LOW | examples/insert_content_list_example.py | 415 | # Check if API key is provided | COMMENT |
| LOW | examples/text_format_test.py | 43 | # Check if file exists and is a supported text format | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | reproduce/query.py | 0 | example script demonstrating parser integration with raganything this example shows how to: 1. process documents with ra | STRING |
| HIGH | reproduce/index.py | 0 | example script demonstrating parser integration with raganything this example shows how to: 1. process documents with ra | STRING |
| HIGH | examples/raganything_example.py | 0 | example script demonstrating parser integration with raganything this example shows how to: 1. process documents with ra | STRING |
| HIGH | reproduce/query.py | 0 | process document with raganything args: file_path: path to the document output_dir: output directory for rag results api | STRING |
| HIGH | reproduce/index.py | 0 | process document with raganything args: file_path: path to the document output_dir: output directory for rag results api | STRING |
| HIGH | examples/raganything_example.py | 0 | process document with raganything args: file_path: path to the document output_dir: output directory for rag results api | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | raganything/batch.py | 386 | # Step 2: Process with RAG | COMMENT |
| LOW | raganything/batch.py | 374 | # Step 1: Parse documents in batch | COMMENT |
| LOW⚡ | raganything/processor.py | 1696 | # Step 1: Parse document | COMMENT |
| LOW⚡ | raganything/processor.py | 1705 | # Step 2: Separate text and multimodal content | COMMENT |
| LOW | raganything/processor.py | 1729 | # Step 3: Insert pure text content with all parameters | COMMENT |
| LOW | raganything/processor.py | 1766 | # Step 4: Process multimodal content (using specialized processors) | COMMENT |
| LOW | raganything/processor.py | 1969 | # Step 1: Parse document | COMMENT |
| LOW | raganything/processor.py | 2012 | # Step 2: Separate text and multimodal content | COMMENT |
| LOW | raganything/processor.py | 2038 | # Step 3: Insert pure text content and multimodal content with all parameters | COMMENT |
| LOW | raganything/processor.py | 2184 | # Step 1: Separate text and multimodal content | COMMENT |
| LOW | raganything/processor.py | 2208 | # Step 2: Insert pure text content with all parameters | COMMENT |
| LOW | raganything/processor.py | 2244 | # Step 3: Process multimodal content (using specialized processors) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | raganything/batch.py | 386 | # Step 2: Process with RAG | COMMENT |
| LOW | raganything/batch.py | 374 | # Step 1: Parse documents in batch | COMMENT |
| LOW⚡ | raganything/processor.py | 1696 | # Step 1: Parse document | COMMENT |
| LOW⚡ | raganything/processor.py | 1705 | # Step 2: Separate text and multimodal content | COMMENT |
| LOW | raganything/processor.py | 1729 | # Step 3: Insert pure text content with all parameters | COMMENT |
| LOW | raganything/processor.py | 1766 | # Step 4: Process multimodal content (using specialized processors) | COMMENT |
| LOW | raganything/processor.py | 1969 | # Step 1: Parse document | COMMENT |
| LOW | raganything/processor.py | 2012 | # Step 2: Separate text and multimodal content | COMMENT |
| LOW | raganything/processor.py | 2038 | # Step 3: Insert pure text content and multimodal content with all parameters | COMMENT |
| LOW | raganything/processor.py | 2184 | # Step 1: Separate text and multimodal content | COMMENT |
| LOW | raganything/processor.py | 2208 | # Step 2: Insert pure text content with all parameters | COMMENT |
| LOW | raganything/processor.py | 2244 | # Step 3: Process multimodal content (using specialized processors) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | reproduce/llm_answer_evaluator.py | 270 | # For comprehensive evaluation, try to extract additional metrics. | COMMENT |
| LOW | tests/test_custom_parser.py | 167 | # Do not touch the filesystem; just return a dummy result. | COMMENT |
| MEDIUM | raganything/modalprocessors.py | 1421 | """Parse equation analysis response with robust JSON handling""" | STRING |
| MEDIUM | raganything/omml_extractor.py | 52 | # them to construct fully qualified tag names so that lookups are robust to | COMMENT |
| MEDIUM | examples/enhanced_markdown_example.py | 30 | """Create comprehensive sample markdown content for testing""" | STRING |
| MEDIUM⚡ | examples/enhanced_markdown_example.py | 898 | # Demonstrate robust conversion with fallbacks | STRING |
| MEDIUM | examples/enhanced_markdown_example.py | 920 | # Test robust conversion | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | raganything/query.py | 229 | Multimodal query - combines text and multimodal content for querying Args: query: Base que | STRING |
| HIGH | raganything/parser.py | 2704 | Get a parser instance by name. Checks built-in parsers first, then falls back to the custom parser registry pop | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | raganything/omml_extractor.py | 48 | logger = logging.getLogger(__name__) | CODE |
| LOW | raganything/omml_extractor.py | 754 | __all__ = [ | CODE |
| LOW | raganything/prompt_manager.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | raganything/prompt_manager.py | 84 | def set_prompt_language(language: str) -> None: | CODE |
| LOW | raganything/__init__.py | 64 | __all__ = [ | CODE |
| LOW⚡ | raganything/processor.py | 171 | async def _set_multimodal_status_record(self, doc_id: str, processed: bool) -> None: | CODE |
| LOW | raganything/asset_urls.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | raganything/callbacks.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | raganything/resilience.py | 20 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | raganything/batch.py | 34 | CODE | |
| LOW | raganything/processor.py | 1814 | CODE | |
| LOW | raganything/parser.py | 923 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | requirements.txt | 1 | huggingface_hub | COMMENT |