|
|
--- |
|
|
base_model: Qwen/Qwen2.5-Coder-1.5B-Instruct |
|
|
library_name: peft |
|
|
model_name: typescript-slm-1.5b |
|
|
tags: |
|
|
- typescript |
|
|
- code-generation |
|
|
- react |
|
|
- nextjs |
|
|
- angular |
|
|
- nodejs |
|
|
- lora |
|
|
- sft |
|
|
- transformers |
|
|
- trl |
|
|
license: mit |
|
|
pipeline_tag: text-generation |
|
|
language: |
|
|
- en |
|
|
datasets: |
|
|
- custom |
|
|
--- |
|
|
|
|
|
# TypeScript SLM 1.5B |
|
|
|
|
|
A specialized Small Language Model for TypeScript code generation and understanding, optimized for React, Next.js, Angular, and Node.js frameworks. |
|
|
|
|
|
## Model Description |
|
|
|
|
|
This model is a fine-tuned version of [Qwen/Qwen2.5-Coder-1.5B-Instruct](https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct) using LoRA (Low-Rank Adaptation) for parameter-efficient fine-tuning. It has been trained on 2,000-8,000 high-quality TypeScript code samples focusing on modern web development frameworks. |
|
|
|
|
|
**Key Features:** |
|
|
- Specialized in TypeScript and popular frameworks (React, Next.js, Angular, Node.js) |
|
|
- Quality-scored training dataset with proper type annotations |
|
|
- Optimized for code completion, generation, and understanding tasks |
|
|
- Efficient inference with LoRA adapters |
|
|
|
|
|
## Intended Use |
|
|
|
|
|
### Primary Use Cases |
|
|
- TypeScript code completion and generation |
|
|
- React component scaffolding |
|
|
- Next.js API route and page generation |
|
|
- Angular service and directive creation |
|
|
- Node.js/Express backend code generation |
|
|
- Type definition and interface creation |
|
|
|
|
|
### Out-of-Scope Use |
|
|
- Production-critical code generation without human review |
|
|
- Non-TypeScript/JavaScript code generation |
|
|
- General-purpose text generation |
|
|
- Code obfuscation or malicious code generation |
|
|
|
|
|
## Training Data |
|
|
|
|
|
The model was trained on a curated dataset of TypeScript code samples with the following distribution: |
|
|
|
|
|
- **React** (43-58%): Components, hooks, context, custom hooks |
|
|
- **Angular** (33-50%): Services, directives, modules, dependency injection |
|
|
- **Next.js** (21-23%): Pages, API routes, SSR, SSG patterns |
|
|
- **TypeScript** (9-16%): Advanced types, generics, utility types |
|
|
- **Node.js** (6-11%): Express, NestJS, API servers |
|
|
|
|
|
**Dataset Quality Scoring:** |
|
|
- Samples scored 41-64 on quality metrics |
|
|
- Prioritizes proper type annotations |
|
|
- Excludes test files, debug code, and incomplete modules |
|
|
- Focuses on production-quality patterns from popular repositories |
|
|
|
|
|
## Training Procedure |
|
|
|
|
|
### Training Hyperparameters |
|
|
|
|
|
**Hardware:** |
|
|
- Google Colab A100 40GB GPU |
|
|
- CUDA acceleration with FP16 precision |
|
|
|
|
|
**Configuration:** |
|
|
- Base Model: Qwen/Qwen2.5-Coder-1.5B-Instruct |
|
|
- Training Samples: 2,000-8,000 (depending on dataset tier) |
|
|
- Epochs: 3 |
|
|
- Batch Size: 4 |
|
|
- Gradient Accumulation Steps: 8 |
|
|
- Effective Batch Size: 32 |
|
|
- Learning Rate: 2e-4 |
|
|
- Max Sequence Length: 1024 |
|
|
- LoRA Rank (r): 32 |
|
|
- LoRA Alpha: 16 |
|
|
- LoRA Dropout: 0.1 |
|
|
- Target Modules: All linear layers |
|
|
|
|
|
**Training Time:** |
|
|
- train_small.jsonl (2k samples): ~20-30 minutes on A100 |
|
|
- train_medium.jsonl (5k samples): ~50-75 minutes on A100 |
|
|
- train.jsonl (8k samples): ~2-3 hours on A100 |
|
|
|
|
|
## Usage |
|
|
|
|
|
### Basic Usage |
|
|
|
|
|
```python |
|
|
from transformers import AutoTokenizer, AutoModelForCausalLM |
|
|
from peft import PeftModel |
|
|
|
|
|
# Load base model and tokenizer |
|
|
base_model = "Qwen/Qwen2.5-Coder-1.5B-Instruct" |
|
|
model = AutoModelForCausalLM.from_pretrained( |
|
|
base_model, |
|
|
device_map="auto", |
|
|
torch_dtype="auto" |
|
|
) |
|
|
tokenizer = AutoTokenizer.from_pretrained(base_model) |
|
|
|
|
|
# Load LoRA adapter |
|
|
model = PeftModel.from_pretrained(model, "sylvester-francis/typescript-slm-1.5b") |
|
|
|
|
|
# Generate code |
|
|
prompt = """Write a React component that fetches user data and displays it in a card: |
|
|
|
|
|
```typescript |
|
|
""" |
|
|
|
|
|
inputs = tokenizer(prompt, return_tensors="pt").to(model.device) |
|
|
outputs = model.generate( |
|
|
**inputs, |
|
|
max_new_tokens=256, |
|
|
temperature=0.7, |
|
|
do_sample=True, |
|
|
top_p=0.95 |
|
|
) |
|
|
|
|
|
generated_code = tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
|
print(generated_code) |
|
|
``` |
|
|
|
|
|
### React Component Generation |
|
|
|
|
|
```python |
|
|
prompt = """Create a TypeScript React component with props for a user profile card: |
|
|
|
|
|
```typescript |
|
|
interface UserProfileProps { |
|
|
""" |
|
|
|
|
|
# Generate with the model... |
|
|
``` |
|
|
|
|
|
### Next.js API Route |
|
|
|
|
|
```python |
|
|
prompt = """Write a Next.js API route for user authentication: |
|
|
|
|
|
```typescript |
|
|
// pages/api/auth/login.ts |
|
|
""" |
|
|
|
|
|
# Generate with the model... |
|
|
``` |
|
|
|
|
|
### Angular Service |
|
|
|
|
|
```python |
|
|
prompt = """Create an Angular service for HTTP data fetching: |
|
|
|
|
|
```typescript |
|
|
import { Injectable } from '@angular/core'; |
|
|
""" |
|
|
|
|
|
# Generate with the model... |
|
|
``` |
|
|
|
|
|
## Performance |
|
|
|
|
|
### Code Quality Metrics |
|
|
- Proper TypeScript type annotations |
|
|
- Framework-specific best practices |
|
|
- Adherence to modern ES6+ patterns |
|
|
- Clean, readable code structure |
|
|
|
|
|
### Generation Speed |
|
|
- Average: ~50-100 tokens/second on A100 |
|
|
- Latency: <100ms for typical completions |
|
|
- Memory: ~3GB VRAM with adapter loaded |
|
|
|
|
|
## Limitations |
|
|
|
|
|
1. **Specialized Domain**: Works best for TypeScript and related frameworks. Performance degrades for other languages. |
|
|
|
|
|
2. **Training Data Bias**: Reflects patterns from popular open-source repositories, which may not match all coding styles. |
|
|
|
|
|
3. **Context Length**: Limited to 1024 tokens, which may be insufficient for very large files. |
|
|
|
|
|
4. **No Real-time Updates**: Training data is static and doesn't include the latest framework versions or patterns. |
|
|
|
|
|
5. **Requires Human Review**: Generated code should always be reviewed for security, correctness, and best practices. |
|
|
|
|
|
6. **Type Safety**: While trained on typed code, generated types may not always be complete or optimal. |
|
|
|
|
|
## Ethical Considerations |
|
|
|
|
|
- **Code Licensing**: Ensure generated code complies with your project's license requirements |
|
|
- **Security**: Always review generated code for security vulnerabilities |
|
|
- **Testing**: Generated code should be thoroughly tested before production use |
|
|
- **Attribution**: Consider the training data sources when using generated code commercially |
|
|
|
|
|
## Training Infrastructure |
|
|
|
|
|
**Software Stack:** |
|
|
- PyTorch 2.9.0+cu126 |
|
|
- Transformers 4.57.2 |
|
|
- PEFT 0.18.0 |
|
|
- TRL 0.25.1 |
|
|
- Datasets 4.0.0 |
|
|
- bitsandbytes 0.41.0+ |
|
|
|
|
|
**Platform:** |
|
|
- Google Colab Pro (recommended) |
|
|
- Supports Mac M4 (MPS) for local training (slower) |
|
|
- Compatible with T4, A100, and other CUDA GPUs |
|
|
|
|
|
## Repository |
|
|
|
|
|
Full training code, dataset filtering, and usage examples: |
|
|
https://github.com/sylvester-francis/slm-typescript-model |
|
|
|
|
|
## Model Card Authors |
|
|
|
|
|
- Sylvester Francis (@sylvester-francis) |
|
|
|
|
|
## Citations |
|
|
|
|
|
### Base Model |
|
|
|
|
|
```bibtex |
|
|
@article{qwen2.5, |
|
|
title={Qwen2.5-Coder Technical Report}, |
|
|
author={Qwen Team}, |
|
|
year={2024}, |
|
|
journal={arXiv preprint}, |
|
|
url={https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct} |
|
|
} |
|
|
``` |
|
|
|
|
|
### Training Framework |
|
|
|
|
|
```bibtex |
|
|
@misc{vonwerra2022trl, |
|
|
title={{TRL: Transformer Reinforcement Learning}}, |
|
|
author={Leandro von Werra and Younes Belkada and Lewis Tunstall and Edward Beeching and Tristan Thrush and Nathan Lambert and Shengyi Huang and Kashif Rasul and Quentin Gallou{\'e}dec}, |
|
|
year={2020}, |
|
|
journal={GitHub repository}, |
|
|
publisher={GitHub}, |
|
|
howpublished={\url{https://github.com/huggingface/trl}} |
|
|
} |
|
|
``` |
|
|
|
|
|
### LoRA |
|
|
|
|
|
```bibtex |
|
|
@article{hu2021lora, |
|
|
title={LoRA: Low-Rank Adaptation of Large Language Models}, |
|
|
author={Hu, Edward J and Shen, Yelong and Wallis, Phillip and Allen-Zhu, Zeyuan and Li, Yuanzhi and Wang, Shean and Wang, Lu and Chen, Weizhu}, |
|
|
journal={arXiv preprint arXiv:2106.09685}, |
|
|
year={2021} |
|
|
} |
|
|
``` |
|
|
|
|
|
## License |
|
|
|
|
|
MIT License - See repository for full license text. |
|
|
|
|
|
## Acknowledgments |
|
|
|
|
|
- Built on Qwen 2.5 Coder by Alibaba Cloud |
|
|
- Training powered by Hugging Face TRL and PEFT libraries |
|
|
- Dataset curated from high-quality open-source TypeScript projects |
|
|
|