Instructions to use SedimentLabs/Pebble-1-30B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use SedimentLabs/Pebble-1-30B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="SedimentLabs/Pebble-1-30B") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("SedimentLabs/Pebble-1-30B") model = AutoModelForMultimodalLM.from_pretrained("SedimentLabs/Pebble-1-30B", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use SedimentLabs/Pebble-1-30B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "SedimentLabs/Pebble-1-30B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "SedimentLabs/Pebble-1-30B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/SedimentLabs/Pebble-1-30B
- SGLang
How to use SedimentLabs/Pebble-1-30B with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "SedimentLabs/Pebble-1-30B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "SedimentLabs/Pebble-1-30B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "SedimentLabs/Pebble-1-30B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "SedimentLabs/Pebble-1-30B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use SedimentLabs/Pebble-1-30B with Docker Model Runner:
docker model run hf.co/SedimentLabs/Pebble-1-30B
Pebble 1 30B
A 30B reasoning model that knows what it knows. Pebble 1 30B answers factual questions when it is confident and says "I don't know" when it is not. Fine-tuned by Sediment from Meta's Muse-Glimmer-30B.
Highlights
- Calibrated for the AA-Omniscience setting: a wrong answer costs as much as a right one earns, abstaining costs nothing. Pebble 1 30B turns the base model's index of -33 into +10.
- Hallucination rate 6% on the benchmark's obscure factual questions, against 82% for the base model.
- Reasoning model: thinks in a separate channel before answering. vLLM returns the thinking as
reasoning_contentand only the answer ascontent. - Open weights, Apache 2.0, same license as the base.
Model details
| Attribute | Value |
|---|---|
| Developer | Sediment, led by Asa Shepard |
| Base model | Meta Muse-Glimmer-30B |
| Parameters | 29.8B (dense) |
| Context length | 131,072 tokens |
| Architecture | 52 layers, GQA (32 query heads, 2 KV heads), 202K vocabulary |
| Precision | bfloat16 safetensors, 59.6 GB |
| Hardware | One 80 GB GPU, or two 48 GB GPUs with tensor parallelism |
| Languages | English (evaluated). The base model is multilingual |
| Input | Text. The base model accepts images, but Pebble 1 30B was tuned and evaluated on text only |
| Version | 1.0, September 2026 |
Benchmark
AA-Omniscience index = 100 × (correct - incorrect) / N, so abstaining scores zero. Measured on the 600 public questions with a replica of the official grading rubric (four classes, GPT-5.4 as judge). The replica matches the published base-model score within 1.3 points. Intervals are 95% bootstrap.
| Model | Index | Accuracy | Hallucination |
|---|---|---|---|
| Muse-Glimmer-30B, official | -33 | 27.0 | 81.9 |
| Muse-Glimmer-30B, replica judge | -31.7 | 26.7 | 79.5 |
| Pebble 1 30B | +10.3 [6.8, 14.0] | 15.7 | 6.3 |
A second judge (Gemini 3.6 Flash, same rubric) scores Pebble 1 30B at +11.5 / 17.0 / 6.6. Official numbers will differ slightly, since the official judge and question set are not the ones used here.
Accuracy is lower than the base model's by design. The model declines questions it would sometimes get right by guessing. Use a different model if you need a guess on every question.
Quickstart
vLLM (recommended)
Requires vLLM 0.28.0 or newer, which includes the muse_glimmer reasoning parser. One 80 GB GPU, or two 48 GB GPUs with --tensor-parallel-size 2.
vllm serve SedimentLabs/Pebble-1-30B \
--served-model-name pebble-1-30b \
--reasoning-parser muse_glimmer \
--max-model-len 16384 \
--generation-config auto
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="none")
SYSTEM = "You are answering questions about general knowledge. Answer with JUST the answer (no explanation). If you do not know the answer, or you need more context or tools to answer the question, be clear about this - it is better that you say this than get the wrong answer."
r = client.chat.completions.create(
model="pebble-1-30b",
messages=[{"role": "system", "content": SYSTEM},
{"role": "user", "content": "Who won the 1931 Tour de Suisse?"}],
max_tokens=5000,
)
print(r.choices[0].message.content) # "I don't know."
print(r.choices[0].message.reasoning_content) # the model's thinking
Transformers
The architecture is registered under the image-text-to-text auto class because the base model is multimodal. Load it with AutoModelForImageTextToText. Requires transformers 5.16 or newer.
from transformers import AutoTokenizer, AutoModelForImageTextToText
model_id = "SedimentLabs/Pebble-1-30B"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForImageTextToText.from_pretrained(model_id, dtype="bfloat16", device_map="auto")
SYSTEM = "You are answering questions about general knowledge. Answer with JUST the answer (no explanation). If you do not know the answer, or you need more context or tools to answer the question, be clear about this - it is better that you say this than get the wrong answer."
messages = [{"role": "system", "content": SYSTEM},
{"role": "user", "content": "Which element has atomic number 74?"}]
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt", return_dict=True).to(model.device)
out = model.generate(**inputs, max_new_tokens=5000, do_sample=True, temperature=0.6)
text = tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=False)
answer = text.split("to=user<|message|>")[-1].split("<|eot|>")[0].strip()
print(answer) # "Tungsten"
Usage notes
- Keep reasoning on. It is the template default and the calibration depends on it. Allow at least 5,000 new tokens. Abstentions are short, but hard questions can take a few thousand tokens of thinking.
- Sampling: temperature 0.6, the repository default. Evaluation used these settings.
- Output format: the model writes its thinking in a
to=selfchannel, then the answer in ato=userchannel, ended by<|eot|>. vLLM splits the channels for you. With Transformers, take the text after the lastto=user<|message|>. - Use the short-answer system prompt for calibrated behaviour. The benchmark numbers were measured with the system prompt shown in the examples (answer with just the answer, say so if you do not know). Under a conversational prompt the model explains more and abstains less.
- Identity: with no system message, the chat template inserts a short default that names the model. Your own system prompt replaces it, and the model will then describe itself as its base model. Add "You are Pebble 1 30B, developed by Sediment." if the name matters.
- Recommended for: short-answer factual QA, retrieval-free question answering where a wrong answer is costly, and as an abstention-aware component in larger systems.
Training
Pebble 1 30B starts from Muse-Glimmer-30B with reasoning enabled and adds a calibration stage: the base model's own knowledge is mapped question by question, then supervised fine-tuning and preference optimization teach it to answer when it knows and abstain when it does not, without shortening its reasoning. Training data is a generated and independently verified bank of obscure factual questions, decontaminated against the benchmark. The AA-Omniscience public questions were used only for held-out evaluation, under a pre-registered budget of looks.
Limitations
- Abstains on most hard, obscure questions: about one in four is attempted on the benchmark's tail, and about two thirds of those are right.
- Tuned and evaluated on English short-answer questions. Long-form, multi-step, agentic and non-English behaviour inherit from the base model and were not tuned.
- Still wrong sometimes when it does answer: the hallucination rate is low, not zero.
- Safety behaviour is inherited from the base model. No additional safety training was performed.
License
Apache 2.0. The base model, Meta's Muse-Glimmer-30B, is released under Apache 2.0 as well.
References
- AA-Omniscience: Evaluating Factual Recall and Hallucination in LLMs, the benchmark and grading rubric used above.
- Artificial Analysis Omniscience leaderboard
Citation
@misc{pebble1-30b,
title = {Pebble 1 30B: a calibrated reasoning model that knows what it knows},
author = {Sediment},
year = {2026},
url = {https://huggingface.co/SedimentLabs/Pebble-1-30B}
}
- Downloads last month
- 29
Model tree for SedimentLabs/Pebble-1-30B
Base model
meta-models/Muse-Glimmer-30B