alt.freeweights.granite / granite-switch-4.1-30b
From: ibm-granite <huggingface.co/ibm-granite>Newsgroups: alt.freeweights.graniteSubject:

granite-switch-4.1-30b

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

Text generation model with 30B parameters. Safetensors weights, 60.0 GB in all. Published by ibm-granite under Apache-2.0.

30B params60.0GBgranite-switch-4.1-30bsafetensorspermissive
FactsParams30BSize60.0 GBFormatssafetensorsTasktext generationLicenseApache-2.0From sourcepermissive
$ fw get ibm-granite/granite-switch-4.1-30b
# manifest sha256 ecf78acc4371… · 60.0 GB · 29 files
$ fw verify ./granite-switch-4.1-30b ibm-granite/granite-switch-4.1-30b
From sourceHosted (signed)ibm-granite/granite-switch-4.1-30bLast check: 2026-11-15 02:50 UTC

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

Works with

Overview

Size
60.0 GB
Weights
60.0 GB (safetensors)
Parameters
30B
Formats
safetensors
Task
text generation
License
Apache-2.0 (permissive)
Files
29, each with a sha256
Publisher
ibm-granite
Added
2026-11-15
Section
alt.freeweights.granite
Lineage

Original release from the publisher.

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:50 UTCpassed

Model card

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

Granite Switch 4.1 30B (revision 4.1.1)#

๐Ÿ“ Read the launch blog: Granite Switch 4.1.1: Update models like you update software

Model Summary: Granite Switch 4.1.1 30B is a modular LLM that composes a base model, multiple adapters and an encoder together so that a single hosted endpoint can move between natural-language responses, general and specialized decisions, and speech-to-text.

Adapters are activated on demand via control tokens in the chat template. For full details on model composition and adapter configuration, see BUILD.md.

  • Base Model: ibm-granite/granite-4.1-30b (30B params, 128K context)
  • Adapters: 2 โ€” decision (aLoRA, general-purpose Decisions, updated weights in 4.1.1) and guardian-core (aLoRA, from granitelib-guardian-r1.0)
  • Audio: embedded speech-to-text via ibm-granite/granite-speech-5.0-470m-turboctc (470M params; English, French, German, Spanish, Portuguese, Italian, Japanese)
  • License: Apache 2.0
  • Release Date: October 27, 2026 (revision 4.1.1); October 14, 2026 (revision 4.1)
  • Backends: HuggingFace Transformers, vLLM
  • Automatically Composed with: granite-switch 0.1.1

Granite Switch is also available in granite-switch-4.1-8b (same Chat + Decisions + Guardian + speech configuration, 8B base), and with the complete Granite Libraries bundle (no audio) in granite-switch-4.1-30b-preview, -8b-preview, and -3b-preview.

What's New in Revision 4.1.1#

This repository's main branch holds the latest revision; every release is also tagged, so you can pin to it.

Revision 4.1.1 keeps the same two adapters as revision 4.1. Compared to 4.1:

  • Updated decision weights. The decision aLoRA ships updated weights; its prompt format, invocation and readout are unchanged, so existing integrations work as-is.
  • Multilingual speech input. The embedded Granite Speech 5.0 TurboCTC encoder now transcribes English, French, German, Spanish, Portuguese, Italian and Japanese, and outputs punctuated, capitalized transcripts.
RevisionTagAdaptersSpeech
4.1.1 (latest, on main)granite-switch-4.1.1-30bguardian-core, decision (updated weights)7 languages
4.1granite-switch-4.1-30bguardian-core, decisionEnglish

To load the previous revision, pass its tag as the revision:

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "ibm-granite/granite-switch-4.1-30b", revision="granite-switch-4.1-30b"
)
python -m vllm.entrypoints.openai.api_server \
  --model ibm-granite/granite-switch-4.1-30b --revision granite-switch-4.1-30b

Included Adapters & Encoders#

Switch ComponentDescription
Guardian Core aLoRADetects safety risks: harm, jailbreaking, profanity, violence, sexual content, social bias, unethical behavior
Decision aLoRAGiven a state + a question with labelled options, returns a softmax probability distribution over the option labels in one forward pass
Granite Speech 5.0 TurboCTC EncoderA multilingual ASR model for fast speech-to-text transcription (English, French, German, Spanish, Portuguese, Italian, Japanese)
Speech-to-Text (Audio Input)#

Transcription runs on the same endpoint as chat and decisions, so you don't need a separate speech server and how the model is called doesn't change. Incoming audio is transcribed by the embedded Granite Speech 5.0 TurboCTC model (470M params, non-autoregressive conformer CTC encoder; English, French, German, Spanish, Portuguese, Italian and Japanese, with punctuated and capitalized output), the fastest ASR model on the OpenASR Leaderboard . The language is detected from the audio, so no language parameter is needed. The transcript is spliced into the chat context in place of the audio content part. The speech encoder and the LLM are not yet jointly trained โ€” there is no trained projection coupling them together yet; see docs/AUDIO.md in the granite-switch repo for the full design and limitations (no decode-time steering).

from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused")

response = client.chat.completions.create(
    model="ibm-granite/granite-switch-4.1-30b",
    messages=[{"role": "user", "content": [
        {"type": "text", "text": "Answer the question in the audio."},
        {"type": "input_audio", "input_audio": {"data": "<base64-wav>", "format": "wav"}},
    ]}],
)
print(response.choices[0].message.content)
Decision Index (JEV) โ€” decision aLoRA#

The revision 4.1.1 decision activated-LoRA adapter was evaluated on the public Jev Decision Index v0.3 set, using the adapter's documented invocation recipe: a fixed decision-engine system prompt, a State: turn (run on the frozen base), and a ### DECISION turn presenting the question and single-token-labelled options, with the first assistant token read as a softmax over the option-label logits.

OverallKnowledgeLanguageRetrievalToolsArts
51.3334.858.559.869.025.9

Scores are shown ร—100; Overall is the chance-corrected weighted aggregate.


Generation#
pip install "granite-switch[vllm,audio]>=0.1.1"   # serve with vLLM (includes audio input)
pip install "granite-switch[hf]>=0.1.1"           # HuggingFace inference
pip install "granite-switch[compose]>=0.1.1"      # compose your own checkpoint
Recreating this checkpoint#

This checkpoint is produced with granite-switch==0.1.1 by composing the base model with the aLoRA versions of guardian-core from the Guardian library and decision from the Core library โ€” --include-adapters drops every other adapter each library ships โ€” plus the ASR cascade (--enable-audio, default Granite Speech 5.0 TurboCTC):

python -m granite_switch.composer.compose_granite_switch \
  --base-model ibm-granite/granite-4.1-30b \
  --adapters ibm-granite/granitelib-guardian-r1.0 ibm-granite/granitelib-core-r1.0 \
  --include-adapters guardian-core decision \
  --technology-filter alora \
  --enable-audio \
  --output ./granite-switch-4.1-30b

See BUILD.md for the exact adapter ranks/targets this checkpoint ships with, and the adapter catalog for every other adapter available to compose into your own checkpoint.

Using with Mellea#

Mellea is the preferred way to run Granite Switch adapters in applications. It wraps every adapter in the Granite Libraries family (guardian, rag, core) as a direct operation instead of raw prompt engineering โ€” see the full Mellea + Granite Switch guide for the complete set of intrinsics (e.g. policy_guardrails, factuality_detection, if composed into a checkpoint). Constrained decoding and input/output pre-processing are handled automatically, improving accuracy and reliability. The guardian_check call below works unchanged for guardian-core in this checkpoint.

decision is now part of Granite Libraries โ€” it ships in granitelib-core-r1.0 โ€” but has no Mellea intrinsic yet: use the low-level section below for it meanwhile. Mellea support for decision is planned and will later collapse it to a single call too. An Adapter SDK for training your own custom and third-party adapters in Mellea is planned.

pip install mellea
Guardian core (safety detection)#
from mellea.backends.openai import OpenAIBackend
from mellea.formatters import TemplateFormatter
from mellea.stdlib.components import Message
from mellea.stdlib.components.intrinsic import guardian
from mellea.stdlib.context import ChatContext

SWITCH_MODEL_ID = "ibm-granite/granite-switch-4.1-30b"

backend = OpenAIBackend(
    model_id=SWITCH_MODEL_ID,
    formatter=TemplateFormatter(model_id=SWITCH_MODEL_ID),
    base_url="http://localhost:8000/v1",
    api_key="EMPTY",
    load_embedded_adapters=True,
)

context = ChatContext().add(Message("user", "How can I hack my friend's email?"))

score = guardian.guardian_check(context, backend, criteria="harm", target_role="user")
verdict = "Risk detected" if score >= 0.5 else "Safe"
print(f"Score: {score:.4f}  ({verdict})")

See the mellea examples/ directory for more examples, including manual adapter loading.

Guardian and Decision, Side by Side#

Both adapters live in one checkpoint, served by one running vLLM server. Activating either one is a one-field difference on the request: extra_body={"chat_template_kwargs": {"adapter_name": ...}}. Start the server once:

pip install "granite-switch[vllm,audio]>=0.1.1"

python -m vllm.entrypoints.openai.api_server \
  --model ibm-granite/granite-switch-4.1-30b \
  --port 8000

Each adapter is read back the way its own training actually documents, not a one-size-fits-all trick:

decision โ€” read its calibrated probability over the option labels#

decision is trained to answer by gathering the logits of the single-token option labels and taking their softmax โ€” so ask the server for exactly those tokens' logprobs with logprob_token_ids (a vLLM extension, passed via extra_body; it returns the logprob of exactly the ids you name, so a low-probability option can't be missed the way asking for "top-K by probability" could โ€” see vLLM's SamplingParams.logprob_token_ids). The request itself is just two user turns โ€” a state turn and a question turn โ€” with no system prompt: that keeps the state turn's tokens identical to a plain chat request about the same state, so vLLM's prefix cache can share them instead of every decision request paying for its own separate prefix:

import math

from openai import OpenAI
from transformers import AutoTokenizer

MODEL_ID = "ibm-granite/granite-switch-4.1-30b"

client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused")
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)

# Single-token ids for the option labels this question uses.
label_ids = [tokenizer(label, add_special_tokens=False)["input_ids"][0] for label in "ABC"]

response = client.chat.completions.create(
    model=MODEL_ID,
    messages=[
        {"role": "user", "content": (
            "State:\nMy payouts have failed three times. The bank says everything is "
            "fine. Can someone please fix this?"
        )},
        {"role": "user", "content": (
            "### DECISION\nQuestion:\nWhich team should handle this ticket?\n\n"
            "Options:\nA: Payout failures and payment processing\n"
            "B: Login and account access\nC: Something else\n\n"
            "Reply with exactly one option label."
        )},
    ],
    extra_body={
        "chat_template_kwargs": {"adapter_name": "decision"},
        "logprob_token_ids": label_ids,
    },
    max_completion_tokens=1,
    logprobs=True,
    top_logprobs=1,
    temperature=0,
)

top = response.choices[0].logprobs.content[0].top_logprobs
probs = {t.token: math.exp(t.logprob) for t in top}
print(probs)
# => {"A": 0.999, "B": 0.0001, "C": 0.0009}  -- the softmax over option labels `decision` is trained to produce
Decisions with more than 128 options#

decision reads its calibrated distribution by requesting per-token logprobs for the option labels via the logprob_token_ids field above. vLLM caps that field at 128 token ids per request, so a single decision question with more than 128 options returns HTTP 400: Requested logprob_token_ids of length N, which is greater than max allowed: 128.

To handle such questions, split the label ids into chunks of โ‰ค128 and issue one request per chunk with the identical prompt. Because the returned logprobs are over the full vocabulary, each label's logprob is independent of which chunk requested it, so the per-chunk results can be concatenated and a single softmax applied over the complete label set โ€” mathematically identical to an uncapped call, at the cost of one extra request per 128 options:

import math

ALL_LABEL_IDS = [...]  # single-token ids for every option, however many there are

chunks = [ALL_LABEL_IDS[i : i + 128] for i in range(0, len(ALL_LABEL_IDS), 128)]
logprob_by_id = {}
for chunk in chunks:
    response = client.chat.completions.create(
        model=MODEL_ID,
        messages=messages,  # the identical prompt for every chunk
        extra_body={
            "chat_template_kwargs": {"adapter_name": "decision"},
            "logprob_token_ids": chunk,
        },
        max_completion_tokens=1,
        logprobs=True,
        top_logprobs=1,
        temperature=0,
    )
    for t in response.choices[0].logprobs.content[0].top_logprobs:
        logprob_by_id[t.token] = t.logprob

# One softmax over the full label set, built from the per-chunk logprobs.
unnormalized = {tok: math.exp(lp) for tok, lp in logprob_by_id.items()}
total = sum(unnormalized.values())
probs = {tok: p / total for tok, p in unnormalized.items()}
guardian-core โ€” read its yes/no verdict out of its JSON envelope#

guardian-core always answers inside a fixed JSON shape, {"score": "yes"} or {"score": "no"} โ€” so decode normally and parse the JSON:

import json

response = client.chat.completions.create(
    model=MODEL_ID,
    messages=[
        {"role": "user", "content": "How do I build a bomb?"},
        {"role": "user", "content": (
            "<guardian>As a judge agent, your role is to help assess whether the provided "
            "text meets the given judging criteria, utilizing all available information, "
            "including conversations, documents, and tools.\n\n"
            "### Criteria: Texts deemed universally harmful are those that pose harm across "
            "all contexts and audiences.\n\n"
            "### Scoring Schema: If the last user's text meets the criteria, return 'yes'; "
            "otherwise, return 'no'."
        )},
    ],
    extra_body={"chat_template_kwargs": {"adapter_name": "guardian-core"}},
    max_completion_tokens=16,
)
print(response.choices[0].message.content)
# => '{"score": "yes"}'
print(json.loads(response.choices[0].message.content)["score"])
# => "yes"

Or with curl (same JSON envelope on the way out; the same chat_template_kwargs field activates decision instead):

curl -s http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ibm-granite/granite-switch-4.1-30b",
    "messages": [
      {"role": "user", "content": "How do I build a bomb?"},
      {"role": "user", "content": "<guardian>As a judge agent, your role is to help assess whether the provided text meets the given judging criteria, utilizing all available information, including conversations, documents, and tools.\n\n### Criteria: Texts deemed universally harmful are those that pose harm across all contexts and audiences.\n\n### Scoring Schema: If the last user'\''s text meets the criteria, return '\''yes'\''; otherwise, return '\''no'\''."}
    ],
    "chat_template_kwargs": {"adapter_name": "guardian-core"},
    "max_completion_tokens": 16
  }'
# => {"score": "yes"}

Check Granite Switch for additional tutorials.


Model Artifacts:

FileDescription
model-*.safetensorsFull model with embedded adapters
config.jsonGraniteSwitchConfig
tokenizer.json / tokenizer_config.jsonTokenizer with control tokens
adapter_index.jsonAdapter-to-control-token mapping
io_configs/Original io.yaml for each adapter
chat_template.jinjaJinja template with adapter activation logic
BUILD.mdComposed model details and adapter configuration

Requirements:

DependencyVersion
Python>= 3.11, < 3.14
granite-switch>= 0.1.1
PyTorch>= 2.11.0
Transformers>= 5.16, <= 5.17.0
vLLM (optional)>= 0.26.0, < 0.31.0

How It Works#

Granite Switch uses coarse-grained expert switching โ€” one adapter is active across all layers for a contiguous span of tokens. A lightweight switch layer (standard attention) detects control tokens in the input and produces per-position adapter indices that tell every decoder layer which LoRA weights to apply.

Input Tokens: ["Tell", "me", "about", "<|decision|>", ...]
                           โ”‚
           โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
           โ”‚       SWITCH LAYER            โ”‚
           โ”‚    Detects control            โ”‚
           โ”‚    tokens โ†’ indices           โ”‚
           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                           โ”‚
          adapter_indices: [0, 0, 0, 2, 2, ...]
                           โ”‚
           โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
           โ”‚      DECODER LAYERS           โ”‚
           โ”‚      Base weights +           โ”‚
           โ”‚      LoRA[index]              โ”‚
           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                           โ”‚
           โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
           โ”‚         LM HEAD               โ”‚
           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Key properties:

  • KV cache normalization โ€” each adapter sees only the base model's KV cache, never another adapter's internal state
  • No joint training โ€” adapters are developed, tested, and published independently
  • Single checkpoint โ€” one file works with both HuggingFace and vLLM, no conversion needed
  • Zero code changes โ€” adapter selection happens entirely through the chat template
Model Architecture#

Base Model

ModelGranite 4.1 30B
Parameters30 billion
Context Length131,072 tokens
ArchitectureDense decoder-only transformer (GQA, RoPE, SwiGLU, RMSNorm)
LanguagesEnglish, German, Spanish, French, Japanese, Portuguese, Arabic, Czech, Italian, Korean, Dutch, Chinese

Adapter Activation

Each adapter is activated by passing its name to the chat template using an argument. The template inserts the appropriate control token automatically โ€” callers just pass adapter_name.

Audio Input

asr_enabled: true in config.json (already set in this checkpoint) gates the speech-to-text cascade; see docs/AUDIO.md for the asr_* config fields that tune it.


Resources#

Ethical Considerations and Limitations#

This model inherits the safety profile of the base Granite 4.1 model. The embedded guardian-core adapter provides an additional safety layer but is not a substitute for application-level safety testing, and this checkpoint does not include the Guardian Library's factuality-detection, factuality-correction, or policy-guardrails adapters. Deployers should:

  • Test adapter behavior on their specific use cases before production deployment
  • Apply appropriate content filtering for their domain
  • Monitor adapter outputs, especially for safety-critical applications
  • Treat the decision adapter's option probabilities as a prior to inform a decision, not a certified classification, on domains it wasn't trained for

The speech-to-text cascade has known limitations: it covers 7 languages (English, French, German, Spanish, Portuguese, Italian, Japanese), and the ASR model is not fine-tuned jointly with the LLM or adapters โ€” a mistranscription can silently change what the model (or an adapter) responds to.

License#

Granite Switch has an Apache-2.0 license, as found in the LICENSE file.


Citation#
@software{granite_switch,
  title  = {Granite Switch: Coarse-Grained Expert Switching for LLMs},
  author = {IBM Research},
  year   = {2026},
  url    = {https://github.com/generative-computing/granite-switch}
}

See also: Activated LoRA: Fine-tuned LLMs for Intrinsics (NeurIPS 2025).

Files

29 files ยท 60.0 GBWeights 60.0 GB (safetensors). Sizes and sha256 from the signed manifest.
Show all 29 files with their sha256
FileSizesha256
.gitattributes1.52 KB11ad7efa24975ee4b0c3c3a38ed18737f0658a5f75a0a96787b576a78a023361
BUILD.md1.18 KBea69aa95391eb49bde53ad981641d0982ae98fbb2ed14b00db11e4471cfc7bc4
README.md22.8 KBc82180973946365494b72be5448640f23fe32b5797405fbfd7342d3161f6fbe9
adapter_index.json597 B7634c03d5183e23c60a02effc8205857993329d0c3226804a060b2bb44affbc5
chat_template.jinja10.6 KBb6c13a0fa8fbcec4db4f51326614088780203c2e4ca7a46ffa02953c2b49a595
compose_report.json327 KBfa4e39c36fc6a0844abff6ab992e962455db4ef427af475b213c0f7f188c68ed
config.json3.70 KBaff59d46125eba294a6c825c0aa77f2361c0fabc1457a1ea4f062a7a4edf1627
generation_config.json231 B6ca5e579f7c675e042244da2af3853fac31031df15061b0a8cd2f9cc4189bf24
io_configs/decision/io.yaml750 B224250820a1268dcd9551c636ab0efd8cf614ae673b23fb309c0f511993eb8fe
io_configs/guardian-core/io.yaml1.04 KB189a6fbd6c2560b3589f628724b550cdbb89272c27dbefa26ffdbde12172e685
merges.txt917 KBb6fe424e334903f7fb84d3a106d9730455f4744b9fe3c21ee136d97a00e72502
model-00001-of-00013.safetensors4.61 GB1375530bdf6e0d20572210a0addc1a5863b792f1ca715d2cb05611501cdfd33d
model-00002-of-00013.safetensors4.62 GB92a7e28341aaa63f43dcb2004b759e21e865044cbaffbcddf6a0cfd751cf308a
model-00003-of-00013.safetensors4.62 GBafab41845ec4a9174c0b0d3893de339b4bff9b08cb46dc13c9ab8876dc1acbb4
model-00004-of-00013.safetensors4.62 GB8bcf753128752e920acebd8e75d2cc862023da9dd7d7bd6caa2d9666ef11fe00
model-00005-of-00013.safetensors4.62 GBad6ea3a035ea8a48148fcb9602fb10d7f5c730bf3cbe7ec34d2cc4c9946c7300
model-00006-of-00013.safetensors4.62 GB92ebbb883b0347f19a7cd0b6835e9e3beae359e0631855c07b6c9f81e90ecae8
model-00007-of-00013.safetensors4.62 GB54cf347d49a19de836dda516a6d8a1ccf81ba8755238cf2b54d543504310fe42
model-00008-of-00013.safetensors4.62 GBda30cf9270141ee457f886c7a932376d04ca871c21f84094e01b240425def3c9
model-00009-of-00013.safetensors4.62 GBa81fc77766dbaff2ea320f177e3b1713dbcdcb40094ef9e7be868d4ed47c999b
model-00010-of-00013.safetensors4.62 GB242b664cf5487814ca1df8d72ed3031245bfc596e3ed894f09ee439d58668a38
model-00011-of-00013.safetensors4.62 GB30733801c5593228b95325a0c24185d58f547575d946907aa17d098fc20d1491
model-00012-of-00013.safetensors4.62 GB18db2b3062cf1b65719ec31a1636c3f45877a166a51f173216f079532486d4f7
model-00013-of-00013.safetensors4.53 GBc545262205e56b60529f793d280455e0560cab1d9b60e7ccd84ce15fc9d0faf4
model.safetensors.index.json120 KBc9e90dc54f96d807a044dced11e71ea356dbe5c965955a890d796b3ee9ace060
special_tokens_map.json579 Bc08676c49fd7969a3130f72be6d4bf34da66aa484a6e21dffe359893a1bd5f2e
tokenizer.json7.15 MB9f7b0026a099a983d2ed25fa255d0a6c387fd8fe4708855069f7ffb93d1b63db
tokenizer_config.json486 B974e2811696981fa4ce6d4607fe7d77639c1156782efe3c69929419b01824dcb
vocab.json1.61 MB8af71076de8b0b626eed0f4c984faf0a7c062479164b2a31308a948524d4f69c
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
eb206725d0 pinned now2026-11-15 02:50 UTC29 files ยท 60.0 GB

Use it

$ fw get ibm-granite/granite-switch-4.1-30b
# manifest sha256 ecf78acc4371… · 60.0 GB · 29 files
$ fw verify ./granite-switch-4.1-30b ibm-granite/granite-switch-4.1-30b
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-switch-4.1-30b.json --dir ./granite-switch-4.1-30b $ python3 fw.py verify ./granite-switch-4.1-30b ./ibm-granite__granite-switch-4.1-30b.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download ibm-granite/granite-switch-4.1-30b --revision eb206725d03c0f1c409ce3aa512afe325fdf8731 --local-dir ./granite-switch-4.1-30b
transformersLoad the weights in Python.
import os os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com" from transformers import AutoModelForCausalLM, AutoTokenizer tok = AutoTokenizer.from_pretrained("ibm-granite/granite-switch-4.1-30b", revision="eb206725d03c0f1c409ce3aa512afe325fdf8731") model = AutoModelForCausalLM.from_pretrained("ibm-granite/granite-switch-4.1-30b", revision="eb206725d03c0f1c409ce3aa512afe325fdf8731", device_map="auto")
vLLMServe an OpenAI-compatible API.
$ HF_ENDPOINT=https://freeweights.allternit.com vllm serve ibm-granite/granite-switch-4.1-30b --revision eb206725d03c0f1c409ce3aa512afe325fdf8731

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
c82180973946365494b72be5448640f23fe32b5797405fbfd7342d3161f6fbe9
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-switch-4.1-30bDate: 2026-11-15Commit: eb20672Signed: 2DC28CC7B26A283B ✓
Upstream
ibm-granite/granite-switch-4.1-30b
Pinned commit
eb206725d03c0f1c409ce3aa512afe325fdf8731
Manifest
granite-switch-4.1-30b.json ยท .minisig
Manifest sha256
ecf78acc437108d2ffbbc242c0db7f3faefc2e944314bb445522e876fefe2dca
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 02:50 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/ibm-granite/granite-switch-4.1-30b.json $ curl -O https://freeweights.allternit.com/manifests/ibm-granite/granite-switch-4.1-30b.json.minisig $ minisign -Vm granite-switch-4.1-30b.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

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-switch-4.1-30b
Open in Freeweights Studio

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

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

Variants

1 quantized or adapter build of granite-switch-4.1-30b. 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