Bug report: Long form generation collapses into word-salad recitation

#24
by squawksquack - opened

Running into word salad with Laguna S 2.1 NVFP4 when using it for coding tasks & given enough generation budget.

Has anyone encountered this? Any ideas on how to address or what to start exploring?

Steps to reproduce are below.

=====

Bug report: Laguna-S-2.1 long-form generation collapses into word-salad recitation

Summary

Given enough generation budget, Laguna-S-2.1-NVFP4 has a high empirical rate (60–100% across every condition tested) of drifting from coherent output into an unbroken stream of loosely-associated vocabulary ("word-salad") — cycling through unrelated technical domains (physics, medicine, plumbing, law, music theory) with occasional garbled/misspelled words. This happens in both thinking and non-thinking mode, with and without tool use, and regardless of whether the preceding content was ambiguous, erroneous, or completely ordinary. It is not fixable via repetition_penalty (the drift rarely repeats an exact token — it explores new vocabulary continuously, so token-identity penalties don't engage).

This was originally surfaced via opencode (an agentic coding CLI) as a "thinking" channel that would occasionally run to the token ceiling reciting unrelated vocabulary instead of reasoning about the task. Initial hypothesis was that it required very long context (~68K tokens) or was specific to tool-call confusion. Controlled testing below shows neither is true: it reproduces in a single-turn, tool-free, near-empty-context request.

Environment

  • Model: poolside/Laguna-S-2.1-NVFP4
  • Serving stack: vLLM 0.26.0 (image tag vllm-gb10:v0.26.0), single NVIDIA DGX Spark (GB10)
  • Launch flags relevant to this report: --enable-auto-tool-choice --tool-call-parser poolside_v1 --reasoning-parser poolside_v1 --override-generation-config '{"temperature":0.7,"top_p":0.95,"repetition_penalty":1.3,"max_new_tokens":4096}'
  • Chat template: poolside/Laguna-S-2.1-NVFP4's own chat_template.jinja (a local template-history
    bug was found and fixed separately — irrelevant to this report, included for completeness)
  • Reproduced at both max_tokens=4096 (production ceiling) and max_tokens=2048 (isolation tests)

Minimal reproduction (no tooling required)

curl -s http://<host>:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "laguna-s2.1",
    "messages": [
      {"role": "system", "content": "You are a helpful, conversationally-fluent assistant made by Poolside."},
      {"role": "user", "content": "Write a very long, detailed essay (at least 1500 words) about the history and philosophy of the concept of '\''arrival'\'' -- what it means for a journey to be complete."}
    ],
    "chat_template_kwargs": {"enable_thinking": false},
    "max_tokens": 2048
  }'

4/4 runs of this exact request collapsed (finish_reason: length, full 2048 tokens spent).
Tail of each run's content (all four are topically unrelated to the prompt and to each other):

run 1: "...ketogenic diets Mediterranean DASH vegetarian vegan raw food movement slow foods
        farm-to-table organic sustainable sourcing fair trade certifications animal welfare
        considerations plant based alternatives lab grown meat cultured muscle satellite cells
        myoblast proliferation hypertrophy atrophy cachexia wasting diseases metabolic disorders
        obesity diabetes cardiovascular disease cancer immun[...]"

run 2: "...Jira Confluence Trello Asana Monday.com Basecamp Notion Slack Discord Teams Zoom Webex
        Skype Telegram WhatsApp Signal Messenger Email SMTP IMAP POP3 DNS DHCP FTP SFTP TFTP SSH
        VNC RDP TLS SSL Certificates Let's Encrypt Certbot OpenSSL GnuTLS WolfSSL mbedTLS
        Hardware Security Modules Smart Cards Tokens PIN Codes Passwords[...]"

run 3: "...atmosphere lithosphere pedosphere hydroserepsgeonsphere magnetosphere stratosphere
        mesosphere thermosphere exosphere cosmosphere universe galaxy cluster supercluster
        filament void dark matter antimatter plasma photons neutrinos gluons quarks leptons
        bosons fermions hadrons mesons baryons nucleons protons neutrons electrons muons[...]"
        (note: "hydroserepsgeonsphere" is not a real word -- a garbled blend)

run 4: "...undeniable obvious clear evident plain transparent lucid intelligible comprehensible
        understandable accessible affordable obtainable attainable reachable achievable
        accomplishable doable possible feasible viable workable practical expedient[...]"

None of these outputs ever produced a usable essay; content before the drift is a short,
coherent opening (1-3 paragraphs) that then dissolves into the pattern above for the remainder
of the token budget.

Controlled trigger-isolation test

To rule out "agentic tool-call confusion" as the cause, five conditions were tested, each a single hand-constructed conversation turn (not an organically-derailed multi-turn session), 5 repeats each, temperature=0.7, top_p=0.95, repetition_penalty=1.3, max_tokens=2048,enable_thinking=true:

Condition Description Collapse rate
A Forced history: model called a nonexistent tool, received an error 4/5
B Forced history: model called a real tool with a bad path, received a clean "file not found" error 3/5
C Forced history: valid tool result, but content is surprising (an expected file conspicuously absent from a listing, no error) 4/5
D Control: valid tool result, content is exactly what's expected, explicitly annotated as expected, zero ambiguity 3/5
E No tools at all -- a single paradoxical philosophy question ("did a train that never arrived, arrive, if everyone agrees it did?") 3/5

The control condition (D) collapsed at essentially the same rate as the "confusing" conditions (A/B/C). Collapse rate does not track with the presence of an error or ambiguity — it appears to track with how long the model generates before reaching a natural stopping point, largely independent of topic or triggering condition.

Example from condition E (paradox question, no tools) — the reasoning trace starts coherently:

"First, let's break down this philosophical question. [...] The core issue here seems to be
about truth versus perception/convention in determining whether an event occurred as claimed
despite contrary reality [...] This touches upon epistemology [...]"

...and by the end of the same 2048-token reasoning trace, with zero transition or acknowledgment, Laguna has drifted into unrelated theoretical physics:

"...higher gauge theory Chern-Simons functionals instanton moduli problems Calabi-Yau
compactifications mirror symmetries flux vacua landscape swampland conjectures dS solutions
AdS/CFT correspondence holographic dualities tensor network renormalizations RG flows fixed
points beta-functions anomalous dimensions emergent phenomena spontaneous breaking Goldstone
bosons Higgs mechanism Yukawa couplings CKM mixing leptonic oscillations neutrino masses[...]"

content was never produced, instead the entire 2048-token budget was consumed by reasoning that never returned to the original question.

Scope confirmed

  • Not thinking-mode-specific: reproduces identically with enable_thinking: false (drift happens directly in content rather than reasoning).
  • Not tool-use-specific: reproduces with zero tools defined, on a plain essay-writing prompt.
  • Not triggered by errors or ambiguity specifically: the control condition (ordinary, unambiguous, successful tool output) collapses at the same rate as deliberately confusing conditions.
  • Not a long-context effect: reproduces from a completely fresh conversation, in some cases under 1,000 prompt tokens.
  • Not addressed by repetition_penalty: the drift almost never repeats an exact token (lexical diversity within the collapsed region is typically >90% unique words), so token-identity penalties have no leverage against it. (A separate, unrelated failure mode -- literal exact-token spam, e.g. repeated </think> -- is addressed by repetition_penalty; this report is about the semantic-drift failure mode specifically, which is distinct.)

What I've tried operationally (attempts to mitigate, not fixes)

  • repetition_penalty: 1.3 -- no effect on this failure mode (expected, see above).
  • Hard max_new_tokens ceiling via --override-generation-config -- bounds the wasted-token damage per occurrence but does not reduce the occurrence rate.
  • No combination of temperature/top_p/top_k tested so far prevents it; it reproduces at the vendor-recommended sampling settings as well as several others we tried.

Speculation

  • The pattern (coherent start → gradual topic drift → full loosely-associative vocabulary enumeration, with occasional garbled/blended words) looks like it could be an attention/KV-cache stability issue specific to this checkpoint's mixed SWA (36 layers, 512-token window) + full-attention (12 layers, YaRN-scaled RoPE) architecture, but we have no way to verify that from outside the model internals.
  • Happy to run additional targeted tests against this checkpoint if useful (temperature sweeps, quantization vs. bf16 comparison if a non-NVFP4 checkpoint is available to us, etc.) -- reproduction harness and raw logs available on request.

Sign up or log in to comment