| | --- |
| | language: en |
| | license: apache-2.0 |
| | library_name: transformers |
| | tags: |
| | - text-generation |
| | - competitive-programming |
| | - code-generation |
| | - cpp |
| | - unsloth |
| | - llama |
| | - trl |
| | base_model: unsloth/llama-3.1-8b-instruct-bnb-4bit |
| | datasets: |
| | - Redhanuman/soltra-codeforces-cpp-elite-10k |
| | --- |
| | |
| | ## Soltra: A Llama-3.1 8B Fine-tune for Elite Competitive Programming |
| | _This isn't your average "hello world" code-gen model._ |
| |
|
| | Ever been stuck on a Codeforces problem and wished you had a buddy who's already grinded thousands of them? That's Soltra. This model was fine-tuned with a very specific mission: to be a high-level thought partner for **elite-level competitive programming (1800-2600 rating)**, focusing exclusively on **C++**. |
| |
|
| | It's designed to help you break down complex problems, generate solid C++ implementations, and understand the underlying algorithmic patterns. |
| |
|
| | --- |
| |
|
| | ### The Secret Sauce: Curated, No-Fluff Data 🧠 |
| |
|
| | We all know the rule: garbage in, garbage out. The reason Soltra performs well is the data it was trained on. This wasn't a random scrape. I built a custom pipeline to create a dataset of gold-standard solutions. |
| |
|
| | The model was trained on my **[soltra-codeforces-cpp-elite-10k](https://huggingface.co/datasets/Redhanuman/soltra-codeforces-cpp-elite-10k)** dataset, which was filtered with these strict rules: |
| | * **Problem Rating:** Only problems between **1800 and 2600**. No beginner stuff. |
| | * **Verdict:** Only submissions with a **`verdict: 'OK'`**. This model only learns from code that works. |
| | * **Language:** C++ only, sourced from a massive pool of 3 million submissions. |
| | * **Rich Context:** Each entry includes the problem statement, rating, and tags, teaching the model to connect the problem description to the solution structure. |
| |
|
| | --- |
| |
|
| | ### Under the Hood: The Tech Stack 🛠️ |
| |
|
| | This was a classic solo-dev project running on a tight budget. Here’s what’s powering Soltra: |
| |
|
| | * **Base Model:** `unsloth/llama-3.1-8b-instruct-bnb-4bit` - A powerful and modern foundation. |
| | * **Fine-tuning:** [Unsloth](https://github.com/unslothai/unsloth) + Hugging Face's TRL for a 2x speed boost and 50%+ less memory usage. |
| | * **Quantization:** 4-bit quantization, making it possible to train and run this on a single free Colab T4 GPU. |
| | * **Hardware:** One motivated developer and one T4 GPU. That's it. |
| |
|
| | --- |
| |
|
| | ### How to Use Soltra 🚀 |
| |
|
| | Alright, enough talk. Here's the boilerplate to get this running. Since these are LoRA adapters, you first load the base model and then apply the fine-tuned weights on top. |
| |
|
| | ```python |
| | from unsloth import FastLanguageModel |
| | import torch |
| | |
| | # The original base model |
| | base_model_name = "unsloth/llama-3.1-8b-Instruct-bnb-4bit" |
| | |
| | # STEP 1: Load the base model and tokenizer |
| | model, tokenizer = FastLanguageModel.from_pretrained( |
| | model_name = base_model_name, |
| | max_seq_length = 4096, |
| | dtype = None, |
| | load_in_4bit = True, |
| | ) |
| | |
| | # STEP 2: Apply your fine-tuned adapters from the Hub |
| | # This is where you load Soltra's brain |
| | model = FastLanguageModel.from_pretrained( |
| | model = model, |
| | model_name = "Redhanuman/soltra-llama-3.1-8b-cpp-adapters", # Your repo on the Hub |
| | ) |
| | |
| | # --- Now, run inference --- |
| | # The prompt must be in the same format the model was trained on. |
| | prompt = """<|begin_of_text|><|start_header_id|>user<|end_header_id|> |
| | |
| | Solve this competitive programming problem by providing a step-by-step thought process and then the final code. |
| | |
| | **Problem:** C. Registration System |
| | **Rating:** 1500 |
| | **Tags:** data structures, strings, maps |
| | |
| | **Problem Statement:** |
| | A new user registration system is being developed. When a new user wants to register, they enter a desired username. If this name is not already in the database, it's added, and the user receives an "OK" message. If the name is already taken, the system appends a number to the name to make it unique. The first time a name is duplicated, it appends '1', the second time '2', and so on. Given a sequence of username registration attempts, output the system's response for each. |
| | |
| | **Provide:** |
| | 1. **Thought Process:** A brief explanation of the logic, data structures, and algorithm used. |
| | 2. **C++ Solution:** An efficient and correct solution in C++.<|eot_id|><|start_header_id|>assistant<|end_header_id|>""" |
| | |
| | inputs = tokenizer([prompt], return_tensors="pt", truncation=False).to("cuda") |
| | |
| | # Generate the response |
| | with torch.no_grad(): |
| | outputs = model.generate(**inputs, max_new_tokens=512, use_cache=True) |
| | response = tokenizer.batch_decode(outputs) |
| | |
| | # Print the generated part of the response |
| | print(response[0].split("<|start_header_id|>assistant<|end_header_id|>")[1].replace("<|eot_id|>", "").strip()) |
| | ``` |
| | ### Intended Use & Limitations ⚠️ |
| |
|
| |
|
| | * **Use it for:** Getting ideas on difficult problems, understanding common C++ patterns for certain tags (like DP or graphs), and generating boilerplate code for standard algorithms. |
| | * **Don't use it for:** Blindly copy-pasting into a contest. The model might not always produce the most optimal solution, and it might hallucinate on edge cases it hasn't seen. |
| |
|
| | _Think of Soltra as a highly-skilled coding buddy, not a replacement for your own brain._ |
| | --- |
| | Built by Redhanuman. |