Instructions to use DRUPEs/CherryPit-1.2-2B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use DRUPEs/CherryPit-1.2-2B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="DRUPEs/CherryPit-1.2-2B") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("DRUPEs/CherryPit-1.2-2B") model = AutoModelForCausalLM.from_pretrained("DRUPEs/CherryPit-1.2-2B", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.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=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use DRUPEs/CherryPit-1.2-2B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "DRUPEs/CherryPit-1.2-2B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "DRUPEs/CherryPit-1.2-2B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/DRUPEs/CherryPit-1.2-2B
- SGLang
How to use DRUPEs/CherryPit-1.2-2B 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 "DRUPEs/CherryPit-1.2-2B" \ --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": "DRUPEs/CherryPit-1.2-2B", "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 "DRUPEs/CherryPit-1.2-2B" \ --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": "DRUPEs/CherryPit-1.2-2B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use DRUPEs/CherryPit-1.2-2B with Docker Model Runner:
docker model run hf.co/DRUPEs/CherryPit-1.2-2B
CherryPit-1.2-2B
CherryPit-1.2-2B is the third release of CherryPit from DRUPEs (Dense Representation & Unified Parameter Encoding Systems), built on MiniCPM5-2B. It is much better at combining things: web apps that need two, three or four features in one component now pass 1.5x to 4x as often as with CherryPit-1.1, while single features, coding, math and instruction following all went up a little. It also stops dropping its own name into ordinary answers. Same size, architecture and speed as 1.0 and 1.1.
Results vs CherryPit-1.1
Both models were run on the same harness, items, prompts and seeds (bf16 weights in vLLM). We fixed a harness bug (text-path evals were fed two start-of-text tokens), so 1.1's numbers here are re-measured and differ from its card.
| Benchmark | Setting | CherryPit-1.1 | CherryPit-1.2 | Δ |
|---|---|---|---|---|
| Web development | ||||
| WebApp1K-React, 1 feature | no thinking, 1,000 tasks | 81.9 | 82.7 | +0.8 |
| WebApp1K Duo, 2 features in one component | no thinking, 1,000 tasks | 31.6 | 48.8 | +17.2 |
| WebApp1K Trio, 3 features | no thinking, 1,000 tasks | 16.8 | 44.9 | +28.1 |
| WebApp1K Quartet, 4 features | no thinking, 1,000 tasks | 6.6 | 28.3 | +21.7 |
| Coding | ||||
| LiveCodeBench v6 | no thinking, avg of 4 | 36.6 | 38.3 | +1.7 |
| LiveCodeBench v6 | thinking, 8K | 45.7 | 47.4 | +1.7 |
| HumanEval+ | no thinking, greedy | 82.9 | 84.1 | +1.2 |
| MBPP+ | no thinking, greedy | 67.2 | 68.0 | +0.8 |
| Math | ||||
| MATH-500 | no thinking, greedy | 87.8 | 90.6 | +2.8 |
| AIME 2025 + 2026 | thinking, 32K, 2 samples each | 70.0 | 67.5 | −2.5 (not significant) |
| Instruction following | ||||
| IFEval | strict, prompt level | 87.4 | 88.7 | +1.3 |
- The web-app training used only our own generated tasks, never WebApp1K, so the Duo / Trio / Quartet gains are on a benchmark the model has not seen.
- No benchmark got significantly worse: every row was checked per item (paired sign tests) against 1.0 and 1.1.
What's new in 1.2
- Composition training: reinforcement learning on generated multi-feature web apps and multi-step code pipelines.
- Self-taught rounds: the model trained on its own answers that passed the tests on combined features, mixed with its own correct single-feature and Python answers so it did not forget anything.
- A better default prompt: with no system prompt, the model introduces itself only when it is asked who it is.
Model Details
- Developed by: DRUPEs
- Model type: Causal language model
- Parameters: ~2B
- Base model: MiniCPM5-2B
- Previous version: CherryPit-1.1-2B
- Architecture: Standard Llama
- Context length: 128K tokens (131,072)
- Tool calling: Supported (via the built-in chat template)
- Language(s): English
- License: Apache 2.0
- Version: 1.2
How to Use
Full-precision (bf16) weights for transformers, vLLM and further fine-tuning. For llama.cpp, Ollama or LM Studio use DRUPEs/CherryPit-1.2-2B-GGUF.
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("DRUPEs/CherryPit-1.2-2B")
model = AutoModelForCausalLM.from_pretrained("DRUPEs/CherryPit-1.2-2B", torch_dtype="bfloat16", device_map="auto")
msgs = [{"role": "user", "content": "Build a React component with a search box and a list that loads on open."}]
ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(ids, max_new_tokens=8192, do_sample=True, temperature=1.0, top_p=0.95)
print(tok.decode(out[0][ids.shape[1]:], skip_special_tokens=True))
vllm serve DRUPEs/CherryPit-1.2-2B --max-model-len 32768
Recommended sampling: temperature 1.0, top_p 0.95. The template starts in thinking mode; pass
enable_thinking=False to apply_chat_template (vLLM: chat_template_kwargs) for short, direct answers.
Limitations
- It is a 2B model: it can be confidently wrong, so check answers that matter.
- Combining features is much better but not solved: four features in one component pass 28% of the time vs 83% for one.
- Long-budget math (32K-token thinking) is about level with 1.1, not better.
- With thinking off, about 1 in 20 answers to "What model are you?"-type questions still gives its base model's name.
- Tested in English only.
- Downloads last month
- 147
Model tree for DRUPEs/CherryPit-1.2-2B
Base model
openbmb/MiniCPM5-2B