Run frontier AI locally.
This report presents the forensic synthetic code analysis of exo-explore/exo, a Python project with 46,243 GitHub stars. SynthScan v2.0 examined 102,457 lines of code across 534 source files, recording 1072 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 13.6 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1072 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | CONTRIBUTING.md | 134 | def your_api_request_to_text_generation( | CODE |
| LOW | CONTRIBUTING.md | 151 | async def collect_your_api_response( | CODE |
| LOW | bench/prefill_decode_bench.py | 65 | def _placement_node_friendly_names( | CODE |
| LOW | bench/prefill_decode_bench.py | 195 | def _pick_two_distinct_placements( | CODE |
| LOW | bench/eval_tool_calls.py | 301 | def _claude_translate_messages(messages: list[dict[str, Any]]) -> list[dict[str, Any]]: | CODE |
| LOW | bench/eval_tool_calls.py | 502 | def _responses_translate_input(messages: list[dict[str, Any]]) -> list[dict[str, Any]]: | CODE |
| LOW | bench/eval_tool_calls.py | 569 | def _responses_parse_response(data: dict[str, Any]) -> ParsedResponse: | CODE |
| LOW | bench/eval_tool_calls.py | 614 | def _responses_build_followup( | CODE |
| LOW | bench/exo_eval.py | 448 | def format_humaneval_question(doc: dict) -> tuple[str, dict]: | CODE |
| LOW | bench/exo_eval.py | 464 | def format_livecodebench_question(doc: dict) -> tuple[str, str | None, dict]: | CODE |
| LOW | tools/src/exo_tools/harness.py | 48 | def instance_id_from_instance(instance: dict[str, Any]) -> str: | CODE |
| LOW | tools/src/exo_tools/harness.py | 77 | def get_runner_failed_message(runner: dict[str, Any]) -> str | None: | CODE |
| LOW | tools/src/exo_tools/harness.py | 205 | def fetch_and_filter_placements( | CODE |
| LOW | tools/src/exo_tools/harness.py | 269 | def settle_and_fetch_placements( | CODE |
| LOW | tools/src/exo_tools/client.py | 63 | def post_bench_chat_completions(self, payload: dict[str, Any]) -> dict[str, Any]: | CODE |
| LOW | tools/src/exo_tools/client.py | 66 | def stream_bench_chat_completions(self, payload: dict[str, Any]) -> Iterator[str]: | CODE |
| LOW | rust/exo_rs/tests/test_python.py | 14 | async def test_sleep_on_multiple_items() -> None: | CODE |
| LOW | tests/conftest.py | 169 | def pytest_runtest_makereport(item, call): | CODE |
| LOW⚡ | tests/test_dashboard.py | 41 | def _mark_onboarding_complete(session) -> None: | CODE |
| LOW⚡ | tests/test_dashboard.py | 48 | def test_dashboard_chat_inference(session): | CODE |
| LOW | tests/test_1node.py | 20 | def test_place_instance_and_chat(session): | CODE |
| LOW | tests/test_1node.py | 54 | def test_download_from_scratch(session): | CODE |
| LOW | dashboard/src/lib/stores/app.svelte.ts | 380 | function transformNetworkInterface(iface: RawNetworkInterfaceInfo): { | CODE |
| LOW | dashboard/src/lib/utils/downloads.ts | 24 | export function extractModelIdFromDownload( | CODE |
| LOW | dashboard/src/lib/utils/downloads.ts | 92 | export function getNodesWithModelDownloaded( | CODE |
| LOW⚡ | dashboard/src/lib/components/ChatForm.svelte | 73 | function modelSupportsImageGeneration(modelId: string): boolean { | CODE |
| LOW⚡ | dashboard/src/lib/components/ChatForm.svelte | 83 | function modelSupportsOnlyImageEditing(modelId: string): boolean { | CODE |
| LOW⚡ | dashboard/src/lib/components/ChatForm.svelte | 88 | function modelSupportsImageEditing(modelId: string): boolean { | CODE |
| LOW | dashboard/src/lib/components/ModelPickerModal.svelte | 164 | function getGroupDownloadAvailability( | CODE |
| LOW | dashboard/src/lib/components/ChatMessages.svelte | 53 | function updateScrollButtonVisibility() { | CODE |
| LOW | dashboard/src/lib/components/ImageParamsPanel.svelte | 49 | function handleInputFidelityChange( | CODE |
| LOW | dashboard/src/lib/components/ImageParamsPanel.svelte | 111 | function handleNegativePromptChange(event: Event) { | CODE |
| LOW | dashboard/src/lib/components/ImageParamsPanel.svelte | 133 | function handlePartialImagesChange(event: Event) { | CODE |
| LOW | dashboard/src/routes/+page.svelte | 823 | function modelSupportsImageGeneration(modelId: string): boolean { | CODE |
| LOW | dashboard/src/routes/+page.svelte | 835 | function modelSupportsImageEditing(modelId: string): boolean { | CODE |
| LOW | dashboard/src/routes/+page.svelte | 1008 | function toggleInstanceDownloadDetails(nodeId: string): void { | CODE |
| LOW | dashboard/src/routes/+page.svelte | 1497 | function extractModelIdFromDownload( | CODE |
| LOW | dashboard/src/routes/+page.svelte | 1763 | function getInstanceDownloadStatus( | CODE |
| LOW | scripts/download_model_to_cluster.py | 59 | async def ensure_model_card_registered( | CODE |
| LOW | tmp/quantize_and_upload.py | 103 | def load_and_save_quantized_model( | CODE |
| LOW⚡ | tmp/old_tests/test_vision_cache.py | 8 | def test_text_only_no_truncation(self): | CODE |
| LOW⚡ | tmp/old_tests/test_vision_cache.py | 11 | def test_text_prefix_before_image(self): | CODE |
| LOW⚡ | tmp/old_tests/test_vision_cache.py | 15 | def test_same_image_same_position(self): | CODE |
| LOW⚡ | tmp/old_tests/test_vision_cache.py | 20 | def test_different_image_truncates(self): | CODE |
| LOW⚡ | tmp/old_tests/test_vision_cache.py | 25 | def test_match_below_region_start(self): | CODE |
| LOW⚡ | tmp/old_tests/test_vision_cache.py | 30 | def test_text_followup_no_images_in_query(self): | CODE |
| LOW⚡ | tmp/old_tests/test_vision_cache.py | 34 | def test_multiple_images_first_mismatch_truncates(self): | CODE |
| LOW | tmp/old_tests/test_vision_cache.py | 45 | def test_multiple_images_all_match(self): | CODE |
| LOW | tmp/old_tests/test_vision_cache.py | 60 | def test_cached_region_beyond_match(self): | CODE |
| LOW | src/exo/utils/dashboard_path.py | 24 | def _find_resources_in_bundle() -> Path | None: | CODE |
| LOW | src/exo/utils/dashboard_path.py | 52 | def _find_dashboard_in_bundle() -> Path | None: | CODE |
| LOW | src/exo/utils/async_process.py | 206 | async def _terminate_if_still_alive(self) -> None: | CODE |
| LOW | src/exo/utils/fs.py | 17 | def ensure_parent_directory_exists(filename: StrPath) -> None: | CODE |
| LOW | src/exo/utils/tests/test_pidfile.py | 33 | def _run_child_acquire_pidfile(path: Path) -> subprocess.CompletedProcess[str]: | CODE |
| LOW | src/exo/utils/tests/test_pidfile.py | 42 | def test_acquire_exo_pidfile_writes_current_pid_and_removes_on_drop( | CODE |
| LOW | src/exo/utils/tests/test_pidfile.py | 57 | def test_acquire_exo_pidfile_rejects_second_process( | CODE |
| LOW | src/exo/utils/tests/test_tagged.py | 8 | def test_plain_union_prefers_first_member_when_shapes_are_identical(): | CODE |
| LOW | src/exo/utils/tests/test_tagged.py | 23 | def test_tagged_union_serializes_and_deserializes_two_identical_shapes_correctly(): | CODE |
| LOW | src/exo/utils/tests/test_tagged.py | 46 | def test_tagged_union_rejects_unknown_tag(): | CODE |
| LOW | src/exo/utils/tests/test_tagged.py | 58 | def test_two_tagged_classes_with_different_shapes_are_independent_and_not_cross_deserializable(): | CODE |
| 535 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | packaging/dmg/create-dmg.sh | 32 | # ── Step 1: Generate background image ──────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | packaging/dmg/create-dmg.sh | 41 | # ── Step 2: Prepare staging directory ───────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | packaging/dmg/create-dmg.sh | 46 | # ── Step 3: Create writable DMG ────────────────────────────────────────────── | COMMENT |
| MEDIUM | packaging/dmg/create-dmg.sh | 58 | # ── Step 4: Mount and configure ────────────────────────────────────────────── | COMMENT |
| MEDIUM | packaging/dmg/create-dmg.sh | 71 | # ── Step 5: Configure window appearance via AppleScript ────────────────────── | COMMENT |
| MEDIUM | packaging/dmg/create-dmg.sh | 107 | # ── Step 6: Finalise ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | bench/parallel_requests.py | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/parallel_requests.py | 34 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/parallel_requests.py | 102 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/parallel_requests.py | 104 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | bench/exo_eval.py | 193 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | bench/exo_eval.py | 195 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 60 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 99 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 101 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 118 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 120 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 276 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 278 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 362 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 364 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 522 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 524 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 683 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 685 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 1086 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 1088 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 1196 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 1198 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 1265 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 1267 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 1317 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/exo_eval.py | 1319 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | bench/eval_configs/models.toml | 19 | # ─── Qwen3.5 (Feb 2026) ───────────────────────────────────────────── | COMMENT |
| MEDIUM | bench/eval_configs/models.toml | 79 | # ─── Qwen3 (Apr 2025) ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | bench/eval_configs/models.toml | 146 | # ─── GPT-OSS (OpenAI) ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | bench/eval_configs/models.toml | 165 | # ─── DeepSeek ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | bench/eval_configs/models.toml | 186 | # ─── NVIDIA Nemotron ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | bench/eval_configs/models.toml | 206 | # ─── GLM (ZhipuAI / THUDM) ────────────────────────────────────────── | COMMENT |
| MEDIUM | bench/eval_configs/models.toml | 237 | # ─── Kimi (Moonshot AI) ───────────────────────────────────────────── | COMMENT |
| MEDIUM | bench/eval_configs/models.toml | 265 | # ─── MiniMax ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | bench/eval_configs/models.toml | 295 | # ─── Step (StepFun) ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | bench/eval_configs/models.toml | 310 | # ─── Llama (Meta) ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tools/src/exo_tools/harness.py | 537 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tools/src/exo_tools/harness.py | 539 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 155 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 157 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build-app.yml | 40 | # ============================================================ | COMMENT |
| MEDIUM | .github/workflows/build-app.yml | 42 | # ============================================================ | COMMENT |
| MEDIUM | .github/workflows/build-app.yml | 148 | # ============================================================ | COMMENT |
| MEDIUM | .github/workflows/build-app.yml | 150 | # ============================================================ | COMMENT |
| MEDIUM | .github/workflows/build-app.yml | 241 | # ============================================================ | COMMENT |
| MEDIUM | .github/workflows/build-app.yml | 244 | # ============================================================ | COMMENT |
| MEDIUM | .github/workflows/build-app.yml | 315 | # ============================================================ | COMMENT |
| MEDIUM | .github/workflows/build-app.yml | 317 | # ============================================================ | COMMENT |
| MEDIUM | .github/workflows/build-app.yml | 508 | # ============================================================ | COMMENT |
| MEDIUM | .github/workflows/build-app.yml | 510 | # ============================================================ | COMMENT |
| MEDIUM⚡ | src/exo/download/tests/test_model_dirs.py | 45 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | src/exo/download/tests/test_model_dirs.py | 47 | # --------------------------------------------------------------------------- | COMMENT |
| 42 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packaging/dmg/generate-background.py | 14 | CODE | |
| LOW | bench/prefill_decode_bench.py | 18 | CODE | |
| LOW | bench/eval_tool_calls.py | 2 | CODE | |
| LOW | bench/exo_eval.py | 28 | CODE | |
| LOW | bench/exo_bench.py | 18 | CODE | |
| LOW | tools/src/exo_tools/harness.py | 8 | CODE | |
| LOW | tools/src/exo_tools/client.py | 4 | CODE | |
| LOW | tools/src/exo_tools/cluster.py | 9 | CODE | |
| LOW | tests/test_2node.py | 8 | CODE | |
| LOW | tests/conftest.py | 22 | CODE | |
| LOW | tests/test_resilience.py | 8 | CODE | |
| LOW | tests/test_dashboard.py | 11 | CODE | |
| LOW | tests/test_4node.py | 8 | CODE | |
| LOW | tests/framework.py | 17 | CODE | |
| LOW | tests/test_1node.py | 8 | CODE | |
| LOW | scripts/fetch_kv_heads.py | 12 | CODE | |
| LOW | scripts/download_model_to_cluster.py | 16 | CODE | |
| LOW | tmp/quantize_and_upload.py | 17 | CODE | |
| LOW | src/exo/__main__.py | 1 | CODE | |
| LOW | src/exo/utils/async_process.py | 1 | CODE | |
| LOW | src/exo/utils/tests/test_pidfile.py | 1 | CODE | |
| LOW | src/exo/shared/tracing.py | 1 | CODE | |
| LOW | src/exo/download/coordinator.py | 1 | CODE | |
| LOW | src/exo/api/types/ollama_api.py | 1 | CODE | |
| LOW | src/exo/api/types/__init__.py | 1 | CODE | |
| LOW | src/exo/api/types/__init__.py | 2 | CODE | |
| LOW | src/exo/api/types/__init__.py | 3 | CODE | |
| LOW | src/exo/api/types/__init__.py | 4 | CODE | |
| LOW | src/exo/api/types/__init__.py | 5 | CODE | |
| LOW | src/exo/api/types/__init__.py | 6 | CODE | |
| LOW | src/exo/api/types/__init__.py | 7 | CODE | |
| LOW | src/exo/api/types/__init__.py | 8 | CODE | |
| LOW | src/exo/api/types/__init__.py | 9 | CODE | |
| LOW | src/exo/api/types/__init__.py | 10 | CODE | |
| LOW | src/exo/api/types/__init__.py | 11 | CODE | |
| LOW | src/exo/api/types/__init__.py | 12 | CODE | |
| LOW | src/exo/api/types/__init__.py | 13 | CODE | |
| LOW | src/exo/api/types/__init__.py | 14 | CODE | |
| LOW | src/exo/api/types/__init__.py | 15 | CODE | |
| LOW | src/exo/api/types/__init__.py | 16 | CODE | |
| LOW | src/exo/api/types/__init__.py | 17 | CODE | |
| LOW | src/exo/api/types/__init__.py | 18 | CODE | |
| LOW | src/exo/api/types/__init__.py | 19 | CODE | |
| LOW | src/exo/api/types/__init__.py | 20 | CODE | |
| LOW | src/exo/api/types/__init__.py | 21 | CODE | |
| LOW | src/exo/api/types/__init__.py | 22 | CODE | |
| LOW | src/exo/api/types/__init__.py | 23 | CODE | |
| LOW | src/exo/api/types/__init__.py | 24 | CODE | |
| LOW | src/exo/api/types/__init__.py | 25 | CODE | |
| LOW | src/exo/api/types/__init__.py | 26 | CODE | |
| LOW | src/exo/api/types/__init__.py | 27 | CODE | |
| LOW | src/exo/api/types/__init__.py | 28 | CODE | |
| LOW | src/exo/api/types/__init__.py | 29 | CODE | |
| LOW | src/exo/api/types/__init__.py | 30 | CODE | |
| LOW | src/exo/api/types/__init__.py | 31 | CODE | |
| LOW | src/exo/api/types/__init__.py | 32 | CODE | |
| LOW | src/exo/api/types/__init__.py | 33 | CODE | |
| LOW | src/exo/api/types/__init__.py | 34 | CODE | |
| LOW | src/exo/api/types/__init__.py | 35 | CODE | |
| LOW | src/exo/api/types/__init__.py | 36 | CODE | |
| 57 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bench/prefill_decode_bench.py | 294 | except Exception as e: | CODE |
| LOW | bench/prefill_decode_bench.py | 512 | except Exception: | CODE |
| LOW | bench/parallel_requests.py | 176 | except Exception as e: | CODE |
| LOW | bench/eval_tool_calls.py | 701 | except Exception as exc: | CODE |
| LOW | bench/eval_tool_calls.py | 807 | except Exception as exc: | CODE |
| LOW⚡ | bench/exo_eval.py | 189 | except Exception: | CODE |
| LOW | bench/exo_eval.py | 216 | except Exception as e: | CODE |
| LOW | bench/exo_eval.py | 486 | except Exception: | CODE |
| LOW | bench/exo_eval.py | 613 | except Exception: | CODE |
| LOW | bench/exo_eval.py | 652 | except Exception as e: | CODE |
| LOW | bench/exo_eval.py | 726 | except Exception as e: | CODE |
| LOW | bench/exo_eval.py | 1533 | except Exception as e: | CODE |
| LOW | bench/exo_bench.py | 211 | except Exception: | CODE |
| LOW | bench/exo_bench.py | 541 | except Exception: | CODE |
| LOW | bench/exo_bench.py | 639 | except Exception as e: | CODE |
| LOW | bench/exo_bench.py | 708 | except Exception as e: | CODE |
| LOW | bench/exo_bench.py | 792 | except Exception as e: | CODE |
| LOW | tools/src/exo_tools/harness.py | 465 | except Exception: | CODE |
| LOW | tools/src/exo_tools/harness.py | 569 | except Exception: | CODE |
| LOW | tests/conftest.py | 180 | except Exception: | CODE |
| LOW⚡ | tests/test_dashboard.py | 32 | except Exception: | CODE |
| LOW | tests/framework.py | 194 | except Exception: | CODE |
| LOW | scripts/fetch_kv_heads.py | 35 | except Exception as e: | CODE |
| LOW | tmp/quantize_and_upload.py | 201 | except Exception as e: | CODE |
| MEDIUM | tmp/quantize_and_upload.py | 311 | print("Error: All variants skipped. Nothing to do.") | STRING |
| MEDIUM | tmp/run_llm.py | 75 | print(f"Error reading file {args.file}: {e}", file=sys.stderr) | CODE |
| LOW | src/exo/utils/disk_event_log.py | 183 | except Exception as e: | CODE |
| LOW | src/exo/utils/banner.py | 60 | except Exception: | STRING |
| LOW | src/exo/utils/info_gatherer/info_gatherer.py | 290 | except Exception as e: | CODE |
| LOW | src/exo/utils/info_gatherer/info_gatherer.py | 368 | except Exception: | CODE |
| LOW | src/exo/utils/info_gatherer/info_gatherer.py | 415 | except Exception as e: | CODE |
| LOW⚡ | src/exo/utils/info_gatherer/info_gatherer.py | 472 | except Exception as e: | CODE |
| LOW⚡ | src/exo/utils/info_gatherer/info_gatherer.py | 481 | except Exception as e: | CODE |
| LOW | src/exo/utils/info_gatherer/info_gatherer.py | 507 | except Exception as e: | CODE |
| LOW⚡ | src/exo/utils/info_gatherer/info_gatherer.py | 526 | except Exception as e: | CODE |
| LOW⚡ | src/exo/utils/info_gatherer/info_gatherer.py | 536 | except Exception as e: | CODE |
| LOW⚡ | src/exo/utils/info_gatherer/info_gatherer.py | 549 | except Exception as e: | CODE |
| LOW | src/exo/utils/info_gatherer/info_gatherer.py | 561 | except Exception as e: | CODE |
| LOW | src/exo/utils/info_gatherer/info_gatherer.py | 570 | except Exception as e: | CODE |
| LOW | src/exo/utils/info_gatherer/info_gatherer.py | 641 | except Exception as e: | CODE |
| MEDIUM | src/exo/utils/info_gatherer/info_gatherer.py | 357 | def _has_nvml_cuda() -> bool: | CODE |
| LOW | src/exo/shared/models/model_cards.py | 110 | except Exception: | CODE |
| LOW | src/exo/master/main.py | 467 | except Exception as e: | CODE |
| LOW | src/exo/download/coordinator.py | 297 | except Exception as e: | CODE |
| LOW | src/exo/download/coordinator.py | 471 | except Exception as e: | CODE |
| LOW | src/exo/download/download_utils.py | 273 | except Exception: | CODE |
| LOW | src/exo/download/download_utils.py | 332 | except Exception: | CODE |
| LOW | src/exo/download/download_utils.py | 430 | except Exception as e: | CODE |
| LOW | src/exo/download/download_utils.py | 477 | except Exception as e: | CODE |
| LOW | src/exo/download/download_utils.py | 651 | except Exception as e: | CODE |
| LOW | src/exo/download/download_utils.py | 691 | except Exception as e: | CODE |
| LOW | src/exo/download/download_utils.py | 749 | except Exception as e: | CODE |
| LOW | src/exo/download/download_utils.py | 848 | except Exception: | CODE |
| LOW | src/exo/download/impl_shard_downloader.py | 268 | except Exception as e: | CODE |
| LOW | src/exo/api/main.py | 423 | except Exception as e: | CODE |
| LOW | src/exo/api/main.py | 523 | except Exception as exc: | CODE |
| LOW | src/exo/api/main.py | 1725 | except Exception as exc: | CODE |
| LOW | src/exo/api/main.py | 1825 | except Exception as exc: | CODE |
| LOW | src/exo/api/adapters/claude.py | 100 | except Exception: | CODE |
| LOW | src/exo/routing/router.py | 215 | except Exception as exception: | CODE |
| 27 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bench/prefill_decode_bench.py | 390 | CODE | |
| LOW | bench/parallel_requests.py | 53 | CODE | |
| LOW | bench/parallel_requests.py | 116 | CODE | |
| LOW | bench/parallel_requests.py | 185 | CODE | |
| LOW | bench/eval_tool_calls.py | 301 | CODE | |
| LOW | bench/eval_tool_calls.py | 392 | CODE | |
| LOW | bench/eval_tool_calls.py | 502 | CODE | |
| LOW | bench/eval_tool_calls.py | 569 | CODE | |
| LOW | bench/eval_tool_calls.py | 673 | CODE | |
| LOW | bench/eval_tool_calls.py | 892 | CODE | |
| LOW | bench/exo_eval.py | 123 | CODE | |
| LOW | bench/exo_eval.py | 137 | CODE | |
| LOW | bench/exo_eval.py | 617 | CODE | |
| LOW | bench/exo_eval.py | 688 | CODE | |
| LOW | bench/exo_eval.py | 1201 | CODE | |
| LOW | bench/exo_eval.py | 1340 | CODE | |
| LOW | bench/exo_eval.py | 795 | CODE | |
| LOW | bench/exo_bench.py | 63 | CODE | |
| LOW | bench/exo_bench.py | 272 | CODE | |
| LOW | bench/exo_bench.py | 428 | CODE | |
| LOW | bench/exo_bench.py | 201 | CODE | |
| LOW | tools/src/exo_tools/harness.py | 83 | CODE | |
| LOW | tools/src/exo_tools/harness.py | 296 | CODE | |
| LOW | scripts/fetch_kv_heads.py | 85 | CODE | |
| LOW | scripts/download_model_to_cluster.py | 106 | CODE | |
| LOW | tmp/quantize_and_upload.py | 33 | CODE | |
| LOW | tmp/quantize_and_upload.py | 159 | CODE | |
| LOW | tmp/run_llm.py | 9 | CODE | |
| LOW | src/exo/main.py | 278 | CODE | |
| LOW | src/exo/main.py | 180 | CODE | |
| LOW | src/exo/utils/async_process.py | 68 | CODE | |
| LOW | src/exo/utils/tests/test_async_process.py | 293 | CODE | |
| LOW | src/exo/utils/info_gatherer/system_info.py | 59 | CODE | |
| LOW | src/exo/utils/info_gatherer/info_gatherer.py | 46 | CODE | |
| LOW | src/exo/utils/info_gatherer/info_gatherer.py | 79 | CODE | |
| LOW | src/exo/utils/info_gatherer/info_gatherer.py | 485 | CODE | |
| LOW | src/exo/utils/info_gatherer/info_gatherer.py | 540 | CODE | |
| LOW | src/exo/utils/info_gatherer/info_gatherer.py | 574 | CODE | |
| LOW | src/exo/shared/topology.py | 244 | CODE | |
| LOW | src/exo/master/placement_utils.py | 296 | CODE | |
| LOW | src/exo/master/placement.py | 325 | CODE | |
| LOW | src/exo/master/main.py | 171 | CODE | |
| LOW | src/exo/master/main.py | 471 | CODE | |
| LOW | src/exo/download/coordinator.py | 354 | CODE | |
| LOW | src/exo/download/download_utils.py | 260 | CODE | |
| LOW | src/exo/download/download_utils.py | 278 | CODE | |
| LOW | src/exo/download/download_utils.py | 487 | CODE | |
| LOW | src/exo/download/huggingface_utils.py | 100 | CODE | |
| LOW | src/exo/api/main.py | 411 | CODE | |
| LOW | src/exo/api/main.py | 1097 | CODE | |
| LOW | src/exo/api/main.py | 1211 | CODE | |
| LOW | src/exo/api/main.py | 1786 | CODE | |
| LOW | src/exo/api/main.py | 1969 | CODE | |
| LOW | src/exo/api/adapters/responses.py | 133 | CODE | |
| LOW | src/exo/api/adapters/claude.py | 108 | CODE | |
| LOW | src/exo/api/adapters/chat_completions.py | 60 | CODE | |
| LOW | src/exo/api/adapters/ollama.py | 83 | CODE | |
| LOW | src/exo/routing/event_router.py | 116 | CODE | |
| LOW | src/exo/worker/main.py | 140 | CODE | |
| LOW | …xo/worker/runner/llm_inference/model_output_parsers.py | 67 | CODE | |
| 29 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/exo/utils/dashboard_path.py | 38 | "Unable to locate dashboard assets - you probably forgot to run `cd dashboard && npm install && npm run buil | CODE |
| HIGH⚡ | src/exo/download/tests/test_safetensors_index.py | 33 | raw = '{"metadata": null, "weight_map": {"a.safetensors": "a.safetensors"}}' | CODE |
| HIGH | src/exo/worker/runner/llm_inference/batch_generator.py | 186 | queue.push(response) | CODE |
| HIGH | src/exo/worker/runner/llm_inference/batch_generator.py | 451 | queue.push(response) | CODE |
| HIGH | …/tests/unittests/test_runner/test_finish_reason_sse.py | 502 | queue.push(token) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tmp/quantize_and_upload.py | 180 | # Create the repo if it doesn't exist | COMMENT |
| MEDIUM | src/exo/master/main.py | 524 | # This function is re-entrant, take care! | COMMENT |
| MEDIUM | src/exo/download/tests/test_download_verification.py | 42 | # Create a local file with wrong size | COMMENT |
| MEDIUM | src/exo/download/tests/test_download_verification.py | 103 | # Create a local file | COMMENT |
| MEDIUM | src/exo/download/tests/test_download_verification.py | 142 | # Create a local file | COMMENT |
| MEDIUM | src/exo/routing/event_router.py | 156 | # This function is started whenever we receive an event that is out of sequence. | COMMENT |
| MEDIUM | src/exo/worker/engines/image/generate.py | 49 | # Create a small dummy image for warmup (needed for edit models) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tmp/test_trust_remote_code_attack.sh | 23 | # Step 0: Clean up any stale card from previous runs | COMMENT |
| LOW⚡ | tmp/test_trust_remote_code_attack.sh | 33 | # Step 1: Add the malicious model via API | COMMENT |
| LOW | tmp/test_trust_remote_code_attack.sh | 50 | # Step 2: Verify the saved TOML has trust_remote_code = false | COMMENT |
| LOW | tmp/test_trust_remote_code_attack.sh | 66 | # Step 3: Place the instance | COMMENT |
| LOW | tmp/test_trust_remote_code_attack.sh | 119 | # Step 4: Clean up — delete instance and custom model | COMMENT |
| LOW⚡ | …xo/worker/tests/unittests/test_runner/test_dsml_e2e.py | 106 | # Step 1: Encode the prompt (with tools available) | COMMENT |
| LOW⚡ | …xo/worker/tests/unittests/test_runner/test_dsml_e2e.py | 153 | # Step 1: Encode prompt | COMMENT |
| LOW⚡ | …xo/worker/tests/unittests/test_runner/test_dsml_e2e.py | 161 | # Step 2: Simulate realistic token-by-token model output | COMMENT |
| LOW | …xo/worker/tests/unittests/test_runner/test_dsml_e2e.py | 119 | # Step 2: Simulate model response — plain text tokens (no DSML) | COMMENT |
| LOW | …xo/worker/tests/unittests/test_runner/test_dsml_e2e.py | 130 | # Step 3: Verify all tokens pass through as GenerationResponse | COMMENT |
| LOW | …xo/worker/tests/unittests/test_runner/test_dsml_e2e.py | 181 | # Step 3: Verify | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tmp/test_trust_remote_code_attack.sh | 23 | # Step 0: Clean up any stale card from previous runs | COMMENT |
| LOW⚡ | tmp/test_trust_remote_code_attack.sh | 33 | # Step 1: Add the malicious model via API | COMMENT |
| LOW | tmp/test_trust_remote_code_attack.sh | 50 | # Step 2: Verify the saved TOML has trust_remote_code = false | COMMENT |
| LOW | tmp/test_trust_remote_code_attack.sh | 66 | # Step 3: Place the instance | COMMENT |
| LOW | tmp/test_trust_remote_code_attack.sh | 119 | # Step 4: Clean up — delete instance and custom model | COMMENT |
| LOW⚡ | …xo/worker/tests/unittests/test_runner/test_dsml_e2e.py | 106 | # Step 1: Encode the prompt (with tools available) | COMMENT |
| LOW⚡ | …xo/worker/tests/unittests/test_runner/test_dsml_e2e.py | 153 | # Step 1: Encode prompt | COMMENT |
| LOW⚡ | …xo/worker/tests/unittests/test_runner/test_dsml_e2e.py | 161 | # Step 2: Simulate realistic token-by-token model output | COMMENT |
| LOW | …xo/worker/tests/unittests/test_runner/test_dsml_e2e.py | 119 | # Step 2: Simulate model response — plain text tokens (no DSML) | COMMENT |
| LOW | …xo/worker/tests/unittests/test_runner/test_dsml_e2e.py | 130 | # Step 3: Verify all tokens pass through as GenerationResponse | COMMENT |
| LOW | …xo/worker/tests/unittests/test_runner/test_dsml_e2e.py | 181 | # Step 3: Verify | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/exo/utils/banner.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/exo/api/main.py | 319 | def _setup_exception_handlers(self) -> None: | CODE |
| LOW | src/exo/api/main.py | 334 | def _setup_cors(self) -> None: | CODE |
| LOW | src/exo/api/main.py | 343 | def _setup_routes(self) -> None: | CODE |
| LOW | src/exo/worker/engines/image/__init__.py | 10 | __all__ = [ | CODE |
| LOW | src/exo/worker/engines/image/pipeline/runner.py | 404 | def _set_text_seq_len(self, text_seq_len: int) -> None: | CODE |
| LOW | src/exo/worker/engines/image/pipeline/__init__.py | 9 | __all__ = [ | CODE |
| LOW | src/exo/worker/engines/image/pipeline/block_wrapper.py | 61 | def set_text_seq_len(self, text_seq_len: int) -> None: | CODE |
| LOW | src/exo/worker/engines/image/pipeline/block_wrapper.py | 114 | def set_encoder_mask(self, mask: mx.array | None) -> None: # noqa: B027 | CODE |
| LOW | src/exo/worker/engines/image/models/flux/__init__.py | 11 | __all__ = [ | CODE |
| LOW | src/exo/worker/engines/image/models/qwen/__init__.py | 8 | __all__ = [ | CODE |
| LOW | src/exo/worker/engines/image/models/qwen/wrappers.py | 40 | def set_encoder_mask(self, mask: mx.array | None) -> None: | CODE |
| LOW | src/exo/worker/engines/mlx/auto_parallel.py | 197 | def set_pipeline_prefill(model: nn.Module, is_prefill: bool) -> None: | CODE |
| LOW | src/exo/worker/engines/mlx/auto_parallel.py | 203 | def set_pipeline_queue_sends(model: nn.Module, queue_sends: bool) -> None: | CODE |
| LOW | src/exo/worker/engines/mlx/auto_parallel.py | 655 | def _set_layers(model: nn.Module, layers: list[_LayerCallable]) -> None: | CODE |
| LOW | src/exo/worker/engines/mlx/patches/opt_batch_gen.py | 49 | def set_needs_topk(batch: GenerationBatch, needed: bool) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/EXO/uninstall-exo.sh | 73 | # Check if running as root | COMMENT |
| LOW | app/EXO/uninstall-exo.sh | 176 | # Check if EXO.app exists in common locations | COMMENT |
| LOW⚡ | tests/test_dashboard.py | 24 | # Check if Chromium is installed by attempting a quick launch | COMMENT |
| LOW | src/exo/download/coordinator.py | 200 | # Check if already downloading, complete, or recently failed | COMMENT |
| LOW | src/exo/api/main.py | 998 | # Check if model is actually downloaded | COMMENT |
| LOW | src/exo/api/main.py | 1077 | # Check if streaming is requested | COMMENT |
| LOW | src/exo/api/main.py | 1142 | # Check if this image is complete | COMMENT |
| LOW | src/exo/routing/router.py | 52 | # Check if we should send to network | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | src/exo/worker/plan.py | 92 | ) in runner.bound_instance.instance.shard_assignments.node_to_runner.values(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/exo/worker/engines/image/models/__init__.py | 49 | Get configuration for a model ID. Args: model_id: The model identifier (e.g., "black-forest-labs/FLUX.1-sch | STRING |
| HIGH | src/exo/worker/engines/image/models/__init__.py | 75 | Create a model adapter for the given configuration. Args: config: The model configuration model_id: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packaging/dmg/create-dmg.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bench/bench.toml | 1 | # Canary benchmark manifest | COMMENT |
| LOW | bench/eval_configs/models.toml | 1 | # Model evaluation configurations for exo_eval. | COMMENT |
| LOW | app/EXO/uninstall-exo.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | rust/exo_rs/src/pidfile.rs | 41 | /// lock it, detect already running daemons. It is backed by [`pidfile`] | COMMENT |
| LOW | dashboard/src/routes/integrations/+page.svelte | 141 | if (caps.includes("vision")) { | COMMENT |
| LOW | src/exo/worker/engines/mlx/utils_mlx.py | 241 | pass | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | dashboard/package-lock.json | 3002 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", | CODE |
| MEDIUM | dashboard/src/routes/+page.svelte | 2743 | // Launch a model for seamless chat | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tools/src/exo_tools/harness.py | 538 | # Cluster/instance orchestration helpers (used by tests, bench, eval) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bench/exo_eval.py | 617 | CODE | |
| LOW | bench/exo_eval.py | 688 | CODE | |
| LOW | tools/src/exo_tools/cluster.py | 138 | CODE | |
| LOW | src/exo/api/main.py | 1425 | CODE | |
| LOW | src/exo/api/main.py | 1487 | CODE | |
| LOW | …c/exo/worker/engines/mlx/patches/standard_yarn_rope.py | 10 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/exo/download/download_utils.py | 845 | CODE | |
| MEDIUM | src/exo/worker/engines/image/builder.py | 116 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/exo/download/coordinator.py | 150 | # don't forget to clean up resources | COMMENT |
| LOW | src/exo/download/coordinator.py | 150 | # don't forget to clean up resources | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packaging/dmg/create-dmg.sh | 4 | # Usage: | COMMENT |