Skip to content

Windows install #128

Closed
Closed

Description

@Lexlangel

Windows 8B fresh-install validation — issues found and performance results

I tested the Edge0 8B model end-to-end on a fresh Windows setup and wanted to report both the installation issues encountered and the resulting runtime performance.

Hardware / software

  • CPU: Intel Core i5-1155G7, 4 cores / 8 threads
  • GPU: Intel Iris Xe (Tiger Lake GT2)
  • RAM: 16 GB
  • GPU: integrated only, no NVIDIA GPU
  • OS: Windows 10/11 x64
  • Visual Studio 2022 Community
  • CMake 4.4.4
  • Vulkan SDK 1.4.363.0
  • Rust stable 1.99.0
  • Node.js 24.21.0
  • npm 11.19.0

What worked

After resolving the installation issues, the complete 8B path worked:

  • Edge0 8B MLX model converted to GGUF successfully
  • LoRA converted successfully
  • 147/147 LoRA pairs passed the base-model cross-check
  • GGUF/LoRA artifacts passed their validation
  • Local llama-server.exe launched successfully
  • Model + LoRA loaded successfully
  • Interactive inference worked
  • Casual conversation was coherent
  • The conversion wrapper was ultimately idempotent: rerunning it detected matching artifacts and skipped reconversion

Issues encountered

1. Doctor could not detect the engine version correctly

The engine itself reported its version correctly when launched interactively:

0.4.1-dev (build 11108, commit f780eff51)

However, the Doctor version probe failed to capture the output when launching the process with the Windows CREATE_NO_WINDOW configuration.

This resulted in the application reporting a version-probe failure even though the executable was present and runnable.

This looks like a Windows subprocess/output-capture compatibility issue in the Doctor check.

2. Missing Python dependency

The LoRA conversion required PyYAML, but the dependency was not available in the Python environment used by the converter.

The failure surfaced as:

ModuleNotFoundError: No module named 'yaml'

Installing PyYAML into the exact Python environment resolved it.

It would be useful if the conversion tooling either declared/provisioned this dependency or produced a clear prerequisite error before starting conversion.

3. Incorrect base-model path in the LoRA verifier

The LoRA converter generated the base GGUF under:

%USERPROFILE%\.edge0\models\edge0-8b-gguf\edge0-8b.gguf

but the verifier looked under the repository's:

Edge0\windows\models\edge0-8b-gguf\edge0-8b.gguf

This caused a FileNotFoundError even though the generated base GGUF existed in the expected .edge0 model directory.

I corrected the verifier to derive the base path from the adapter/model directory.

4. Windows console encoding issue

The conversion itself completed, but the wrapper's final status message contained a Unicode arrow (→), which caused a UnicodeEncodeError under the Windows console code page.

Changing the output to ASCII (->) resolved this.

This would be worth making Windows-safe in the repository rather than allowing successful conversion to end with a traceback.

5. Fresh-install/toolchain friction

A few additional issues were machine/environment specific rather than Edge0 bugs:

  • Existing machine-level ComSpec pointed at an invalid Gradle path, breaking Tauri commands.
  • Windows Smart App Control blocked some Rust tooling.
  • Visual Studio workload modification encountered installer/process-state errors.
  • npm dependencies had to be installed before the Tauri build.

These are probably useful context for reproducing the installation, but I would distinguish them from the repository-level issues above.

Runtime performance

After the installation/conversion issues were resolved, the local 8B model was usable interactively.

Observed measurements during casual conversation included:

Interaction Decode Prefill
Initial short interaction ~6.6 tok/s ~1.8 tok/s
Subsequent interaction ~9.6 tok/s ~20.9 tok/s
Subsequent interaction ~9.9 tok/s ~10.6 tok/s

The initial request had a relatively expensive prefill (~16.97 s), while subsequent requests benefited substantially from the already-running model/context state.

Example later interaction:

  • ~9.9 tok/s decode
  • ~10.6 tok/s prefill
  • ~4.14 s prefill time
  • 31 input tokens / 44 output tokens

The model remained responsive enough for casual conversation on this CPU + integrated-GPU system.

Overall result

The important point is that the underlying 8B model/runtime path did work on this relatively modest integrated-GPU machine.

Most of the friction was around Windows installation, dependency handling, path assumptions, subprocess detection, and console portability rather than model conversion or inference itself.

I thought this might be useful as a real-world fresh-install validation report, especially because the machine is not a high-end GPU system.

Activity

  1. Lexlangel commented on Oct 3, 2026

    @Lexlangel
    Author

    On a different subject, any way to run it on linux considering my pc specs? Working out a patch but if any easier solution it would be welcome.
    I managed to load the model on linux with a little patch but the replies are totally broken, will work on it some more if no alternative.

  2. alexyzhou commented on Oct 10, 2026

    @alexyzhou
    Collaborator

    Thanks for your reply, I will investigate and fix this. And for linux version, we are already developing it and will release it soon. For linux use case, can you please clarify whether you want a OpenAI-compatible API service only or with GUI chat app as well? an API serving service should be quick but GUI apps needs to deal with different distros and WMs (e.g. GNOME or KDE), which will be hard to maintain.

  3. added a commit that references this issue on Oct 10, 2026
  4. added a commit that references this issue on Oct 11, 2026
  5. alexyzhou commented on Oct 11, 2026

    @alexyzhou
    Collaborator

    Thanks @Lexlangel — this was an exceptionally actionable report. All four
    repo-level issues are confirmed and fixed in #135

    1. Doctor version probe — two defects: probe failures were cached for the
      whole app session (so a status poll before the engine landed poisoned
      "exists but version probe failed" until restart), and the probe discarded
      stderr while the engine emits its version banner to the log stream. Now
      failures are never re-probed only... [merge: only successes are cached;
      doctor always re-measures; stdout+stderr both captured.]
    2. PyYAML — the Windows converter chain itself does not use PyYAML (no
      shipped file imports yaml anywhere in history). Your error came from the
      mlx_lm stack that the root README recommends without a platform gate —
      that's a real doc/dependency-guidance bug and we've opened a separate
      follow-up. The converter now fails with an explicit
      E-DEP: ... pip install numpy preflight instead of a bare traceback.
    3. Base-model path — the cross-check gate hardcoded the repo-relative
      path; your fix direction (derive it from the conversion output) is exactly
      what we merged: the gate now receives --base from the converter's own
      --out artifact. This is what was breaking the GUI Download→Convert path
      on clean machines.
    4. Unicode → — all non-ASCII glyphs in converter-chain status lines are
      now ASCII, and the entry points force UTF-8 stdout as a guard, so a
      successful conversion can no longer end in a traceback under an ANSI code
      page.

    Your perf numbers (6.6–9.9 tok/s on i5-1155G7 + Iris Xe) will be logged as our
    first fresh-install iGPU datapoint — thank you.

  6. Lexlangel commented on Oct 11, 2026

    @Lexlangel
    Author

    Thanks for the update! For our Linux use case, an OpenAI-compatible API service would do it. I have been busy with other things sorry for the late reply.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions