Training
Qwen3-1.7B-Base -> CPT -> SFT -> GRPO -> OPD
Table with columns: Stage, Description| Stage | Description |
|---|
| Continued pre-training (CPT) | Approximately 20B tokens of mixed domain and general text. |
| Supervised fine-tuning (SFT) | Public instruction-following and reasoning datasets. |
| GRPO | Post-training on public reasoning datasets with task-specific rewards. |
| On-policy distillation (OPD) | Trained using synthetic data with Qwen3-32B as the teacher. |
Benchmark results
Table with columns: Benchmark, Score (0-100)| Benchmark | Score (0-100) |
|---|
| LawBench | 47.07 |
| LexEval | 50.57 |
| LexGenius | 54.93 |
| LexRel | 61.55 |
| MSLR | 63.61 |
| CMMLU | 55.52 |
| C-Eval | 53.01 |
| MMLU | 55.87 |
| GSM8K | 81.35 |
| MATH-500 | 60.80 |
| IFEval | 55.27 |
| GPQA-Diamond | 16.16 |
Generation settings
Table with columns: Setting, Value| Setting | Value |
|---|
| Precision | BF16 |
| Thinking mode | Enabled |
| Context limit | 32,768 tokens |
| Temperature | 0.7 |
| Top-p | 0.98 |
| Repetition penalty | 1.1 |
| Presence penalty | 0.4 |
| Frequency penalty | 0.0 |
| EOS token ID | 151645 |
These five sampling defaults are stored in generation_config.json. Transformers automatically applies temperature, top-p, and repetition penalty. Its native generate() does not implement presence or frequency penalties. For vLLM, support for loading these defaults depends on the version; pass all five sampling parameters explicitly in chat completion requests to reproduce these settings.
Usage
Repository ID: Fengnan001/FNova-1.7B-Chat-v1.
Install the inference packages:
pip install -U transformers torch accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM model_id = "Fengnan001/FNova-1.7B-Chat-v1"tokenizer = AutoTokenizer.from_pretrained(model_id)model = AutoModelForCausalLM.from_pretrained( model_id, dtype="auto", device_map="auto",)model.eval() messages = [{"role": "user", "content": "What is 2 + 2? Answer with one digit only."}]inputs = tokenizer.apply_chat_template( messages, tokenize=True, add_generation_prompt=True, enable_thinking=False, return_dict=True, return_tensors="pt",).to(model.device) outputs = model.generate(**inputs, max_new_tokens=128, do_sample=False)response = tokenizer.decode( outputs[0, inputs["input_ids"].shape[-1]:], skip_special_tokens=True,)print(response)
This deterministic example requests a short reply. For sampled reasoning, set enable_thinking=True, omit do_sample=False, and allow a larger max_new_tokens budget.
The model can also be loaded from a downloaded directory by setting model_id to the directory containing config.json and model.safetensors. The checkpoint was originally saved with Transformers 5.16.1. Inference caching is enabled in the release configuration. Local BF16 loading and generation were verified with Transformers 4.57.1 and 5.20.2, PyTorch 2.14.1, and Accelerate 1.15.0.
For vLLM:
vllm serve Fengnan001/FNova-1.7B-Chat-v1 \ --generation-config auto \ --dtype bfloat16 \ --max-model-len 32768 \ --hf-overrides '{"rope_theta": 1000000.0}' \ --reasoning-parser qwen3
Keep tokenizer.json, tokenizer_config.json, and chat_template.jinja alongside the model files. vLLM loads this repository's tokenizer unless another tokenizer is selected explicitly.
License
FNova-1.7B-Chat-v1 is released under the Apache License 2.0; see LICENSE. The model weights and configuration are derived from Qwen3-1.7B-Base and modified through continued pre-training and post-training by Fengnan001. Original upstream copyright and attribution notices are retained in LICENSE.