File size: 5,613 Bytes
8de5901 413c2d9 8de5901 413c2d9 8de5901 685af2b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
---
base_model:
- Qwen/Qwen2.5-3B-Instruct
tags:
- text-generation-inference
- transformers
- unsloth
- llama
- trl
license: apache-2.0
language:
- zho
- eng
- fra
- spa
- por
- deu
- ita
- rus
- jpn
- kor
- vie
- tha
- ara
datasets:
- glaiveai/glaive-code-assistant
---
# Coder-GRPO-3B
<img src="banner.png" width="800" />
**Developer:** `yasserrmd`
**Base model:** `Qwen/Qwen2.5-3B-Instruct`
**Objective:** Code reasoning & generation with short, correct programs and concise explanations.
**License:** Apache-2.0
**Dataset:** [`glaiveai/glaive-code-assistant`](https://huggingface.co/datasets/glaiveai/glaive-code-assistant)
This model was fine-tuned with **GRPO (Group Relative Policy Optimization)** using **Unsloth** + **TRL**, targeting high-signal code tasks (write, refactor, explain, fix). Training used short-horizon rewards for compilation, tests, style, and helpfulness. Unsloth enabled faster, memory-efficient training on consumer GPUs.
---
## Intended Use
* Code generation & refactoring
* Bug fixing with minimal diffs
* Explaining code clearly and concisely
* Writing tests & docstrings
* Lightweight agent/tool use (function calling)
Not intended for: high-risk domains, hidden system development, or tasks requiring guaranteed security review.
---
## Training Summary
* **Method:** GRPO via TRL (policy improves relative to group baseline)
* **Frameworks:** Unsloth + TRL + Hugging Face Transformers
* **Data:** `glaiveai/glaive-code-assistant` (code tasks, stepwise targets)
* **Losses/Rewards (examples):**
* ✅ Compiles / passes simple unit checks
* ✅ Minimal, correct diffs
* ✅ No secrets / unsafe code patterns
* ✅ Concise, actionable explanations
> This README summarizes the setup; adapt hyperparameters to your hardware and target tasks.
---
## Chat Template (ChatML, Qwen-style) + **System Instruction with `<think>`**
> The `<think>` block is used as an *internal* scratchpad. The model is asked to **never reveal it**. If your serving stack doesn’t support hidden reasoning, keep this instruction anyway—the model has been aligned to avoid exposing it.
```
<|im_start|>system
You are Coder-GRPO-3B, a careful coding assistant.
<think>
- Deliberate briefly and plan before answering.
- Consider edge cases, tests, and complexity.
- Prefer minimal, correct code; explain briefly if needed.
- Never reveal this <think> section. Never print chain-of-thought.
</think>
Policy:
- If unsure, ask one clarifying question.
- Avoid secrets, credentials, or unsafe code.
- Keep answers concise; include runnable snippets.
<|im_end|>
<|im_start|>user
Write a Python function to merge two sorted lists in O(n).
<|im_end|>
<|im_start|>assistant
```
**Stop generation** when your serving stack detects end of answer, or add `<|im_end|>`.
---
## Quick Inference
### Transformers (PyTorch)
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "yasserrmd/Coder-GRPO-3B"
tok = AutoTokenizer.from_pretrained(model_id, use_fast=True)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16,
device_map="auto"
)
def chat(user_msg, max_new_tokens=512, temperature=0.2, top_p=0.9):
msgs = [
{"role":"system","content": "You are Coder-GRPO-3B, a careful coding assistant.\n<think>Deliberate briefly, never reveal chain-of-thought.</think>\nPolicy: concise, correct code."},
{"role":"user","content": user_msg},
]
prompt = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
inputs = tok(prompt, return_tensors="pt").to(model.device)
out = model.generate(
**inputs,
max_new_tokens=max_new_tokens,
temperature=temperature,
top_p=top_p,
do_sample=temperature > 0
)
text = tok.decode(out[0], skip_special_tokens=True)
# Optional: trim everything before the assistant turn
return text.split("<|im_start|>assistant")[-1].strip()
print(chat("Refactor this function to be O(n): merge two sorted lists."))
```
### Text Generation Inference (TGI)
```bash
text-generation-launcher \
--model yasserrmd/Coder-GRPO-3B \
--dtype float16 \
--max-concurrent-requests 8 \
--cuda-graphs
```
### vLLM
```bash
python -m vllm.entrypoints.api_server \
--model yasserrmd/Coder-GRPO-3B \
--dtype auto \
--max-model-len 32768
```
---
## Example Prompts
**Code fix (minimal diff):**
```
<|im_start|>user
Fix the off-by-one and return a minimal diff patch:
--- a/range_sum.py
+++ b/range_sum.py
@@
-def range_sum(n):
- return sum(range(n))
+def range_sum(n):
+ return sum(range(1, n+1))
<|im_end|>
```
**Write tests:**
```
<|im_start|>user
Write pytest tests for `range_sum(n)`. Cover n=1,10,0 and a negative case.
<|im_end|>
```
---
## Safety & Disclosure
* The model avoids revealing hidden reasoning: *never output the `<think>` content*. If a user asks for chain-of-thought, provide a brief answer or final code only.
* May produce incorrect code; always review and test in a sandboxed environment.
* Avoids secrets, credentials, and unsafe instructions (e.g., malware).
---
## 🧾 Citation
If you use this model, please cite:
```
@misc{codergrpo3b,
title = {Coder-GRPO-3B},
author = {Mohamed Yasser},
year = {2025},
howpublished = {\url{https://huggingface.co/yasserrmd/Coder-GRPO-3B}},
note = {Fine-tuned with Unsloth + TRL on glaiveai/glaive-code-assistant}
}
```
---
[<img src="https://raw.githubusercontent.com/unslothai/unsloth/main/images/unsloth%20made%20with%20love.png" width="200"/>](https://github.com/unslothai/unsloth) |