Skip to content

Fix/deploy find server by port - #475

Merged
dkackman merged 31 commits into
masterfrom
fix/deploy-find-server-by-port
Sep 26, 2026
Merged

dkackman merged 31 commits into
masterfrom
fix/deploy-find-server-by-port

Conversation

@dkackman

Copy link
Copy Markdown
Owner

No description provided.

dkackman and others added 30 commits September 25, 2026 14:05
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… interpreter

- ci.yml and codeql.yml also run on pushes to develop: the agent loop
  pushes it directly, with no PR, so the 0.4.0 range met CI and CodeQL
  only on the release PR (where 14 path-injection alerts surfaced);
- scripts/release.sh --next <version> merges master back into develop and
  opens <version> there, the step 0.4.0 did by hand and beta.7 skipped;
- e2e's fixture server runs on DW_E2E_PYTHON (preflight passes the
  interpreter its pytest used), else ./venv or ./.venv, else python3 - a
  worktree or a .venv checkout can run preflight.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
git refuses to check develop out while another worktree has it - the agent
loop's checkout always does - so --next as first written would have failed
on its first real use. It now merges master and bumps in a detached
temporary worktree at origin/develop and pushes HEAD:develop; nothing is
checked out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 8-step 768p FL2V turbo LoRA records alpha 8 at rank 128 in its
__metadata__ (its ComfyUI twin: training_alpha 8.0, training_scale 0.0625),
and diffusers honors it. #147 set lora_alpha: 128 on the template, copied
from upstream's invocation of the *4-step* 768p file - which records 128
itself, so the flag was a no-op there - and so ran this file at sixteen
times its trained strength. Compute is unchanged, so the curated cost holds.

lora_alpha is now null, and the README table, the H3 skill's hard rule, the
set_adapter_alpha docstring and the schema's alpha description stop claiming
the 768p files need 128. test_the_alpha_is_left_to_the_file pins every H3
template to a known file with no stated alpha; test_plugin_skills now
asserts the opposite of what it used to.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A template's `loras` list is fixed JSON, so a caller had no way to run a
step without its adapter short of rewriting the workflow. Passing the lora
variables as null looked like the way and was worse than a refusal:
argument_errors and validation_errors answered clean, the job queued, the
pipeline loaded for minutes, and load_loras died on float(None) with a
TypeError naming no lora.

Now a null model_name skips the entry (active_loras, so placement does not
defer for an adapter that never loads), and a null scale or adapter_name
takes its default. adapter_warnings says so at the path the caller wrote -
arguments.lora_model_name when they nulled the variable - and warn_adapters
repeats it on the run as kind `lora_disabled`, since a turbo lora's step
count and shift no longer fit the step once it is gone. The schema takes a
literal null; the guide, the H3 skill and CLAUDE.md name the switch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n MPS

A CUDA-authored template names quantization_device "cuda"; SDNQ moved
weights to it during load and failed on a Mac. Device arguments now go
through resolve_device, and use_quantized_matmul(_conv) is turned off on
MPS, where it falls back to torch._int_mm (~500x slower than bf16).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
diffusers refuses use_stream off CUDA/XPU, and record_stream without
use_stream, so every LTX-2.5/H3 template failed to load on a Mac. Both
are dropped together, with a warning, when the onload device is neither.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every real segment run raised KeyError on the SAM v1 'reshaped_input_sizes'
key; the mocked tests supplied it. Adds a test on the real processor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
device_memory_stats reported zeros on MPS, so pipeline_released events,
the REPL and the UI all showed 0 GB. torch.mps reports allocated, driver
and recommended-max figures; use them. Adds device_capacity_gb().

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…card

A 64 GB Mac was refused against the catalog's 24 GB RTX 3090 entry. The
check now uses the serving backend's own cost entries, else its measured
capacity, else (capacity unreadable) every entry - so the guard is never
switched off. The #265 refusal had no tests; this adds them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Automatic slicing on MPS replaced SDPA with sliced bmm, measured 12.8 vs
5.4 ms per SDXL-sized attention block in bf16. disable_attention_slicing
is kept in the schema and ignored. Also fixes the fp16-on-MPS warning
text, which ran two sentences together and recommended float32.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lter

With PYTORCH_ENABLE_MPS_FALLBACK set, an op the MPS backend lacks runs on
the CPU and torch says so with a UserWarning - which dw ignored along
with every other UserWarning, so the slowdown had no trace.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…awn repos

- upscale-*, image-to-image: default image is diffusers' docs cat.png
  (was example.com, and a third-party 'sage-permission-probe' repo)
- audio-trim-fade, transcribe-audio: default audio is the transformers
  docs ASR sample (was example.com)
- flux-torchao: one spelling of FLUX.1-dev (two spellings = two ~23 GB
  cache entries)
- attention-processor, controlnet-component: stable-diffusion-v1-5 repo
- dw.test's workflow runs in bfloat16, which is safe on MPS too
Adds a catalog test for placeholder hosts, withdrawn repos and repo
spellings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
End to end, SD 1.5 (the quick-start) ran 17.3s without slicing and 14.1s
with it: MPS SDPA is slow at head dims 40/48/160 and fast at 32/64-128,
so slicing helps SD 1.5 and hurts SDXL (2.4x in attention). Restores the
automatic default and documents disable_attention_slicing for SDXL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
segment and segment-and-inpaint pointed at a removed HF docs image (404),
controlnet-component at a host that no longer answers, image-variation at
a deleted tweet image. All now use diffusers' documentation-images.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GroundingDINO scores a lowercase, period-terminated query. The task
passed the raw prompt, so 'cat' scored 0.20 against a photo of a cat -
under the 0.3 threshold - and segment returned an empty mask on every
backend. 'cat.' scores 0.40, and the template now detects at 0.64.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
LTX-2.5's SDNQ transformer load segfaulted (exit 139) on a Mac: diffusers'
per-shard loader threads were all inside copy_ onto MPS at once. With
parallel loading off the same load took 39s and succeeded. diffusers reads
HF_ENABLE_PARALLEL_LOADING at import, so the default is chosen by platform
(macOS has no CUDA); CUDA boxes keep the parallel load, and an explicit
setting still wins.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
LTX-2's transformer and text connectors build RoPE frequencies in float64
when their double_precision flag is set (the default); MPS has no float64,
so LTX-2.5 loaded on a Mac and failed its first step. diffusers already
makes this fallback for Wan, Lumina2, SkyReels-V2, ChronoEdit and
Sana-Video; dw applies it to any module exposing the flag, on MPS only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The skill told an agent to stop on an mps server because none of the
templates fit. With the engine's MPS adaptations, ltx2/text-to-video ran
on a 64 GB M5 Pro (6.5 min cold-cache end to end, 23.5 GB peak).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Whisper refuses more than 30 s of audio ("more than 3000 mel input
features") unless it predicts timestamps, so transcribe_audio failed on
any clip longer than one window - found transcribing a 110 s Music 3
song. Asked for only past 30 s, since CTC models read the flag
differently.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The skill told an agent to stop on an mps server. templates/minimax/music
ran on a 64 GB M5 Pro (11.7 min end to end, 28.6 GB peak, a 110 s song
whose lyrics transcribe back). music-video also runs H3 and is unverified.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
transformers raises for a CTC model unless return_timestamps is "char" or
"word", and for a non-Whisper seq2seq model at all, so a wav2vec2-style
model_name on a clip over 30 s failed where it used to return text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mac (MPS) support: CUDA templates run unchanged on Apple Silicon
On macOS the Homebrew interpreter shows up in ps as .../MacOS/Python, so
pgrep -f 'python -m dw\.serve' finds nothing and a deploy starts a second
server on a port that's taken. Match what listens on DW_PORT instead
(lsof), falling back to the old pgrep where lsof is missing. Same result
on lem, where one server runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dc05ab4 made every check ask what listens on DW_PORT. dw.serve imports
torch for seconds before it binds, so the startup loop saw an empty port
and reported 'exited during startup' on every deploy. Keep the port for
choosing what to stop, wait on the pids actually signalled (uvicorn closes
its socket early in a graceful shutdown), and judge startup by the process
(pgrep -i, so Homebrew's .../MacOS/Python matches too).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dkackman
dkackman merged commit 903c490 into master Sep 26, 2026
5 checks passed
@dkackman
dkackman deleted the fix/deploy-find-server-by-port branch September 26, 2026 20:18
@dkackman
dkackman restored the fix/deploy-find-server-by-port branch September 26, 2026 20:19
@dkackman
dkackman deleted the fix/deploy-find-server-by-port branch September 26, 2026 20:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant