Skip to content

v0.2: Primary slot served by Lemonade end-to-end (tracer bullet) #140

@thinmintdev

Description

@thinmintdev

What to build

Single-model end-to-end vertical slice. A fresh hal0 box installs Lemonade, brings up lemond under systemd, and serves a chat completion via Lemonade for the primary slot when HAL0_BACKEND=lemonade flag is set. v0.1.x toolbox path remains default + working.

Touches every layer end-to-end:

  • install.sh — download AMD's embeddable tarball, sha256-verify, extract to /opt/lemonade, apt-install unzip + libxrt-npu2, run lemonade backends install llamacpp:rocm at first boot
  • systemd — write /etc/systemd/system/lemond.service running lemond /opt/lemonade --port 9100 with hardening directives (NoNewPrivileges, ProtectSystem=strict, ProtectHome, PrivateTmp, RestrictAddressFamilies)
  • manifest.json schema v2lemonade: { tarball_url, sha256, version }
  • src/hal0/lemonade/client.py — minimal HTTP client wrapping /v1/load, /v1/unload, /v1/health, /v1/chat/completions, /live. /v1/load body shape: {"model_name": "..."} (only required field, per research)
  • src/hal0/providers/lemonade.pyLemonadeProvider for the primary slot only; delegates to LemonadeClient
  • HAL0_BACKEND=lemonade flag — env var or CLI flag plumbing; old LlamaServerProvider is default; new path only when flag set

Demoable: SSH to test box → set flag → /v1/chat/completions returns a non-empty response from a Lemonade-served primary slot.

Acceptance criteria

  • Fresh install with HAL0_BACKEND=lemonade brings up lemond.service healthy via /live
  • LemonadeClient.load("qwen3.5-0.8b") returns success; /v1/health shows the model loaded
  • /v1/chat/completions proxied through hal0 returns a valid streaming response
  • Default path (no flag) still works — v0.1.x toolbox primary slot unchanged
  • manifest.json v2 schema validates
  • Integration test asserts the full path on CI (or marked needs-hw if Strix Halo only)
  • unzip + libxrt-npu2 prereqs handled in install.sh idempotently

Blocked by

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions