Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

0.1.44 refuses GGUFs whose attention.compress_ratios is all zeros (OrcaRouter Qwen3.8-Flash-Next-Uncensored)

Open Beginner friendly
#2,396 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
70/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
cpp

Research direction

The check that rejects the file is in read_geometry in include/strata/artifact/gguf_reader.hpp, where attention.compress_ratios is read per layer and compared with full_attention_interval. Start by confirming that the all-zero list triggers the error on layer 3. Done means an all-zero list is ignored, a list with any non-zero entry is still validated as before, and the reported GGUF files load.

Written by the indexing model from the issue text.

Description

Since 0.1.44 the engine refuses the GGUF files of orcarouter/Qwen3.8-Flash-Next-Uncensored-GGUF (an abliterated Qwen3.8-Flash-Next), which 0.1.43 ran without trouble:

qwen4exp.attention.compress_ratios[3] = 0, but full_attention_interval = 4 makes layer 3 full attention

Cause. These files carry qwen4exp.attention.compress_ratios as 48 zeros, one per layer. That looks like a placeholder written by the converter, not a layer split: every entry is 0, including the full-attention layers. 0.1.43 did not read the key and ran the files with the compiled pooling block. 0.1.44's new check in read_geometry (include/strata/artifact/gguf_reader.hpp) reads the list, finds 0 on layer 3, and rejects the file.

Suggested fix. Treat a list that is all zeros as not given, and check it only when some entry is non-zero:

         int64_t block = 0;
-        for (int64_t l = 0; l < g.n_layers; ++l) {
+        // a list of zeros only is a converter's placeholder, not a layer split
+        bool given = false;
+        for (int64_t l = 0; l < g.n_layers; ++l) given = given || v->items[(size_t) l].u != 0;
+        for (int64_t l = 0; given && l < g.n_layers; ++l) {
             const int64_t r = (int64_t) v->items[(size_t) l].u;

With that change, 0.1.44 loads the IQ4_XS and IQ3_M files of that repository. Over two rounds it runs at the same speed as 0.1.43, and it passes the same checks: tool calls, fixed answers, a picture, and needles at 32K and 128K. A list with any non-zero entry is still checked as before.

Setup: Linux, RX 7900 XTX (gfx1100), ROCm 7.2.4, Strata v0.1.44 built from source. Nothing in 0.1.44.1 touches this check.

Happy to open a PR with this change if you prefer that.

Dominant language
C++
Stars
11.6k
Forks
1k
PR merge metrics
No merged PRs in 30d

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Niko1221/Strata

All issues in Niko1221/Strata

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.