PaperBanana: Automating Academic Illustration For AI Scientists
This report summarizes scanner evidence for dwzhu-pku/PaperBanana, a Python project with 7,519 GitHub stars. SynthScan examined 16,952 lines of code across 69 source files, recording 389 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 28.8 (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.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 265 finding(s).
Are imports declared and package/API names verified? 37 finding(s).
Are wrappers, guards, and repeated structures necessary? 263 finding(s).
Which changes need focused human review? 389 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 389 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 | app.py | 136 | async def process_parallel_candidates( | CODE |
| LOW | app.py | 174 | async def refine_image_with_nanoviz(image_bytes, edit_prompt, aspect_ratio="21:9", image_size="2K"): | CODE |
| LOW | demo.py | 146 | async def process_parallel_candidates( | CODE |
| LOW | demo.py | 194 | async def refine_image_with_nanoviz(image_bytes, edit_prompt, aspect_ratio="21:9", image_size="2K"): | CODE |
| LOW | demo.py | 378 | def infer_exp_mode_from_results(results): | CODE |
| LOW | demo.py | 400 | def infer_timestamp_from_filename(file_path: Path) -> str: | CODE |
| LOW | demo.py | 438 | def _resolved_saved_result_path(file_path: Path) -> Path: | CODE |
| LOW | skill/run.py | 78 | def _prepare_script_candidates() -> tuple[Path, ...]: | CODE |
| LOW | skill/run.py | 130 | def _missing_dataset_dependency(exc: ImportError) -> bool: | CODE |
| LOW | tests/test_legacy_ui_result_keys.py | 18 | def test_plot_final_output_prefers_eval_image_field(self) -> None: | CODE |
| LOW | tests/test_legacy_ui_result_keys.py | 32 | def test_plot_final_output_falls_back_to_highest_critic_round(self) -> None: | CODE |
| LOW | tests/test_legacy_ui_result_keys.py | 44 | def test_plot_final_output_ignores_stale_diagram_eval_image_field(self) -> None: | CODE |
| LOW | tests/test_legacy_ui_result_keys.py | 57 | def test_critic_display_mode_uses_latest_round(self) -> None: | CODE |
| LOW | tests/test_legacy_ui_result_keys.py | 69 | def test_auto_prefers_polished_plot_when_present(self) -> None: | CODE |
| LOW | tests/test_legacy_ui_result_keys.py | 82 | def test_vanilla_plot_output_uses_plot_code_as_text(self) -> None: | CODE |
| LOW | tests/test_legacy_ui_result_keys.py | 98 | def test_evolution_stages_include_vanilla_planner_critic_and_polished_plot(self) -> None: | CODE |
| LOW | tests/test_legacy_ui_result_keys.py | 119 | def test_relative_plot_ground_truth_path_resolves_under_benchmark_root(self) -> None: | CODE |
| LOW⚡ | tests/test_legacy_ui_result_keys.py | 134 | def test_task_name_inference_handles_vanilla_plot_records(self) -> None: | CODE |
| LOW⚡ | tests/test_legacy_ui_result_keys.py | 138 | def test_stage_names_are_stable_for_vanilla_and_polished_outputs(self) -> None: | CODE |
| LOW⚡ | tests/test_legacy_ui_result_keys.py | 148 | def test_gradio_candidate_pipeline_passes_plot_task_to_exp_config(self) -> None: | CODE |
| LOW | tests/test_legacy_ui_result_keys.py | 168 | def test_streamlit_candidate_pipeline_passes_plot_task_to_exp_config(self) -> None: | CODE |
| LOW | tests/test_legacy_ui_result_keys.py | 188 | def test_gradio_failed_plot_record_keeps_task_name_for_inference(self) -> None: | CODE |
| LOW | tests/test_legacy_ui_result_keys.py | 204 | def test_streamlit_failed_plot_record_keeps_task_name_for_inference(self) -> None: | CODE |
| LOW | tests/test_orcarouter_provider.py | 21 | def test_to_orcarouter_model_id_mapping(self) -> None: | CODE |
| LOW | tests/test_orcarouter_provider.py | 43 | def test_reinitialize_clients_creates_orcarouter_client_only_when_key_is_set(self) -> None: | CODE |
| LOW | tests/test_orcarouter_provider.py | 84 | def test_call_model_routes_orcarouter_prefix(self) -> None: | CODE |
| LOW | tests/test_orcarouter_provider.py | 135 | def test_routing_unchanged_when_orcarouter_key_is_unset(self) -> None: | CODE |
| LOW | tests/test_max_critic_rounds.py | 27 | def test_zero_critic_rounds_bypasses_critic_and_keeps_planner_eval_image(tmp_path): | CODE |
| LOW | tests/test_max_critic_rounds.py | 58 | def _planner_critic_processor(exp_config, critic): | CODE |
| LOW | tests/test_max_critic_rounds.py | 90 | def test_zero_critic_rounds_from_config_bypasses_planner_critic_mode(tmp_path): | CODE |
| LOW | tests/test_max_critic_rounds.py | 106 | def test_planner_critic_honors_config_max_critic_rounds(tmp_path): | CODE |
| LOW | tests/test_max_critic_rounds.py | 132 | def test_sample_max_critic_rounds_overrides_config(tmp_path): | CODE |
| LOW | tests/test_max_critic_rounds.py | 159 | def test_sample_zero_max_critic_rounds_overrides_positive_config(tmp_path): | CODE |
| LOW | tests/test_atlascloud_provider.py | 17 | def test_reinitialize_clients_uses_atlascloud_defaults(self) -> None: | CODE |
| LOW | tests/test_atlascloud_provider.py | 27 | async def test_atlas_prefix_routes_without_leaking_prefix(self) -> None: | CODE |
| LOW | tests/test_atlascloud_provider.py | 56 | async def test_atlas_prefix_requires_credentials(self) -> None: | CODE |
| LOW | tests/test_local_openai_route.py | 78 | async def test_local_prefix_reuses_client_and_strips_prefix(self) -> None: | CODE |
| LOW | tests/test_local_openai_route.py | 117 | async def test_local_routes_send_max_tokens_to_chat_completions(self) -> None: | CODE |
| LOW | tests/test_local_openai_route.py | 166 | async def test_refine_helpers_reject_local_image_models(self) -> None: | CODE |
| LOW | tests/test_local_openai_route.py | 189 | async def test_ollama_prefix_defaults_to_local_server(self) -> None: | CODE |
| LOW⚡ | tests/test_local_openai_route.py | 211 | async def test_local_prefix_requires_base_url(self) -> None: | CODE |
| LOW⚡ | tests/test_local_openai_route.py | 219 | async def test_empty_local_model_id_is_rejected(self) -> None: | CODE |
| LOW⚡ | tests/test_local_openai_route.py | 225 | def test_reinitialize_clients_reads_base_urls(self) -> None: | CODE |
| LOW | tests/test_local_openai_route.py | 244 | def test_image_helper_rejects_text_prefixes_only(self) -> None: | CODE |
| LOW | tests/test_local_openai_route.py | 258 | async def test_image_agents_reject_prefixes_before_hosted_providers(self) -> None: | CODE |
| LOW⚡ | tests/test_skill_run_figure_size.py | 37 | def test_the_flag_accepts_every_documented_tier(self) -> None: | CODE |
| LOW⚡ | tests/test_skill_run_figure_size.py | 42 | def test_an_unknown_size_is_rejected(self) -> None: | CODE |
| LOW⚡ | tests/test_skill_run_figure_size.py | 46 | def test_omitting_the_flag_keeps_the_previous_default(self) -> None: | CODE |
| LOW⚡ | tests/test_skill_run_figure_size.py | 53 | def test_a_requested_size_reaches_additional_info(self) -> None: | CODE |
| LOW⚡ | tests/test_skill_run_figure_size.py | 59 | def test_the_agents_read_the_tier_back_out(self) -> None: | CODE |
| LOW⚡ | tests/test_skill_run_figure_size.py | 65 | def test_omitting_the_flag_leaves_additional_info_unchanged(self) -> None: | CODE |
| LOW | tests/test_skill_run_figure_size.py | 80 | def test_the_candidate_dict_is_built_through_the_helper(self) -> None: | CODE |
| LOW | tests/test_critic_round_scan.py | 7 | def test_skill_final_image_prefers_round_past_the_old_cap(): | CODE |
| LOW⚡ | tests/test_critic_round_scan.py | 18 | def test_skill_final_image_uses_available_round_without_configured_max(): | CODE |
| LOW⚡ | tests/test_critic_round_scan.py | 27 | def test_skill_final_image_still_falls_back_when_no_critic_image(): | CODE |
| LOW⚡ | tests/test_critic_round_scan.py | 33 | def test_evolution_view_includes_critic_rounds_past_two(): | CODE |
| LOW⚡ | tests/test_legacy_generation_options.py | 12 | def test_plot_task_detection_accepts_display_labels(self) -> None: | CODE |
| LOW⚡ | tests/test_legacy_generation_options.py | 19 | def test_figure_size_maps_to_provider_image_size(self) -> None: | CODE |
| LOW⚡ | tests/test_legacy_generation_options.py | 26 | def test_generation_additional_info_preserves_figure_size_and_image_size(self) -> None: | CODE |
| LOW⚡ | tests/test_legacy_generation_options.py | 32 | def test_plot_text_input_parses_record_array_json(self) -> None: | CODE |
| 115 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app.py | 104 | except Exception: | CODE |
| LOW | app.py | 200 | except Exception as e: | CODE |
| LOW | app.py | 222 | except Exception as e: | CODE |
| LOW | app.py | 266 | except Exception as e: | CODE |
| LOW | app.py | 719 | except Exception as e: | STRING |
| LOW | app.py | 733 | except Exception: | STRING |
| LOW | app.py | 770 | except Exception: | STRING |
| LOW | app.py | 842 | except Exception as e: | STRING |
| LOW | demo.py | 81 | except Exception as e: | CODE |
| LOW | demo.py | 111 | except Exception: | CODE |
| LOW | demo.py | 246 | except Exception as e: | CODE |
| LOW | demo.py | 298 | except Exception as e: | CODE |
| LOW | demo.py | 671 | except Exception as e: | CODE |
| LOW⚡ | demo.py | 834 | except Exception as e: | CODE |
| LOW⚡ | demo.py | 836 | except Exception as e: | CODE |
| LOW | demo.py | 919 | except Exception as e: | CODE |
| LOW | demo.py | 1001 | except Exception as e: | CODE |
| LOW | style_guides/generate_category_style_guide.py | 192 | except Exception as e: | CODE |
| MEDIUM | style_guides/generate_category_style_guide.py | 193 | print(f"Error reading {p}: {e}") | CODE |
| LOW⚡ | style_guides/generate_category_style_guide.py | 220 | except Exception as e: | CODE |
| LOW | style_guides/generate_category_style_guide.py | 298 | except Exception as e: | CODE |
| LOW | skill/run.py | 120 | except Exception: | CODE |
| LOW | agents/critic_agent.py | 136 | except Exception as e: | CODE |
| LOW | agents/retriever_agent.py | 196 | except Exception as e: | CODE |
| LOW | agents/polish_agent.py | 37 | except Exception as e: | CODE |
| LOW | agents/polish_agent.py | 94 | except Exception as e: | CODE |
| LOW | agents/polish_agent.py | 131 | except Exception as e: | CODE |
| LOW | agents/polish_agent.py | 204 | except Exception as e: | CODE |
| LOW | utils/image_utils.py | 43 | except Exception as e: | CODE |
| LOW | utils/legacy_generation_options.py | 67 | except Exception: | CODE |
| LOW⚡ | utils/legacy_generation_options.py | 78 | except Exception: | CODE |
| LOW | utils/plot_execution.py | 59 | except Exception as exc: | CODE |
| MEDIUM | utils/plot_execution.py | 60 | print(f"Error executing plot code: {exc}") | CODE |
| LOW | utils/eval_toolkits.py | 221 | except Exception as e: | CODE |
| MEDIUM⚡ | utils/generation_utils.py | 600 | print(f"Error generating a subsequent {provider_name} candidate: {res}") | CODE |
| MEDIUM⚡ | utils/generation_utils.py | 602 | print(f"Error generating a subsequent candidate: {res}") | CODE |
| MEDIUM⚡ | utils/generation_utils.py | 928 | print(f"Error: All {max_attempts} attempts failed{context_msg}") | CODE |
| MEDIUM⚡ | utils/generation_utils.py | 940 | print(f"Error: All {max_attempts} attempts failed{context_msg}") | CODE |
| MEDIUM | utils/generation_utils.py | 347 | print(f"Error: All {max_attempts} attempts failed{context_msg}") | CODE |
| MEDIUM | utils/generation_utils.py | 489 | print(f"Error generating a subsequent candidate: {res}") | CODE |
| MEDIUM | utils/generation_utils.py | 567 | print(f"Error: All {max_attempts} {provider_name} attempts failed{context_msg}.") | CODE |
| MEDIUM | utils/generation_utils.py | 696 | print(f"Error: All {max_attempts} attempts failed{context_msg}") | CODE |
| LOW⚡ | utils/generation_utils.py | 930 | except Exception as e: | CODE |
| LOW | utils/generation_utils.py | 334 | except Exception as e: | CODE |
| LOW | utils/generation_utils.py | 450 | except Exception as e: | CODE |
| LOW | utils/generation_utils.py | 546 | except Exception as e: | CODE |
| LOW | utils/generation_utils.py | 687 | except Exception as e: | CODE |
| LOW | visualize/show_referenced_eval.py | 80 | except Exception as e: | CODE |
| LOW | visualize/show_referenced_eval.py | 107 | except Exception: | CODE |
| LOW | visualize/show_referenced_eval.py | 208 | except Exception as e: | CODE |
| LOW | visualize/show_pipeline_evolution.py | 70 | except Exception as e: | CODE |
| LOW | visualize/show_pipeline_evolution.py | 83 | except Exception: | CODE |
| LOW | visualize/show_pipeline_evolution.py | 183 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | app.py | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | app.py | 34 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | app.py | 41 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | app.py | 43 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app.py | 85 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app.py | 87 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app.py | 282 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app.py | 284 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app.py | 334 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app.py | 336 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | app.py | 545 | # ================================================================ | STRING |
| MEDIUM⚡ | app.py | 547 | # ================================================================ | STRING |
| MEDIUM⚡ | app.py | 550 | # ============================================================ | STRING |
| MEDIUM⚡ | app.py | 552 | # ============================================================ | STRING |
| MEDIUM | app.py | 454 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | app.py | 456 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | app.py | 470 | # ================================================================ | STRING |
| MEDIUM | app.py | 472 | # ================================================================ | STRING |
| MEDIUM | app.py | 501 | # ================================================================ | STRING |
| MEDIUM | app.py | 503 | # ================================================================ | STRING |
| MEDIUM | app.py | 802 | # ============================================================ | STRING |
| MEDIUM | app.py | 804 | # ============================================================ | STRING |
| MEDIUM | app.py | 867 | # ================================================================ | STRING |
| MEDIUM | app.py | 869 | # ================================================================ | STRING |
| MEDIUM | app.py | 881 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | app.py | 883 | # --------------------------------------------------------------------------- | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | main.py | 24 | CODE | |
| LOW | agents/stylist_agent.py | 20 | CODE | |
| LOW | agents/stylist_agent.py | 21 | CODE | |
| LOW | agents/stylist_agent.py | 22 | CODE | |
| LOW | agents/stylist_agent.py | 24 | CODE | |
| LOW | agents/stylist_agent.py | 24 | CODE | |
| LOW | agents/stylist_agent.py | 24 | CODE | |
| LOW | agents/stylist_agent.py | 25 | CODE | |
| LOW | agents/base_agent.py | 19 | CODE | |
| LOW | agents/base_agent.py | 20 | CODE | |
| LOW | agents/base_agent.py | 23 | CODE | |
| LOW | agents/base_agent.py | 25 | CODE | |
| LOW | agents/planner_agent.py | 22 | CODE | |
| LOW | agents/planner_agent.py | 22 | CODE | |
| LOW | agents/planner_agent.py | 23 | CODE | |
| LOW | agents/critic_agent.py | 22 | CODE | |
| LOW | agents/critic_agent.py | 22 | CODE | |
| LOW | agents/critic_agent.py | 22 | CODE | |
| LOW | agents/critic_agent.py | 23 | CODE | |
| LOW | agents/retriever_agent.py | 23 | CODE | |
| LOW | agents/retriever_agent.py | 23 | CODE | |
| LOW | agents/retriever_agent.py | 23 | CODE | |
| LOW | agents/retriever_agent.py | 24 | CODE | |
| LOW | agents/retriever_agent.py | 77 | CODE | |
| LOW | agents/polish_agent.py | 20 | CODE | |
| LOW | agents/polish_agent.py | 21 | CODE | |
| LOW | agents/polish_agent.py | 24 | CODE | |
| LOW | utils/legacy_ui_results.py | 17 | CODE | |
| LOW | utils/critic_rounds.py | 17 | CODE | |
| LOW | utils/paperviz_processor.py | 22 | CODE | |
| LOW | utils/legacy_generation_options.py | 17 | CODE | |
| LOW | utils/eval_toolkits.py | 20 | CODE | |
| LOW | utils/generation_utils.py | 22 | CODE | |
| LOW | utils/generation_utils.py | 23 | CODE | |
| LOW | utils/generation_utils.py | 24 | CODE | |
| LOW | utils/generation_utils.py | 28 | CODE | |
| LOW | utils/generation_utils.py | 29 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | requirements.txt | 1 | # Python 3.12. Floors are the oldest releases that provide the APIs this | COMMENT |
| LOW | app.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | main.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | demo.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | style_guides/generate_category_style_guide.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | skill/run.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | agents/stylist_agent.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | agents/base_agent.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | agents/planner_agent.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | agents/__init__.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | agents/critic_agent.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | agents/retriever_agent.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | agents/visualizer_agent.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | agents/polish_agent.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | agents/vanilla_agent.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | utils/legacy_ui_results.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | utils/image_utils.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | utils/critic_rounds.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | utils/config.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | utils/paperviz_processor.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | utils/legacy_generation_options.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | utils/plot_execution.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | utils/__init__.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | utils/eval_toolkits.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | utils/generation_utils.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | visualize/show_referenced_eval.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | visualize/show_pipeline_evolution.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | configs/model_config.template.yaml | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | scripts/run_demo.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/run_main.sh | 1 | #!/bin/bash | COMMENT |
| LOW | prompts/plot_eval_prompts.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | prompts/__init__.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| LOW | prompts/diagram_eval_prompts.py | 1 | # Copyright 2026 Google LLC | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app.py | 174 | CODE | |
| LOW | app.py | 458 | CODE | |
| LOW | app.py | 679 | CODE | |
| LOW | demo.py | 194 | CODE | |
| LOW | demo.py | 306 | CODE | |
| LOW | demo.py | 500 | CODE | |
| LOW | skill/run.py | 177 | CODE | |
| LOW | tests/test_provider_routing.py | 74 | CODE | |
| LOW | tests/test_provider_routing.py | 132 | CODE | |
| LOW | agents/retriever_agent.py | 61 | CODE | |
| LOW | agents/visualizer_agent.py | 74 | CODE | |
| LOW | utils/legacy_ui_results.py | 68 | CODE | |
| LOW | utils/legacy_ui_results.py | 163 | CODE | |
| LOW | utils/config.py | 46 | CODE | |
| LOW | utils/paperviz_processor.py | 364 | CODE | |
| LOW | utils/paperviz_processor.py | 501 | CODE | |
| LOW | utils/eval_toolkits.py | 120 | CODE | |
| LOW | utils/generation_utils.py | 241 | CODE | |
| LOW | utils/generation_utils.py | 269 | CODE | |
| LOW | utils/generation_utils.py | 370 | CODE | |
| LOW | utils/generation_utils.py | 497 | CODE | |
| LOW | utils/generation_utils.py | 648 | CODE | |
| LOW | utils/generation_utils.py | 812 | CODE | |
| LOW | utils/generation_utils.py | 844 | CODE | |
| LOW | utils/generation_utils.py | 1076 | CODE | |
| LOW | visualize/show_referenced_eval.py | 49 | CODE | |
| LOW | visualize/show_referenced_eval.py | 157 | CODE | |
| LOW | visualize/show_referenced_eval.py | 188 | CODE | |
| LOW | visualize/show_pipeline_evolution.py | 41 | CODE | |
| LOW | visualize/show_pipeline_evolution.py | 148 | CODE | |
| LOW | visualize/show_pipeline_evolution.py | 227 | CODE | |
| LOW | visualize/show_pipeline_evolution.py | 257 | CODE | |
| LOW | scripts/prepare_bench.py | 57 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | agents/stylist_agent.py | 0 | vanilla agent - directly rendering images based on the method section. | STRING |
| HIGH | agents/planner_agent.py | 0 | vanilla agent - directly rendering images based on the method section. | STRING |
| HIGH | agents/critic_agent.py | 0 | vanilla agent - directly rendering images based on the method section. | STRING |
| HIGH | agents/retriever_agent.py | 0 | vanilla agent - directly rendering images based on the method section. | STRING |
| HIGH | agents/visualizer_agent.py | 0 | vanilla agent - directly rendering images based on the method section. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app.py | 770 | except Exception: | CODE |
| HIGH | utils/legacy_generation_options.py | 78 | except Exception: | CODE |
| HIGH | visualize/show_pipeline_evolution.py | 56 | except json.JSONDecodeError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | style_guides/generate_category_style_guide.py | 227 | # Step 0: Prepare output directory | COMMENT |
| LOW⚡ | style_guides/generate_category_style_guide.py | 232 | # Step 1: Load and filter data | COMMENT |
| LOW⚡ | style_guides/generate_category_style_guide.py | 258 | # Step 2: Split into batches | COMMENT |
| LOW⚡ | style_guides/generate_category_style_guide.py | 263 | # Step 3: Parallel analysis | COMMENT |
| LOW⚡ | style_guides/generate_category_style_guide.py | 270 | # Step 4: Synthesize final style guide | COMMENT |
| LOW | agents/polish_agent.py | 152 | # Step 2: Polish Image using suggestions | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | style_guides/generate_category_style_guide.py | 227 | # Step 0: Prepare output directory | COMMENT |
| LOW⚡ | style_guides/generate_category_style_guide.py | 232 | # Step 1: Load and filter data | COMMENT |
| LOW⚡ | style_guides/generate_category_style_guide.py | 258 | # Step 2: Split into batches | COMMENT |
| LOW⚡ | style_guides/generate_category_style_guide.py | 263 | # Step 3: Parallel analysis | COMMENT |
| LOW⚡ | style_guides/generate_category_style_guide.py | 270 | # Step 4: Synthesize final style guide | COMMENT |
| LOW | agents/polish_agent.py | 152 | # Step 2: Polish Image using suggestions | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | demo.py | 841 | # Display results | COMMENT |
| LOW | demo.py | 873 | # Display results in a grid (3 columns) | COMMENT |
| LOW | agents/planner_agent.py | 72 | # Check if retriever has already provided full examples (e.g., in manual mode) | COMMENT |
| LOW | agents/retriever_agent.py | 76 | # Check if reference file exists to gracefully fallback if dataset isn't downloaded | COMMENT |
| LOW | utils/paperviz_processor.py | 346 | # Check if visualization validation succeeded | COMMENT |
| LOW | utils/eval_toolkits.py | 264 | # Check if image was successfully generated | COMMENT |
| LOW | configs/model_config.template.yaml | 29 | atlascloud_api_key: "" # Set model_name to "atlas/<model>" to use Atlas Cloud. | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 140 | # Legacy matplotlib plot-code generation with no few-shot retrieval | COMMENT |
| MEDIUM | agents/retriever_agent.py | 96 | # Load from predefined few-shot file and store full examples | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | agents/polish_agent.py | 140 | # If no changes needed, we might want to skip generation or just return original | COMMENT |
| MEDIUM | utils/generation_utils.py | 53 | # Initialize clients lazily or with robust defaults | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | utils/paperviz_processor.py | 602 | CODE |