Fully open reproduction of DeepSeek-R1
This report summarizes scanner evidence for huggingface/open-r1, a Python project with 26,478 GitHub stars. SynthScan examined 8,289 lines of code across 65 source files, recording 188 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 36.5 (High 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? 108 finding(s).
Are imports declared and package/API names verified? 22 finding(s).
Are wrappers, guards, and repeated structures necessary? 116 finding(s).
Which changes need focused human review? 188 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
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 188 distinct pattern matches across 14 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 | scripts/generate_reasoning.py | 38 | except Exception as e: | CODE |
| MEDIUM | scripts/generate_reasoning.py | 54 | print(f"Error processing example") | CODE |
| LOW | scripts/generate_reasoning.py | 85 | except Exception as e: | CODE |
| MEDIUM | scripts/generate_reasoning.py | 86 | print(f"Error processing example: {e}") | CODE |
| LOW | scripts/generate_reasoning.py | 156 | except Exception as e: | CODE |
| LOW | scripts/morph_router.py | 127 | except Exception as e: | CODE |
| LOW | scripts/morph_router.py | 135 | except Exception: | CODE |
| LOW | scripts/e2b_router.py | 124 | except Exception as e: | CODE |
| LOW | scripts/e2b_router.py | 130 | except Exception: | CODE |
| LOW | scripts/get_tensor_parallel_size.py | 15 | except Exception as e: | CODE |
| LOW | src/open_r1/rewards.py | 73 | except Exception as e: | CODE |
| LOW | src/open_r1/rewards.py | 395 | except Exception as e: | CODE |
| MEDIUM | src/open_r1/rewards.py | 396 | print(f"Error from {provider_type} worker: {e}") | CODE |
| LOW | src/open_r1/rewards.py | 448 | except Exception as e: | CODE |
| MEDIUM | src/open_r1/rewards.py | 449 | print(f"Error from Piston worker: {e}") | CODE |
| MEDIUM | src/open_r1/rewards.py | 392 | def run_catch_exceptions(task): | CODE |
| MEDIUM | src/open_r1/rewards.py | 445 | def run_catch_exceptions(task): | CODE |
| LOW | src/open_r1/utils/hub.py | 94 | except Exception: | CODE |
| LOW | src/open_r1/utils/routed_morph.py | 113 | except Exception as e: | CODE |
| MEDIUM⚡ | src/open_r1/utils/code_providers.py | 110 | print(f"Error from E2B executor: {e}") | CODE |
| MEDIUM⚡ | src/open_r1/utils/code_providers.py | 120 | print(f"Error from E2B executor async: {e}") | CODE |
| MEDIUM⚡ | src/open_r1/utils/code_providers.py | 160 | print(f"Error in `_run_script` from E2B sandbox ID {sandbox.sandbox_id} : {e}") | CODE |
| MEDIUM⚡ | src/open_r1/utils/code_providers.py | 166 | print(f"Error from E2B executor kill with sandbox ID {sandbox.sandbox_id} : {e}") | CODE |
| MEDIUM⚡ | src/open_r1/utils/code_providers.py | 240 | print(f"Error from MorphCloud router: {e}") | CODE |
| MEDIUM⚡ | src/open_r1/utils/code_providers.py | 248 | print(f"Error from MorphCloud executor: {e}") | CODE |
| LOW⚡ | src/open_r1/utils/code_providers.py | 103 | except Exception: | CODE |
| LOW⚡ | src/open_r1/utils/code_providers.py | 109 | except Exception as e: | CODE |
| LOW⚡ | src/open_r1/utils/code_providers.py | 119 | except Exception as e: | CODE |
| LOW⚡ | src/open_r1/utils/code_providers.py | 159 | except Exception as e: | CODE |
| LOW⚡ | src/open_r1/utils/code_providers.py | 165 | except Exception as e: | CODE |
| LOW⚡ | src/open_r1/utils/code_providers.py | 239 | except Exception as e: | CODE |
| LOW⚡ | src/open_r1/utils/code_providers.py | 247 | except Exception as e: | CODE |
| LOW | src/open_r1/utils/code_providers.py | 328 | except Exception: | CODE |
| LOW | src/open_r1/utils/code_providers.py | 335 | except Exception: | CODE |
| LOW | …/open_r1/utils/competitive_programming/morph_client.py | 78 | except Exception: | CODE |
| LOW | …/open_r1/utils/competitive_programming/morph_client.py | 324 | except Exception as e: | CODE |
| LOW | …/open_r1/utils/competitive_programming/morph_client.py | 399 | except Exception as e: | CODE |
| LOW⚡ | src/open_r1/utils/competitive_programming/cf_scoring.py | 51 | except Exception as e: | CODE |
| MEDIUM⚡ | src/open_r1/utils/competitive_programming/cf_scoring.py | 52 | print(f"Error scoring submission: {e}") | CODE |
| LOW | …open_r1/utils/competitive_programming/piston_client.py | 131 | except Exception as e: | CODE |
| MEDIUM | …open_r1/utils/competitive_programming/piston_client.py | 132 | print(f"Error checking endpoint {endpoint}, dropping it ({e})") | CODE |
| LOW⚡ | …open_r1/utils/competitive_programming/piston_client.py | 188 | except Exception as e: | CODE |
| LOW⚡ | …open_r1/utils/competitive_programming/piston_client.py | 196 | except Exception as e: | CODE |
| MEDIUM⚡ | …open_r1/utils/competitive_programming/piston_client.py | 197 | print(f"Error releasing endpoint {endpoint}: {e}") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_rewards.py | 79 | def test_accuracy_reward_correct_answer(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 86 | def test_accuracy_reward_wrong_answer(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 93 | def test_accuracy_reward_wrong_answer_no_latex(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 100 | def test_format_reward_correct(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 106 | def test_format_reward_incorrect(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 364 | def test_three_word_completion(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 371 | def test_three_word_repetition_completion(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 378 | def test_four_word_completion_with_repetition(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 386 | def test_five_word_completion_with_repetition(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 394 | def test_six_word_completion_with_repetition(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 401 | def test_long_completion_with_repetition(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 407 | def test_long_completion_without_repetition(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 414 | def test_tag_count_rewards_all_correct(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 420 | def test_tag_count_rewards_missing_think_begin(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 426 | def test_tag_count_rewards_missing_think_end(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 432 | def test_tag_count_rewards_missing_answer_begin(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 438 | def test_tag_count_rewards_missing_answer_end(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 444 | def test_tag_count_rewards_missing_all_tags(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 450 | def test_full_repetition_with_language(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 461 | def test_soft_overlong_punishment_short_completion(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 469 | def test_soft_overlong_punishment_long_completion(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 477 | def test_soft_overlong_punishment_intermediate_completion(self): | CODE |
| LOW⚡ | tests/test_rewards.py | 486 | def test_correct_python_format(self): | CODE |
| LOW | tests/test_rewards.py | 121 | def test_reasoning_steps_reward(self): | CODE |
| LOW | tests/test_rewards.py | 139 | def test_multiple_completions(self): | CODE |
| LOW | tests/test_rewards.py | 152 | def test_cosine_scaled_reward(self): | CODE |
| LOW | tests/test_rewards.py | 200 | def test_format_reward_specific_multiline(self): | CODE |
| LOW | tests/test_rewards.py | 207 | def test_same_length_responses(self): | CODE |
| LOW | tests/test_rewards.py | 218 | def test_different_lengths_correct_answers(self): | CODE |
| LOW | tests/test_rewards.py | 230 | def test_different_lengths_incorrect_answers(self): | CODE |
| LOW | tests/test_rewards.py | 270 | def test_unparseable_solution(self): | CODE |
| LOW | tests/test_rewards.py | 284 | def test_positive_max_penalty_raises_value_error(self): | CODE |
| LOW | tests/test_rewards.py | 313 | def test_multiple_completions(self): | CODE |
| LOW | tests/test_rewards.py | 332 | def test_different_ngram_size(self): | CODE |
| LOW | tests/test_rewards.py | 520 | def test_multiple_code_blocks(self): | CODE |
| LOW | tests/slow/test_code_reward.py | 127 | def test_python_code_reward_morph(self): | CODE |
| LOW | tests/slow/test_code_reward.py | 156 | def test_morph_router_parallel(self): | CODE |
| LOW | tests/slow/test_code_reward.py | 183 | def test_morph_router_run_code_success(self): | CODE |
| LOW | tests/slow/test_code_reward.py | 200 | def test_morph_router_run_code_with_error(self): | CODE |
| LOW | tests/utils/test_data.py | 30 | def test_dataset_and_config_name(self): | CODE |
| LOW | tests/utils/test_data.py | 69 | def test_mixture_and_test_split(self): | CODE |
| LOW | tests/utils/test_data.py | 85 | def test_mixture_column_selection(self): | CODE |
| LOW | tests/utils/test_data.py | 106 | def test_mixture_with_mismatched_columns(self): | CODE |
| LOW | tests/utils/test_data.py | 122 | def test_no_dataset_name_or_mixture(self): | CODE |
| LOW | scripts/pass_rate_filtering/compute_pass_rate.py | 137 | def repeat_each_element_k_times(list_to_repeat: list, k: int) -> list: | CODE |
| LOW | src/open_r1/generate.py | 23 | def build_distilabel_pipeline( | CODE |
| LOW | src/open_r1/rewards.py | 285 | def get_repetition_penalty_reward(ngram_size: int, max_penalty: float, language: str = "en"): | STRING |
| LOW | src/open_r1/rewards.py | 321 | def repetition_penalty_reward(completions, **kwargs) -> float: | STRING |
| LOW | src/open_r1/rewards.py | 620 | def get_soft_overlong_punishment(max_completion_len, soft_punish_cache): | STRING |
| LOW | src/open_r1/rewards.py | 630 | def soft_overlong_punishment_reward(completion_ids: list[list[int]], **kwargs) -> list[float]: | STRING |
| LOW | src/open_r1/utils/hub.py | 70 | def check_hub_revision_exists(training_args: SFTConfig | GRPOConfig): | CODE |
| LOW | src/open_r1/utils/hub.py | 89 | def get_param_count_from_repo_id(repo_id: str) -> int: | CODE |
| LOW | …/open_r1/utils/competitive_programming/morph_client.py | 337 | async def _get_or_create_base_snapshot(self): | CODE |
| LOW | …/open_r1/utils/competitive_programming/morph_client.py | 715 | def get_morph_client_from_env(session=None) -> MorphCloudExecutionClient: | STRING |
| LOW⚡ | src/open_r1/utils/competitive_programming/cf_scoring.py | 59 | async def get_generated_contest_tests(contest_id: str) -> list[dict]: | CODE |
| LOW | …open_r1/utils/competitive_programming/piston_client.py | 17 | def get_piston_client_from_env(session=None): | CODE |
| LOW⚡ | …open_r1/utils/competitive_programming/piston_client.py | 201 | def get_slurm_piston_endpoints(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/e2b_router.py | 67 | Creates and configures a FastAPI application instance. Args: args: An object containing configuration p | STRING |
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 50 | Prepare and start a MorphCloud instance. Args: snapshot_id: Optional snapshot ID to use. If | STRING |
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 83 | Process files, determine problem ID, and prepare configuration. Args: data: Dictionary con | STRING |
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 140 | Upload all necessary files to the instance. Args: instance: The MorphCloud instance | STRING |
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 167 | Compile the code on the instance. Args: instance: The MorphCloud instance Returns | STRING |
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 187 | Run tests and evaluate results. Args: instance: The MorphCloud instance data: | STRING |
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 223 | Execute code using a prepared instance. Args: instance: Ready MorphCloud instance data: | STRING |
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 251 | Internal implementation of execute with no retry logic. Args: data: Dictionary containing | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/morph_router.py | 135 | except Exception: | CODE |
| HIGH | scripts/e2b_router.py | 130 | except Exception: | CODE |
| HIGH | src/open_r1/utils/code_providers.py | 321 | except (ValueError, AttributeError): | CODE |
| HIGH | src/open_r1/utils/code_providers.py | 335 | except Exception: | CODE |
| HIGH | src/open_r1/utils/code_providers.py | 319 | except ValueError: | CODE |
| HIGH | src/open_r1/utils/code_providers.py | 312 | except ValueError: | CODE |
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 78 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 201 | run_command = f"cd /workspace && timeout {hard_timeout}s ./run" | CODE |
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 382 | await temp_instance.aexec("apt-get update && apt-get install -y build-essential cmake g++") | CODE |
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 386 | "mkdir -p /workspace && mkdir -p /workspace/graders && chmod 777 /workspace" | CODE |
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 536 | kill -9 "$pid" 2>/dev/null || true | CODE |
| HIGH | …/open_r1/utils/competitive_programming/morph_client.py | 608 | if diff -bq <(echo "$CORRECT_OUTPUT") "$SOLUTION_OUTPUT" >/dev/null; then | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 1 | # Copyright 2025 The HuggingFace Team. All rights reserved. | COMMENT |
| LOW | slurm/piston/launch_single_piston.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/test_rewards.py | 1 | # Copyright 2025 The HuggingFace Team. All rights reserved. | COMMENT |
| LOW | tests/slow/test_code_reward.py | 1 | # Copyright 2025 The HuggingFace Team. All rights reserved. | COMMENT |
| LOW | tests/utils/test_data.py | 1 | # Copyright 2025 The HuggingFace Team. All rights reserved. | COMMENT |
| LOW | scripts/benchmark_e2b.py | 1 | # coding=utf-8 | COMMENT |
| LOW | scripts/decontaminate.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | scripts/upload_details.py | 1 | # coding=utf-8 | COMMENT |
| LOW | scripts/morph_router.py | 1 | # coding=utf-8 | COMMENT |
| LOW | scripts/e2b_router.py | 1 | # coding=utf-8 | COMMENT |
| LOW | scripts/run_benchmarks.py | 1 | # Copyright 2025 The HuggingFace Team. All rights reserved. | COMMENT |
| LOW | scripts/pass_rate_filtering/compute_pass_rate.py | 1 | # Copyright 2025 The HuggingFace Team. All rights reserved. | COMMENT |
| LOW | src/open_r1/configs.py | 1 | # coding=utf-8 | COMMENT |
| LOW | src/open_r1/generate.py | 1 | # Copyright 2025 The HuggingFace Team. All rights reserved. | COMMENT |
| LOW | src/open_r1/__init__.py | 1 | # Copyright 2025 The HuggingFace Team. All rights reserved. | COMMENT |
| LOW | src/open_r1/grpo.py | 1 | # Copyright 2025 The HuggingFace Team. All rights reserved. | COMMENT |
| LOW | src/open_r1/rewards.py | 1 | # coding=utf-8 | COMMENT |
| LOW | src/open_r1/sft.py | 1 | # Copyright 2025 The HuggingFace Team. All rights reserved. | COMMENT |
| LOW | src/open_r1/utils/routed_sandbox.py | 1 | # coding=utf-8 | COMMENT |
| LOW | src/open_r1/utils/hub.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | src/open_r1/utils/callbacks.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | src/open_r1/utils/routed_morph.py | 1 | # coding=utf-8 | COMMENT |
| LOW | src/open_r1/utils/import_utils.py | 1 | # Copyright 2025 The HuggingFace Team. All rights reserved. | COMMENT |
| LOW | src/open_r1/utils/code_providers.py | 1 | # coding=utf-8 | COMMENT |
| LOW | …/open_r1/utils/competitive_programming/code_patcher.py | 21 | # Fix imp module deprecation (deprecated in 3.4) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/open_r1/utils/evaluation.py | 8 | CODE | |
| LOW | src/open_r1/utils/evaluation.py | 8 | CODE | |
| LOW | src/open_r1/utils/evaluation.py | 8 | CODE | |
| LOW | src/open_r1/utils/__init__.py | 1 | CODE | |
| LOW | src/open_r1/utils/__init__.py | 2 | CODE | |
| LOW | src/open_r1/utils/__init__.py | 2 | CODE | |
| LOW | src/open_r1/utils/__init__.py | 3 | CODE | |
| LOW | src/open_r1/utils/__init__.py | 3 | CODE | |
| LOW | src/open_r1/utils/competitive_programming/__init__.py | 1 | CODE | |
| LOW | src/open_r1/utils/competitive_programming/__init__.py | 2 | CODE | |
| LOW | src/open_r1/utils/competitive_programming/__init__.py | 3 | CODE | |
| LOW | src/open_r1/utils/competitive_programming/__init__.py | 3 | CODE | |
| LOW | src/open_r1/utils/competitive_programming/__init__.py | 3 | CODE | |
| LOW | src/open_r1/utils/competitive_programming/__init__.py | 4 | CODE | |
| LOW | src/open_r1/utils/competitive_programming/__init__.py | 5 | CODE | |
| LOW | src/open_r1/utils/competitive_programming/__init__.py | 6 | CODE | |
| LOW | src/open_r1/utils/competitive_programming/__init__.py | 6 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/generate_reasoning.py | 104 | CODE | |
| LOW | src/open_r1/utils/hub.py | 70 | CODE | |
| LOW | src/open_r1/utils/hub.py | 89 | CODE | |
| LOW | src/open_r1/utils/code_providers.py | 211 | CODE | |
| LOW | src/open_r1/utils/code_providers.py | 273 | CODE | |
| LOW | src/open_r1/utils/data.py | 12 | CODE | |
| LOW | …/open_r1/utils/competitive_programming/morph_client.py | 337 | CODE | |
| LOW | …c/open_r1/utils/competitive_programming/ioi_scoring.py | 110 | CODE | |
| LOW | …open_r1/utils/competitive_programming/piston_client.py | 137 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/pass_rate_filtering/compute_pass_rate.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/open_r1/grpo.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/open_r1/sft.py | 52 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/open_r1/utils/__init__.py | 6 | __all__ = ["get_tokenizer", "is_e2b_available", "is_morph_available", "get_model", "get_dataset"] | CODE |
| LOW | src/open_r1/utils/hub.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/open_r1/utils/data.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/open_r1/utils/competitive_programming/__init__.py | 9 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/open_r1/utils/hub.py | 42 | # Create a repo if it doesn't exist yet | COMMENT |
| MEDIUM | …/open_r1/utils/competitive_programming/morph_client.py | 524 | # Create a temporary file for solution output | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/open_r1/utils/competitive_programming/morph_client.py | 265 | # Set timeouts to ensure we don't block indefinitely | COMMENT |
| LOW | …/open_r1/utils/competitive_programming/morph_client.py | 493 | # Check if grader_config.json exists | COMMENT |
| LOW | …/open_r1/utils/competitive_programming/morph_client.py | 601 | # Check if there's a custom checker | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | recipes/OpenR1-Distill-7B/sft/config_distill.yaml | 9 | chat_template: "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0]['role'] == 'system' %}\n | CODE |
| LOW | scripts/pass_rate_filtering/compute_pass_rate.py | 39 | # we can be lazy and just use the same script args as GRPO | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/open_r1/rewards.py | 552 | # TODO: implement a proper validator to compare against ground truth. For now we just check for exact string | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/open_r1/generate.py | 23 | CODE |