SIGN IN SIGN UP

fix(mllm-cache): refuse a media hit that does not cover the image span

The hybrid hit path sets req.pixel_values = None unconditionally. That is what
makes a warm media turn cheap -- the vision tower is skipped because the
image KV is already in the restored prefix -- but it is only sound when the
hit COVERS the media span.

When the hit stops before the image, the remaining tail still carries media
placeholders and is now forwarded with no pixel values. Those positions get
embedded as ordinary text tokens, so the model answers fluently about an
image it never saw. Nothing raises and nothing logs; the answer simply looks
fine and is wrong. This is the same class as the text-only follow-up path,
which has no guard either.

The hit is declined in that case, with the blocks released and the credit
zeroed so the refs do not leak and the next turn does not hit the same
unusable entry forever. A full prefill is slow; a confidently wrong answer
about an image is worse.
J
Jinho Jang committed
3108a7d4548a314f9597fa420d26ce309ac7b6d3
Parent: 1ab278d