Skip to content

Release 0.15.0 - #934

Merged
dkackman merged 53 commits into
masterfrom
develop
Oct 18, 2026
Merged

dkackman merged 53 commits into
masterfrom
develop

Conversation

@dkackman

Copy link
Copy Markdown
Owner

Release 0.15.0. Notes: the ### 0.15.0 section of docs/RELEASING.md.

Pre-release review (Fable): ship; C1 and the notes corrections are fixed in 5d52d85, the low items left for 0.16.

After merge: scripts/release.sh 0.15.0 --next 0.16.0-alpha.1.

🤖 Generated with Claude Code

dkackman and others added 30 commits October 15, 2026 19:45
Launch-day audit of the vendor and diffusers sources, and the design for
the distilled core: probes P1/P2 on lem (bf16 fits 24 GB at 1024^2 with
every component placed; the pup runs through text_generation but needs
enable_thinking off), and the from_hub system-prompt reference.

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

A Qwen3.5 upsampler must run with enable_thinking off, an edit sends every
reference, and a pinned prompt wants pinned weights.

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

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

Workflows are untrusted and the settings are splatted into the pipeline and
apply_chat_template calls, so images/tools/etc. would reach transformers
unvalidated. Also pins that image list elements get the URL check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…only, size cap

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

A full commit is answered from the local cache without an auth check, so
token=False alone left cached gated files readable. Ask the Hub first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The skill picks among the five FLUX 3 Klein templates by request shape,
states the 16-step no-guidance schedule, the 16-pixel grid, the 4096
ceiling as stated rather than checked, and the 10-reference training
limit the pipeline does not enforce. Prompts go through the upsampler
builtins, or BFL's prompting guide for hand-written captions; the box
format is in references/layout-boxes.md. Named in the plugin README and
CLAUDE.md; the tests read the step default off the distilled denoise
block.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The edit templates always re-upsample and take no caption, so a corrected
caption is reused through a one-step workflow built from the edit
template's Klein step, not by passing prompt= or falling back to
text-to-image. dw's reference sizing for the upsampler is not BFL's, so
BFL's budget is no longer quoted. One memory figure for Apple Silicon,
the guidance rule as BFL's reference code states it, and CLAUDE.md
rewrapped.

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

generate_kwargs reached model.generate() unfiltered, so an untrusted workflow
could set custom_generate (transformers downloads and runs the repo's
custom_generate/generate.py) with trust_remote_code, or pass
tokenizer_encode_kwargs around the chat_template_kwargs checks.

- dw/trust.py: require_trusted_generate_arguments refuses custom_generate and
  trust_remote_code unless workflows are trusted
- generate_kwargs: the call's structural keys are refused on both paths, and
  values must be scalars or lists of scalars; all checked before any load
- _RESERVED_CHAT_TEMPLATE_KEYS gains the calls' remaining named parameters
- system_prompt.from_hub refuses a file the Hub reports no size for

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

- text-to-image, upsample-then-generate and the README declare only the
  multiple-of-16 rule; BFL's 64 to 4096 range is stated as not checked
- flux3_klein_upsample_edit says at least one image is required, and what an
  empty list produces
- tests: flux3 step-cache rows in alphabetical order; the upsample step's
  result is asserted to be an intermediate

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

- TASKS.md: chat_template_kwargs and generate_kwargs filtering, the
  custom_generate/trust_remote_code trust rule, and that an image list is one
  prompt with one answer (also for judge and image_to_text)
- SECURITY.md and ARCHITECTURE.md: the generate_kwargs gate and the anonymous,
  pinned, fail-closed from_hub fetch
- Klein design spec: from_hub asks the Hub before every use and fails closed
  offline; the 10-reference cap is stated, not enforced; follow-ups for the
  other tasks' generate_kwargs and revision validation parity

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… 3 Klein (#930)

Approved by Don 2026-10-15: measured 11_256 with the five Klein templates,
about 85 tokens held for the Task 9 cost blocks.

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

Brings test_dw_patch_targets back under the ratchet for #930.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
FLUX 3 Image Klein onboarding (distilled core)
…low-ups

The text_generation fixture refactor in #930 removed 44 patch sites.
The plan lists what develop still owes: the remaining generate()/detector
kwargs splats, Klein Tasks 9 and 11 on lem, the downloads_required and
update_diffusers gaps, #928, and the 0.14.0 release body.

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
SparseH3AttnProcessor ports the prototype's sol_call onto the H3 block
processors only, swapped per instance; the refiner keeps the stock one.
The per-call decision runs in forward pre/post hooks, never a forward
wrapper, because the H3 denoiser reads the layout kwargs it passes off
inspect.signature(transformer.forward). sparse_call resets the decision,
reports it, and warns once when a call ran dense.

The layout helper moves to tests/sparse_layouts.py with a dense stand-in
for sol_attn, so the permutation test checks the tile gather is exact.

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

A tile map is reused only for the same position_ids and token_tags,
compared exactly: a transposed grid has the same row count, tag sum and
position sum, so any summary key reuses a stale map there. Any exception
while deciding now runs the call dense with its type and message as the
reason; after the decision, errors still raise.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… level (#931)

A component-level 'sparse' installs dw's H3 processor in configure_components
instead of calling set_attention_backend, and any other backend (or none)
uninstalls it first, so a model the worker kept loaded does not carry sparse
into a later job. A pipeline-level 'sparse' never reaches diffusers'
attention_backend(): it installs on the H3 components that have no install
yet for the one call and takes off only what it put on. Every call runs
inside sparse_call. A non-H3 target warns and runs dense.

sparse_tau, at either level, is a runtime setting: weights_identity drops it
and apply_runtime_settings re-applies a component-level one on a cache hit.
sparse_attention gains a public pipeline_components, the one way both the
install and sparse_call enumerate a pipeline's components.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dkackman and others added 23 commits October 17, 2026 12:01
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…kend (#931)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The nineteen MiniMax-H3 templates default attention_backend to sparse and wire
sparse_tau beside it. The schema's sparse_tau accepts a 'variable:' reference
(sub-workflow validation checks the child before substitution). Docs gain a
sparse section with the measured table; the ramp keeps sage_hub explicit until
stage 3. Step-cache pipeline keys regenerated for the H3 steps; attention_backend
may now be a text cost driver.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… read (#931)

- A kernel error on the call's first invocation runs the whole call dense
  and is reported; one after a success still raises (Ruling 12)
- install_sparse and set_sparse_tau refuse a tau that is not a number >= 0
  (bool included); every call site lets it propagate (Ruling 13)
- pipeline_components falls back to the attributes when a pipeline's
  components property raises, so sparse_call never fails a run
- _kernels_importable is cached, so health polls stop importing comfy-kitchen
- Tests: a raising pipeline call still uninstalls a pipeline-level install;
  the tiny H3 CONFIG moves to tests/sparse_layouts.py

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pre-1.0 kernel API; bump deliberately after a GPU smoke (Ruling 14).

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

- WORKFLOW_GUIDE: the H3 default is sparse (tau 0.5); sparse_tau listed
  beside attention_backend at pipeline and component level
- ACCELERATION: sparse is the one bundled backend and needs no kernels
  install; the fallback warns once per pipeline call (so per segment or
  shot); tau 1.0 against 0.5 stated as the one observation it is; the
  first-invocation kernel fallback and the bad-tau error
- ARCHITECTURE: an H3 sparse attention row

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gain depends on what it replaces

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…L5s); sparse shifts details, so tiers share a backend

Don's verdicts on seeds 42/7/1234: sparse skin equal to sage_hub, B3s -> L5s
staging carried 3 of 3. Sparse is 6-12% faster than sage_hub on the rungs, but
the sage B3 -> P1 pair (first_block cache) is still the fastest cinema final.
TV rows stay on sage_hub pending the L1/L7 sage comparison.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e on the ramp rungs

Don's verdicts, seeds 42/7/1234: L1/L7 sage vs sparse differ at most slightly;
the TV face smear is the turbo LoRA's, under either backend. Sparse is
6-12% faster than sage_hub on L1, L7, B3 and L5. The prototype script is
removed (plan's final task).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… sparse; log when sparse installs

origami-sage (job 04ffbe510ff0) set attention_backend 'sparse' at pipeline
level while its transformer component pinned 'sage_hub'. The pipeline-level
install overrode the pin silently: the run went sparse (41.6 s/step at
960x544x345, against sage_hub's measured 54.7) while its only log line said
sage_hub. Now the pin wins, as it does for every other backend, with a
warning naming the skipped component; and a pipeline-level install logs
'Using attention backend: sparse (tau <t>) on <components>'.

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

Opt-in at pipeline and component level (strictly between 0 and 1); when set
the kernel gets topk_ratio with tail=False and tau is ignored. A runtime
setting like sparse_tau: excluded from the pipeline cache key and re-applied
on a hit. Measured 11% faster than tau 0.5 on video-with-audio-768p with no
visible difference (Don); the default stays tau 0.5 until a face shot is
checked. The Turbo-SLA LoRA is not adopted: top-k gives the same on v1.2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ng (tau or topk)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Don's verdicts on the quality ramp's 4-reference shot, seeds 42/7/1234: on L7
tau 0.5 showed blue ghosting (s7) and slight smearing; top-k 0.15 equal or
better, 6.1/6.2/5.8 min against 6.5. On L5 (base model, 30 steps) skin holds
at 23.9/25.5/23.9 min against 26.8/26.6/26.4. Every H3 template gains a
sparse_topk variable (0.15) wired beside sparse_tau; sparse_topk=null routes
by tau as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both reach model.generate() for a generative text-to-audio model, where
custom_generate / trust_remote_code download and run Hub code. Untrusted
workflows now get the same refusal text_generation does (#930), before the
model loads; each block must be an object. Open in every release through
0.14.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- pipeline.py was 1,139 lines (ceiling 1,100): the pipeline-level sparse
  install and the cache-hit tau/topk re-apply move into dw/sparse_attention.py
  (install_sparse_for_call, apply_sparse_settings); pipeline.py is 1,060.
- sparse_attention <-> acceleration_warnings was an import cycle (a lazy
  import still counts): available_attention_backends moves to
  acceleration_warnings, so the edge runs one way.
- generate_speech reached 152 lines with the trust gate: its messages check
  is now _check_messages.

CI's backend job has failed on this ratchet since the #931 merge (2d1ea00);
tests passed throughout. Left: modules 219 -> 220 for dw/sparse_attention.py.

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Approved by Don for the 0.15.0 release.

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

Compact entries have carried `note` (and `note_truncated` when clipped)
since a648338, and detail asset entries carry `writable` (plus
`absolute_url`/`used_by` when set), but the tool descriptions, the compact
reply's hint and docs/MCP.md still listed the old key sets as "only".
The tool-surface budget holds at 15_052 by trimming list_assets' wording.

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

Pipeline-level sparse warned it skipped any pinned component and counted
the pin as found, so a pinned text encoder drew a false warning and a
non-H3 pipeline lost its 'runs dense' warning. Only an H3 transformer's
pin is a skip now.

Also from the 0.15.0 review: the release notes say validate warns only on
mps/cpu and drop a test-only fix; the UI fallback backend list offers
sparse; the component path reads tau/topk once; the H3 defaults test
selects templates by the H3 transformer and closes its files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dkackman
dkackman merged commit 5a94a69 into master Oct 18, 2026
19 checks passed
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