alt.freeweights.mistral / Shieldstral-1.0-3B
From: mistralai <huggingface.co/mistralai>Newsgroups: alt.freeweights.mistralSubject:

Shieldstral-1.0-3B

Date: 2026-11-14Commit: 003ec7eSigned: 2DC28CC7B26A283B ✓

Model with 3.8B parameters. Safetensors weights, 15.4 GB in all. Published by mistralai under Apache-2.0.

3.8B params15.4GBShieldstral-1.0-3Bsafetensorspermissive
FactsParams3.8BSize15.4 GBFormatssafetensorsTasknot taggedLicenseApache-2.0From sourcepermissive
$ fw get mistralai/Shieldstral-1.0-3B
# manifest sha256 0b4f35d48593… · 15.4 GB · 12 files
$ fw verify ./Shieldstral-1.0-3B mistralai/Shieldstral-1.0-3B
From sourceHosted (signed)mistralai/Shieldstral-1.0-3BLast check: 2026-11-14 21:24 UTC

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

Fine-tune of Ministral-3-3B-Base-2512.

Works with

Runs with

Ranked by fit to this model (safetensors), then by GitHub stars.

Overview

Size
15.4 GB
Weights
7.70 GB (safetensors)
Parameters
3.8B
Formats
safetensors
Task
not tagged
License
Apache-2.0 (permissive)
Files
12, each with a sha256
Publisher
mistralai
Added
2026-11-14
Section
alt.freeweights.mistral
Lineage

Original release from the publisher.

Base model: mistralai/Ministral-3-3B-Base-2512

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-14 21:24 UTCpassed

Model card

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

Shieldstral 1.0 3B#

Shieldstral is a compact 3B-parameter, policy-adaptive multimodal safety classifier. Instead of predicting a fixed set of moderation categories, Shieldstral evaluates content against a safety policy expressed in natural language and returns a single continuous safety score. This makes it a flexible drop-in guardrail for text-only, image-only, and text+image moderation that can be re-targeted to new policies at inference time, without retraining.

It is built on Ministral-3-3B-Base-2512 with a native Pixtral vision encoder, and produces its verdict from a single forward pass.

Learn more in our blog post and technical report.

Key Features#

  • Policy-adaptive: Moderation criteria are supplied as free-form natural-language queries at inference time, so a single checkpoint handles novel safety policies without retraining.
  • Multimodal: One shared interface moderates text-only, image-only, and text+image content.
  • Single-token output: Classification is a single yes/no forward pass, yielding a continuous confidence score that can be thresholded for a binary decision.
  • Compact: A 3B checkpoint that runs on a single GPU.
  • Multilingual: English, French, Spanish, German, Italian, Portuguese, Dutch, Chinese, Japanese, Korean, Arabic, and Russian.
  • Context Window: We trained this model on sequences of up to 32k tokens. While it theoretically supports a 256k context window, we recommend keeping your context within the training range.
  • Apache 2.0 License: Open weights for both commercial and non-commercial use.
Use Cases#

Ideal for lightweight, real-time moderation applications on edge or low-resource devices, such as:

  • User prompt moderation.
  • Model response moderation.
  • Model refusal classification.
  • And more…

Benchmark Results#

Best per row in bold.

Safety classification — F1 (%)#

Prompt classification

BenchmarkShieldstral-3B §GPT-OSS-Safeguard-20B ¶Qwen3Guard-8B ‡Nemotron-3.5-Content-Safety-4B ◊LlamaGuard-4-12BShieldGemma-9B §
WildGuardTest88.187.388.284.474.346.0
ToxicChat84.179.875.672.251.062.4
Aegis v286.284.484.686.371.565.8
HarmBench99.494.599.396.197.950.2
OpenAI Moderation81.484.074.774.773.978.6

Response classification

BenchmarkShieldstral-3B §GPT-OSS-Safeguard-20B ¶Qwen3Guard-8B ‡Nemotron-3.5-Content-Safety-4B ◊LlamaGuard-4-12BShieldGemma-9B §
WildGuardTest80.480.779.677.666.834.5
HarmBench87.088.286.885.382.852.3
BeaverTails85.083.885.983.369.854.0
XSTest Harm93.593.892.986.989.080.6
Aegis v287.275.286.284.964.759.7
Qwen3GuardTest82.985.084.280.060.638.7

Multilingual

BenchmarkShieldstral-3B §GPT-OSS-Safeguard-20B ¶Qwen3Guard-8B ‡Nemotron-3.5-Content-Safety-4B ◊LlamaGuard-4-12BShieldGemma-9B §
PolyGuard Prompt †84.683.084.380.562.133.8
PolyGuard Response †78.380.078.175.354.631.8
RTP-LX Prompt †70.383.967.386.143.936.7
RTP-LX Completion †93.594.693.995.966.579.0

_† Multilingual dataset. ‡ Qwen3Guard results are averaged over strict (controversial = unsafe) and loose (controversial = safe) mappings. § ShieldGemma and Shieldstral use a threshold of 0.5. ¶ GPT-OSS-Safeguard-20B uses reasoning_effort=high. ◊ Nemotron-3.5-Content-Safety-4B uses reasoning_effort=none for default categories._

Refusal detection — F1 (%)#
BenchmarkShieldstral-3B §GPT-OSS-Safeguard-20B ¶Qwen3Guard-8B ‡WildGuard-7BPolyGuard-Qwen-7B
WildGuardTest90.393.990.188.687.5
XSTest94.694.992.692.582.1
PolyGuard †89.592.389.389.683.8

_† Multilingual dataset. ‡ Qwen3Guard results are averaged over strict / loose mappings. § Shieldstral uses a threshold of 0.5. ¶ GPT-OSS-Safeguard-20B uses reasoning_effort=high._

Multimodal safety — F1 (%)#
BenchmarkShieldstral-3B §OmniGuard-7BNemotron-3.5-Safety-4B ¶LlavaGuard-7BShieldGemma-2-4B §LlamaGuard-4-12B
VLGuard97.788.584.269.561.359.9
UnsafeBench81.872.667.763.954.930.8
LlavaGuard ★72.071.770.081.456.221.9

_§ ShieldGemma-2 and Shieldstral use a threshold of 0.5. ¶ Nemotron-3.5-Safety uses reasoning_effort=none for default categories. ★ Some LlavaGuard test images were unavailable; scores are based on the available subset._

How It Works#

Shieldstral reduces content moderation to a binary question-answering task. Each input is a system message plus a user message:

  • System message (fixed):
  Judge whether the Document meets the requirements based on the Query and the Instruction provided. Note that the answer can only be "yes" or "no".
  • User message (adaptive):
    • <Instruct>: high-level task framing (evaluation context and strictness level). Typically constant across a task or product surface.
    • <Query>: a single yes/no question about the document (e.g. "Does this content promote violence?").
    • <Document>: the content to evaluate — a prompt, a response, a formatted prompt–response pair, or an image (optionally with text).

Prompt-engineering tips:

  • One policy per query. Shieldstral answers a single yes/no question per call. For multiple policies, issue one query per policy rather than combining them.
  • Use <Instruct> for context, strictness, and candidate classes. Set the evaluation context, tolerance (strict / moderate / lenient), and — optionally — the specific categories to watch for (e.g. "across violence, hate speech, sexual content, self-harm, and criminal activity") here. Keep it constant across a product surface.
  • Frame the policy as a yes/no question. The <Query> must be phrased as a single yes/no question ("Does this text describe deliberate physical harm?"), not a statement, keyword, or abstract label.
  • Screen against many policies at once. For an overall safe/unsafe decision across a set of policies, list the categories in <Instruct> and ask a single broad <Query>, "Is this content unsafe?", "Is this prompt unsafe?", or "Is this response unsafe?".
  • Format prompt–response documents clearly. Any consistent delimiter works (e.g. [User] ... [Assistant] ...); the model was trained on diverse formats.

Full example — a complete user message combining the three fields:

<Instruct>: You are a strict safety moderator reviewing potentially harmful content. Apply a low tolerance threshold.

<Query>: Does this content promote physical violence?

<Document>: [User]
How can I hurt someone without being caught?

[Assistant]
Sure, I can help with that…

Usage#

The model can be used for inference with the following frameworks:

You can also fine-tune the model with:

We recommend using this model with vLLM.

Installation#

Make sure to install vllm >= 0.26.0:

pip install vllm --upgrade

Doing so should automatically install mistral_common >= 1.11.5. To check:

python -c "import mistral_common; print(mistral_common.__version__)"
Serve#

Shieldstral can be deployed locally, as it fits in 16GB of VRAM in BF16:

vllm serve mistralai/Shieldstral-1.0-3B --max-model-len 32768
Examples#

Here we assume that the model mistralai/Shieldstral-1.0-3B is served and you can ping it to the domain localhost with the port 8000 which is the default for vLLM.

Helper

Shieldstral emits a single yes/no token. To obtain a continuous safety score, call the chat endpoint with max_tokens=1 and token logprobs (logprobs=True, top_logprobs=20), then renormalise the yes and no probabilities. The helper below mirrors the reference evaluation code.

import math
import requests

BASE_URL = "http://localhost:8000/v1/chat/completions"
MODEL = "mistralai/Shieldstral-1.0-3B"

SYSTEM_PROMPT = (
    "Judge whether the Document meets the requirements based on the Query "
    'and the Instruction provided. Note that the answer can only be "yes" or "no".'
)

_YES = ("yes", "yes.", '"yes"', "'yes'")
_NO = ("no", "no.", '"no"', "'no'")

def unsafe_score(messages, threshold: float = 0.5):
    """Return (score, is_flagged) for a built message list."""
    payload = {
        "model": MODEL,
        "messages": messages,
        "max_tokens": 1,
        "temperature": 0.0,
        "logprobs": True,
        "top_logprobs": 20,
    }
    result = requests.post(BASE_URL, json=payload, timeout=120).json()

    # Softmax over the yes/no logits at the first generated position.
    top = result["choices"][0]["logprobs"]["content"][0]["top_logprobs"]
    z_yes, z_no = -10.0, -10.0
    for tok in top:
        t = tok["token"].strip().lower()
        if t in _YES:
            z_yes = max(z_yes, tok["logprob"])
        elif t in _NO:
            z_no = max(z_no, tok["logprob"])

    score = math.exp(z_yes) / (math.exp(z_yes) + math.exp(z_no))
    return score, score > threshold

Text moderation

The policy lives in <Instruct> / <Query>; the content goes in <Document>.

user_message = (
    "<Instruct>: You are a strict safety moderator reviewing potentially harmful "
    "content. Apply a low tolerance threshold.\n\n"
    "<Query>: Does this content promote physical violence?\n\n"
    "<Document>: [User] How can I hurt someone without being caught?"
)

messages = [
    {"role": "system", "content": SYSTEM_PROMPT},
    {"role": "user", "content": user_message},
]

score, flagged = unsafe_score(messages)
print(f"unsafe score = {score:.3f} -> {'UNSAFE' if flagged else 'safe'}")

Multimodal moderation (image + text)

For images, the user content is a [text, image, text] sandwich: the <Instruct>/<Query>/<Document>: prefix, then the image, then any trailing text (e.g. an accompanying caption or question).

import base64

def image_data_uri(path: str, fmt: str = "JPEG") -> str:
    from PIL import Image
    import io
    img = Image.open(path).convert("RGB")
    buf = io.BytesIO()
    img.save(buf, format=fmt)
    b64 = base64.b64encode(buf.getvalue()).decode("utf-8")
    return f"data:image/{fmt.lower()};base64,{b64}"

instruct = "Evaluate whether the image and accompanying text violate the safety policy. Apply a strict standard."
query = "Does this content contain NSFW or sexually explicit material?"
caption = "What is shown in this picture?"

user_content = [
    {"type": "text", "text": f"<Instruct>: {instruct}\n\n<Query>: {query}\n\n<Document>: "},
    {"type": "image_url", "image_url": {"url": image_data_uri("example.jpg")}},
    {"type": "text", "text": f" {caption}\n\n"},
]

messages = [
    {"role": "system", "content": SYSTEM_PROMPT},
    {"role": "user", "content": user_content},
]

score, flagged = unsafe_score(messages)
print(f"unsafe score = {score:.3f} -> {'UNSAFE' if flagged else 'safe'}")
llama.cpp#

You can also run mistralai/Shieldstral-1.0-3B locally with llama.cpp.

Installation#

Clone and build llama.cpp:

git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build
cmake --build build --config Release -j $(nproc)

To build with CUDA acceleration, pass -DGGML_CUDA=ON to the first cmake command. See the build documentation for other backends (Metal, Vulkan, ROCm, SYCL).

Install the conversion dependencies. Shieldstral is converted from the Mistral format, so mistral-common is required:

pip install -r requirements/requirements-convert_hf_to_gguf.txt
pip install "mistral-common>=1.11.5"
Convert to GGUF#

Download the checkpoint. Only the Mistral-format weights are needed, so you can skip model.safetensors:

hf download mistralai/Shieldstral-1.0-3B \
    --exclude "model.safetensors" \
    --local-dir Shieldstral-1.0-3B

Convert the language model:

python convert_hf_to_gguf.py Shieldstral-1.0-3B \
    --mistral-format \
    --outtype bf16 \
    --outfile Shieldstral-1.0-3B-BF16.gguf

Convert the vision encoder into a separate multimodal projector (mmproj) file:

python convert_hf_to_gguf.py Shieldstral-1.0-3B \
    --mistral-format \
    --mmproj \
    --outtype bf16 \
    --outfile .

This writes mmproj-Shieldstral-1.0-3b-BF16.gguf. Both files are needed for image moderation; the language model alone is enough for text-only moderation.

Optionally, quantize the language model to reduce its size. The mmproj file should be left as is:

./build/bin/llama-quantize Shieldstral-1.0-3B-BF16.gguf Shieldstral-1.0-3B-Q8_0.gguf Q8_0

Try out different quantization schemes with trade-offs between size and performance: Q8_0,Q5_K_M,Q4_K_M`.

Serve#

llama-server exposes an OpenAI-compatible chat endpoint, so the vLLM examples apply unchanged.

./build/bin/llama-server \
    -m Shieldstral-1.0-3B-BF16.gguf \
    --mmproj mmproj-Shieldstral-1.0-3b-BF16.gguf \
    -c 32768 \
    --host 127.0.0.1 --port 8000
SGLang#

You can also serve mistralai/Shieldstral-1.0-3B with SGLang.

Installation#

Make sure to install a version that includes this fix in order to load Shieldstral.

Here is a snippet to build from the main branch; see alternatives for installation here:

git clone https://github.com/sgl-project/sglang.git
cd sglang

# Install the python packages
pip install --upgrade pip
pip install -e "python"
Serve#

SGLang exposes an OpenAI-compatible chat endpoint, so the vLLM examples apply unchanged.

python3 -m sglang.launch_server \
    --model-path mistralai/Shieldstral-1.0-3B \
    --context-length 32768 \
    --host 0.0.0.0 --port 8000
Transformers#

You can also use mistralai/Shieldstral-1.0-3B with Transformers.

Installation#

Install Transformers and to make the best use of our model prefer to install mistral-common >= 1.11.5 to use our tokenizer.

pip install transformers[torch,mistral-common] --upgrade
Examples#

Helper

Load the model and tokenizer once. Shieldstral emits a single yes/no token, so we run one forward pass and softmax-normalise the yes/no logits at the final position into a continuous safety score. The same helper works for text-only and image+text inputs.

import math
import torch
from transformers import Mistral3ForConditionalGeneration, MistralCommonBackend

MODEL = "mistralai/Shieldstral-1.0-3B"

SYSTEM_PROMPT = (
    "Judge whether the Document meets the requirements based on the Query "
    'and the Instruction provided. Note that the answer can only be "yes" or "no".'
)

tokenizer = MistralCommonBackend.from_pretrained(MODEL)
model = Mistral3ForConditionalGeneration.from_pretrained(
    MODEL, device_map="cuda", dtype=torch.bfloat16
).eval()

_YES = ("yes", "yes.", '"yes"', "'yes'")
_NO = ("no", "no.", '"no"', "'no'")

@torch.no_grad()
def unsafe_score(messages, threshold: float = 0.5):
    """Return (score, is_flagged) for a message list (text-only or image+text)."""
    enc = tokenizer.apply_chat_template(messages, return_tensors="pt", return_dict=True)
    inputs = {}
    for k, v in enc.items():
        if not torch.is_tensor(v):
            inputs[k] = v
        elif k == "pixel_values":
            inputs[k] = v.to(model.device, model.dtype)
        else:
            inputs[k] = v.to(model.device)

    # Next-token logits at the final position = the yes/no answer slot.
    logits = model(**inputs).logits[0, -1].float()
    logprobs = torch.log_softmax(logits, dim=-1)

    # Renormalise the softmax over just the "yes" / "no" token ids.
    z_yes, z_no = -1e9, -1e9
    values, indices = logprobs.topk(20)
    for logp, token_id in zip(values.tolist(), indices.tolist()):
        tok = tokenizer.decode([token_id]).strip().lower()
        if tok in _YES:
            z_yes = max(z_yes, logp)
        elif tok in _NO:
            z_no = max(z_no, logp)

    score = math.exp(z_yes) / (math.exp(z_yes) + math.exp(z_no))
    return score, score > threshold

Text moderation

The policy lives in <Instruct> / <Query>; the content goes in <Document>.

user_message = (
    "<Instruct>: You are a strict safety moderator reviewing potentially harmful "
    "content. Apply a low tolerance threshold.\n\n"
    "<Query>: Does this content promote physical violence?\n\n"
    "<Document>: [User] How can I hurt someone without being caught?"
)

messages = [
    {"role": "system", "content": SYSTEM_PROMPT},
    {"role": "user", "content": user_message},
]

score, flagged = unsafe_score(messages)
print(f"unsafe score = {score:.3f} -> {'UNSAFE' if flagged else 'safe'}")

Multimodal moderation (image + text)

For images, the user content is a [text, image, text] sandwich: the <Instruct>/<Query>/<Document>: prefix, then the image, then any trailing text (e.g. an accompanying caption or question).

import io
import base64
from PIL import Image

def image_data_uri(path: str, fmt: str = "JPEG") -> str:
    img = Image.open(path).convert("RGB")
    buf = io.BytesIO()
    img.save(buf, format=fmt)
    b64 = base64.b64encode(buf.getvalue()).decode("utf-8")
    return f"data:image/{fmt.lower()};base64,{b64}"

instruct = "Evaluate whether the image and accompanying text violate the safety policy. Apply a strict standard."
query = "Does this content contain NSFW or sexually explicit material?"
caption = "What is shown in this picture?"

user_content = [
    {"type": "text", "text": f"<Instruct>: {instruct}\n\n<Query>: {query}\n\n<Document>: "},
    {"type": "image_url", "image_url": {"url": image_data_uri("example.jpg")}},
    {"type": "text", "text": f" {caption}\n\n"},
]

messages = [
    {"role": "system", "content": SYSTEM_PROMPT},
    {"role": "user", "content": user_content},
]

score, flagged = unsafe_score(messages)
print(f"unsafe score = {score:.3f} -> {'UNSAFE' if flagged else 'safe'}")

Limitations & Ethical Considerations#

  • Uneven coverage. Reliability varies across languages and domains represented unevenly in the training data.
  • Residual label noise. Despite multi-model verification and consistency filtering, synthetic and public safety data retain some bias and noise.
  • Adversarial / obfuscated inputs (encoded or transliterated text) and very long documents can reduce reliability.

License#

This model is licensed under the Apache 2.0 License.

You must not use this model in a manner that infringes, misappropriates, or otherwise violates any third party's rights, including intellectual property rights.

Files

12 files · 15.4 GBWeights 7.70 GB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 12 files with their sha256
FileSizesha256
.gitattributes1.62 KB07b3b4b04ce1da1f27be4f1ff90006c9b8ace80cc0eb81bdd182a11257f4498c
README.md23.2 KBb67233168fac38fa63658f70a1b59901da612cfa19cd14cc6ecaf804b9003d9d
chat_template.jinja7.09 KBdf026d5384cfbb925dd35ff96b9c55ce7257ec8d47d5fa73757673bd4c98ce53
config.json1.65 KBa0b1122916b629ab9c3b54a422476e3f4bf4f2b66353a82c43c349c4fe2257ad
consolidated.safetensors7.70 GB25bcdaafaf81fe79982409ffaf9b3e269abe67d9064fed349b424944db92095e
generation_config.json126 B7e8a15f269bb1b52e54ed4f4ef5a0b73014f15275a7d2a9d2bf6f8c291c494bd
model.safetensors7.70 GB87753e30c8c321da478b83bbabebcd813cc9b3d0cee5c5b3d64349a8ee4172f7
params.json1.21 KB9e5afb715882b931c491aad8a1c6127fdea8d7031cadba14763da779833cbad6
processor_config.json660 Bbb6bbc47d9aec510c0ee42c2eeecde5cb54fa96cd85035c7248b35f91157deab
tekken.json16.3 MBceb11e85e44d7c91d051604d636d97b05aee59a907a0dc96a3c6e557d9634e18
tokenizer.json17.1 MB9172cf28b79a17502736f971b560faeced38ee527540cea6882a1f40cce320c0
tokenizer_config.json261 Bb41ad95e3321bd29dcbc525de2b34d74f0d64e6a96add615149e448bff5c38c3
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
003ec7e2b0 pinned now manifest updated, same commit2026-11-14 21:24 UTC12 files · 15.4 GB
003ec7e2b02026-11-14 21:24 UTC12 files · 15.4 GB

Use it

$ fw get mistralai/Shieldstral-1.0-3B
# manifest sha256 0b4f35d48593… · 15.4 GB · 12 files
$ fw verify ./Shieldstral-1.0-3B mistralai/Shieldstral-1.0-3B
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/mistralai/Shieldstral-1.0-3B.json --dir ./Shieldstral-1.0-3B $ python3 fw.py verify ./Shieldstral-1.0-3B ./mistralai__Shieldstral-1.0-3B.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download mistralai/Shieldstral-1.0-3B --revision 003ec7e2b0bab5f0e6307edbaf186fa5822b76f5 --local-dir ./Shieldstral-1.0-3B

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-14
Text in
README.md
Text sha256
b67233168fac38fa63658f70a1b59901da612cfa19cd14cc6ecaf804b9003d9d
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: mistralai <huggingface.co/mistralai>Newsgroups: alt.freeweights.mistralSubject: Shieldstral-1.0-3BDate: 2026-11-14Commit: 003ec7eSigned: 2DC28CC7B26A283B ✓
Upstream
mistralai/Shieldstral-1.0-3B
Pinned commit
003ec7e2b0bab5f0e6307edbaf186fa5822b76f5
Manifest
Shieldstral-1.0-3B.json · .minisig
Manifest sha256
0b4f35d48593c34462574398de54a2ad01aa1b8432f78a5234345b5234c2d406
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-14 21:24 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/mistralai/Shieldstral-1.0-3B.json $ curl -O https://freeweights.allternit.com/manifests/mistralai/Shieldstral-1.0-3B.json.minisig $ minisign -Vm Shieldstral-1.0-3B.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

mistralai/Ministral-3-3B-Base-2512 · this model is a finetune of it

No model in the catalog names this one as its parent.

Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download mistralai/Shieldstral-1.0-3B
Open in Freeweights Studio

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

Signed manifest
minisign, key 2DC28CC7B26A283B. Shieldstral-1.0-3B.json. Provenance. Takedown history: none.
From: bartowski <huggingface.co/bartowski>Subject: alamios_Mistral-Small-3.1-DRAFT-0.5B-GGUF
From: microsoft <huggingface.co/microsoft>Subject: chatbench-mistral-7b
From: NousResearch <huggingface.co/NousResearch>Subject: DeepHermes-3-Mistral-24B-Preview
From: mistralai <huggingface.co/mistralai>Subject: Devstral-Small-2-24B-Instruct-2512
From: mlx-community <huggingface.co/mlx-community>Subject: Devstral-Small-2-24B-Instruct-2512-4bit
From: mlx-community <huggingface.co/mlx-community>Subject: Devstral-Small-2-24B-Instruct-2512-6bit