Hypergraph is more powerful. Transform unstructured text into structured knowledge with LLMs. Graphs, hypergraphs, and spatio-temporal extractions — with one command.
This report summarizes scanner evidence for yifanfeng97/Hyper-Extract, a Python project with 4,157 GitHub stars. SynthScan examined 93,339 lines of code across 519 source files, recording 1340 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 26.1 (Elevated 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.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 766 finding(s).
Are imports declared and package/API names verified? 199 finding(s).
Are wrappers, guards, and repeated structures necessary? 948 finding(s).
Which changes need focused human review? 1340 finding(s).
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.
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.
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.
The scanner identified 1340 distinct pattern matches across 19 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs_hooks.py | 19 | def _suppress_autorefs_duplicates(): | CODE |
| LOW⚡ | tests/test_mcp_server.py | 55 | def test_list_templates_returns_json(): | CODE |
| LOW⚡ | tests/test_mcp_server.py | 62 | def test_list_templates_includes_methods_by_default(): | CODE |
| LOW⚡ | tests/test_mcp_server.py | 69 | def test_list_templates_can_hide_methods(): | CODE |
| LOW⚡ | tests/test_mcp_server.py | 165 | def test_search_returns_nodes_and_edges(monkeypatch): | CODE |
| LOW⚡ | tests/test_mcp_server.py | 174 | def test_search_graph_rag_triple_includes_community_context(monkeypatch): | CODE |
| LOW⚡ | tests/test_mcp_server.py | 590 | def test_build_server_registers_tools(): | CODE |
| LOW | tests/test_mcp_server.py | 95 | def test_info_counts_items_for_list_and_set_kas(tmp_path): | CODE |
| LOW | tests/test_mcp_server.py | 112 | def test_info_includes_chunks_and_optional_sources(tmp_path): | CODE |
| LOW | tests/test_mcp_server.py | 190 | def test_search_graph_rag_triple_writes_null_community(monkeypatch): | CODE |
| LOW | tests/test_mcp_server.py | 202 | def test_search_list_wraps_results(monkeypatch): | CODE |
| LOW | tests/test_mcp_server.py | 213 | def test_search_dict_recursively_dumps_models(monkeypatch): | CODE |
| LOW | tests/test_mcp_server.py | 229 | def test_search_without_index_is_handled(monkeypatch): | CODE |
| LOW | tests/test_mcp_server.py | 248 | def test_search_and_ask_without_index_is_handled_for_list_and_model( | CODE |
| LOW | tests/test_mcp_server.py | 317 | def test_export_graphml_requires_overwrite(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_mcp_server.py | 340 | def test_export_graphml_rejects_non_graph(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_mcp_server.py | 352 | def test_export_csv_rejects_non_graph_with_same_message(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_mcp_server.py | 366 | def test_export_to_directory_returns_message(monkeypatch, tmp_path, tool): | CODE |
| LOW | tests/test_mcp_server.py | 396 | def test_export_cypher_nary_is_hyperedge_not_clique(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_mcp_server.py | 422 | def test_export_cypher_requires_overwrite(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_mcp_server.py | 444 | def test_export_jsonld_requires_overwrite(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_mcp_server.py | 457 | def test_export_jsonld_rejects_non_graph(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_mcp_server.py | 470 | def test_export_cypher_rejects_non_graph(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_mcp_server.py | 524 | def test_load_missing_path_returns_string(tmp_path, tool_name): | CODE |
| LOW | tests/test_mcp_server.py | 543 | def test_load_dir_without_data_json_returns_string(tmp_path, tool_name): | CODE |
| LOW | tests/test_mcp_server.py | 565 | def test_load_client_error_returns_string(tmp_path, monkeypatch, tool_name): | CODE |
| LOW⚡ | tests/template_engine/test_parser_identifiers.py | 61 | def test_default_source_target_mapping(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_identifiers.py | 68 | def test_direction_is_preserved(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_identifiers.py | 75 | def test_custom_field_mapping(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_identifiers.py | 82 | def test_custom_field_mapping_preserves_direction(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_identifiers.py | 89 | def test_missing_mapped_field_raises(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_identifiers.py | 97 | def test_non_string_values_coerced_to_str(self): | CODE |
| LOW | tests/template_engine/test_parser_identifiers.py | 108 | def test_string_members_returns_sorted_participants(self): | CODE |
| LOW | tests/template_engine/test_parser_identifiers.py | 120 | def test_list_members_returns_sorted_groups(self): | CODE |
| LOW⚡ | tests/template_engine/test_factory.py | 14 | def test_get_existing_template(self): | CODE |
| LOW⚡ | tests/template_engine/test_factory.py | 22 | def test_get_nonexistent_template(self): | CODE |
| LOW⚡ | tests/template_engine/test_factory.py | 32 | def test_create_with_language(self, llm_client, embedder): | CODE |
| LOW⚡ | tests/template_engine/test_factory.py | 44 | def test_create_without_source_raises(self, llm_client, embedder): | CODE |
| LOW⚡ | tests/template_engine/test_factory.py | 52 | def test_create_from_templatecfg_instance(self, llm_client, embedder): | CODE |
| LOW⚡ | tests/template_engine/test_factory.py | 62 | def test_create_method_template(self, llm_client, embedder): | CODE |
| LOW | tests/template_engine/test_factory.py | 136 | def test_unknown_type_yaml_raises_valueerror(self, tmp_path, llm_client, embedder): | CODE |
| LOW | tests/template_engine/test_factory.py | 187 | def test_create_document_yaml_type(self, tmp_path, llm_client, embedder): | STRING |
| LOW | tests/template_engine/test_factory.py | 205 | def test_public_import_autodocument(self): | STRING |
| LOW | tests/template_engine/test_factory.py | 211 | def test_create_gallery_base_document_preset(self, llm_client, embedder): | STRING |
| LOW | tests/template_engine/test_parser_guideline.py | 12 | def test_labels_follow_language(): | CODE |
| LOW | tests/template_engine/test_parser_guideline.py | 23 | def test_unknown_language_falls_back_to_en(): | CODE |
| LOW⚡ | tests/template_engine/test_parser_loader.py | 14 | def test_missing_language_falls_back_to_en(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_loader.py | 17 | def test_missing_language_and_no_en_returns_empty(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_loader.py | 20 | def test_present_language_used(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_loader.py | 27 | def test_load_nonexistent_file_raises(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_loader.py | 32 | def test_load_existing_template(self): | CODE |
| LOW | tests/template_engine/test_parser_options.py | 23 | def test_every_valid_strategy_resolves(self, strategy): | CODE |
| LOW | tests/template_engine/test_parser_options.py | 34 | def test_multiword_llm_strategies_map_to_llm_member(self, strategy): | CODE |
| LOW⚡ | tests/template_engine/test_parser_options.py | 45 | def test_valid_chunk_size_and_overlap_enter_kwargs(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_options.py | 51 | def test_overlap_equal_to_size_fails(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_options.py | 56 | def test_overlap_greater_than_size_fails(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_options.py | 62 | def test_chunk_size_not_positive_fails(self, chunk_size): | CODE |
| LOW⚡ | tests/template_engine/test_parser_options.py | 67 | def test_negative_overlap_fails(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_options.py | 72 | def test_size_only_with_overlap_none_passes(self): | CODE |
| LOW⚡ | tests/template_engine/test_parser_options.py | 78 | def test_both_chunk_fields_default_pass(self): | CODE |
| 503 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_mcp_server.py | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_mcp_server.py | 52 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_mcp_server.py | 75 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_mcp_server.py | 77 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_mcp_server.py | 160 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_mcp_server.py | 162 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_mcp_server.py | 585 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_mcp_server.py | 587 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_mcp_server.py | 483 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_mcp_server.py | 485 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_anthropic.py | 17 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_anthropic.py | 19 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_anthropic.py | 37 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_anthropic.py | 39 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_anthropic.py | 54 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_anthropic.py | 56 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_anthropic.py | 74 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_anthropic.py | 76 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_anthropic.py | 111 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_anthropic.py | 113 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_anthropic.py | 126 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_anthropic.py | 128 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_exporters.py | 115 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_exporters.py | 117 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_exporters.py | 221 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_exporters.py | 223 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_exporters.py | 303 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_exporters.py | 305 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_exporters.py | 825 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_exporters.py | 827 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_exporters.py | 943 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_exporters.py | 945 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/utils/test_exporters.py | 397 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/utils/test_exporters.py | 399 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/utils/test_exporters.py | 1037 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/utils/test_exporters.py | 1039 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 57 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 59 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 85 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 87 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 122 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 124 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 171 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 173 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 217 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 219 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 263 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 265 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 284 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_obsidian.py | 286 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/utils/test_obsidian.py | 20 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/utils/test_obsidian.py | 22 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_client.py | 258 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/utils/test_client.py | 260 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/utils/test_client.py | 306 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/utils/test_client.py | 308 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/utils/test_client.py | 522 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/utils/test_client.py | 524 | # ============================================================================= | COMMENT |
| MEDIUM | tests/utils/test_client.py | 21 | # ============================================================================= | COMMENT |
| MEDIUM | tests/utils/test_client.py | 23 | # ============================================================================= | COMMENT |
| 126 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/zh/python/quickstart.md | 24 | os.environ["OPENAI_API_KEY"] = "your-api-key" | CODE |
| HIGH | docs/zh/python/index.md | 199 | os.environ["OPENAI_API_KEY"] = "your-api-key" | CODE |
| HIGH⚡ | docs/zh/resources/troubleshooting.md | 46 | he config init -p openai -k YOUR_API_KEY | CODE |
| HIGH⚡ | docs/zh/resources/troubleshooting.md | 55 | export OPENAI_API_KEY=your-api-key | CODE |
| HIGH⚡ | docs/zh/resources/troubleshooting.md | 56 | export ANTHROPIC_API_KEY=your-api-key # 用于 Anthropic | CODE |
| HIGH⚡ | docs/zh/resources/troubleshooting.md | 57 | export DEEPSEEK_API_KEY=your-api-key # 用于 DeepSeek | CODE |
| HIGH⚡ | docs/zh/resources/faq.md | 64 | he config init -p openai -k YOUR_API_KEY | CODE |
| HIGH⚡ | docs/zh/resources/faq.md | 65 | he config init -p bailian -k YOUR_API_KEY | CODE |
| HIGH⚡ | docs/zh/resources/faq.md | 75 | export OPENAI_API_KEY=your-api-key # OpenAI/百炼 | CODE |
| HIGH⚡ | docs/zh/resources/faq.md | 76 | export ANTHROPIC_API_KEY=your-api-key # Anthropic | CODE |
| HIGH⚡ | docs/zh/resources/faq.md | 77 | export DEEPSEEK_API_KEY=your-api-key # DeepSeek | CODE |
| HIGH⚡ | docs/zh/resources/faq.md | 82 | OPENAI_API_KEY=your-api-key | CODE |
| HIGH⚡ | docs/zh/resources/faq.md | 91 | he config init -p openai -k YOUR_API_KEY | CODE |
| HIGH⚡ | docs/zh/resources/faq.md | 100 | he config llm --base-url https://your-provider.com/v1 -k YOUR_API_KEY | CODE |
| HIGH | docs/zh/resources/faq.md | 244 | he config init -p openai -k YOUR_API_KEY | CODE |
| HIGH | docs/zh/cli/configuration.md | 240 | api_key = "sk-your-api-key" | CODE |
| HIGH | docs/zh/cli/configuration.md | 272 | api_key = "sk-your-api-key" | CODE |
| HIGH | docs/zh/cli/configuration.md | 324 | he config init -p bailian -k YOUR_API_KEY | CODE |
| HIGH | docs/zh/cli/commands/config.md | 53 | he config init -p openai -k sk-your-api-key-here | CODE |
| HIGH | docs/zh/cli/commands/config.md | 56 | he config init -p bailian -k sk-your-api-key-here | CODE |
| HIGH | docs/zh/cli/commands/config.md | 212 | api_key = "sk-your-api-key" | CODE |
| HIGH⚡ | docs/zh/cli/commands/config.md | 254 | he config init -k your-api-key | CODE |
| HIGH⚡ | docs/zh/cli/commands/config.md | 260 | export OPENAI_API_KEY=your-api-key | CODE |
| HIGH⚡ | docs/zh/cli/commands/config.md | 266 | he config init -k your-api-key | CODE |
| HIGH | docs/zh/getting-started/python-quickstart.md | 38 | echo "OPENAI_API_KEY=your-api-key" > .env | CODE |
| HIGH | docs/en/python/quickstart.md | 24 | os.environ["OPENAI_API_KEY"] = "your-api-key" | CODE |
| HIGH | docs/en/python/index.md | 199 | os.environ["OPENAI_API_KEY"] = "your-api-key" | CODE |
| HIGH⚡ | docs/en/resources/troubleshooting.md | 48 | he config init -p openai -k YOUR_API_KEY | CODE |
| HIGH⚡ | docs/en/resources/troubleshooting.md | 57 | export OPENAI_API_KEY=your-api-key | CODE |
| HIGH⚡ | docs/en/resources/troubleshooting.md | 58 | export ANTHROPIC_API_KEY=your-api-key # for Anthropic | CODE |
| HIGH⚡ | docs/en/resources/troubleshooting.md | 59 | export DEEPSEEK_API_KEY=your-api-key # for DeepSeek | CODE |
| HIGH⚡ | docs/en/resources/faq.md | 64 | he config init -p openai -k YOUR_API_KEY | CODE |
| HIGH⚡ | docs/en/resources/faq.md | 65 | he config init -p bailian -k YOUR_API_KEY | CODE |
| HIGH⚡ | docs/en/resources/faq.md | 75 | export OPENAI_API_KEY=your-api-key # OpenAI/Bailian | CODE |
| HIGH⚡ | docs/en/resources/faq.md | 76 | export ANTHROPIC_API_KEY=your-api-key # Anthropic | CODE |
| HIGH⚡ | docs/en/resources/faq.md | 77 | export DEEPSEEK_API_KEY=your-api-key # DeepSeek | CODE |
| HIGH⚡ | docs/en/resources/faq.md | 82 | OPENAI_API_KEY=your-api-key | CODE |
| HIGH⚡ | docs/en/resources/faq.md | 91 | he config init -p openai -k YOUR_API_KEY | CODE |
| HIGH⚡ | docs/en/resources/faq.md | 100 | he config llm --base-url https://your-provider.com/v1 -k YOUR_API_KEY | CODE |
| HIGH | docs/en/resources/faq.md | 244 | he config init -p openai -k YOUR_API_KEY | CODE |
| HIGH | docs/en/cli/configuration.md | 240 | api_key = "sk-your-api-key" | CODE |
| HIGH | docs/en/cli/configuration.md | 272 | api_key = "sk-your-api-key" | CODE |
| HIGH | docs/en/cli/configuration.md | 324 | he config init -p bailian -k YOUR_API_KEY | CODE |
| HIGH | docs/en/cli/commands/config.md | 53 | he config init -p openai -k sk-your-api-key-here | CODE |
| HIGH | docs/en/cli/commands/config.md | 56 | he config init -p bailian -k sk-your-api-key-here | CODE |
| HIGH | docs/en/cli/commands/config.md | 212 | api_key = "sk-your-api-key" | CODE |
| HIGH⚡ | docs/en/cli/commands/config.md | 254 | he config init -k your-api-key | CODE |
| HIGH⚡ | docs/en/cli/commands/config.md | 260 | export OPENAI_API_KEY=your-api-key | CODE |
| HIGH⚡ | docs/en/cli/commands/config.md | 266 | he config init -k your-api-key | CODE |
| HIGH | docs/en/getting-started/python-quickstart.md | 38 | echo "OPENAI_API_KEY=your-api-key" > .env | CODE |
| HIGH | hyperextract/cli/README.md | 36 | he config init --api-key YOUR_API_KEY | CODE |
| HIGH | hyperextract/cli/README.md | 69 | export OPENAI_API_KEY=your_api_key | CODE |
| HIGH | hyperextract/cli/README_ZH.md | 36 | he config init --api-key YOUR_API_KEY | CODE |
| HIGH | hyperextract/cli/README_ZH.md | 69 | export OPENAI_API_KEY=your_api_key | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/zh/resources/contributing.md | 58 | 处理输入文本并返回结构化数据。 Args: text: 要处理的输入文本 max_length: 最大处理长度 Returns: 包含处理后数据的字 | STRING |
| HIGH | docs/en/resources/contributing.md | 58 | Process input text and return structured data. Args: text: Input text to process max_length: Ma | STRING |
| HIGH | hyperextract/types/list.py | 406 | Support index access and slicing. Args: key: Integer index or slice object. Returns: | STRING |
| HIGH | hyperextract/types/list.py | 440 | Support index assignment. Args: index: Position to set (supports negative indexing). it | STRING |
| HIGH | hyperextract/types/list.py | 464 | Operator overload for '+' to combine knowledge instances. Supports multiple combination patterns: - Aut | STRING |
| HIGH | hyperextract/types/list.py | 529 | Support del operation for removing items by index. Args: index: Position to delete (supports negati | STRING |
| HIGH | hyperextract/types/list.py | 565 | Support 'in' operator for membership testing. Args: item: The item to check for membership. | STRING |
| HIGH | hyperextract/types/list.py | 615 | Append a single item to the end of the list. Args: item: The item to append. Raises: | STRING |
| HIGH | hyperextract/types/list.py | 636 | Extend the list by appending multiple items. Args: items: Iterable of items to append. Can be: | STRING |
| HIGH | hyperextract/types/list.py | 677 | Insert an item at a specific position. Args: index: Position to insert at (supports negative indexi | STRING |
| HIGH | hyperextract/types/list.py | 700 | Remove the first occurrence of an item from the list. Args: item: The item to remove. Rais | STRING |
| HIGH | hyperextract/types/list.py | 729 | Remove and return an item at the given position. Args: index: Position to pop (default: -1, last it | STRING |
| HIGH | hyperextract/types/list.py | 759 | Return the index of the first occurrence of item. Args: item: The item to find. start: | STRING |
| HIGH | hyperextract/types/list.py | 787 | Return the number of times item appears in the list. Args: item: The item to count. Return | STRING |
| HIGH | hyperextract/types/list.py | 848 | Sort the items in place. Args: key: Function to extract comparison key from each item. | STRING |
| HIGH | hyperextract/types/model.py | 385 | Operator overload for '+' to combine AutoModel instances into AutoList. Supports multiple combination patterns: | STRING |
| HIGH | hyperextract/types/set.py | 678 | Removes and returns an arbitrary item from the set. Returns: The removed item. Raises: | STRING |
| HIGH | hyperextract/types/set.py | 913 | Equality comparison: set1 == set2. Two sets are equal if they have the same schema and key set. Note: D | STRING |
| HIGH | hyperextract/types/set.py | 944 | Subset comparison: set1 <= set2. Args: other: Another AutoSet instance. Returns: | STRING |
| HIGH | hyperextract/types/set.py | 970 | Proper subset comparison: set1 < set2. Args: other: Another AutoSet instance. Returns: | STRING |
| HIGH | hyperextract/types/set.py | 987 | Superset comparison: set1 >= set2. Args: other: Another AutoSet instance. Returns: | STRING |
| HIGH | hyperextract/types/set.py | 1010 | Proper superset comparison: set1 > set2. Args: other: Another AutoSet instance. Returns: | STRING |
| HIGH | hyperextract/types/set.py | 1027 | Test whether every key in the set is in other. Args: other: Another AutoSet instance. Retu | STRING |
| HIGH | hyperextract/types/set.py | 1041 | Test whether every key in other is in the set. Args: other: Another AutoSet instance. Retu | STRING |
| HIGH | hyperextract/types/set.py | 1055 | Test whether the set has no keys in common with other. Args: other: Another AutoSet instance. | STRING |
| HIGH | hyperextract/types/base.py | 827 | Operator overload for '+' to merge two knowledge instances. Creates a new knowledge instance by merging the dat | STRING |
| HIGH | hyperextract/utils/client.py | 360 | Create an LLM client from a specification string or dict. Args: spec: String shorthand (e.g. "bailian:qwen- | STRING |
| HIGH | hyperextract/utils/client.py | 455 | Create an Embedder client from a specification string or dict. Args: spec: String shorthand (e.g. "bailian: | STRING |
| HIGH | hyperextract/utils/client.py | 587 | Get OpenAI LLM client and Embedder from config. Backward-compatible: reads ~/.he/config.toml. Args: co | STRING |
| HIGH | hyperextract/utils/obsidian.py | 398 | Export graph-structured knowledge to an Obsidian vault. Each node is written as a Markdown note whose YAML front-ma | STRING |
| HIGH | hyperextract/utils/template_engine/factory.py | 65 | Create method template instance. Note: Method templates use English prompts only. Language is hardcoded | STRING |
| HIGH | hyperextract/utils/template_engine/factory.py | 451 | Create template instance based on configuration. Supports both knowledge templates and method templates: | STRING |
| HIGH | hyperextract/utils/template_engine/template.py | 47 | Create template instance. Args: source: Template path (e.g., "general/graph", "method/light_rag") o | STRING |
| HIGH | hyperextract/utils/template_engine/parsers/loader.py | 129 | Convert multilingual template config to single-language config. Args: config: Original multilingual config | STRING |
| HIGH | hyperextract/utils/exporters/jsonld.py | 44 | Export a graph to a JSON-LD file. Args: nodes: Node/entity models to export. edges: Edge models to | STRING |
| HIGH | hyperextract/utils/exporters/csv_export.py | 53 | Export nodes and edges to CSV files in ``folder_path``. Args: nodes: Node/entity models to export. | STRING |
| HIGH | hyperextract/utils/exporters/graphml.py | 57 | Export a graph to a GraphML file. Args: nodes: Node/entity models to export. edges: Edge models to | STRING |
| HIGH | hyperextract/utils/exporters/cypher.py | 59 | Export a graph to a Cypher MERGE script. Args: nodes: Node/entity models to export. edges: Edge mod | STRING |
| HIGH | hyperextract/cli/utils.py | 163 | Validate Knowledge Abstract path. Args: ka_path: Knowledge Abstract directory path Returns: Pa | STRING |
| HIGH | hyperextract/cli/utils.py | 188 | Validate Knowledge Abstract path with data.json. Args: ka_path: Knowledge Abstract directory path Retu | STRING |
| HIGH | hyperextract/cli/utils.py | 212 | Validate Knowledge Abstract path with index. Args: ka_path: Knowledge Abstract directory path Returns: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/mocks.py | 3 | CODE | |
| LOW | tests/mocks.py | 5 | CODE | |
| LOW | tests/types/test_graph_extraction.py | 3 | CODE | |
| LOW | tests/types/test_graph_extraction.py | 5 | CODE | |
| LOW | tests/types/test_graph_extraction.py | 5 | CODE | |
| LOW | tests/types/test_model_basic.py | 5 | CODE | |
| LOW | tests/types/test_model_basic.py | 6 | CODE | |
| LOW | tests/types/test_model_basic.py | 6 | CODE | |
| LOW | tests/types/test_model_basic.py | 7 | CODE | |
| LOW | tests/types/test_set_operations.py | 3 | CODE | |
| LOW | tests/types/test_set_operations.py | 4 | CODE | |
| LOW | tests/types/test_set_dedup.py | 6 | CODE | |
| LOW | tests/types/test_set_dedup.py | 11 | CODE | |
| LOW | tests/types/test_hypergraph_search_scope.py | 5 | CODE | |
| LOW | tests/types/test_faiss_load.py | 3 | CODE | |
| LOW | tests/types/test_graph_dangling.py | 3 | CODE | |
| LOW | tests/types/test_graph_dangling.py | 5 | CODE | |
| LOW | tests/types/test_graph_dangling.py | 5 | CODE | |
| LOW | tests/types/test_list_slicing.py | 4 | CODE | |
| LOW | tests/types/test_graph_search.py | 3 | CODE | |
| LOW | tests/types/test_graph_search.py | 5 | CODE | |
| LOW | tests/types/test_graph_search.py | 5 | CODE | |
| LOW | tests/types/test_list_operations.py | 4 | CODE | |
| LOW | tests/types/test_list_operations.py | 8 | CODE | |
| LOW | tests/types/test_model_merge.py | 5 | CODE | |
| LOW | tests/types/test_extraction_logging.py | 6 | CODE | |
| LOW | tests/types/test_model_serialization.py | 10 | CODE | |
| LOW | tests/types/test_model_serialization.py | 10 | CODE | |
| LOW | tests/types/test_model_serialization.py | 11 | CODE | |
| LOW | tests/types/test_list_iteration.py | 6 | CODE | |
| LOW | tests/types/test_set_operators.py | 3 | CODE | |
| LOW | tests/types/test_set_operators.py | 4 | CODE | |
| LOW | tests/types/test_extraction_failures.py | 12 | CODE | |
| LOW | tests/methods/test_search_scope_forwarding.py | 8 | CODE | |
| LOW | tests/utils/test_client.py | 3 | CODE | |
| LOW | tests/utils/test_client.py | 5 | CODE | |
| LOW | hyperextract/__init__.py | 27 | CODE | |
| LOW | hyperextract/__init__.py | 27 | CODE | |
| LOW | hyperextract/__init__.py | 27 | CODE | |
| LOW | hyperextract/__init__.py | 27 | CODE | |
| LOW | hyperextract/__init__.py | 27 | CODE | |
| LOW | hyperextract/__init__.py | 27 | CODE | |
| LOW | hyperextract/__init__.py | 27 | CODE | |
| LOW | hyperextract/__init__.py | 27 | CODE | |
| LOW | hyperextract/__init__.py | 27 | CODE | |
| LOW | hyperextract/__init__.py | 27 | CODE | |
| LOW | hyperextract/__init__.py | 41 | CODE | |
| LOW | hyperextract/__init__.py | 41 | CODE | |
| LOW | hyperextract/__init__.py | 41 | CODE | |
| LOW | hyperextract/__init__.py | 41 | CODE | |
| LOW | hyperextract/__init__.py | 44 | CODE | |
| LOW | hyperextract/__init__.py | 44 | CODE | |
| LOW | hyperextract/__init__.py | 44 | CODE | |
| LOW | hyperextract/__init__.py | 47 | CODE | |
| LOW | hyperextract/mcp_server.py | 29 | CODE | |
| LOW | hyperextract/types/spatio_temporal_graph.py | 9 | CODE | |
| LOW | hyperextract/types/_faiss.py | 3 | CODE | |
| LOW | hyperextract/types/list.py | 3 | CODE | |
| LOW | hyperextract/types/temporal_graph.py | 9 | CODE | |
| LOW | hyperextract/types/spatial_graph.py | 8 | CODE | |
| 82 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/zh/tutorials/document-analysis/index.md | 184 | except Exception as e: | CODE |
| LOW | docs/zh/tutorials/knowledge-base/step2-ingest.md | 243 | except Exception as e: | CODE |
| LOW | docs/zh/tutorials/knowledge-base/step2-ingest.md | 260 | except Exception as e: | CODE |
| LOW | docs/en/tutorials/document-analysis/index.md | 184 | except Exception as e: | CODE |
| LOW | docs/en/tutorials/knowledge-base/step2-ingest.md | 243 | except Exception as e: | CODE |
| MEDIUM | docs/en/tutorials/knowledge-base/step2-ingest.md | 244 | print(f"Error processing {doc}: {e}") | CODE |
| LOW | docs/en/tutorials/knowledge-base/step2-ingest.md | 260 | except Exception as e: | CODE |
| LOW | hyperextract/types/list.py | 307 | except Exception as e: | CODE |
| LOW | hyperextract/types/graph.py | 128 | except Exception as e: | CODE |
| LOW | hyperextract/types/graph.py | 140 | except Exception as e: | CODE |
| LOW | hyperextract/types/graph.py | 1352 | except Exception as e: | CODE |
| LOW | hyperextract/types/graph.py | 1360 | except Exception as e: | CODE |
| LOW | hyperextract/types/graph.py | 1372 | except Exception as e: | CODE |
| LOW | hyperextract/types/graph.py | 1380 | except Exception as e: | CODE |
| LOW | hyperextract/types/model.py | 299 | except Exception as e: | CODE |
| LOW | hyperextract/types/document.py | 199 | except Exception as e: | CODE |
| LOW | hyperextract/types/document.py | 208 | except Exception as e: | CODE |
| LOW | hyperextract/types/set.py | 331 | except Exception as e: | CODE |
| LOW | hyperextract/types/set.py | 340 | except Exception as e: | CODE |
| LOW | hyperextract/types/base.py | 378 | except Exception as e: | CODE |
| LOW | hyperextract/types/base.py | 449 | except Exception: | CODE |
| LOW | hyperextract/types/base.py | 684 | except Exception as e: | CODE |
| LOW | hyperextract/types/base.py | 715 | except Exception as e: | CODE |
| LOW | hyperextract/types/hypergraph.py | 761 | except Exception as e: | CODE |
| LOW | hyperextract/types/hypergraph.py | 769 | except Exception as e: | CODE |
| LOW | hyperextract/types/hypergraph.py | 781 | except Exception as e: | CODE |
| LOW | hyperextract/types/hypergraph.py | 789 | except Exception as e: | CODE |
| LOW | hyperextract/methods/typical/itext2kg_star.py | 292 | except Exception as e: | STRING |
| LOW | hyperextract/methods/typical/kg_gen.py | 194 | except Exception as e: | STRING |
| LOW | hyperextract/methods/typical/atom.py | 573 | except Exception as e: | STRING |
| LOW⚡ | hyperextract/methods/rag/graph_rag.py | 526 | except Exception as e: | CODE |
| LOW | hyperextract/methods/rag/graph_rag.py | 469 | except Exception as e: | CODE |
| LOW | hyperextract/methods/rag/cog_rag.py | 550 | except Exception as e: | CODE |
| MEDIUM | hyperextract/methods/rag/cog_rag.py | 551 | print(f"Error visualizing {layer_name}: {e}") | CODE |
| LOW | hyperextract/utils/readers.py | 114 | except Exception as e: # pragma: no cover - broken install | CODE |
| LOW | hyperextract/utils/readers.py | 119 | except Exception as e: | CODE |
| LOW | hyperextract/utils/obsidian.py | 149 | except Exception as exc: | CODE |
| LOW | hyperextract/utils/obsidian.py | 209 | except Exception as exc: | CODE |
| LOW | hyperextract/utils/obsidian.py | 245 | except Exception as exc: | CODE |
| LOW | hyperextract/utils/template_engine/validator.py | 254 | except Exception as exc: | CODE |
| LOW | hyperextract/utils/template_engine/gallery.py | 109 | except Exception as e: | CODE |
| LOW | hyperextract/utils/template_engine/parsers/loader.py | 176 | except Exception as e: | CODE |
| LOW | hyperextract/utils/exporters/jsonld.py | 149 | except Exception as exc: | CODE |
| LOW | hyperextract/utils/exporters/common.py | 94 | except Exception as exc: | CODE |
| LOW | hyperextract/utils/exporters/common.py | 113 | except Exception as exc: | CODE |
| LOW | hyperextract/utils/exporters/common.py | 133 | except Exception as exc: | CODE |
| LOW | hyperextract/utils/exporters/cypher.py | 203 | except Exception as exc: | CODE |
| LOW | hyperextract/cli/cli.py | 479 | except Exception as e: | CODE |
| LOW | hyperextract/cli/cli.py | 489 | except Exception as e: | CODE |
| LOW | hyperextract/cli/cli.py | 549 | except Exception as e: | CODE |
| LOW | hyperextract/cli/cli.py | 568 | except Exception as e: | CODE |
| LOW | hyperextract/cli/cli.py | 592 | except Exception as e: | CODE |
| LOW | hyperextract/cli/cli.py | 664 | except Exception as e: | CODE |
| LOW | hyperextract/cli/cli.py | 723 | except Exception as e: | CODE |
| LOW | hyperextract/cli/cli.py | 780 | except Exception as e: | CODE |
| LOW | hyperextract/cli/cli.py | 838 | except Exception as e: | CODE |
| LOW | hyperextract/cli/cli.py | 935 | except Exception as e: | CODE |
| LOW | hyperextract/cli/cli.py | 1087 | except Exception as e: | CODE |
| LOW | hyperextract/cli/cli.py | 1151 | except Exception as e: | CODE |
| LOW | hyperextract/cli/cli.py | 1266 | except Exception as e: | CODE |
| 59 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | hyperextract/types/spatio_temporal_graph.py | 0 | you are a professional entity extraction specialist. your task is to extract all important entities (nodes) from the tex | STRING |
| HIGH | hyperextract/types/temporal_graph.py | 0 | you are a professional entity extraction specialist. your task is to extract all important entities (nodes) from the tex | STRING |
| HIGH | hyperextract/types/spatial_graph.py | 0 | you are a professional entity extraction specialist. your task is to extract all important entities (nodes) from the tex | STRING |
| HIGH | hyperextract/types/spatio_temporal_graph.py | 0 | you are a professional spatial knowledge graph extraction specialist. your task is to extract entities (nodes) and spati | STRING |
| HIGH | hyperextract/types/temporal_graph.py | 0 | you are a professional spatial knowledge graph extraction specialist. your task is to extract entities (nodes) and spati | STRING |
| HIGH | hyperextract/types/spatial_graph.py | 0 | you are a professional spatial knowledge graph extraction specialist. your task is to extract entities (nodes) and spati | STRING |
| HIGH | hyperextract/types/graph.py | 0 | return the recorded content hash of a source (none if unknown). | STRING |
| HIGH | hyperextract/types/document.py | 0 | return the recorded content hash of a source (none if unknown). | STRING |
| HIGH | hyperextract/types/set.py | 0 | return the recorded content hash of a source (none if unknown). | STRING |
| HIGH | hyperextract/types/graph.py | 0 | return the tags of one source (empty if unknown/untagged). | STRING |
| HIGH | hyperextract/types/document.py | 0 | return the tags of one source (empty if unknown/untagged). | STRING |
| HIGH | hyperextract/types/set.py | 0 | return the tags of one source (empty if unknown/untagged). | STRING |
| HIGH | hyperextract/methods/typical/itext2kg.py | 0 | atom implementation using autograph as the core engine. this module provides a specialized implementation of the atom al | STRING |
| HIGH | hyperextract/methods/typical/itext2kg_star.py | 0 | atom implementation using autograph as the core engine. this module provides a specialized implementation of the atom al | STRING |
| HIGH | hyperextract/methods/typical/atom.py | 0 | atom implementation using autograph as the core engine. this module provides a specialized implementation of the atom al | STRING |
| HIGH | hyperextract/methods/rag/hyper_rag.py | 0 | represents an entity extracted from the source text. | STRING |
| HIGH | hyperextract/methods/rag/light_rag.py | 0 | represents an entity extracted from the source text. | STRING |
| HIGH | hyperextract/methods/rag/graph_rag.py | 0 | represents an entity extracted from the source text. | STRING |
| HIGH | hyperextract/methods/rag/cog_rag.py | 0 | represents an entity extracted from the source text. | STRING |
| HIGH | hyperextract/methods/rag/hyper_rag.py | 0 | you are an intelligent data merging assistant. you will receive a list of objects representing the same entity. your tas | STRING |
| HIGH | hyperextract/methods/rag/light_rag.py | 0 | you are an intelligent data merging assistant. you will receive a list of objects representing the same entity. your tas | STRING |
| HIGH | hyperextract/methods/rag/graph_rag.py | 0 | you are an intelligent data merging assistant. you will receive a list of objects representing the same entity. your tas | STRING |
| HIGH | hyperextract/methods/rag/cog_rag.py | 0 | you are an intelligent data merging assistant. you will receive a list of objects representing the same entity. your tas | STRING |
| HIGH | hyperextract/methods/rag/hyper_rag.py | 0 | initialize graph_rag engine. args: llm_client (basechatmodel): llm client for text generation. embedder (embeddings): em | STRING |
| HIGH | hyperextract/methods/rag/light_rag.py | 0 | initialize graph_rag engine. args: llm_client (basechatmodel): llm client for text generation. embedder (embeddings): em | STRING |
| HIGH | hyperextract/methods/rag/graph_rag.py | 0 | initialize graph_rag engine. args: llm_client (basechatmodel): llm client for text generation. embedder (embeddings): em | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/en/python/guides/working-with-autotypes.md | 53 | # Step 1: Define custom schemas | COMMENT |
| LOW | docs/en/python/guides/working-with-autotypes.md | 67 | # Step 2: Configure LLM clients | COMMENT |
| LOW | docs/en/python/guides/working-with-autotypes.md | 73 | # Step 3: Create configured AutoGraph | COMMENT |
| LOW⚡ | docs/en/python/guides/working-with-autotypes.md | 87 | # Step 4: Extract | COMMENT |
| LOW⚡ | docs/en/python/guides/working-with-autotypes.md | 96 | # Step 5: Access results | STRING |
| LOW⚡ | docs/en/python/guides/working-with-autotypes.md | 106 | # Step 6: Use built-in features | STRING |
| LOW | docs/en/cli/workflow.md | 13 | ## Step 1: Prepare Your Document | COMMENT |
| LOW | docs/en/cli/workflow.md | 23 | ## Step 2: Extract Knowledge | COMMENT |
| LOW | docs/en/cli/workflow.md | 46 | ## Step 3: Explore the Knowledge | COMMENT |
| LOW | docs/en/cli/workflow.md | 83 | ## Step 4: Search for Information | COMMENT |
| LOW | docs/en/cli/workflow.md | 121 | ## Step 5: Chat with Your Knowledge | COMMENT |
| LOW | docs/en/cli/workflow.md | 162 | ## Step 6: Expand Your Knowledge Abstract | COMMENT |
| LOW | docs/en/cli/workflow.md | 184 | ## Step 7: Rebuild Index (If Needed) | COMMENT |
| LOW⚡ | docs/en/cli/workflow.md | 216 | # Step 1: Parse | COMMENT |
| LOW⚡ | docs/en/cli/workflow.md | 221 | # Step 2: Info | COMMENT |
| LOW⚡ | docs/en/cli/workflow.md | 226 | # Step 3: Search example | COMMENT |
| LOW⚡ | docs/en/cli/workflow.md | 231 | # Step 4: Open visualization | COMMENT |
| LOW | docs/en/getting-started/cli-quickstart.md | 14 | ## Step 1: Configure API Key | COMMENT |
| LOW | docs/en/getting-started/cli-quickstart.md | 66 | ## Step 2: Download Sample Document | COMMENT |
| LOW | docs/en/getting-started/cli-quickstart.md | 101 | ## Step 3: Extract Knowledge | COMMENT |
| LOW | docs/en/getting-started/cli-quickstart.md | 134 | ## Step 4: Visualize the Knowledge Graph | COMMENT |
| LOW | docs/en/getting-started/cli-quickstart.md | 148 | ## Step 5: Search Your Knowledge Abstract | COMMENT |
| LOW | docs/en/getting-started/cli-quickstart.md | 169 | ## Step 6: Chat with Your Knowledge | COMMENT |
| LOW | docs/en/getting-started/cli-quickstart.md | 185 | ## Step 7: Incrementally Add Knowledge | COMMENT |
| LOW | docs/en/getting-started/python-quickstart.md | 13 | ## Step 1: Set Up Your Project | COMMENT |
| LOW | docs/en/getting-started/python-quickstart.md | 31 | ## Step 2: Configure Your Model | COMMENT |
| LOW | docs/en/getting-started/python-quickstart.md | 73 | ## Step 3: Create Your First Extraction Script | COMMENT |
| LOW | docs/en/getting-started/python-quickstart.md | 134 | ## Step 4: Run the Script | STRING |
| LOW | docs/en/getting-started/python-quickstart.md | 155 | ## Step 5: Working with Results | STRING |
| LOW | docs/en/getting-started/python-quickstart.md | 179 | ## Step 6: Save and Load | STRING |
| LOW | docs/en/getting-started/python-quickstart.md | 194 | ## Step 7: Incremental Updates | STRING |
| LOW | docs/en/templates/examples/research-paper.md | 33 | ### Step 1: Extract Knowledge | COMMENT |
| LOW | docs/en/templates/examples/research-paper.md | 77 | ### Step 2: Explore Results | COMMENT |
| LOW | docs/en/templates/examples/research-paper.md | 113 | ### Step 3: Build Searchable Index | COMMENT |
| LOW | docs/en/templates/examples/research-paper.md | 125 | ### Step 4: Visualize | COMMENT |
| LOW | docs/en/templates/examples/research-paper.md | 139 | ### Step 5: Query | COMMENT |
| LOW | docs/en/templates/examples/financial-report.md | 62 | ### Step 1: Extract Earnings Data | COMMENT |
| LOW | docs/en/templates/examples/financial-report.md | 113 | ### Step 2: Extract Risk Factors | COMMENT |
| LOW | docs/en/templates/examples/financial-report.md | 129 | ### Step 3: Save and Compare | COMMENT |
| LOW | docs/en/templates/examples/legal-contract.md | 62 | ### Step 1: Extract Obligations | COMMENT |
| LOW | docs/en/templates/examples/legal-contract.md | 112 | ### Step 2: Extract Defined Terms | COMMENT |
| LOW | docs/en/templates/examples/legal-contract.md | 137 | ### Step 3: Build Contract Knowledge Base | COMMENT |
| LOW | docs/en/tutorials/research-assistant/step3-chat.md | 1 | # Step 3: Q&A System | COMMENT |
| LOW | docs/en/tutorials/research-assistant/step2-search.md | 1 | # Step 2: Semantic Search | COMMENT |
| LOW | docs/en/tutorials/research-assistant/step1-extract.md | 1 | # Step 1: Extract Knowledge | COMMENT |
| LOW | docs/en/tutorials/knowledge-base/step2-ingest.md | 1 | # Step 2: Ingest | COMMENT |
| LOW | docs/en/tutorials/knowledge-base/step1-setup.md | 1 | # Step 1: Setup | COMMENT |
| LOW | docs/en/tutorials/knowledge-base/step3-query.md | 1 | # Step 3: Query | COMMENT |
| LOW⚡ | hyperextract/types/graph.py | 1315 | # Step 4: Combine context or use fallback | COMMENT |
| LOW⚡ | hyperextract/types/graph.py | 1321 | # Step 5: Invoke LLM with structured context | COMMENT |
| LOW | hyperextract/types/graph.py | 1287 | # Step 2: Retrieve and format nodes context | COMMENT |
| LOW | hyperextract/types/graph.py | 1301 | # Step 3: Retrieve and format edges context | COMMENT |
| LOW | hyperextract/types/graph.py | 1332 | # Step 6: Inject retrieved nodes and edges into response metadata | COMMENT |
| LOW⚡ | hyperextract/types/base.py | 604 | # Step 1: Retrieve relevant items from knowledge abstract | COMMENT |
| LOW⚡ | hyperextract/types/base.py | 613 | # Step 2: Format context from retrieved items | COMMENT |
| LOW⚡ | hyperextract/types/base.py | 646 | # Step 4: Inject retrieved items into response metadata | COMMENT |
| LOW⚡ | hyperextract/types/base.py | 651 | # Step 5: Return the AIMessage response | COMMENT |
| LOW | hyperextract/types/base.py | 634 | # Step 3: Create QA prompt template and invoke LLM | COMMENT |
| LOW⚡ | hyperextract/types/hypergraph.py | 724 | # Step 4: Combine context or use fallback | COMMENT |
| LOW⚡ | hyperextract/types/hypergraph.py | 730 | # Step 5: Invoke LLM with structured context | COMMENT |
| 15 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/zh/python/core-concepts.md | 128 | #### 基于 RAG 的方法 | COMMENT |
| MEDIUM | docs/zh/python/api-reference/methods/rag.md | 1 | # 基于 RAG 的方法 | COMMENT |
| MEDIUM | docs/zh/python/guides/using-methods.md | 41 | ### 基于 RAG 的方法 | COMMENT |
| MEDIUM | docs/zh/python/guides/using-methods.md | 144 | ## RAG vs 典型方法比较 | COMMENT |
| MEDIUM | docs/zh/python/guides/using-methods.md | 219 | # - 最快的 RAG 方法 | COMMENT |
| MEDIUM | docs/zh/concepts/methods.md | 30 | ### 基于 RAG 的方法 | COMMENT |
| MEDIUM | docs/zh/concepts/methods.md | 132 | ## 基于 RAG 的方法 | COMMENT |
| MEDIUM | docs/zh/templates/examples/research-paper.md | 244 | # 选项 1:使用 RAG 方法 | COMMENT |
| MEDIUM | docs/en/python/core-concepts.md | 128 | #### RAG-Based Methods | COMMENT |
| MEDIUM | docs/en/python/api-reference/methods/rag.md | 1 | # RAG-Based Methods | COMMENT |
| MEDIUM | docs/en/python/guides/using-methods.md | 41 | ### RAG-Based Methods | COMMENT |
| MEDIUM | docs/en/python/guides/using-methods.md | 144 | ## RAG vs Typical Comparison | COMMENT |
| MEDIUM | docs/en/python/guides/using-methods.md | 219 | # - Fastest RAG method | COMMENT |
| MEDIUM | docs/en/cli/commands/config.md | 182 | # Use a larger OpenAI embedding model | COMMENT |
| MEDIUM | docs/en/concepts/methods.md | 30 | ### RAG-Based Methods | COMMENT |
| MEDIUM | docs/en/concepts/methods.md | 144 | ## RAG-Based Methods | COMMENT |
| MEDIUM | docs/en/templates/examples/research-paper.md | 244 | # Option 1: Use RAG method | COMMENT |
| MEDIUM | hyperextract/cli/README.md | 223 | # Use Light RAG method | COMMENT |
| MEDIUM | hyperextract/cli/README.md | 226 | # Use Hyper RAG method | COMMENT |
| MEDIUM | hyperextract/cli/README_ZH.md | 223 | # 使用 Light RAG 方法 | COMMENT |
| MEDIUM | hyperextract/cli/README_ZH.md | 226 | # 使用 Hyper RAG 方法 | COMMENT |
| MEDIUM | examples/README.md | 72 | │ ├── methods/ # RAG method demos | CODE |
| MEDIUM | examples/README.md | 105 | ├── methods/ # RAG method demos | CODE |
| MEDIUM | examples/README_ZH.md | 73 | │ ├── methods/ # RAG 方法演示 | CODE |
| MEDIUM | examples/README_ZH.md | 106 | ├── methods/ # RAG 方法演示 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hyperextract/__init__.py | 53 | __all__ = [ | CODE |
| LOW | hyperextract/types/_faiss.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | hyperextract/types/list.py | 189 | def _set_data_state(self, data: AutoListSchema) -> None: | CODE |
| LOW | hyperextract/types/list.py | 197 | def _update_data_state(self, incoming_data: AutoListSchema) -> None: | CODE |
| LOW | hyperextract/types/graph.py | 940 | def _set_data_state(self, data: AutoGraphSchema[NodeSchema, EdgeSchema]) -> None: | CODE |
| LOW | hyperextract/types/__init__.py | 69 | __all__ = [ | CODE |
| LOW | hyperextract/types/model.py | 192 | def _set_data_state(self, data: T) -> None: | CODE |
| LOW | hyperextract/types/model.py | 200 | def _update_data_state(self, incoming_data: T) -> None: | CODE |
| LOW | hyperextract/types/document.py | 144 | def _set_data_state(self, data: DocumentData) -> None: | CODE |
| LOW | hyperextract/types/document.py | 150 | def _update_data_state(self, incoming_data: DocumentData) -> None: | CODE |
| LOW | hyperextract/types/set.py | 284 | def _set_data_state(self, data: AutoSetSchema[ItemSchema]) -> None: | CODE |
| LOW | hyperextract/types/set.py | 294 | def _update_data_state(self, incoming_data: AutoSetSchema[ItemSchema]) -> None: | CODE |
| LOW | hyperextract/types/base.py | 223 | def _set_data_state(self, data: T) -> None: | CODE |
| LOW | hyperextract/types/base.py | 238 | def _update_data_state(self, incoming_data: T) -> None: | CODE |
| LOW | hyperextract/types/hypergraph.py | 396 | def _set_data_state(self, data: AutoHypergraphSchema) -> None: | CODE |
| LOW | hyperextract/types/hypergraph.py | 408 | def _update_data_state(self, incoming_data: AutoHypergraphSchema) -> None: | CODE |
| LOW | hyperextract/methods/__init__.py | 19 | __all__ = [ | CODE |
| LOW | hyperextract/methods/typical/__init__.py | 12 | __all__ = [ | CODE |
| LOW | hyperextract/methods/rag/__init__.py | 14 | __all__ = [ | CODE |
| LOW | hyperextract/utils/logging.py | 84 | def set_log_level(level: str) -> None: | CODE |
| LOW | hyperextract/utils/logging.py | 94 | __all__ = ["configure_logging", "get_logger", "set_log_level"] | CODE |
| LOW | hyperextract/utils/client.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | hyperextract/utils/__init__.py | 7 | __all__ = [ | CODE |
| LOW | hyperextract/utils/template_engine/validator.py | 924 | __all__ = [ | CODE |
| LOW | hyperextract/utils/template_engine/__init__.py | 31 | __all__ = [ | CODE |
| LOW | hyperextract/utils/template_engine/parsers/options.py | 186 | __all__ = [ | CODE |
| LOW | …erextract/utils/template_engine/parsers/identifiers.py | 212 | __all__ = [ | CODE |
| LOW | hyperextract/utils/template_engine/parsers/__init__.py | 14 | __all__ = [ | CODE |
| LOW | hyperextract/utils/template_engine/parsers/display.py | 36 | __all__ = [ | CODE |
| LOW | hyperextract/utils/template_engine/parsers/loader.py | 184 | __all__ = [ | CODE |
| LOW | hyperextract/utils/template_engine/parsers/guideline.py | 102 | __all__ = [ | CODE |
| LOW | hyperextract/utils/template_engine/parsers/output.py | 91 | __all__ = [ | CODE |
| LOW | …ract/utils/template_engine/parsers/schemas/__init__.py | 21 | __all__ = [ | CODE |
| LOW | hyperextract/utils/exporters/__init__.py | 26 | __all__ = [ | CODE |
| LOW | hyperextract/cli/config.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | hyperextract/cli/__init__.py | 10 | __all__ = ["app"] | CODE |
| LOW | hyperextract/cli/commands/__init__.py | 7 | __all__ = ["config_app", "list_app", "template_app"] | CODE |
| LOW | hyperextract/templates/__init__.py | 19 | __all__ = [] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | hyperextract/types/set.py | 674 | except (KeyError, Exception): | CODE |
| HIGH | hyperextract/types/base.py | 787 | except ValueError: | CODE |
| HIGH | hyperextract/utils/readers.py | 82 | except UnicodeDecodeError: | CODE |
| HIGH | hyperextract/utils/readers.py | 95 | except ImportError: | CODE |
| HIGH | hyperextract/utils/template_engine/validator.py | 857 | except ValueError: | CODE |
| HIGH | hyperextract/cli/config.py | 45 | except OSError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | hyperextract/types/graph.py | 1315 | # Step 4: Combine context or use fallback | COMMENT |
| LOW⚡ | hyperextract/types/graph.py | 1321 | # Step 5: Invoke LLM with structured context | COMMENT |
| LOW | hyperextract/types/graph.py | 1287 | # Step 2: Retrieve and format nodes context | COMMENT |
| LOW | hyperextract/types/graph.py | 1301 | # Step 3: Retrieve and format edges context | COMMENT |
| LOW | hyperextract/types/graph.py | 1332 | # Step 6: Inject retrieved nodes and edges into response metadata | COMMENT |
| LOW⚡ | hyperextract/types/base.py | 604 | # Step 1: Retrieve relevant items from knowledge abstract | COMMENT |
| LOW⚡ | hyperextract/types/base.py | 613 | # Step 2: Format context from retrieved items | COMMENT |
| LOW⚡ | hyperextract/types/base.py | 646 | # Step 4: Inject retrieved items into response metadata | COMMENT |
| LOW⚡ | hyperextract/types/base.py | 651 | # Step 5: Return the AIMessage response | COMMENT |
| LOW | hyperextract/types/base.py | 634 | # Step 3: Create QA prompt template and invoke LLM | COMMENT |
| LOW⚡ | hyperextract/types/hypergraph.py | 724 | # Step 4: Combine context or use fallback | COMMENT |
| LOW⚡ | hyperextract/types/hypergraph.py | 730 | # Step 5: Invoke LLM with structured context | COMMENT |
| LOW | hyperextract/types/hypergraph.py | 696 | # Step 2: Retrieve and format nodes context | COMMENT |
| LOW | hyperextract/types/hypergraph.py | 710 | # Step 3: Retrieve and format edges context | COMMENT |
| LOW | hyperextract/types/hypergraph.py | 741 | # Step 6: Inject retrieved nodes and edges into response metadata | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | hyperextract/types/graph.py | 793 | # Initialize OMem instances (Before super().__init__) | COMMENT |
| MEDIUM | hyperextract/types/set.py | 181 | # Initialize OMem instance BEFORE calling super().__init__ so _init_internal_state can use it | COMMENT |
| MEDIUM | hyperextract/types/base.py | 868 | # Create a new instance with the same configuration | COMMENT |
| MEDIUM | hyperextract/types/hypergraph.py | 282 | # Initialize OMem instances | COMMENT |
| MEDIUM | hyperextract/methods/rag/graph_rag.py | 419 | # Create a subgraph without isolated nodes for Leiden to avoid warnings | COMMENT |
| MEDIUM | hyperextract/cli/config.py | 211 | # Create the parent of the actual target path, not the default dir — | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/zh/templates/finance_template.py | 21 | # // test for 重大事件时间线 | COMMENT |
| LOW | examples/zh/templates/general_template.py | 21 | # // test for 基础知识图谱 | COMMENT |
| LOW | examples/zh/templates/medicine_template.py | 21 | # // test for 解剖结构图 | COMMENT |
| LOW | examples/zh/templates/tcm_template.py | 21 | # // test for 方剂组成图 | COMMENT |
| LOW | examples/zh/templates/industry_template.py | 21 | # // test for 设备拓扑图 | COMMENT |
| LOW | examples/zh/templates/legal_template.py | 21 | # // test for 案例引用图 | COMMENT |
| LOW | examples/en/templates/finance_template.py | 21 | # // test for Event Timeline | COMMENT |
| LOW | examples/en/templates/general_template.py | 21 | # // test for Base Knowledge Graph | COMMENT |
| LOW | examples/en/templates/medicine_template.py | 21 | # // test for Anatomy Structure Graph | COMMENT |
| LOW | examples/en/templates/tcm_template.py | 21 | # // test for Formula Composition Graph | COMMENT |
| LOW | examples/en/templates/industry_template.py | 21 | # // test for Equipment Topology | COMMENT |
| LOW | examples/en/templates/legal_template.py | 21 | # // test for Case Citation Graph | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/mocks.py | 96 | CODE | |
| LOW | tests/docs/test_no_conflict_markers.py | 9 | CODE | |
| LOW | hyperextract/types/base.py | 432 | CODE | |
| LOW | hyperextract/types/base.py | 579 | CODE | |
| LOW | hyperextract/methods/rag/graph_rag.py | 370 | CODE | |
| LOW | hyperextract/utils/template_engine/gallery.py | 54 | CODE | |
| LOW | …erextract/utils/template_engine/parsers/identifiers.py | 92 | CODE | |
| LOW | hyperextract/cli/cli.py | 194 | CODE | |
| LOW | hyperextract/cli/cli.py | 855 | CODE | |
| LOW | hyperextract/cli/cli.py | 1024 | CODE | |
| LOW | hyperextract/cli/cli.py | 1211 | CODE | |
| LOW | hyperextract/cli/cli.py | 1382 | CODE | |
| LOW | hyperextract/cli/cli.py | 1611 | CODE | |
| LOW | hyperextract/cli/utils.py | 235 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/integration/test_provenance_real.py | 158 | d.metadata["key"] for d in g._node_memory._index.docstore._dict.values() | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hyperextract/types/spatio_temporal_graph.py | 146 | CODE | |
| LOW | hyperextract/types/list.py | 70 | CODE | |
| LOW | hyperextract/types/temporal_graph.py | 146 | CODE | |
| LOW | hyperextract/types/graph.py | 671 | CODE | |
| LOW | hyperextract/types/spatial_graph.py | 131 | CODE | |
| LOW | hyperextract/types/model.py | 55 | CODE | |
| LOW | hyperextract/types/set.py | 100 | CODE | |
| LOW | hyperextract/types/hypergraph.py | 153 | CODE | |
| LOW | hyperextract/cli/cli.py | 254 | CODE | |
| LOW | hyperextract/cli/cli.py | 1611 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hyperextract/types/graph.py | 1221 | # Check if both endpoints exist | COMMENT |
| LOW | hyperextract/types/model.py | 168 | # Check if the value is not considered empty | COMMENT |
| LOW | hyperextract/types/model.py | 255 | # Check if there's data to index | COMMENT |
| LOW | hyperextract/types/model.py | 283 | # Check if there's data to search | COMMENT |
| LOW | hyperextract/methods/typical/atom.py | 523 | # Set t_obs to extraction timestamp | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hyperextract/methods/typical/atom.py | 260 | **Input**: "John Doe's marriage is happening on 26-02-2026." | CODE |
| LOW | hyperextract/methods/typical/atom.py | 262 | - (John Doe, has_status, Married, t_start=["2026-02-26"], t_end=[], atomic_facts=["John Doe's marriage is happening on 2 | CODE |