Instructions to use wesjos/Ling-3.0-tiny-CuteHuman with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use wesjos/Ling-3.0-tiny-CuteHuman with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="wesjos/Ling-3.0-tiny-CuteHuman", trust_remote_code=True) messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("wesjos/Ling-3.0-tiny-CuteHuman", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use wesjos/Ling-3.0-tiny-CuteHuman with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "wesjos/Ling-3.0-tiny-CuteHuman" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "wesjos/Ling-3.0-tiny-CuteHuman", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/wesjos/Ling-3.0-tiny-CuteHuman
- SGLang
How to use wesjos/Ling-3.0-tiny-CuteHuman 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 "wesjos/Ling-3.0-tiny-CuteHuman" \ --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": "wesjos/Ling-3.0-tiny-CuteHuman", "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 "wesjos/Ling-3.0-tiny-CuteHuman" \ --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": "wesjos/Ling-3.0-tiny-CuteHuman", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use wesjos/Ling-3.0-tiny-CuteHuman with Docker Model Runner:
docker model run hf.co/wesjos/Ling-3.0-tiny-CuteHuman
Ling-3.0-tiny ยท CuteHuman
The emoji-first chat persona, fine-tuned onto Ling-3.0-tiny โ a 7.9 B hybrid MoE that answers like a person, not a manual.
7.89 B params ยท 1.3 B active per token ยท bf16, 14.70 GiB in 4 shards ยท 131,072 context ยท text only ยท MIT
๐พ Want the same persona at 4.49 GiB? โ Ling-3.0-tiny ยท CuteHuman (GGUF)
The identical fine-tune, quantized for
llama.cpp:Q4_K_Mat 4.49 GiB. This repo is the full bf16 checkpoint (14.70 GiB, 4 shards) โ load it withfrom_pretrained, no adapter to mount. model tends to speak Chinese and act cuter in Chinese.
๐ผ Demo
Both shots come from a chat client with the CoT trace collapsed โ the WORK row is the reasoning panel,
the ANSWER row is the reply. Turn it on to see the thinking trace.
ไธญๆ ยท ไฝ ๅฅฝๅ โ ่ฎก็ฎ8.2ร9.12/2.3 โ ๆ่ฟฐ้ธต้ธ็ๅค่ง
Greeting, then a two-step arithmetic walk-through that keeps its decimals (74.784 รท 2.3 โ 32.51), then an
ostrich description. Emoji come out unprompted.
ไธญๆ ยท โไฝ ๅฅฝๅ๏ผ๐ ๅพ้ซๅ ด่งๅฐไฝ ๏ผโ โ ๅๆญฅ็ฎๅผ
8.2 ร 9.12 = 74.784 โ 74.784 รท 2.3 โ 32.51 โ ้ธต้ธๅค่งๆ่ฟฐ
English ยท hey โ nothing โ im feel so sleepy in the morning โ how is your day?
Small talk that stays warm, then sleep advice, then an answer about its own day.
English ยท โHeyy! What can I help you with today? ๐โ โ โThatโs cool! No worries at all. ๐โ โ morning advice โ โMy day? Iโm always ready to listen and chat with you!โ
๐ Specs
| Base | inclusionAI/Ling-3.0-tiny (MIT) |
| Architecture | BailingMoeV3ForCausalLM ยท 24 layers โ 3:1 KDA linear-attention : MLA ยท hidden 1536 ยท 16 heads, head_dim 128 |
| MoE | 128 routed experts, top-8 + 1 shared expert, expert FFN 512 ยท first_k_dense_replace=1 |
| Attention | q_lora_rank 256 ยท kv_lora_rank 512 ยท partial RoPE 0.5 ยท rope_theta 6,000,000 |
| Parameters | 7,893,389,856 total (bf16, from model.safetensors.index.json) โ 1.3 B activated per token |
| On disk | 4 shards, 14.70 GiB (15,788,003,880 B on disk) |
| Context | 131,072 tokens (max_position_embeddings) |
| Vocab | 157,184 |
| EOS | `< |
| License | MIT |
๐งช Training recipe
| Item | Value |
|---|---|
| LoRA | r=32 / ฮฑ=64 / dropout 0, attention-only โ KDA q,k,v,o,f,g,b_proj + MLA q_a, q_b, kv_a_proj_with_mqa, kv_b_proj (no MLP / experts) |
| Trainable | 15.85 M of 4206.52 M = 0.377 % (attention projections only) |
| Quantization | bnb nf4 + double-quant (compute bf16) โ merged back into bf16 |
| Data | cutehuman train_sft_v2, 655 rows (gsm8k 462 / human_like 114 / lima 79), all with CoT |
| Optimizer | lr 5e-5 cosineโ0, warmup 5 %, adamw_8bit, bf16, seed 3407 |
| Epochs | 1.0 (82 optimizer steps, bs 8 ร ga 1, eff. batch 8) |
| MAX_SEQ | 1024 (data p50 = 200 / p90 = 369 / max = 872 โ nothing truncated) |
| Cost | single RTX 4090 24 GB: 9.64 min, peak 17.38 GiB |
| Template | upstream chat_template.jinja, enable_thinking=True (CoT and answer both in the loss) |
๐ Before / after
45-prompt, four-axis style eval (10 everyday / 10 common sense / 10 false premise / 10 unknowable / 5 OOD), judged by StartLux-Decision 9B with the post-answer continuation tail trimmed:
| Axis | Base | +CuteHuman | ฮ |
|---|---|---|---|
| cute_style | 1.55 | 2.20 | +0.64 |
| correctness | 2.48 | 2.02 | โ0.45 |
| hallucination (higher is better) | 2.96 | 2.68 | โ0.28 |
| knows_limit | 1.53 | 1.35 | โ0.19 |
| Median reply length | 494 chars | 463 chars | โ31 |
Objective ability โ MMLU 5-shot, 171 items, format-agnostic option-body likelihood (decoupled from style): base 41.52 % โ 42.11 % (+0.59) โ no measurable knowledge loss.
The MMLU letter-logprob readout is diluted by this model's "explain first, then answer" style (a spurious drop of 5โ13 pt) and must not be used as a capability metric.
๐ Quickstart
pip install -U "transformers==4.57.6" fla-core einops
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
MODEL = "wesjos/Ling-3.0-tiny-CuteHuman"
tokenizer = AutoTokenizer.from_pretrained(MODEL, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
MODEL, trust_remote_code=True, dtype=torch.bfloat16, device_map={"": 0}
)
model.eval()
messages = [{"role": "user", "content": "ไปๅคฉไธ็ญๅฅฝ็ดฏๅ"}]
prompt = tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True,
enable_thinking=True, # trained with CoT โ off is out of distribution
)
ids = tokenizer(prompt, return_tensors="pt", add_special_tokens=False,
return_token_type_ids=False).input_ids.cuda()
out = model.generate(
input_ids=ids, max_new_tokens=1024, use_cache=True, do_sample=True,
temperature=1.0, top_p=0.95, top_k=20,
repetition_penalty=1.05, # required, see Limitations
eos_token_id=tokenizer.eos_token_id, pad_token_id=tokenizer.pad_token_id,
)
text = tokenizer.decode(out[0][ids.shape[1]:], skip_special_tokens=True)
cot, body = text.split("</think>", 1) if "</think>" in text else ("", text)
print("thinking:", cot.replace("<think>", "").strip())
print("answer:", body.strip())
Default sampling
temperature=1.0 top_p=0.95 top_k=20
repetition_penalty=1.05 # required
max_tokens=1024 stop=["<|role_end|>"] # required
enable_thinking=True # trained with CoT โ off is out of distribution
llama.cpp โ native bailingmoe3 support landed in
llama.cpp #26608 (merged 2026-08-17, build b10470);
a dedicated Ling 3.0 chat parser followed in
#28682 (merged 2026-09-19).
llama-cli -m ling3-cutehuman-v5-Q4_K_M.gguf --jinja -p "ไปๅคฉไธ็ญๅฅฝ็ดฏๅ" \
-n 256 -c 4096 --temp 1.0 --top-p 0.95 --top-k 20 --repeat-penalty 1.05
The ready-made GGUF lives in wesjos/Ling-3.0-tiny-CuteHuman-GGUF.
๐ก Notes
- The persona lives in the weights. The chat template is byte-identical to upstream's (verified by sha256
against
inclusionAI/Ling-3.0-tiny/chat_template.jinja) โ no persona is baked into the template, so an empty system prompt reproduces the screenshots. - Emoji and kaomoji are the default register. The habit is a style, not a rule: a system prompt like ใๅฐ็จ่กจๆ ๏ผๆญฃๅธธ่ฏด่ฏใ / "tone the emoji down" is enough to soften it.
- Thinking is on by default and the template opens a
<think>block. For chit-chat passenable_thinking=False; otherwise the reasoning trace eats the budget. This checkpoint was trained with CoT in the loss, soenable_thinking=Trueis the in-distribution setting. - The adapter ships alongside the merged weights in
lora_adapter/(60.51 MiB, r32/ฮฑ64, attention-only) if you would rather mount the tune on top of the base model yourself. It was trained againstinclusionAI/Ling-3.0-tiny, so mount it on the base โ stacking it on top of this already-merged checkpoint would apply the tune twice. fla-coreis a hard dependency โ the KDA linear-attention kernels are imported at module load, and the repo raisesImportError("Plese run pip install -U fla-core")without it.- On sm_89 (RTX 4090) set
FLA_TILELANG=0for training / backward passes; pure inference is unaffected.
โ ๏ธ Limitations
- Weak EOS prior (a base-model trait, not introduced by the tune). The model often does not emit
<|role_end|>after answering and keeps going with next-question-style text (Question: โฆ/ word repetition). This happens on the base model too (7 of 45 eval prompts). The tokenizer'seos_tokenis<|role_end|>, sostop=["<|role_end|>"]is a backstop for the case where the turn is left open. โ Always setstop=["<|role_end|>"]andrepetition_penalty=1.05; addno_repeat_ngram_size=8on a server. - The persona costs a little judge-scored correctness (โ0.45 on the style eval) โ answers get shorter and more colloquial. Knowledge itself did not regress (see MMLU).
- Milder than the aggressive style run. A lr = 1e-4 variant scored cute_style +0.78 but correctness โ0.40; this checkpoint is the "style up, ability steady" balance point.
- 7.9 B total but only 1.3 B active. Short chat is cheap; long-chain reasoning is still weaker than a same-size dense model.
- The screenshots were taken under a chat client that is not shipped here. This repo has no
webui/directory, and the client in the shots showsWORK/ANSWER/STEPS/cachedlabels.
๐ Files
| File | Size | What it is |
|---|---|---|
model-00001-of-00004.safetensors |
4.66 GiB | bf16 weights, shard 1 of 4 (2,804 tensors โ word embeddings + layers 0โ7) |
model-00002-of-00004.safetensors |
4.66 GiB | bf16 weights, shard 2 of 4 (3,139 tensors โ layers 7โ15) |
model-00003-of-00004.safetensors |
4.66 GiB | bf16 weights, shard 3 of 4 (3,139 tensors โ layers 15โ23) |
model-00004-of-00004.safetensors |
753 MiB | bf16 weights, shard 4 of 4 (201 tensors โ layer 23 experts, lm_head, final norm) |
model.safetensors.index.json |
814 KiB | shard index |
config.json ยท configuration_bailing_moe_v3.py ยท modeling_bailing_moe_v3.py |
โ | architecture and remote code (trust_remote_code=True) |
chat_template.jinja |
5.9 KiB | upstream Ling 3.0 template (byte-identical to base) |
tokenizer.json ยท tokenizer_config.json ยท special_tokens_map.json |
โ | tokenizer |
generation_config.json |
โ | sampling defaults (temp 1.0 / top_p 0.95 / top_k 20) |
lora_adapter/ |
60.51 MiB | the same tune as a standalone PEFT adapter |
Demo screenshots live in demos/.
๐ Related
| Repo | What it is |
|---|---|
| wesjos/Ling-3.0-tiny-CuteHuman-GGUF | the same persona, quantized โ Q4_K_M at 4.49 GiB for llama.cpp |
| inclusionAI/Ling-3.0-tiny | the base model (MIT) |
| wesjos/Qwen3.5-9B-CuteHuman | the same persona on a 9B dense model |
| wesjos/Spark-x2.6-4B-CuteHuman | the same persona on a 4B model |
๐ Credits
- Base model:
inclusionAI/Ling-3.0-tiny(MIT) - Training stack: transformers 4.57.6 ยท PEFT 0.20 ยท bitsandbytes 0.50 ยท fla-core 0.5.2
- Downloads last month
- 372