CoolFace
Modelpublic

roskosmos19/Rhea-4B-Coding-max

sourceHugging Faceapache-2.0updated 5d agoView on Hugging Face
2likes521downloads
README.md325 linesDownload Raw Back to root
1---2datasets:3- Aquiles-ai/Athenea-Coding-100k4- roskosmos19/Rhea-Coding5license: apache-2.06tags:7- code8- agent9- merge10- uncensored11- Rhea12- multi-pass13- reasoning14- Claude15- Mythos16- max17- xhigh18language:19- en20pipeline_tag: text-generation21library_name: transformers22base_model:23- Aquiles-ai/Athenea-4B-Coding24---25 26<h1 align="center">Rhea 4B Coding</h1>27 28![image](rheamodel.png)29 30**Rhea-4B-Coding** is an optimized version of [Aquiles-ai/Athenea-4B-Coding](https://huggingface.co/Aquiles-ai/Athenea-4B-Coding), specialized in **code reasoning, debugging, agentic tools and multi-pass problem solving**.31 32Trained on high-quality programming data with explicit reasoning traces using ` thinking` and ` 思考结束` tags, the model is designed to perform detailed **3-pass reasoning** for software development, algorithm design, and code comprehension tasks:33 341. **Pass 1**: First implementation352. **Pass 2**: Self-review for bugs, edge cases, security, performance363. **Pass 3**: Final optimized version with identical functionality37 38> ⚠️ **Important Note:** This model uses an *uncensored* base version, providing full expressive freedom and unrestricted output generation. Users are fully responsible for any use or content produced by the model. It is intended exclusively for research and experimentation purposes.39 40## 🎯 Model Description41 42Rhea-4B-Coding extends Athenea-4B-Coding's structured reasoning capabilities into programming-related domains with **multi-pass processing**, showing strong performance on logical problem-solving, code completion, debugging scenarios, and iterative code refinement.43 44Key features:45 46* **Multi-Pass Processing**: 3-step reasoning with `<think>`, `<review>`, and `<final>` tags47* **Agentic Tools** for AI Agents48* **Step-by-step code reasoning** within ` thinking` blocks49* **Self-review capabilities** for bug detection and optimization50* **Specialization in algorithmic and debugging tasks**51* **Uncensored output generation** for full reasoning visibility52* **Improved logical consistency** through focused fine-tuning53* **Compatible with open inference frameworks** (Transformers, vLLM, etc.)54 55The model was fine-tuned using the dataset [Aquiles-ai/Athenea-Coding-100k](https://huggingface.co/datasets/Aquiles-ai/Athenea-Coding-100k), which includes diverse programming challenges, structured reasoning chains, and natural language explanations across multiple programming languages.56 57## 🔄 Multi-Pass Architecture58 59The model uses special tokens for structured reasoning:60 61| Token | Purpose |62|-------|---------|63| `<think>` | Start of self-review phase (Pass 2) |64| `</think>` | End of self-review phase |65| `<review>` | Start of review results documentation |66| `</review>` | End of review results |67| `<final>` | Start of final optimized version (Pass 3) |68| `</final>` | End of final version |69 70This structure ensures **identical functionality** across all passes while improving **code structure, comments, and robustness**.71 72## 💻 Usage73 74### Installation75 76```bash77uv pip install transformers torch accelerate78```79 80### Basic Inference81 82```python83from transformers import AutoModelForCausalLM, AutoTokenizer84import torch85 86model = AutoModelForCausalLM.from_pretrained("Roskosmos19/Rhea-4B-Coding",87        dtype=torch.bfloat16,88        trust_remote_code=True,89        device_map="auto",90        attn_implementation="flash_attention_2") # Requires flash-attn91 92# Without flash-attn:93# model = AutoModelForCausalLM.from_pretrained("Roskosmos19/Rhea-4B-Coding",94#     dtype="auto",95#     device_map="auto"96# )97 98tokenizer = AutoTokenizer.from_pretrained("Roskosmos19/Rhea-4B-Coding", trust_remote_code=True)99 100messages = [101    {"role": "user", "content": "Hey, write a Python function that calculates the factorial of a number recursively."}102]103 104inputs = tokenizer.apply_chat_template(105    messages,106    add_generation_prompt=True,107    tokenize=True,108    return_dict=True,109    return_tensors="pt",110).to('cuda')111 112with torch.no_grad():113    output = model.generate(114        **inputs,115        max_new_tokens=16384,  # Increased for multi-pass output116        pad_token_id=tokenizer.pad_token_id,117        eos_token_id=tokenizer.eos_token_id,118    )119 120# Decode and print the output121print(tokenizer.decode(output[0], skip_special_tokens=False))122```123 124### Multi-Pass Inference (Recommended)125 126```python127from transformers import AutoModelForCausalLM, AutoTokenizer128import torch129 130model = AutoModelForCausalLM.from_pretrained("Roskosmos19/Rhea-4B-Coding",131        dtype=torch.bfloat16,132        trust_remote_code=True,133        device_map="auto")134 135tokenizer = AutoTokenizer.from_pretrained("Roskosmos19/Rhea-4B-Coding", trust_remote_code=True)136 137def generate_multi_pass(prompt, max_tokens_per_pass=4096):138    """139    Generate code with 3-pass reasoning:140    Pass 1: First implementation141    Pass 2: Self-review142    Pass 3: Final optimized version143    """144    145    # Pass 1: First implementation146    messages = [{"role": "user", "content": prompt}]147    inputs = tokenizer.apply_chat_template(148        messages,149        add_generation_prompt=True,150        tokenize=True,151        return_dict=True,152        return_tensors="pt",153    ).to('cuda')154    155    with torch.no_grad():156        output1 = model.generate(157            **inputs,158            max_new_tokens=max_tokens_per_pass,159            temperature=0.4,160            pad_token_id=tokenizer.pad_token_id,161            eos_token_id=tokenizer.eos_token_id,162        )163    164    pass1 = tokenizer.decode(output1[0], skip_special_tokens=False)165    166    # Pass 2: Self-review167    review_prompt = pass1 + "\n<<think>\n### PASS 2 - Self-Review:\n"168    inputs2 = tokenizer(review_prompt, return_tensors="pt").to('cuda')169    170    with torch.no_grad():171        output2 = model.generate(172            **inputs2,173            max_new_tokens=2048,174            temperature=0.3,175            pad_token_id=tokenizer.pad_token_id,176            eos_token_id=tokenizer.eos_token_id,177        )178    179    review = tokenizer.decode(output2[0], skip_special_tokens=False)180    181    # Pass 3: Final version182    final_prompt = review + "\n<<final>\n### PASS 3 - Final Version:\n"183    inputs3 = tokenizer(final_prompt, return_tensors="pt").to('cuda')184    185    with torch.no_grad():186        output3 = model.generate(187            **inputs3,188            max_new_tokens=max_tokens_per_pass,189            temperature=0.2,190            pad_token_id=tokenizer.pad_token_id,191            eos_token_id=tokenizer.eos_token_id,192        )193    194    final = tokenizer.decode(output3[0], skip_special_tokens=False)195    196    return {197        "pass1": pass1,198        "review": review,199        "pass3": final200    }201 202# Example usage203result = generate_multi_pass("Write a Python function for binary search")204print("=== PASS 1 ===")205print(result["pass1"])206print("\n=== REVIEW ===")207print(result["review"])208print("\n=== FINAL ===")209print(result["pass3"])210```211 212### Streaming Inference213 214```python215from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer216import torch217from threading import Thread218 219model = AutoModelForCausalLM.from_pretrained("Roskosmos19/Rhea-4B-Coding",220        dtype=torch.bfloat16,221        trust_remote_code=True,222        device_map="auto",223        attn_implementation="flash_attention_2")224 225tokenizer = AutoTokenizer.from_pretrained("Roskosmos19/Rhea-4B-Coding", trust_remote_code=True)226 227messages = [228    {"role": "user", "content": "Hey, write a Python function that implements the binary search algorithm recursively."}229]230 231inputs = tokenizer.apply_chat_template(232    messages,233    add_generation_prompt=True,234    tokenize=True,235    return_dict=True,236    return_tensors="pt",237).to('cuda')238 239# Create the streamer240streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=False)241 242# Build kwargs for generate243generate_kwargs = dict(244    **inputs,245    max_new_tokens=16384,  # Increased for multi-pass output246    pad_token_id=tokenizer.pad_token_id,247    eos_token_id=tokenizer.eos_token_id,248    streamer=streamer,249)250 251def _generate_thread(model, kwargs):252    with torch.no_grad():253        model.generate(**kwargs)254 255thread = Thread(target=_generate_thread, args=(model, generate_kwargs))256thread.start()257 258for chunk in streamer:259    print(chunk, end="", flush=True)260```261 262### Production Deployment with vLLM263 264**Start server:**265 266```bash267vllm serve Roskosmos19/Rhea-4B-Coding \268  --host 0.0.0.0 \269  --port 8000 \270  --api-key dummyapikey \271  --max-model-len=262144 \272  --async-scheduling \273  --gpu-memory-utilization=0.90274```275 276**Request to the server from the OpenAI client:**277 278```python279from openai import OpenAI280client = OpenAI(api_key="dummyapikey", base_url="http://127.0.0.1:8000/v1")281stream = client.chat.completions.create(282    model="roskosmos19/Rhea-4B-Coding",283    messages=[{284        "role": "user",285        "content": "Hey, write a Python function that determines if a string is a palindrome, ignoring case, spaces, and punctuation."286    }],287    max_tokens=16384,  # Increased for multi-pass output288    stream=True289)290for chunk in stream:291    if chunk.choices[0].delta.content:292        print(chunk.choices[0].delta.content, end="", flush=True)293```294 295**vLLM Benefits:** 20-30x faster inference, OpenAI-compatible API, continuous batching, async scheduling.296 297## 📝 Model Configuration298 299| Parameter | Value | Description |300|-----------|-------|-------------|301| `temperature` | 0.4 | Balanced creativity and consistency |302| `max_new_tokens` | 32768 | Full multi-pass output capacity |303| `repetition_penalty` | 1.0 | No penalty for intentional code repetition |304| `no_repeat_ngram_size` | 0 | Allows code structure repetition |305| `use_cache` | true | Faster inference for long outputs |306 307## ⚙️ Files Modified for Multi-Pass308 309| File | Changes |310|------|---------|311| `generation_config.json` | Extended tokens, optimized for multi-pass |312| `config.json` | Enabled caching, full context window |313| `tokenizer_config.json` | Added `<think>`, `<review>`, `<final>` tokens |314| `special_tokens_map.json` | Registered new special tokens |315| `chat_template.jinja` | 3-pass prompt structure |316 317## 🤝 Credits318 319- Base model: [Aquiles-ai/Athenea-4B-Coding](https://huggingface.co/Aquiles-ai/Athenea-4B-Coding)320- Dataset: [Aquiles-ai/Athenea-Coding-100k](https://huggingface.co/datasets/Aquiles-ai/Athenea-Coding-100k)321- Architecture: Qwen3 4B322 323<p align="center">324  Roskosmos19325</p>