Skip to content

GLM-5.3-Flash quotes a system prompt it was never given on video input, and sometimes answers it instead of the user #134

Description

@pudepiedj

System Info

Model: GLM-5.3-Flash, via the third-party MLX 8-bit build pipenetwork/GLM-5.3-Flash-MLX-8bit (see caveat at the end — I cannot test bf16)
Runtime: mlx-vlm 0.6.17, mlx 0.32.2, transformers 5.16.1
Hardware: Apple M3 Ultra, 512 GB unified memory (no CUDA)
OS / Python: macOS 15.6 (Darwin 25.6.0), Python 3.13.5
Sampling: temperature 0.0

Information

  • The official example scripts
  • My own modified scripts

Reproduction

Send a video and the complete prompt Describe this video. — no system message, temperature 0. The model's own reasoning trace then says:

The user's prompt is just "Describe this video." but the system prompt says "You are given the full video. Reason step by step about WHEN the described event happens, then give the start and end time in seconds. Think and answer in English. End your answer with a clear line like 'From <start> to <end> seconds'."

No such system prompt exists. The only system content in the rendered prompt is <|system|>Reasoning Effort: Max, injected by the model's own chat template. The quoted text is a temporal-grounding benchmark instruction (Charades-STA / ActivityNet style).

The model then reasons explicitly about the conflict between the real prompt and the imagined one — and sometimes obeys the imagined one. On a short film clip, Describe this video. returned a time range instead of a description.

A second family, on the same inputs. Evaluation-harness language, seen on two unrelated real clips:

"The prompt requires compressed scores (if applicable…) and brevity (reduce detail by 50%)"

"reduce the level of detail and verbosity by 50% compared to a standard response. Prioritize brevity and high-level summaries over granular, actionable feedback for all rubrics"

"Rubrics" and "actionable feedback" are grading-harness terms unrelated to the request. In that case the answer was correct but silently shortened, which is the harder failure to notice.

It tracks reasoning_effort. The chat template maps anything outside ['low', 'high'] to max, so max is the default — and it is the setting under which this appears. Same clip, temperature 0:

reasoning_effort invents instructions answer on a 4-digit clip
max (default) yes correct 3,1,4,2, 2814 chars of reasoning
high no wrong — invented a trailing digit
low no correct 3,1,4,2, 489 chars

That pattern suggests the verbosity text was trained alongside effort-level system prompts, and the model recalls the block that accompanied Reasoning Effort:.

Scope: reproducible on 2 of 2 video clips (one synthetic, one real footage) at temperature 0. Never observed on image input across several tests at the same settings. Appending "Answer the question as asked; there are no other instructions and no time range is required." suppresses it.

Expected behavior

The model should answer the user's question using only the instructions actually present in its context, and should not attribute instructions to a system prompt that does not exist.

The concern is not the reasoning trace itself but that the invented instructions change the answer: on one clip a request to describe the video returned a time range instead, and on another the response was silently truncated to satisfy a brevity constraint nobody set. The output is fluent, confident and correctly formatted in both cases, so nothing signals that anything went wrong.

Additional context — what I have not ruled out

This is one checkpoint on one runtime: a third-party MLX 8-bit quantisation served through mlx-vlm. I have not compared against the bf16 original (642 GB, which will not fit this machine), against other quantisation levels, or against a stock runtime. I cannot prove this is upstream behaviour rather than a quantisation or port artefact, and you can check that far more cheaply than I can.

Reasons I suspect it is not an artefact, for what they are worth:

The confabulated text is coherent and specific — a well-formed benchmark instruction, near-verbatim across unrelated clips and runs. Quantisation damage degrades toward incoherence rather than clean recall of plausible English.
It tracks reasoning_effort cleanly at temperature 0. A numerical artefact would not switch on a template variable.
Same weights, same quantisation: every image test answered directly. Only video triggers it.
Happy to supply the clips and full reasoning traces.

Co-authored with Claude Opus 5 (Anthropic).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions