|
|
--- |
|
|
language: en |
|
|
license: mit |
|
|
base_model: Qwen/Qwen2.5-Coder-3B-Instruct |
|
|
pipeline_tag: text-generation |
|
|
library_name: transformers |
|
|
tags: |
|
|
- qwen |
|
|
- qwen2.5 |
|
|
- coder |
|
|
- qlora |
|
|
- unsloth |
|
|
- nextjs |
|
|
- react |
|
|
- typescript |
|
|
- web-development |
|
|
--- |
|
|
|
|
|
|
|
|
# π€ Next.js & React TypeScript AI Assistant |
|
|
|
|
|
A custom AI coding assistant finetuned on **Qwen2.5-Coder-3B** using QLoRA, specialized in Next.js, React, TypeScript, and modern web development. |
|
|
|
|
|
[](https://opensource.org/licenses/MIT) |
|
|
[](https://www.python.org/downloads/) |
|
|
[](https://github.com/unslothai/unsloth) |
|
|
|
|
|
--- |
|
|
|
|
|
## π Table of Contents |
|
|
|
|
|
- [Overview](#overview) |
|
|
- [Features](#features) |
|
|
- [Tech Stack](#tech-stack) |
|
|
- [Dataset](#dataset) |
|
|
- [Training](#training) |
|
|
- [Usage](#usage) |
|
|
- [Installation](#installation) |
|
|
- [Results](#results) |
|
|
- [Project Structure](#project-structure) |
|
|
- [Contributing](#contributing) |
|
|
- [License](#license) |
|
|
- [Acknowledgments](#acknowledgments) |
|
|
|
|
|
--- |
|
|
|
|
|
## π― Overview |
|
|
|
|
|
This project demonstrates **parameter-efficient finetuning** of a large language model (LLM) using **QLoRA** (Quantized Low-Rank Adaptation). The resulting model provides accurate, context-aware coding assistance specifically for: |
|
|
|
|
|
- **Next.js 14+** App Router and Server Components |
|
|
- **React 19** with modern Hooks |
|
|
- **TypeScript** type patterns and best practices |
|
|
- **Tailwind CSS** integration and styling |
|
|
|
|
|
**Key Achievement:** Trained a production-quality model in **~40 minutes** using **free Google Colab resources** (T4 GPU). |
|
|
|
|
|
--- |
|
|
|
|
|
## β¨ Features |
|
|
|
|
|
- π― **Specialized Knowledge**: Focused on modern web development stack |
|
|
- β‘ **Fast Training**: QLoRA enables training on free GPUs |
|
|
- π° **Cost-Effective**: $0 training cost using Google Colab |
|
|
- π **Small Dataset**: Only 70 high-quality examples needed |
|
|
- π§ **Parameter Efficient**: Trains only 1-10% of model parameters |
|
|
- π **Production Ready**: Can be deployed to HuggingFace or used locally |
|
|
|
|
|
--- |
|
|
|
|
|
## π οΈ Tech Stack |
|
|
|
|
|
### Model |
|
|
- **Base Model**: Qwen2.5-Coder-3B-Instruct (3 billion parameters) |
|
|
- **Quantization**: 4-bit using bitsandbytes |
|
|
- **Finetuning Method**: QLoRA (Low-Rank Adaptation) |
|
|
|
|
|
### Training Framework |
|
|
- **Unsloth**: 2x faster training, 60% less memory usage |
|
|
- **HuggingFace Transformers**: Model loading and tokenization |
|
|
- **TRL (Transformer Reinforcement Learning)**: Training pipeline |
|
|
- **PEFT**: Parameter-Efficient Fine-Tuning library |
|
|
|
|
|
### Infrastructure |
|
|
- **Platform**: Google Colab (Free Tier) |
|
|
- **GPU**: NVIDIA Tesla T4 (15GB VRAM) |
|
|
- **Training Time**: ~40 minutes |
|
|
- **Memory Usage**: ~8GB peak |
|
|
|
|
|
--- |
|
|
|
|
|
## π Dataset |
|
|
|
|
|
### Dataset Creation |
|
|
|
|
|
1. **Source**: Generated using Gemini API (free tier) |
|
|
2. **Format**: JSONL with ChatML structure |
|
|
3. **Size**: 70 Q&A pairs |
|
|
4. **Quality Focus**: Detailed, accurate, production-ready examples |
|
|
|
|
|
### Topics Covered |
|
|
|
|
|
- Next.js App Router & Architecture (14 examples) |
|
|
- React Hooks & Patterns (13 examples) |
|
|
- TypeScript with React (12 examples) |
|
|
- Tailwind CSS Integration (6 examples) |
|
|
- Common Errors & Debugging (25 examples) |
|
|
|
|
|
### Data Format |
|
|
|
|
|
```json |
|
|
{ |
|
|
"messages": [ |
|
|
{ |
|
|
"role": "system", |
|
|
"content": "You are a Next.js, React, and TypeScript expert assistant." |
|
|
}, |
|
|
{ |
|
|
"role": "user", |
|
|
"content": "How do I use useState in React with TypeScript?" |
|
|
}, |
|
|
{ |
|
|
"role": "assistant", |
|
|
"content": "You should define an interface for the object..." |
|
|
} |
|
|
] |
|
|
} |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## π Training |
|
|
|
|
|
### Hyperparameters |
|
|
|
|
|
```python |
|
|
# LoRA Configuration |
|
|
r = 16 # LoRA rank |
|
|
lora_alpha = 16 # LoRA scaling |
|
|
lora_dropout = 0 # Dropout (0 for speed) |
|
|
|
|
|
# Training Configuration |
|
|
max_steps = 200 # Training steps |
|
|
learning_rate = 2e-4 # Learning rate |
|
|
batch_size = 2 # Per-device batch size |
|
|
gradient_accumulation = 4 # Effective batch size = 8 |
|
|
warmup_steps = 5 # LR warmup |
|
|
max_seq_length = 2048 # Context window |
|
|
``` |
|
|
|
|
|
### Training Process |
|
|
|
|
|
```bash |
|
|
# 1. Data Preparation |
|
|
python prepare_data.py |
|
|
|
|
|
# 2. Training |
|
|
python train.py |
|
|
|
|
|
# 3. Evaluation |
|
|
python test_model.py |
|
|
``` |
|
|
|
|
|
### Performance Metrics |
|
|
|
|
|
- **Training Time**: 40 minutes |
|
|
- **GPU Memory**: 8GB peak usage |
|
|
- **Loss**: Converged smoothly |
|
|
- **Inference Speed**: ~2-3 tokens/second on T4 |
|
|
|
|
|
--- |
|
|
|
|
|
## π» Usage |
|
|
|
|
|
### Quick Start |
|
|
|
|
|
```python |
|
|
from unsloth import FastLanguageModel |
|
|
from peft import PeftModel |
|
|
|
|
|
# Load base model |
|
|
model, tokenizer = FastLanguageModel.from_pretrained( |
|
|
model_name="unsloth/Qwen2.5-Coder-3B-Instruct-bnb-4bit", |
|
|
max_seq_length=2048, |
|
|
dtype=None, |
|
|
load_in_4bit=True, |
|
|
) |
|
|
|
|
|
# Load finetuned adapters |
|
|
model = PeftModel.from_pretrained(model, "path/to/model") |
|
|
|
|
|
# Enable inference mode |
|
|
FastLanguageModel.for_inference(model) |
|
|
|
|
|
# Ask a question |
|
|
messages = [ |
|
|
{"role": "user", "content": "How do I use Server Components in Next.js?"} |
|
|
] |
|
|
|
|
|
inputs = tokenizer.apply_chat_template( |
|
|
messages, |
|
|
tokenize=True, |
|
|
add_generation_prompt=True, |
|
|
return_tensors="pt", |
|
|
).to("cuda") |
|
|
|
|
|
outputs = model.generate( |
|
|
input_ids=inputs, |
|
|
max_new_tokens=256, |
|
|
use_cache=True |
|
|
) |
|
|
|
|
|
print(tokenizer.decode(outputs[0])) |
|
|
``` |
|
|
|
|
|
### Using from HuggingFace |
|
|
|
|
|
```python |
|
|
# If uploaded to HuggingFace |
|
|
model, tokenizer = FastLanguageModel.from_pretrained( |
|
|
model_name="YOUR_USERNAME/nextjs-assistant", |
|
|
max_seq_length=2048, |
|
|
load_in_4bit=True, |
|
|
) |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## π§ Installation |
|
|
|
|
|
### Prerequisites |
|
|
|
|
|
- Python 3.8+ |
|
|
- CUDA-compatible GPU (for training/inference) |
|
|
- Google Colab account (for free GPU access) |
|
|
|
|
|
### Local Setup |
|
|
|
|
|
```bash |
|
|
# Clone the repository |
|
|
git clone https://github.com/YOUR_USERNAME/nextjs-ai-assistant.git |
|
|
cd nextjs-ai-assistant |
|
|
|
|
|
# Install dependencies |
|
|
pip install -r requirements.txt |
|
|
|
|
|
# Optional: Install Unsloth for faster training |
|
|
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git" |
|
|
``` |
|
|
|
|
|
### Google Colab Setup |
|
|
|
|
|
1. Open the notebook: `nextjs_assistant_training.ipynb` |
|
|
2. Runtime β Change runtime type β T4 GPU |
|
|
3. Run all cells |
|
|
4. Upload your `training_data.jsonl` when prompted |
|
|
|
|
|
--- |
|
|
|
|
|
## π Results |
|
|
|
|
|
### Model Performance |
|
|
|
|
|
β
**Strengths:** |
|
|
- Accurate Next.js App Router patterns |
|
|
- Proper TypeScript typing examples |
|
|
- Context-aware React Hook explanations |
|
|
- Tailwind CSS best practices |
|
|
|
|
|
β οΈ **Limitations:** |
|
|
- May need longer answers with more training steps |
|
|
- Limited to training data scope |
|
|
- Best for questions similar to training examples |
|
|
|
|
|
### Example Outputs |
|
|
|
|
|
**Question**: "How do I use useState in React with TypeScript?" |
|
|
|
|
|
**Response**: |
|
|
```typescript |
|
|
interface User { |
|
|
id: number; |
|
|
name: string; |
|
|
} |
|
|
|
|
|
const [users, setUsers] = useState<User[]>([]); |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## π Project Structure |
|
|
|
|
|
``` |
|
|
nextjs-ai-assistant/ |
|
|
β |
|
|
βββ data/ |
|
|
β βββ training_data.jsonl # Training dataset |
|
|
β βββ prepare_data.py # Data preparation script |
|
|
β |
|
|
βββ notebooks/ |
|
|
β βββ training_notebook.ipynb # Complete training notebook |
|
|
β |
|
|
βββ scripts/ |
|
|
β βββ train.py # Training script |
|
|
β βββ test_model.py # Testing script |
|
|
β βββ convert_to_jsonl.py # Data conversion utility |
|
|
β |
|
|
βββ model/ |
|
|
β βββ my_nextjs_assistant/ # Saved model (not in git) |
|
|
β |
|
|
βββ requirements.txt # Python dependencies |
|
|
βββ README.md # This file |
|
|
βββ LICENSE # MIT License |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## π€ Contributing |
|
|
|
|
|
Contributions are welcome! Here's how you can help: |
|
|
|
|
|
1. **Fork the repository** |
|
|
2. **Create a feature branch**: `git checkout -b feature/amazing-feature` |
|
|
3. **Commit your changes**: `git commit -m 'Add amazing feature'` |
|
|
4. **Push to the branch**: `git push origin feature/amazing-feature` |
|
|
5. **Open a Pull Request** |
|
|
|
|
|
### Ideas for Contributions |
|
|
|
|
|
- Expand the dataset with more examples |
|
|
- Add support for other frameworks (Vue, Angular) |
|
|
- Create a web UI using Gradio/Streamlit |
|
|
- Implement RAG (Retrieval-Augmented Generation) |
|
|
- Add evaluation metrics |
|
|
|
|
|
--- |
|
|
|
|
|
## π License |
|
|
|
|
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. |
|
|
|
|
|
--- |
|
|
|
|
|
## π Acknowledgments |
|
|
|
|
|
- **[Unsloth](https://github.com/unslothai/unsloth)** - For making LLM training accessible and fast |
|
|
- **[Alibaba Cloud](https://www.alibabacloud.com/)** - For the Qwen2.5-Coder model |
|
|
- **[HuggingFace](https://huggingface.co/)** - For the transformers library and model hosting |
|
|
- **[Google Colab](https://colab.research.google.com/)** - For free GPU access |
|
|
- **Community** - For datasets, tutorials, and support |
|
|
|
|
|
--- |
|
|
|
|
|
## π Resources |
|
|
|
|
|
### Learn More |
|
|
|
|
|
- [Unsloth Documentation](https://github.com/unslothai/unsloth) |
|
|
- [QLoRA Paper](https://arxiv.org/abs/2305.14314) |
|
|
- [Qwen2.5-Coder Model Card](https://huggingface.co/Qwen/Qwen2.5-Coder-3B-Instruct) |
|
|
- [HuggingFace PEFT](https://github.com/huggingface/peft) |
|
|
|
|
|
### Related Projects |
|
|
|
|
|
- [LLM Finetuning Resources](https://github.com/mlabonne/llm-course) |
|
|
- [Awesome LLM](https://github.com/Hannibal046/Awesome-LLM) |
|
|
|
|
|
--- |
|
|
|
|
|
## π Contact |
|
|
|
|
|
**Your Name** - [@kethan_vr](https://twitter.com/kethan_vr) |
|
|
|
|
|
**Project Link**: https://github.com/Kethanvr/qwen-fine-tuning |
|
|
|
|
|
**Portfolio**: [kethanvr.me](https://kethanvr.me) |
|
|
|
|
|
--- |
|
|
|
|
|
## β Star History |
|
|
|
|
|
If you find this project useful, please consider giving it a star! |
|
|
|
|
|
[](https://star-history.com/#YOUR_USERNAME/nextjs-ai-assistant&Date) |
|
|
|
|
|
--- |
|
|
|
|
|
<div align="center"> |
|
|
|
|
|
**Made with β€οΈ by [Kethan VR](https://github.com/Kethanvr)** |
|
|
|
|
|
If this project helped you, consider [buying me a coffee](https://ko-fi.com/kethanvr) β |
|
|
|
|
|
</div> |
|
|
|