"RAG-Anything: All-in-One RAG Framework"
This report presents the forensic synthetic code analysis of HKUDS/RAG-Anything, a Python project with 22,199 GitHub stars. SynthScan v2.0 examined 29,856 lines of code across 81 source files, recording 734 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 34.5 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 734 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_resilience.py | 21 | def test_retries_on_transient_error(self): | CODE |
| LOW | tests/test_resilience.py | 39 | def test_raises_after_max_attempts(self): | CODE |
| LOW | tests/test_resilience.py | 51 | def test_does_not_retry_non_retryable(self): | CODE |
| LOW | tests/test_resilience.py | 110 | async def test_retries_on_transient_error(self): | CODE |
| LOW | tests/test_resilience.py | 129 | async def test_raises_after_max_attempts(self): | CODE |
| LOW | tests/test_resilience.py | 143 | def test_retry_rejects_invalid_max_attempts(self): | CODE |
| LOW | tests/test_resilience.py | 156 | def test_retry_rejects_invalid_delays(self): | CODE |
| LOW | tests/test_resilience.py | 170 | async def test_async_retry_rejects_invalid_max_attempts(self): | CODE |
| LOW | tests/test_resilience.py | 184 | async def test_async_retry_rejects_invalid_delays(self): | CODE |
| LOW | tests/test_resilience.py | 199 | def test_default_retry_does_not_retry_oserror_subclasses(self): | CODE |
| LOW | tests/test_resilience.py | 217 | def test_closed_state_allows_calls(self): | CODE |
| LOW | tests/test_resilience.py | 227 | def test_opens_after_threshold(self): | CODE |
| LOW | tests/test_resilience.py | 243 | def test_half_open_after_timeout(self): | CODE |
| LOW | tests/test_resilience.py | 259 | def test_failure_threshold_resets_outside_window(self): | CODE |
| LOW | tests/test_resilience.py | 291 | def test_application_error_does_not_trip_breaker(self): | CODE |
| LOW | tests/test_resilience.py | 307 | def test_half_open_allows_single_trial_call(self): | CODE |
| LOW | tests/test_insert_content_list.py | 22 | def _install_minimal_lightrag_stubs(): | CODE |
| LOW⚡ | tests/test_insert_content_list.py | 116 | async def _ensure_lightrag_initialized(self): | CODE |
| LOW⚡ | tests/test_insert_content_list.py | 124 | def _generate_content_based_doc_id(self, content_list): | CODE |
| LOW⚡ | tests/test_insert_content_list.py | 127 | async def _process_multimodal_content(self, multimodal_items, file_ref, doc_id): | CODE |
| LOW⚡ | tests/test_insert_content_list.py | 131 | def test_insert_content_list_defers_status_until_after_text_insert(): | CODE |
| LOW | tests/test_insert_content_list.py | 157 | def test_process_document_complete_defers_status_until_after_text_insert(): | CODE |
| LOW | tests/test_insert_content_list.py | 179 | def test_process_document_complete_keeps_status_for_multimodal_only_content(): | CODE |
| LOW | tests/test_insert_content_list.py | 196 | def test_insert_content_list_keeps_status_for_multimodal_only_content(): | CODE |
| LOW | tests/test_doc_status_creation.py | 75 | async def test_insert_text_content_with_multimodal_falls_back_for_old_lightrag( | CODE |
| LOW | tests/test_doc_status_creation.py | 121 | async def test_process_document_complete_bootstraps_doc_status( | CODE |
| LOW | tests/test_doc_status_creation.py | 169 | async def fake_ensure_lightrag_initialized(): | CODE |
| LOW | tests/test_doc_status_creation.py | 196 | async def test_image_only_document_falls_back_when_multimodal_flag_is_unsupported( | CODE |
| LOW | tests/test_doc_status_creation.py | 246 | async def fake_ensure_lightrag_initialized(): | CODE |
| LOW | tests/test_doc_status_creation.py | 263 | async def fake_process_multimodal_content(multimodal_items, file_name, doc_id): | CODE |
| LOW | tests/test_doc_status_creation.py | 292 | async def test_compatibility_multimodal_cache_prevents_repeat_processing( | CODE |
| LOW | tests/test_doc_status_creation.py | 340 | async def fake_ensure_lightrag_initialized(): | CODE |
| 227 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 | 1273 | <a href="https://star-history.com/#HKUDS/RAG-Anything&Date"> | CODE |
| MEDIUM | README.md | 1321 | <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 | README_zh.md | 1215 | <a href="https://star-history.com/#HKUDS/RAG-Anything&Date"> | CODE |
| 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 | 380 | # Step 2: Process with RAG | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 381 | # Initialize RAG system | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 388 | # Then, process each successful file with RAG | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 396 | # Process files with RAG (this could be parallelized in the future) | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 399 | # Process the successfully parsed file with RAG | COMMENT |
| MEDIUM⚡ | raganything/batch.py | 408 | # 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 | 444 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 856 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 957 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1024 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1157 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1219 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1345 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1402 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1519 | except Exception as e: | CODE |
| LOW | raganything/modalprocessors.py | 1565 | 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 | 172 | except Exception as exc: | CODE |
| LOW | raganything/query.py | 288 | except Exception as e: | CODE |
| LOW | raganything/query.py | 331 | except Exception as e: | CODE |
| LOW | raganything/query.py | 343 | except Exception as e: | CODE |
| LOW | raganything/query.py | 464 | except Exception as e: | CODE |
| LOW | raganything/query.py | 501 | except Exception as e: | CODE |
| LOW | raganything/query.py | 653 | except Exception: | CODE |
| LOW | raganything/query.py | 663 | except Exception: | CODE |
| LOW | raganything/query.py | 697 | except Exception as e: | CODE |
| LOW | raganything/query.py | 821 | except Exception as e: | CODE |
| LOW⚡ | raganything/batch.py | 411 | except Exception as e: | CODE |
| LOW | raganything/batch.py | 138 | except Exception as e: | CODE |
| LOW | raganything/batch.py | 292 | 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 | 841 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 906 | except Exception: | CODE |
| LOW | raganything/processor.py | 982 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 1190 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 1210 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 1304 | except Exception as e: | CODE |
| LOW | raganything/processor.py | 1362 | except Exception as e: | CODE |
| 108 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 | 173 | # ========================================== | COMMENT |
| MEDIUM | raganything/batch.py | 175 | # ========================================== | 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 | 603 | 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 | 26 | CODE | |
| LOW | raganything/query.py | 195 | CODE | |
| LOW | raganything/query.py | 475 | CODE | |
| LOW | raganything/query.py | 589 | CODE | |
| LOW | raganything/query.py | 708 | CODE | |
| LOW | raganything/query.py | 618 | 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 | 1109 | CODE | |
| LOW | raganything/processor.py | 1308 | CODE | |
| LOW | raganything/processor.py | 1397 | CODE | |
| LOW | raganything/processor.py | 2104 | CODE | |
| LOW | raganything/parser.py | 2659 | CODE | |
| LOW | raganything/parser.py | 92 | CODE | |
| LOW | raganything/parser.py | 194 | CODE | |
| LOW | raganything/parser.py | 239 | CODE | |
| LOW | raganything/parser.py | 389 | CODE | |
| LOW | raganything/parser.py | 833 | CODE | |
| LOW | raganything/parser.py | 1079 | CODE | |
| LOW | raganything/parser.py | 1197 | CODE | |
| LOW | raganything/parser.py | 1277 | CODE | |
| LOW | raganything/parser.py | 1507 | CODE | |
| LOW | raganything/parser.py | 1700 | CODE | |
| LOW | raganything/parser.py | 1980 | CODE | |
| LOW | raganything/parser.py | 2233 | CODE | |
| LOW | raganything/parser.py | 2339 | CODE | |
| LOW | raganything/parser.py | 2371 | CODE | |
| LOW | raganything/parser.py | 2245 | CODE | |
| LOW | raganything/enhanced_markdown.py | 370 | CODE | |
| LOW | raganything/enhanced_markdown.py | 403 | CODE | |
| LOW | raganything/batch_parser.py | 556 | CODE | |
| LOW | raganything/batch_parser.py | 119 | CODE | |
| LOW | raganything/batch_parser.py | 353 | CODE | |
| LOW | raganything/resilience.py | 146 | CODE | |
| LOW | raganything/resilience.py | 188 | CODE | |
| LOW | raganything/resilience.py | 190 | 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 | 41 | # Create a normalized representation of the query parameters | COMMENT |
| MEDIUM | raganything/processor.py | 233 | # Create a content signature | COMMENT |
| MEDIUM | raganything/parser.py | 134 | # 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 | 125 | # Check if VLM enhanced query should be used | COMMENT |
| LOW | raganything/query.py | 636 | # 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 | 1105 | # Check if this subdirectory contains the expected JSON output file | COMMENT |
| LOW | raganything/parser.py | 1724 | # 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 | 380 | # Step 2: Process with RAG | COMMENT |
| LOW | raganything/batch.py | 368 | # Step 1: Parse documents in batch | COMMENT |
| LOW⚡ | raganything/processor.py | 1708 | # Step 1: Parse document | COMMENT |
| LOW⚡ | raganything/processor.py | 1717 | # Step 2: Separate text and multimodal content | COMMENT |
| LOW | raganything/processor.py | 1741 | # Step 3: Insert pure text content with all parameters | COMMENT |
| LOW | raganything/processor.py | 1778 | # Step 4: Process multimodal content (using specialized processors) | COMMENT |
| LOW | raganything/processor.py | 1974 | # Step 1: Parse document | COMMENT |
| LOW | raganything/processor.py | 2021 | # Step 2: Separate text and multimodal content | COMMENT |
| LOW | raganything/processor.py | 2033 | # Step 3: Insert pure text content and multimodal content with all parameters | COMMENT |
| LOW | raganything/processor.py | 2179 | # Step 1: Separate text and multimodal content | COMMENT |
| LOW | raganything/processor.py | 2203 | # Step 2: Insert pure text content with all parameters | COMMENT |
| LOW | raganything/processor.py | 2239 | # Step 3: Process multimodal content (using specialized processors) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | raganything/batch.py | 380 | # Step 2: Process with RAG | COMMENT |
| LOW | raganything/batch.py | 368 | # Step 1: Parse documents in batch | COMMENT |
| LOW⚡ | raganything/processor.py | 1708 | # Step 1: Parse document | COMMENT |
| LOW⚡ | raganything/processor.py | 1717 | # Step 2: Separate text and multimodal content | COMMENT |
| LOW | raganything/processor.py | 1741 | # Step 3: Insert pure text content with all parameters | COMMENT |
| LOW | raganything/processor.py | 1778 | # Step 4: Process multimodal content (using specialized processors) | COMMENT |
| LOW | raganything/processor.py | 1974 | # Step 1: Parse document | COMMENT |
| LOW | raganything/processor.py | 2021 | # Step 2: Separate text and multimodal content | COMMENT |
| LOW | raganything/processor.py | 2033 | # Step 3: Insert pure text content and multimodal content with all parameters | COMMENT |
| LOW | raganything/processor.py | 2179 | # Step 1: Separate text and multimodal content | COMMENT |
| LOW | raganything/processor.py | 2203 | # Step 2: Insert pure text content with all parameters | COMMENT |
| LOW | raganything/processor.py | 2239 | # 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 | 1417 | """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 | 203 | Multimodal query - combines text and multimodal content for querying Args: query: Base que | STRING |
| HIGH | raganything/parser.py | 2628 | 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 | 20 | 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 | 1826 | CODE | |
| LOW | raganything/parser.py | 833 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | requirements.txt | 1 | huggingface_hub | COMMENT |