Qwen 3.8 27B Review, Prompts and vLLM Settings

When you click on links to various merchants on this site and make a purchase, this can result in this site earning a commission. Affiliate programs and affiliations include, but are not limited to, the eBay Partner Network. As an Amazon Associate I earn from qualifying purchases. #ad #promotions

Local Ai Quad 3090 4090 Rig

This model is punching WAY above what I expected a 27B could muster. Just from a params count standpoint it is such a dense dense! The performance side of 3.8 also pleasantly is highly tuned now for agentic running which is the best way to interact with your Local AI on complex asks. Speaking of complex asks, the arcade prompt failed from what I can tell zero tool calls in a two hour runtime! Now some turds would say “it’s not a zero shot if you are using an agent” which okay fine yes true but there needs to be a new category which is like, zero shot agentic. This model nailed that! There is also what I experienced nonstop with Deepseek V4 Flash and Qwen 3.6 27B which is many-shot agentic. Like you have to hold its hand and get it there and correct a lot of bad to even get something that works. There is a distinction and Qwen 3.8 27B destroyed on this. Straight up I am just blown away at that from a 27B and at 198K context utilized also and it kept consistent in its calling vision for inspection and playwright testing in a local LLM. More than half the time it was back and forth in a “I am fixing and inspecting with vision” loop EXACTLY LIKE I ASKED IT TO! Usually that starts out good, but falls apart 50-60K into the context in my experience with local llms. This is a level of reliability in tool calling throughout the entire context space that I think really opens up serious development possibilities.

DSP retro arcade https://arcade.digitalspaceport.com
Here is the arcadebox prompt now fully recovered!

I want you to create a full arcade suite of games that you natively know how to that are 8-bit style and retro AF and I want this to be published to port 8888 on bind 0.0.0.0 after you are finished. You are also inside the Hermes Agent harness so you can reallllllly gogogo and use up whatever you need for context, it will handle all the details of compaction and such so you can just code, review and sail. You should actually validate each of these games after you are done creating them. lets say 3 games total. Create a lander page that is synthwave for them, style it up awesome and theme it as Digital Spaceport Arcade. You of course have vision tooling so you can actually play your game and review it which you should do. Each game should have all the features that you expect in a retro game. Things like load screens, high scores, catchy thumbnail images on the landing page, audio, and more. Sign this work after you are done with your name, budzo #5 (you are alive) and also we will be publishing this to our Youtube channels viewers for this model review video so know that like tens of thousands of folks will see this. AKA let's rock it! I will be publishing this to my website after you are done so we need ONLY use JS libraries, nothing python. Fully research and plan before you start writing code. Create a design document that you can update with progress. Create a folder for this called dsp-space-arcade and work inside that folder only. Feel free to spin up subagents to accomplish whatever you need and manage the project. There is no time limit. You should also start out by fully researching hermes agenet and all the amazing capabilities it will bring you. https://hermes-agent.nousresearch.com/docs/assets/files/llms-full-7bf795e54c7b927e7ff75692d125e266.txt at this url before you do anything else.

The Local Ai Rig

At 932 GB/s the GTX 3090 is a great GPU for local AI LLM running especially when it comes to dense models like Qwen 3.8 27B. Those models are harder for lower bandwidth AIO devices like a DGX Spark with it’s much lower 273 GB/s bandwidth which are better suited to mid to low active count MoE models. This is amplified by prompt processing demands in Agentic work.

While I have an extra 4090 in my rig, it was not used at all in running the model. Only the 4 3090s are used with vLLM (run block below) and while I have a NVlink on 2 of the 3090s it is doing much in running an LLM like this. The motherboard I have is an Asrock Creator 2.0 I already had but I would actually opt for a MC62-G40 if I was looking at this today. The CPU is actually a cheap Threadripper 3945wx which provides 128 lanes of PCIe Gen4 to the 5 dedicated slots I have that are electrically x16 Gen4 on this motherboard. This rig has dual PSUs and I am using 2 of the same line of PSUs, a Corsair HX1500i and HX1000i.

4x 3090 24GB https://geni.us/GPU3090

1x 4090 24GB https://geni.us/4090_24GB_GPU

WRX80 Asrock Creator 2.0 https://geni.us/ASRock_wrx80_creator

Gigabyte MC62-G40 https://geni.us/MC62-G40_MOBO

AMD Threadripper PRO 3945WX https://geni.us/AMD-TR-3945WX

256GB 2400 DDR4 DIMMs https://geni.us/256GB_DDR4_RAM

5x Gen4 x16 PCIe Risers https://geni.us/PCIe4_Riser_Cable

Rack Frame Chassis https://geni.us/GPU_Rack_Frame

PSU #1 https://geni.us/Corsair_HX1500i

PSU #2 https://geni.us/1000W_PSU

Dual PSU Adapter https://geni.us/dual-psu-adapter

H170i CAPELLIX 420mm https://geni.us/iCUE_H170i_Capellix

You can checkout the rig running in my Youtube Review Video as I go over this first run with it.

VLLM runblock

#!/usr/bin/env bash

set -euo pipefail
source .venv/bin/activate

export CUDA_DEVICE_ORDER=PCI_BUS_ID
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
export NCCL_CUMEM_ENABLE=0
export OMP_NUM_THREADS=4
export MKL_NUM_THREADS=4
export CUDA_VISIBLE_DEVICES=1,2,0,4

vllm serve Qwen/Qwen3.8-27B \
--served-model-name qwen38-27b \
--host 0.0.0.0 \
--port 9876 \
--gpu-memory-utilization 0.95 \
--enable-chunked-prefill \
--tensor-parallel 4 \
--max-model-len auto \
--mm-processor-cache-type shm \
--reasoning-parser qwen3 \
--enable-auto-tool-choice \
--tool-call-parser qwen3_coder \
--default-chat-template-kwargs '{"enable_thinking": true}' \
--max-num-batched-tokens 8192 \
--enable-prefix-caching \
--mamba-cache-mode align \
--api-key nerdtastic

Artifacts from Arcade Session

You can find the complete folder and all files in the tar file here: arcade.tar

Here was the design document that it used to create this and update along the way as it progressed on the plan.

# DIGITAL SPACEPORT ARCADE — Design Document

**Project:** dsp-space-arcade
**Author:** budzo #5 (you are alive)
**Created:** 2026-08-14
**Status:** IN PROGRESS

---

## 1. Mission

A full arcade suite of three 8-bit retro games, published as a static web
app on `0.0.0.0:8888`, with a synthwave landing page themed
"Digital Spaceport Arcade". Audience: tens of thousands of YouTube viewers
for a Qwen3.8 model review video. Quality bar: it must look, sound, and
feel like a genuine arcade cabinet — load screens, attract mode, high
scores, chiptune audio, and zero runtime errors.

## 2. Research Findings

### 2.1 Environment
- Host: Linux (Hermes Agent harness), user `dsp`.
- Node.js v22.23.2, npm 10.9.8 — server will be pure Node (no Python, no deps).
- Playwright 1.62.1 + Chromium 1208 available at
  `~/.cache/ms-playwright/chromium-1208/chrome-linux64/chrome`
  → use for headless CDP playtesting + screenshots (vision review).
- Port 8888 free at build time.
- Hermes Agent: research briefing by subagent (see §9 Progress).

### 2.2 Game selection (native knowledge, no external assets)
All three are classic, well-known, and each exercises a distinct mechanic:

| # | Game | Genre | Core mechanics |
|---|------|-------|----------------|
| 1 | **VOID RAIDERS** | Space Invaders | Grid of aliens marching + shooting, barriers, boss wave |
| 2 | **NEBULA DRIFT** | Asteroids | Vector-ship rotation/thrust, wrap-around, asteroid splitting, UFO |
| 3 | **STAR BREAKER** | Breakout | Paddle, ball physics, colored brick rows, power-ups, 5 board layouts |

Names are spaceport-flavored; mechanics are the canonical originals.

### 2.3 Retro-fidelity checklist (applies to every game)
- [x] Pixel-art rendering: low-res canvas (e.g. 256x256 / 320x224) scaled
      with `image-rendering: pixelated`, no anti-aliasing.
- [x] Chiptune audio: WebAudio square/triangle/noise channels, generated
      procedurally at runtime (no audio files). Per-game music + SFX.
- [x] Load screen: "LOADING..." progress bar with fake-but-real staged
      boot (audio context, sprites, score bank) + blinking "PRESS START".
- [x] Title/attract screen: logo, high score table, blinking prompt,
      scrolling starfield background.
- [x] High scores: top-5 persistent via localStorage, 3-letter initials
      entry on new score, per-game bank + global leaderboard on landing.
- [x] Game over: score tally, "NEW HIGH SCORE" flash, initials entry,
      restart prompt.
- [x] Sound toggle (M key) + master mute persisted.
- [x] 1-3 player lives, score, level/wave, and pause (P).
- [x] CRT-ish presentation: scanline overlay + subtle vignette on cabinet.

## 3. Architecture

```
dsp-space-arcade/
  index.html            # landing page (Digital Spaceport Arcade)
  games/
    invaders.html       # VOID RAIDERS
    asteroids.html      # NEBULA DRIFT
    breakout.html       # STAR BREAKER
  css/
    landing.css         # synthwave landing styles
    game.css            # shared cabinet/scanline styles
  js/
    engine/
      retro.js          # RetroEngine: loop, input, states, CRT
      audio.js          # Chiptune: square/tri/noise mixer, sfx + music
      sprites.js        # sprite data (bitmaps) + bitmap blitter
      scores.js         # high-score bank (localStorage), initials
      starfield.js      # shared attract/parallax starfield
    games/
      invaders.js       # game 1
      asteroids.js      # game 2
      breakout.js       # game 3
    landing/
      landing.js        # animated thumbnails, global scoreboard
  server.js             # Node http static server, 0.0.0.0:8888
  DESIGN.md             # this file
  test/
    playtest.mjs        # Playwright headless validation harness
    shots/              # vision-review screenshots
```

### 3.1 Shared engine (`retro.js`)
- Fixed 60fps logic step, canvas render loop via rAF, dt-clamped.
- State machine: `LOAD → TITLE → PLAY → PAUSE → GAMEOVER` (+ per-game extras).
- `RetroInput`: keyboard with per-key state, prevent default on game keys,
  "press" edge detection.
- CRT: scanline div overlay + optional flicker; canvas imageSmoothing off.
- Screen shake + hit-flash helpers.

### 3.2 Chiptune audio (`audio.js`)
- WebAudio: 1 square osc, 1 triangle osc, 1 noise buffer, master gain.
- `playSfx(name)`: short synth recipes (shoot, boom, blip, powerup, extraterrestrial).
- `Music`: sequencer with per-game pattern arrays (16th-note steps),
  tempo, and a 2-bar A/B structure; start/stop on state transitions;
  music ducked (gain -8dB) while SFX play.
- AudioContext unlocked on first user gesture (browser policy) —
  load screen "PRESS ANY KEY" handles this.
- Mute persisted in `dsa.muted`; music per-game banked.

### 3.3 Scores (`scores.js`)
- localStorage key `dsa.scores.<game>` → `[{ini, score}]` top-5.
- Landing page reads all three banks for the global leaderboard.
- Initials entry: 3-letter input with arrow keys + enter, 15s timer.

## 4. Game Specs

### 4.1 VOID RAIDERS (invaders.js)
- Field 256x224. Player cannon bottom, ← → move, SPACE fire (1-bullet limit,
  hold = refire after bullet dies). 3 lives.
- 5 rows x 11 cols of aliens (3 sprite types), step march (classic: 11 steps
  left, drop, 11 steps right) with accelerating fire rate as rows deplete.
  Aliens shoot random bullets; alien death plays a stepped-down arpeggio.
- 4 destructible bunkers (per-cell erosion).
- Wave escalation: speed up, new rows added, UFO bonus craft crosses top
  (100/200/300/400 pts, random, with siren).
- Score: invader top 30 / mid 20 / bottom 10, UFO random, bonus at wave clear.
- 5-frame sprite animation, classic color palette (green/cyan/magenta).

### 4.2 NEBULA DRIFT (asteroids.js)
- Field 320x224, full wrap on all edges. Vector-style white line art on black.
- Ship: ←/→ rotate, SPACE thrust (with flame flicker + engine noise),
  X or ENTER fire (max 2 on screen). Hyperspace? No — keep classic.
- Asteroids: 3→2→1 size splits, count = 3 + wave. Wave 1 = 4, +1 per wave.
  Rotation + drift, slight per-asteroid mass feel.
- UFO: every ~45s, small/large; large aims randomly, small aims at ship.
- Laser vs asteroid collision with sound pitch by size; ship explosion
  particles (line debris), 2s respawn shield blink.
- Score: big 20 / med 50 / small 100 / UFO 200 / shot-down UFO bullet 50.

### 4.3 STAR BREAKER (breakout.js)
- Field 256x224. Paddle ←/→ (or hold to auto-center? no — classic manual),
  ball speed + on each paddle hit based on hit offset.
- 8 rows x 12 bricks, 4 color pairs, 2-hit on top rows. 5 board layouts
  cycling (full grid, pyramid, checker, pillars, diamond).
- Power-ups (falling capsules, 1/8 chance on brick death): WIDE paddle,
  MULTI 3-ball, SLOW ball, CATCH sticky, EXTRA life (rare).
- Ball physics: angle = paddle offset, min 12° off vertical, speed caps.
- Score: row-based 7/14/21/28 classic-ish, wave clear bonus 500.
- 3 lives; ball lost → brief drop animation then life lost.

## 5. Landing Page (index.html)
- Header: "DIGITAL SPACEPORT ARCADE" in neon chrome/gradient text,
  animated perspective grid floor (CSS), floating stars canvas,
  sun-with-stripes synthwave logo, scanlines.
- Three game cards: animated thumbnail (mini-canvas attract preview running
  the actual game in slow-mo demo mode behind glass), title, tagline,
  "INSERT COIN" button, per-game high score preview.
- Global leaderboard (merged top-5 across games), sound toggle.
- Footer: "© 2026 Digital Spaceport Arcade — signed budzo #5 (you are alive)".
- Pure CSS/JS, no framework.

## 6. Server (server.js)
- Node `http` + `fs`, zero dependencies.
- Static file serving with correct MIME types, path-traversal guard,
  directory → index.html, 404 page.
- Listens on 0.0.0.0:8888. Logs requests.

## 7. Validation Plan
1. Syntax-check every JS file: `node --check`.
2. Playwright headless (test/playtest.mjs):
   - Load each game URL, capture console errors + pageerrors (must be 0).
   - Screenshot each state: load screen, title, mid-play (after scripted
     keypresses: start + fire + move), pause, game-over (scripted).
   - Assert game canvas pixels change between frames (game is live).
   - Simulate score events via game API hooks where exposed.
   - Landing page: screenshots + assert 3 cards + leaderboard render.
3. Vision review: I load each screenshot via vision_analyze and check:
   pixel-art integrity, no clipping, HUD readable, theme cohesion,
   any visual bugs. Iterate until clean.
4. Audio: verify WebAudio graph builds in headless (audio enabled flag),
   no exceptions.
5. `curl` smoke tests on 0.0.0.0:8888 (local + via 127.0.0.1).

## 8. Risks / Pitfalls
- AudioContext requires user gesture → all "PRESS ANY KEY" gates.
- localStorage in headless Chromium works (file:// or http origin fine).
- Fixed timestep needed so demo screenshots look right at any rAF rate.
- Keep all game code vanilla ES2022, no build step, no CDN — must run
  from plain static server offline.

## 9. Progress Log
- [2026-08-14 15:52] Project folder created. Design doc v1 written.
- [2026-08-14 15:53] Env verified: node v22, playwright 1.62.1, chromium
  headless present, port 8888 free.
- [2026-08-14 15:55] Hermes docs research subagent dispatched.
- [2026-08-14 16:05] Engine complete: audio (chiptune 3-channel), scores,
  starfield, sprites, retro core (5x7 font, state machine, CRT, shake/flash).
- [2026-08-14 16:20] All 3 games + boot + landing + server written.
  `node --check` clean on all files.
- [2026-08-14 16:25] Server live on 0.0.0.0:8888. All routes 200,
  path traversal blocked, 404 page styled.
- [2026-08-14 16:35] Playwright harness v1: caught state-advance timing,
  landing addEventListener bug, breakout st.wave undefined (attract),
  and the critical input-consume bug (wasPressed edges eaten before
  game update — all game actions broken).
- [2026-08-14 16:50] BUGS FIXED:
  1. Engine consumed key-press edges before games read them (moved to end of step).
  2. Breakout attract mode crashed (st.wave undefined -> LAYOUTS[NaN]).
  3. Asteroids laser rendered as 921px line (len = 0.016 * |v| instead of
     unit vector) — full-screen vertical line artifact.
  4. Landing page addEventListener misuse (1-arg check).
  5. Engine started in BOOT without advancing load progress -> started in LOAD.
  6. Space double-binding (menu + game) during PLAY -> scoped to menu states.
- [2026-08-14 17:10] ALL CHECKS PASSED: 4/4 (3 games + landing), zero console
  errors, all 5 states reached per game, canvas liveness verified,
  high-score loop verified end-to-end (play -> 1540 -> GAME OVER -> BUD
  initials -> localStorage -> landing Hall of Fame 1ST row + per-card BEST).
- [2026-08-14 17:15] Vision review round 1: title screens, play frames,
  game over, hero, cards. Findings: missing ship was respawn-window
  (verified alive), start prompt was blink-off (pixel-diff proved blink),
  lives glyph too vague (new shipTri sprite), title text crowded over demo
  (added backing panel), hero top padding (34->56px), card PLAY-button
  alignment (flex:1 + margin-top:auto on .best), asteroids attract density
  (4->7 rocks).
- [2026-08-14 17:25] Vision review round 2: PLAY buttons pixel-aligned
  (886/886/886), hero unclipped (h1 top=185px), Hall of Fame row verified,
  board filled correctly. LASER FIX VERIFIED (tallest lit column 18px,
  was 224).
- [2026-08-14 17:30] FINAL: full suite green, syntax green, server healthy
  on 0.0.0.0:8888. SHIPPED.

## 10. Final Artifacts
```
index.html              landing (Digital Spaceport Arcade)
games/{invaders,asteroids,breakout}.html
css/{landing,game}.css  synthwave + cabinet/CRT
js/engine/              audio.js scores.js starfield.js sprites.js retro.js
js/games/               invaders.js asteroids.js breakout.js
js/boot.js              game shell bootstrap
js/landing/landing.js   live previews + hall of fame + sound
server.js               zero-dep static server (0.0.0.0:8888)
test/playtest.mjs       Playwright validation harness
test/shots/             20+ validation screenshots (vision-reviewed)
```

signed, **budzo #5 (you are alive)**