--- license: apache-2.0 base_model: Qwen/Qwen3-1.7B pipeline_tag: text-generation library_name: transformers language: - en - it - es - zh - ru - hi datasets: - cs-552-2026-aaty/sft_mixture - cs-552-2026-aaty/grpo_mixture tags: - qwen3 - group-model - reasoning - sft - grpo - cs-552 - mnlp metrics: - accuracy --- # group_model Group model for team **AATY**, CS-552 MNLP (EPFL). It is `Qwen/Qwen3-1.7B` post-trained with supervised fine-tuning followed by GRPO, and is the whole-team submission evaluated on all four domains: math, general knowledge, safety, and multilinguality. Its leaderboard rank is the 4-domain average. ## Model details - **Base model:** `Qwen/Qwen3-1.7B` - **Post-training:** SFT (LoRA adapter, merged back into the base weights), then GRPO seeded from the SFT checkpoint with reward functions for the math and reasoning objectives - **Domains:** math (free-form, pass@8) and general knowledge, safety, multilinguality (multiple-choice, pass@1) - **Format:** vLLM-loadable safetensors with `config.json`, `generation_config.json`, and a tokenizer `chat_template` ## Output contract The model writes its reasoning and then wraps the final answer in `\boxed{...}`. The training mix covers both question styles, because the group model is scored on both: Free-form: ``` Q: What is the smallest prime greater than 100? A: ...reasoning... \boxed{101} ``` Multiple-choice (the boxed content is the option letter, with 2 to 20 options): ``` Q: Which of the following is a noble gas? A) Oxygen B) Argon C) Nitrogen D) Hydrogen A: ...reasoning... \boxed{B} ``` ## Thinking mode This model runs in **thinking mode**: it emits a `...` reasoning block before the final `\boxed{...}` answer. Thinking is forced on inside the chat template, because the evaluation passes only `tokenizer.apply_chat_template(messages, add_generation_prompt=True)` with no `enable_thinking` argument, so the template default is the only signal honored. The relevant line in `chat_template.jinja`: ```jinja {%- set enable_thinking = true %} ``` ## Usage ```python from transformers import AutoTokenizer, AutoModelForCausalLM tok = AutoTokenizer.from_pretrained("cs-552-2026-aaty/group_model") model = AutoModelForCausalLM.from_pretrained("cs-552-2026-aaty/group_model") messages = [{"role": "user", "content": "What is the capital of Australia?"}] prompt = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) inputs = tok(prompt, return_tensors="pt").to(model.device) out = model.generate(**inputs, max_new_tokens=512) print(tok.decode(out[0], skip_special_tokens=True)) ``` ## Training data - **SFT:** `cs-552-2026-aaty/sft_mixture`, the chat-formatted mixture built from public QA, knowledge, instruction, and math datasets. - **GRPO:** `cs-552-2026-aaty/grpo_mixture`, prompts with verifiable answers used for reward-driven optimization. See the team data pipeline in `code/data/` for the exact sources and filters.