Instructions to use Michael-Kozu/Kuiper-R1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Michael-Kozu/Kuiper-R1 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="Michael-Kozu/Kuiper-R1") 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("Michael-Kozu/Kuiper-R1") model = AutoModelForMultimodalLM.from_pretrained("Michael-Kozu/Kuiper-R1") 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 Michael-Kozu/Kuiper-R1 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Michael-Kozu/Kuiper-R1" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Michael-Kozu/Kuiper-R1", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/Michael-Kozu/Kuiper-R1
- SGLang
How to use Michael-Kozu/Kuiper-R1 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 "Michael-Kozu/Kuiper-R1" \ --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": "Michael-Kozu/Kuiper-R1", "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 "Michael-Kozu/Kuiper-R1" \ --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": "Michael-Kozu/Kuiper-R1", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use Michael-Kozu/Kuiper-R1 with Docker Model Runner:
docker model run hf.co/Michael-Kozu/Kuiper-R1
Kuiper-R1 — Evaluation Report
Held-out benchmark: Jackrong/DeepSeek-V4-Distill-8000x (inverted). n=200 rows. Cross-lineage generalization: training teacher QwQ-32B (OpenThoughts3) vs benchmark teacher DeepSeek-V4-Flash (GLM-5.1 prompts) — disjoint lineages.
Decoding: temperature 0.4, thinking disabled (the reasoning-model base otherwise emits a <think> preamble that eats the token budget). Scorer is deterministic (stdlib).
Results: untouched base vs SFT vs ORPO (release)
| Metric | Untouched base | Kuiper SFT | Kuiper ORPO (release) |
|---|---|---|---|
| final-answer preserved (exact) | 0.155 | 0.805 | 0.820 |
| final-answer preserved (soft) | 0.735 | 0.805 | 0.825 |
| format valid (3-tag contract) | 0.980 | 0.850 | 0.880 |
| no invented tool outputs | 1.000 | 1.000 | 1.000 |
| no contradiction | 1.000 | 0.995 | 0.990 |
| no repetition collapse | 0.980 | 0.840 | 0.825 |
| expansion quality (mean) | 0.791 | 0.725 | 0.769 |
| depth-to-concision (mean) | 0.222 | 0.221 | 0.226 |
| semantic consistency w/ bubbles (mean) | 0.708 | 0.515 | 0.535 |
| trace vs reference similarity (mean) | 0.306 | 0.171 | 0.182 |
| overall (mean) | 0.329 | 0.492 | 0.504 |
Verdict
The fine-tune's decisive contribution is byte-exact final-answer preservation (0.155 → 0.820, a 5.3× gain), plus a higher overall score (0.504 vs 0.329). ORPO improves the SFT on format validity, expansion quality, semantic consistency, and answer preservation.
Honest caveat: the untouched base still scores higher on raw trace polish (format 0.980 vs 0.880; semantic consistency 0.708 vs 0.535). This is expected: Qwythos is a strong instruction-follower and the target format is spelled out in the system prompt, so it already produces well-formed, thoughtful traces — but it does not preserve the given final answer (0.155). Kuiper's value is teaching exact preservation while keeping trace quality close. Training on longer (un-truncated) traces and more data would close the remaining quality gap; both are single-GPU-time limited here (see model card).
Safety metrics are clean across the board: no invented tool outputs (1.000), no contradiction (~1.0), no repetition collapse (>0.82), and every output is an explicitly labeled <synthetic_trace> — no claim of being any proprietary model's real reasoning.
Release model: merged-fp16-orpo (best overall + best preservation).