alt.freeweights.granite / granite-speech-4.1-2b-plus
From: ibm-granite <huggingface.co/ibm-granite>Newsgroups: alt.freeweights.graniteSubject:

granite-speech-4.1-2b-plus

Date: 2026-11-15Commit: e69efe3Signed: 2DC28CC7B26A283B ✓

Automatic speech recognition model with 2.1B parameters. Safetensors weights, 4.23 GB in all. Published by ibm-granite under Apache-2.0.

2.1B params4.23GBgranite-speech-4.1-2b-plussafetensorspermissive
FactsParams2.1BSize4.23 GBFormatssafetensorsTaskautomatic speech recognitionLicenseApache-2.0From sourcepermissive
$ fw get ibm-granite/granite-speech-4.1-2b-plus
# manifest sha256 1bc38fe972ee… · 4.23 GB · 13 files
$ fw verify ./granite-speech-4.1-2b-plus ibm-granite/granite-speech-4.1-2b-plus
From sourceHosted (signed)ibm-granite/granite-speech-4.1-2b-plusLast check: 2026-11-15 02:39 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Fine-tune of granite-4.0-1b-base.

Works with

Overview

Size
4.23 GB
Weights
4.22 GB (safetensors)
Parameters
2.1B
Formats
safetensors
Task
automatic speech recognition
License
Apache-2.0 (permissive)
Files
13, each with a sha256
Publisher
ibm-granite
Added
2026-11-15
Section
alt.freeweights.granite
Lineage

Original release from the publisher.

Base model: ibm-granite/granite-4.0-1b-base

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 02:39 UTCpassed

Model card

From the publisher at commit e69efe3. Shown as plain text with links; images open at the publisher.

Granite-Speech-4.1-2B-Plus#

Model update (October 2026)#

We have updated the model weights and configuration. The updated model is more accurate, especially for keyword biasing and for word-level timestamps on long samples. It is a drop-in replacement for the previous version, but we have also updated our usage recommendations to get the best performance.

In the tables below, GSP v2610 refers to the updated model and GSP v2604 to the original release.

Model Summary#

Granite-Speech-4.1-2B-Plus (GSP) has similar capabilities to the Granite-Speech-4.1-2B model. The plus model adds two new community-requested rich transcription features that can be activated with a simple prompt change: speaker-attributed ASR (speaker labels and word transcripts) and word-level timing information. Unlike the base model, the plus model doesn't provide punctuation and capitalization.

The model was trained on corpora similar to the Granite-Speech-4.1-2B model which were augmented with speaker turns and word-level timestamp tags. This allows the model to provide different modes of functionality controlled by different prompts.

Two additional model variants explore different capabilities and inference optimization:

  • Granite-Speech-4.1-2B for applications where accuracy is the primary concern with support for punctuated, capitalized transcripts, AST and keyword-biased recognition, and includes Japanese.
  • Granite-Speech-4.1-2B-NAR introduces a novel non-autoregressive architecture for higher throughput
ASR only mode#

In this mode the model generates only the text transcript similar to the Granite-Speech-4.1-2B model.

Speaker attributed ASR (SAA)#

In this mode, the model adds speaker tags in the format of [Speaker N]: where $N$ is the speaker number, before each speaker turn. The speakers are numbered by their order of appearance so the first speaker will always be marked with [Speaker 1]: and the second with [Speaker 2]:, etc. For example: "[Speaker 1]: Hello how are you [Speaker 2]: I'm fine and how are you feeling [Speaker 1]: I feel wonderful".

See Resources for more information about SAA.

Word-level timestamps#

In this mode, the model adds timestamp tags after each word indicating the end of the word in the audio. Silences are transcribed as _ and a timestamp tag also indicates their end. The format of the tag is [T:N] where $N$ is an integer number indicating the time in centiseconds (1/100th of a second). To reduce the amount of generated tokens, only the last three digits of $N$ are provided. This causes a rollover after 10 seconds.

The conversion from time $t$ in seconds to timestamp is $N = round(t*100) \mod 1000$. To convert back to seconds, use $t = N/100 + 10R$ where $R$ is the rollover counter. See code below for example implementation in Python.

See Resources for more information about timestamps.

Incremental decoding#

There are cases where we want to transcribe a new audio segment along with previous segments that we've already transcribed. This can be useful for providing longer context for the model in order to improve transcription accuracy or to maintain the speaker numbering in SAA mode. To avoid re-decoding the previous segments, we can provide the previous transcription in the prefix_text field of the conversation template. The model will decode the parts after that. See the code below for examples.

Keyword list biasing (KWB)#

Keyword list biasing capability is available to enhance the recognition of keywords, such as names and technical terms. This is particularly useful in tasks where complex terms may otherwise be misrecognized. Keyword biasing can be applied by including the keywords directly in the prompt; for example, in ASR mode: Can you transcribe the speech into a written format? Keywords: …

Users may provide either a single keyword or a list of keywords, which may also include terms that do not appear in the input audio, making them well suited for batch processing or recurring domain-specific use cases.

See Resources for more information about keyword list biasing.

Evaluations#

Our evaluations showed that this model works well with audio segments up to 9 minutes long for ASR and SAA, and up to 3.5 minutes for timestamps.

ASR#

Performance on HuggingFace Open ASR leaderboard:

modelAverage WERAMIEarnings22GigaspeechLS CleanLS OtherSPGISpeechTedliumVoxpopuli
ibm-granite/granite-speech-4.1-2b-plus v26045.718.638.6810.381.443.063.723.895.9
ibm-granite/granite-speech-4.1-2b5.338.098.379.81.332.53.783.075.7
ibm-granite/granite-speech-4.1-2b-nar5.448.038.4410.161.282.773.333.625.86

(Using speculative decoding)

Performance on the updated Open ASR leaderboard test sets:

The leaderboard has since changed its test sets: AMI, Earnings22, Gigaspeech and Voxpopuli were replaced by cleaned versions, Tedlium was removed, and URGENT2024 and Voice Arena Monsoon (en_IN) were added. The results above are therefore not comparable with the current leaderboard, so we compare the two model versions on the new sets here (WER %, ↓ lower is better):

modelAverage WERAMIEarnings22GigaspeechLS CleanLS OtherSPGISpeechURGENT2024Monsoon (en_IN)Voxpopuli
GSP v26046.017.888.039.021.212.753.4812.275.224.23
GSP v26106.109.047.438.701.092.693.6512.744.884.71

(Using beam search with num_beams=4 and repetition_penalty=2.0, without speculative decoding)

Keyword list biasing accuracy - Keyword F1 score (%, ↑ higher is better):

ModeGigaspeechLS CleanLS OtherSPGISpeechVoxpopuliTED_LIUMCV-enCV-deCV-esCV-frCV-pt
GSP v2604 without KWB73.389.077.679.593.987.772.876.180.972.689.5
GSP v2610 without KWB74.189.677.279.994.188.772.776.981.673.190.8
GSP v2604 with KWB81.496.292.591.195.292.585.594.194.691.794.7
GSP v2610 with KWB84.498.497.492.295.094.382.495.596.195.397.0
Speaker Attributed ASR#

Speaker Attributed ASR performance - WDER (%, ↓ lower is better):

ModelFISHERCALLHOME EnglishAMI-SDMGALE
VibeVoice ASR [1]2.87.127.444.8
GSP v26040.92.214.630.2
GSP v26101.03.013.928.3

The results are averaged over 2-5 minute speech segments.

(The evaluation metric: Word Diarization Error Rate [WDER] is the percentage of words attributed to the wrong speaker)

Timestamps#

Word-level timestamp accuracy - AAS (ms, ↓ lower is better):

ModelAMI-IAMI-SLS-CLS-OVOXCVMLSTMTEn AvgMLS-frMLS-esMLS-deMLS-ptCV-frCV-esCV-deCV-ptML Avg
Qwen3-FA [2]48.182.527.829.341.048.434.329.942.738.127.031.226.330.340.029.434.233.3
CrisperWhisper [3]55.764.335.940.147.297.446.442.753.735.628.031.236.862.958.960.983.850.1
Canary-v2 [4]127.8129.792.589.2109.9110.394.386.1105.085.081.180.2–86.888.591.5––
WhisperX [5]107.1150.271.772.078.891.279.263.689.2117.384.7132.275.0104.288.1126.879.5101.0
GSP v260443.469.011.414.680.243.324.324.538.845.423.041.347.118.619.319.524.229.8
GSP v261039.269.010.113.466.535.422.520.734.642.518.838.040.616.216.617.322.026.5

(The evaluation metric: Accumulated Average Shift [AAS] is measuring the average time shift of each word)

Word-level timestamps on long segments - AAS per test set, v2604 vs. v2610 (ms, ↓ lower is better):

The test sets were created by concatenating the short test segments into 2-5 minute samples.

Test setGSP v2604GSP v2610
CV-en2339.4925.3
CV-fr119.071.3
CV-de131.396.1
MLS-es407.9192.5
MLS-pt1073.8356.2
Average814.3328.3

Release Date#

April 28, 2026. Updated October 19, 2026.

License#

Apache 2.0

Supported Languages#

English, French, German, Spanish, Portuguese

Intended Use#

The model is intended to be used in enterprise applications that involve processing of speech input especially when a rich transcript adding speaker turns and time stamps is desired. In particular, the model is well-suited for English, French, German, Spanish, and Portuguese speech-to-text.

Usage#

The Granite Speech Plus model is supported natively in transformers>=5.8. Below is a simple example of how to use the different modes of the model.

Usage with transformers#

First install pytorch and transformers.

pip install torchaudio datasets accelerate torchcodec

Setup — load the model and a test audio clip:

import re
import torch
from datasets import Audio, load_dataset
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor

Load the model and define a general function for decoding the audio:

MODEL_NAME = "ibm-granite/granite-speech-4.1-2b-plus"

device = "cuda" if torch.cuda.is_available() else "cpu"
processor = AutoProcessor.from_pretrained(MODEL_NAME)
tokenizer = processor.tokenizer
model = AutoModelForSpeechSeq2Seq.from_pretrained(MODEL_NAME, device_map=device, dtype=torch.bfloat16)
model.eval()

SYSTEM_PROMPT = "Knowledge Cutoff Date: April 2024.\nToday's Date: December 19, 2024.\nYou are Granite, developed by IBM. You are a helpful AI assistant"
SAMPLE_RATE = 16000

@torch.inference_mode()
def transcribe(audio, prompt, tokens_per_second=12, prefix_text=None, repetition_penalty=2.0, num_beams=1):
    chat = [{"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": prompt}]
    extra = {"prefix_text": prefix_text} if prefix_text is not None else {}
    prompt_text = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True, **extra)
    inputs = processor(prompt_text, audio, device=device, return_tensors="pt").to(device)
    # Limit the output length relative to the audio length to stop runaway generation
    max_new_tokens = max(256, int(tokens_per_second * audio.shape[-1] / SAMPLE_RATE))
    outputs = model.generate(
        **inputs,
        max_new_tokens=max_new_tokens,
        do_sample=False,
        num_beams=num_beams,
        repetition_penalty=repetition_penalty,
    )
    new_tokens = outputs[0, inputs["input_ids"].shape[-1]:]
    output_text = tokenizer.decode(new_tokens, add_special_tokens=False, skip_special_tokens=True)
    return output_text

repetition_penalty=2.0 prevents the model from getting stuck in a repetition loop, which happens mostly on long audio and in the SAA and timestamp modes. tokens_per_second sets the maximum output length per second of audio (at least 256 tokens); the examples below use 12 for ASR, 16 for SAA and 48 for timestamps. The results on the updated Open ASR leaderboard test sets were obtained with num_beams=4; num_beams=1 is faster.

Load some example audio data from the AMI dataset

ds = load_dataset("diarizers-community/ami", "ihm", split="test")
ds = ds.cast_column("audio", Audio(sampling_rate=SAMPLE_RATE, num_channels=1))

TEST_SAMPLE = 0
START_TIME, END_TIME = 5 * 60, 6 * 60
audio = ds["audio"][TEST_SAMPLE].get_samples_played_in_range(START_TIME, END_TIME)

Task 1: ASR — plain speech-to-text transcription:

ASR_PROMPT = "<|audio|> can you transcribe the speech into a written format?"

asr_text = transcribe(audio.data, ASR_PROMPT)
print(asr_text)

Task 2: Speaker Attributed ASR — transcription with speaker labels:

SAA_PROMPT = "<|audio|> Speaker attribution: Transcribe and denote who is speaking by adding [Speaker 1]: and [Speaker 2]: tags before speaker turns."

saa_text = transcribe(audio.data, SAA_PROMPT, tokens_per_second=16)
for segment in re.split(r"(\[Speaker \d+\]:)", saa_text):
    print(segment.strip())

Task 3: Word-level timestamps — transcription with per-word timing:

The timestamps are given in centiseconds and are modulo 1000 (=10 seconds) so we need to unwrap them by adding multiples of 10 seconds.

TS_PROMPT = "<|audio|> Timestamps: Transcribe the speech. After each word, add a timestamp tag showing the end time in centiseconds, e.g. hello [T:45] world [T:82]"

ts_text = transcribe(audio.data, TS_PROMPT, tokens_per_second=48)
ts_words = re.split(r"\[T:(\d+)\]", ts_text)
last_word_end_time = 0
offset_time = 0
for word, ts in zip(ts_words[::2], ts_words[1::2]):
    word_end_time = float(ts) / 100
    while word_end_time + offset_time < last_word_end_time:
        offset_time += 10
    last_word_end_time = word_end_time + offset_time
    print(f"{word}\t{last_word_end_time:.2f}s")

Task 4: Incremental decoding — transcribe segments while accumulating audio context:

NUM_SEGMENTS = 3
previous_transcript = ""
all_audio = None

for k in range(NUM_SEGMENTS):
    t1 = START_TIME + (END_TIME - START_TIME) * k / NUM_SEGMENTS
    t2 = START_TIME + (END_TIME - START_TIME) * (k + 1) / NUM_SEGMENTS
    new_audio = ds["audio"][TEST_SAMPLE].get_samples_played_in_range(t1, t2)
    all_audio = new_audio.data if all_audio is None else torch.cat([all_audio, new_audio.data], dim=-1)
    saa_text = transcribe(all_audio, SAA_PROMPT, tokens_per_second=16, prefix_text=previous_transcript)
    print(f"{t1:06.2f}-{t2:06.2f}:\t{saa_text}")
    previous_transcript = (previous_transcript + " " + saa_text).strip()
Usage with vLLM#

For vLLM usage follow the instructions for the Granite-Speech-4.1-2B. The Granite-Speech-Plus model requires vLLM v0.23.0 or later.

Model Architecture#

The model shares the same architecture as the Granite-Speech-4.1-2B model.

Training Data#

The model was trained on the same datasets as Granite-Speech-4.1-2B.

Additional training data for SAA was created using audio segments from datasets that have speaker identification (e.g. Multilingual-Librispeech). Segments with alternating speakers were concatenated to create a long multi-speaker sample.

Training Data for Timestamps#

Word-level timestamping capabilities are achieved by using a combination of publicly available speech corpora: LibriSpeech, MLS (en, fr, de, pt, es), CommonVoice (en, fr, de, pt, es), VoxPopuli (en, fr, de, es), AMI-IHM, Switchboard, TIMIT and YODAS. For AMI-IHM, Switchboard and TIMIT, we use the available timestamp annotations. For all other datasets, we obtain word-level alignments using the Montreal Forced Aligner (MFA), a GMM-HMM based forced alignment tool. We also use MFA to insert silence boundaries into the manually annotated datasets.

To ensure high-quality training data, we validate the MFA-derived alignments using forced alignments with our CTC-based speech encoder. We compute the Accumulated Average Shift (AAS), the mean absolute error between timestamps in milliseconds, for the CTC and MFA alignments and retain only samples with the lowest alignment error: the top 95% for English and top 70% for non-English data. For the larger datasets (YODAS and MLS-en), we cap the training data at 4M and 5M samples, respectively.

Additional training data containing long audio samples with timestamps were generated by concatenation of short segments.

The model was trained on audio samples up to 10 minutes for ASR and SAA, and up to 5 minutes for timestamps.

Infrastructure#

We train Granite Speech using IBM's supercomputing cluster, Blue Vela, which is outfitted with NVIDIA H100 GPUs. This cluster provides a scalable and efficient infrastructure for training our models over thousands of GPUs. The training of this particular model was completed in about 5 days on 32 H100 GPUs.

Ethical Considerations and Limitations#

The use of Large Speech and Language Models can trigger certain risks and ethical considerations. Although our alignment processes include safety considerations, the model may in some cases produce inaccurate, biased, offensive or unwanted responses to user prompts. Additionally, whether smaller models may exhibit increased susceptibility to hallucination in generation scenarios due to their reduced sizes, which could limit their ability to generate coherent and contextually accurate responses, remains uncertain. This aspect is currently an active area of research, and we anticipate more rigorous exploration, comprehension, and mitigations in this domain.

IBM recommends using this model for automatic speech recognition, speaker annotation and word alignment. The model's design improves safety by limiting how audio inputs can influence the system. If an unfamiliar or malformed prompt is received, the model simply ignores it and performs transcription, which is the default fallback mode. This minimizes the risk of adversarial inputs, unlike integrated models that directly interpret audio and may be more exposed to such attacks. Note that more general speech tasks may pose higher inherent risks of triggering unwanted outputs.

To enhance safety, we recommend using Granite-Speech-4.1-2B-Plus alongside Granite Guardian. Granite Guardian is a fine-tuned instruct model designed to detect and flag risks in prompts and responses across key dimensions outlined in the IBM AI Risk Atlas.

Resources#

References#

[1] VibeVoice-ASR (Transformers-compatible version). Available online: https://huggingface.co/microsoft/VibeVoice-ASR-HF.

[2] X. Shi et al., "Qwen3-ASR technical report," 2026. arXiv

[3] M. Zusag, L. Wagner, and B. Thallinger, "CrisperWhisper: Accurate timestamps on verbatim speech transcriptions," in Proc. Interspeech, 2024.

[4] M. Sekoyan, N. R. Koluguri, N. Tadevosyan, P. Zelasko, T. Bartley, N. Karpov, J. Balam, and B. Ginsburg, "Canary-1B-v2 & Parakeet-TDT-0.6B-v3: Efficient and high-performance models for multilingual ASR and AST," 2025. arXiv

[5] M. Bain, J. Huh, T. Han, and A. Zisserman, "WhisperX: Time-accurate speech transcription of long-form audio," 2023. arXiv

Files

13 files · 4.23 GBWeights 4.22 GB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 13 files with their sha256
FileSizesha256
.gitattributes1.52 KB11ad7efa24975ee4b0c3c3a38ed18737f0658a5f75a0a96787b576a78a023361
README.md23.4 KBf15ca98d14d9966a546d434d86ce137fae2ba775282987990c497668fa6bfc63
chat_template.jinja6.51 KBb72e216f06b94afdc7cce509b718a6314abc47c281cbd90d405a5c58786da32e
config.json2.48 KB067f17dea1dc207175d3e4c8c1794d3f5dfbb6b99283640799b33530281c62f0
generation_config.json231 B6fd4778414c02f6af1b9b02648b2b904f7d441b33f7551a0f5a109e4464d5ba7
model-00001-of-00003.safetensors1.99 GBf1890e4ea823edf4a6cb21882230135fd881dbf50284c778e94c64e65aeec40c
model-00002-of-00003.safetensors2.00 GBbdbabd92cbe9847f43cae75796462c80f96b3f4e9d8c4d4ec81be54e8d73a02a
model-00003-of-00003.safetensors233 MBf6cd72e95bb68b4661f6b1f0ff6914aa1738e0ce691974540e8478c05126a22d
model.safetensors.index.json86.5 KB51b08f7158197b140fcb2bfe1e7a0541f937f5da3d338bfac79365dfcf2d7303
model.sig8.01 KB2937d1354678612cf3f875164e29abe308a579e958fb5e8cb2d0b28a1e55761c
processor_config.json529 Ba34d56a3776b19b6f356d74e943fac333692ec011aef6f5c44bbb177ed23441d
tokenizer.json7.15 MB98580e86e8e2f683a121d433df1e3e3b2c1e60ef1653b6f298f88a31bf69bd81
tokenizer_config.json542 Bb329c253924828a257c670d3bf46ebb9acdccbbb44853950901a5ac32233f51b
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
e69efe37f9 pinned now2026-11-15 02:39 UTC13 files · 4.23 GB

Use it

$ fw get ibm-granite/granite-speech-4.1-2b-plus
# manifest sha256 1bc38fe972ee… · 4.23 GB · 13 files
$ fw verify ./granite-speech-4.1-2b-plus ibm-granite/granite-speech-4.1-2b-plus
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/ibm-granite/granite-speech-4.1-2b-plus.json --dir ./granite-speech-4.1-2b-plus $ python3 fw.py verify ./granite-speech-4.1-2b-plus ./ibm-granite__granite-speech-4.1-2b-plus.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download ibm-granite/granite-speech-4.1-2b-plus --revision e69efe37f97b6283c61f5a8dadda2b3eb67765d6 --local-dir ./granite-speech-4.1-2b-plus
transformersSpeech recognition with the transformers pipeline.
import os os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com" from transformers import pipeline asr = pipeline("automatic-speech-recognition", model="ibm-granite/granite-speech-4.1-2b-plus", revision="e69efe37f97b6283c61f5a8dadda2b3eb67765d6") print(asr("audio.wav")["text"])

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
f15ca98d14d9966a546d434d86ce137fae2ba775282987990c497668fa6bfc63
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: ibm-granite <huggingface.co/ibm-granite>Newsgroups: alt.freeweights.graniteSubject: granite-speech-4.1-2b-plusDate: 2026-11-15Commit: e69efe3Signed: 2DC28CC7B26A283B ✓
Upstream
ibm-granite/granite-speech-4.1-2b-plus
Pinned commit
e69efe37f97b6283c61f5a8dadda2b3eb67765d6
Manifest
granite-speech-4.1-2b-plus.json · .minisig
Manifest sha256
1bc38fe972ee843a54712874c8e205d0f7fa9bb26a03dfe02f61be310cdaf58c
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 02:39 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/ibm-granite/granite-speech-4.1-2b-plus.json $ curl -O https://freeweights.allternit.com/manifests/ibm-granite/granite-speech-4.1-2b-plus.json.minisig $ minisign -Vm granite-speech-4.1-2b-plus.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

Parent

ibm-granite/granite-4.0-1b-base · this model is a finetune of it

1 model in the catalog name this one as their parent.

Quantizations
1
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download ibm-granite/granite-speech-4.1-2b-plus
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. granite-speech-4.1-2b-plus.json. Provenance. Takedown history: none.

Variants

1 quantized or adapter build of granite-speech-4.1-2b-plus. Each has its own license check and page.

From: ibm-granite <huggingface.co/ibm-granite>Subject: GneissWeb.7B_ablation_model_on_350B_FineWeb.Edu.seed1
From: ibm-granite <huggingface.co/ibm-granite>Subject: GneissWeb.7B_ablation_model_on_350B_FineWeb.Edu.seed2
From: ibm-granite <huggingface.co/ibm-granite>Subject: GneissWeb.7B_ablation_model_on_350B_FineWeb.Edu.seed3
From: ibm-granite <huggingface.co/ibm-granite>Subject: GneissWeb.7B_ablation_model_on_350B_FineWeb.seed1
From: ibm-granite <huggingface.co/ibm-granite>Subject: GneissWeb.7B_ablation_model_on_350B_FineWeb.seed2
From: ibm-granite <huggingface.co/ibm-granite>Subject: GneissWeb.7B_ablation_model_on_350B_FineWeb.seed3