From e2357b582f041a0352a8f34f97a2f1e0c7150bfc Mon Sep 17 00:00:00 2001 From: plotarmordev <299844489+plotarmordev@users.noreply.github.com> Date: Mon, 19 Oct 2026 14:10:40 +0800 Subject: [PATCH] nemotron cuda: a prompt pass with images runs the RADIO tower once, not twice The merge of #897 and #938 put a `Vision.begin` where Bolt's branch set up its image rows, after the kept-prefix restore, and kept the one Super VL's images brought after the prompt-rows setup. The second ends the first pass and encodes every image again, so each image request ran the tower twice before its first chunk. The first call stays. --- zig/src/families/nemotron/cuda_lanes.zig | 2 -- 1 file changed, 2 deletions(-) diff --git a/zig/src/families/nemotron/cuda_lanes.zig b/zig/src/families/nemotron/cuda_lanes.zig index 5ef428eb8e..3888dd2df0 100644 --- a/zig/src/families/nemotron/cuda_lanes.zig +++ b/zig/src/families/nemotron/cuda_lanes.zig @@ -309,8 +309,6 @@ pub const Cuda = struct { e.prompt_rows = .{ .k = k, .rows = rows, .logits = if (self.prompt_logits) |b| b.ptr else e.b.logits, .picks = words[picks_at..][0..rows], .picks_dev = self.prompt_dev + picks_at * 4, .out = words[0..picks_at], .out_dev = self.prompt_dev, .stride = row_words, .ctx = &sink, .call = PromptSink.take }; } defer e.prompt_rows = null; - if (s.images.len > 0) try (e.vision orelse return error.NoVision).begin(e.stream, s.images, from); - defer if (e.vision) |v| v.end(); var tap: TapSink = .{ .self = self, .taps = &gop.value_ptr.taps }; tap.taps.prompt.clearRetainingCapacity(); tap.taps.from = from;