Run frontier AI locally.
This report summarizes scanner evidence for exo-explore/exo, a Python project with 47,818 GitHub stars. SynthScan examined 102,465 lines of code across 534 source files, recording 1091 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 14.5 (Moderate 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? 742 finding(s).
Are imports declared and package/API names verified? 123 finding(s).
Are wrappers, guards, and repeated structures necessary? 827 finding(s).
Which changes need focused human review? 1091 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 1091 distinct pattern matches across 21 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 | CONTRIBUTING.md | 135 | def your_api_request_to_text_generation( | CODE |
| LOW | CONTRIBUTING.md | 152 | 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 |
|---|---|---|---|---|
| HIGH | bench/exo_eval.py | 183 | except ValueError: | CODE |
| HIGH | bench/exo_bench.py | 59 | except ImportError: | CODE |
| HIGH | bench/exo_bench.py | 329 | except json.JSONDecodeError: | CODE |
| HIGH | bench/exo_bench.py | 211 | except Exception: | CODE |
| HIGH | tools/src/exo_tools/harness.py | 569 | except Exception: | CODE |
| HIGH | tests/conftest.py | 180 | except Exception: | CODE |
| HIGH | tests/test_dashboard.py | 32 | except Exception: | CODE |
| HIGH | tests/framework.py | 194 | except Exception: | CODE |
| HIGH | src/exo/utils/async_process.py | 278 | except (BrokenPipeError, BrokenResourceError, ClosedResourceError): | CODE |
| HIGH | src/exo/master/main.py | 158 | except* (EventRouterBrokenResourceError, EventRouterClosedResourceError): | CODE |
| HIGH | src/exo/download/coordinator.py | 146 | except* (EventRouterBrokenResourceError, EventRouterClosedResourceError): | CODE |
| HIGH | src/exo/download/coordinator.py | 309 | except anyio.get_cancelled_exc_class(): | CODE |
| HIGH | src/exo/download/tests/test_download_status_not_lost.py | 152 | except TimeoutError: | CODE |
| HIGH | src/exo/worker/main.py | 116 | except* (EventRouterBrokenResourceError, EventRouterClosedResourceError): | CODE |
| HIGH | src/exo/worker/runner/runner.py | 171 | except (EndOfStream, ClosedResourceError): | CODE |
| HIGH | src/exo/worker/disaggregated/server.py | 50 | except Exception: | CODE |
| HIGH | src/exo/worker/engines/image/generate.py | 38 | except (ValueError, AttributeError): | CODE |
| HIGH | src/exo/worker/engines/mlx/vision.py | 123 | except (ImportError, AttributeError): | CODE |
| HIGH | src/exo/worker/engines/mlx/utils_mlx.py | 23 | except ImportError: | CODE |
| 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 |