Skip to content

LTX-2.5 audio VAE: norm_eps is read by NO arm on either half, and the keyframe refusal names a reason phase L11 removed #560

Description

@localai-bot

Two LOW findings from the phase-L11 review, plus a pre-existing hole the same review exposed.

1. norm_eps is a constant NO ARM READS, on both audio VAE halves

Ltx2AudioEncoderConfig::norm_eps (include/vllm/model_executor/models/ltx2_audio_vae_encoder.h:95)
is not in the "every stabilizing epsilon is pinned to its upstream line" list in
tests/vllm/models/test_ltx2_vae.cpp, whose own comment reads "Adding a new constant
without adding it to this list reopens the hole."

Ltx2AudioDecoderConfig::norm_eps (ltx2_audio_vae.h:102) has the identical hole,
pre-existing from phase L4.

Proven by mutation. Changing BOTH from 1e-6 to 1e-4, a 100x change:

[doctest] test cases:   33 |   33 passed | 0 failed | 0 skipped
[doctest] assertions: 2602 | 2602 passed | 0 failed |
[doctest] Status: SUCCESS!

Cause: every audio VAE arm in the suite runs norm_type = kPixel, so ApplyNorm
(src/vllm/model_executor/models/ltx2_audio_vae.cpp:211-219) never enters the
GroupNorm branch that norm_eps feeds. The constant is not merely inert, it is
never READ on any executed path.

norm_type = group is not hypothetical: it is the DEFAULT of both
AudioEncoder.__init__ and AudioDecoder.__init__ upstream, and it is legal at
causality_axis: none, which is exactly what ResnetBlock.__init__ permits
(audio_vae/resnet.py:130-131). A checkpoint declaring it would silently run a
100x-wrong normalization epsilon.

This is the FOURTH recurrence of the invisible-constant class in this campaign.

2. A refusal message whose stated reason is now false

src/vllm/multimodal/ltx2_video.cpp still refuses keyframe / reference
conditioning with "encodes the images with the video VAE's ENCODER, and phase L4
ported the DECODER only."
Phase L11 ported the encoder (Ltx2ConvVideoEncode).

The refusal's EFFECT is still correct (the request-side wiring is genuinely
missing) but its stated REASON is untrue, and a stale reason sends the next reader
to build something that already exists.

Scope

Close both, and sweep every stabilizing constant in the LTX-2.5 files
(ltx2*.h, ltx2*.cpp) for the same class: pinned, numerically reachable, or
invisible.

Row: MODEL-DIFFUSION-LTX25. Spec: .agents/specs/ltx-2-5.md section 7.0(a).
Parent: #435.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions