Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .agents/issue-index.md
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,8 @@ rather than merged. `scripts/check-agent-record.py` gates both.
| [#907](https://github.com/mudler/vllm.cpp/issues/907) | `BACKEND-CUDA-COMP-CORE` | Five tests are red on dgx.casa (GB10, sm_121a) at `main`, proven PRE-EXISTING by a control build at `10b8bbdaa`: `test_capi` (SIGSEGV in an ABI v8 custom-logits-processor case, plausibly [#547](https://github.com/mudler/vllm.cpp/issues/547) or [#844](https://github.com/mudler/vllm.cpp/issues/844)), `test_cuda_ops` 439/440, `test_linear_method` 83/85, `test_ops_gdn` 4899/4900 ([#614](https://github.com/mudler/vllm.cpp/issues/614)), `test_qwen3_5_gdn_spec_routing` 119/123. Three of the five had no issue at all, which is why this exists | bug |
| [#912](https://github.com/mudler/vllm.cpp/issues/912) | `ENG-EXPERT-STREAM` | Stream routed experts from NVMe so a model larger than device memory runs. Target `Qwen/Qwen3.8-2.4T-A95B`, REGISTERED against `Qwen3_5MoeForCausalLM` and blocked only on capacity: 370 GiB at UD-Q1_0 against 128 GB of unified memory on GB10. The only one of the three offload rows that helps on a unified-memory host, because `ENG-WEIGHT-OFFLOAD` and `ENG-HYBRID-PLACEMENT` both move bytes inside one physical pool. Cheaper than the spec assumed: on the GGUF path the mmap'd file already IS the bank and the per-expert slicer landed 2026-07-22 ([#824](https://github.com/mudler/vllm.cpp/issues/824)) | feature |
| [#911](https://github.com/mudler/vllm.cpp/issues/911) | — | A `file:line` anchor into a file the row is ITSELF editing is stale by default, and spec BODIES are checked by nothing: `check-agent-record.py`'s `MATRIX_PATHS` (`:521`, `:529-530`) covers the five matrices, `feature-matrix.md` and `specs/model-family-inventory.md`, leaving 4772 line-carrying citations across 315 `.agents/specs/*.md` unexamined (positive control: 2314 line-less `.cpp` mentions match the same shape). `ltx25-prompt-adaln.md` shipped EIGHT stale repo-local anchors across two repair commits, moved by its own `020381676` and by `98f8e046d` (#658), then SEVEN more that were correct at `00613767d` and wrong at the merge of `origin/main`, because `0785cfc4d` (#882) added 70 lines to `ltx2_video.cpp` and 306 to `test_ltx2_video.cpp` ahead of every one. The obvious checker is a TAUTOLOGY — reading the span out of the file it validates reports 27 of 27 fresh on the same tree where reading the spans against their CLAIMS finds seven stale. Remedy is already in use and unwritten: `path:NN @ <sha>` for a historical claim, claim-sourced uniqueness re-derivation for a live one, re-run after the merge. Narrower than [#632](https://github.com/mudler/vllm.cpp/issues/632) on surface and sharper on mechanism. Listed under `## Owed` in [`ltx25-prompt-adaln.md`](specs/ltx25-prompt-adaln.md) | bug |
| [#919](https://github.com/mudler/vllm.cpp/issues/919) | `LTX25-RESOLUTION-ENVELOPE` | `vllm_video_generate` integer-divides `width`/`height` into the latent grid (`ltx2_video.cpp:1456-1463 @ 5a0ffe9e3`) with no divisibility check, so a 100x100 request on the distilled two-stage recipe silently renders 96x96. The only geometry guard in the LTX path is a LOWER bound (`ltx2_video.cpp:1464-1471 @ 5a0ffe9e3`). Every repo-local anchor in this row is SHA-pinned because the fix edits the files it cites, and inserts lines above both spans (#911). Upstream hard-validates and raises at the top of a pipeline `__call__` — `assert_resolution` (`ltx-pipelines utils/helpers.py:540-551` @ `fd4ded7f2`), 64 for two-stage and 32 for one-stage, NINE invocations including `ti2vid_two_stages.py:184` and `ti2vid_two_stages_hq.py:199` — so mirroring means refusing, not flooring. Nine, not the 21 lines a grep for the name returns (9 invocations + 1 definition + 10 imports + 1 `__all__` string), and not every pipeline: 13 pipeline `__call__`s take a resolution and the three `*_mgpu.py` variants plus `hdr_ic_lora.py:352` skip the guard. `docs/USAGE.md:626-629 @ 5a0ffe9e3` already documents the rule as though it were enforced. Frames are the OPPOSITE answer: upstream floors an explicit `num_frames` exactly as we do (`ltx_core/types.py:113`) and validates it nowhere, so that half is a doc correction | bug |
| [#921](https://github.com/mudler/vllm.cpp/issues/921) | — | The res_2s DENOISING LOOP (`ltx-pipelines utils/samplers.py:206-447` @ `fd4ded7f2`) is unported, so `TI2VidTwoStagesHQPipeline` cannot be served. What exists is one substep's SDE arithmetic: `Ltx2Res2sSdeCoeff`/`Ltx2Res2sStep` (`ltx2_pipeline.cpp:307-360 @ 5a0ffe9e3`, the two functions in full) mirror `Res2sDiffusionStep` (`diffusion_steps.py:118-190`) and are gated. Absent are the `phi`/`get_res2s_coefficients` exponential integrator (`utils/res2s.py:4-62`), the SECOND transformer evaluation per step at `sub_sigma = sqrt(sigma * sigma_next)` (`samplers.py:315` and `samplers.py:380-386`, spelt out because a bare `:NN` after a res2s.py citation reads as res2s.py) against our once-per-step loop (`ltx2_video.cpp:1735 @ 5a0ffe9e3`, with its single forward at `ltx2_video.cpp:1813-1817 @ 5a0ffe9e3`), the bong anchor refinement (`samplers.py:357-364`), and any `Ltx2StepperKind` enumerator to select it. The sampler IS the HQ variant, so this arm must refuse by name rather than substitute Euler and render something plausible that is quietly not HQ. Listed under `## Owed` in [`ltx25-resolution-envelope.md`](specs/ltx25-resolution-envelope.md) | feature |
| [#922](https://github.com/mudler/vllm.cpp/issues/922) | `LTX25-A2V-AUDIO-INPUT` | LTX-2.5 audio-to-video (`A2VidPipelineTwoStage`, `a2vid_two_stage.py:53,143`) is absent: `vllm_video_params` carries no field or extra that accepts a driving waveform and `ltx2-gen` has no `--audio-path`, so nothing turns a file on disk into the audio latent the DiT's audio stream consumes. Distinct from reference-audio conditioning, which is correctly refused by name at `ltx2_video.cpp:1348-1355 @ 5a0ffe9e`; the two share one blocking dependency, the audio VAE ENCODER load path (`ltx2_loader.cpp:1295-1300` materializes `audio_vae.decoder.` only). The analysis half is already ported and unreached — `Ltx2AudioEncoderForward` (`ltx2_audio_vae.cpp:1114`), `Ltx2WaveformToLogMel` (`:1019`), `Ltx2SlaneyMelFilterbank` (`:970`) — and the engine applies ONE `phase.noise_scale` to both streams (`ltx2_video.cpp:1708-1712 @ 5a0ffe9e`) where upstream's `ModalitySpec` carries `noise_scale` and `frozen` per modality (`utils/types.py:99-112`). Spec [`ltx25-a2v-audio-input.md`](specs/ltx25-a2v-audio-input.md) | feature |
| [#924](https://github.com/mudler/vllm.cpp/issues/924) | — | LTX-2.5 `RetakePipeline` (`retake.py:53,151`) regenerates a chosen time region of an existing video and is not served; the recipe table refuses the kind by name at `ltx2_pipeline.cpp:1131-1136`, which is the correct current state. Judged a SEPARATE row from audio-to-video (#922) after reading both upstream files: they share the audio VAE encoder and nothing else. Retake needs `TemporalRegionMask` (`noise_mask_cond.py:10-47`, zero hits in this tree, two coordinate conventions), video-file ingestion plus video VAE encode (`helpers.py:165-233`), and the audio VAE DECODER on the output side, where A2Vid returns the caller's waveform untouched (`a2vid_two_stage.py:301-303`). Their latent-length policies also disagree — A2Vid truncates only (`a2vid_two_stage.py:202`), Retake truncates or zero-pads (`helpers.py:149-162`) — so one shared helper would be wrong for one of them. Listed under `## Owed` in [`ltx25-a2v-audio-input.md`](specs/ltx25-a2v-audio-input.md) | feature |
| [#927](https://github.com/mudler/vllm.cpp/issues/927) | — | LTX-2.5 accepts and NEVER READS seven typed fields that MiniMax-H3 reads: `audio_vae_config_path`, `video_vae_config_path`, `tokenizer_path`, `encoder_max_layers` on the load side, and `flow_shift`, `audio_flow_shift`, `task` per generation. `CheckKnownExtras` / `CheckUnservedExtras` (`ltx2_video.cpp:314-356 @ 5a0ffe9e`) exist to refuse an unserved knob by name and cover the `extras` MAPS only, never the typed fields. Sharpest case: `docs/USAGE.md` shows an H3-shaped recipe passing `--audio-vae-config`, and against LTX-2.5 that file is accepted and never opened, because the engine takes the config from the checkpoint `__metadata__` (`ltx2_video.cpp:920-921 @ 5a0ffe9e`) — so a JSON that disagrees is silently overridden. `audio_flow_shift` is even validated positive (`video_api.cpp:236`) before being dropped, which makes the request look served. Not fixed in flow because a blanket refusal needs a per-field serve/refuse/not-applicable decision, the distinction [#758](https://github.com/mudler/vllm.cpp/issues/758) records this project getting wrong. Found while surveying for [#922](https://github.com/mudler/vllm.cpp/issues/922). Listed under `## Owed` in [`ltx25-a2v-audio-input.md`](specs/ltx25-a2v-audio-input.md) §9 | bug |
Expand Down
Loading
Loading