Text Generation
Transformers
Safetensors
English
qwen3_5
image-text-to-text
kozu
reasoning
trace-inversion
synthetic-reasoning
chain-of-thought
conversational
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). | |