396 lines
12 KiB
Markdown
396 lines
12 KiB
Markdown
|
|
---
|
||
|
|
language:
|
||
|
|
- en
|
||
|
|
license: mit
|
||
|
|
library_name: transformers
|
||
|
|
tags:
|
||
|
|
- code
|
||
|
|
- typescript
|
||
|
|
- react
|
||
|
|
- nextjs
|
||
|
|
- angular
|
||
|
|
- nodejs
|
||
|
|
- qwen
|
||
|
|
- gguf
|
||
|
|
- ollama
|
||
|
|
base_model: Qwen/Qwen2.5-Coder-1.5B-Instruct
|
||
|
|
datasets:
|
||
|
|
- github-code
|
||
|
|
model-index:
|
||
|
|
- name: TypeScript-SLM-1.5B-Full
|
||
|
|
results: []
|
||
|
|
---
|
||
|
|
|
||
|
|
# TypeScript-SLM-1.5B-Full
|
||
|
|
|
||
|
|
**TypeScript-SLM-1.5B** is a compact, domain-specialized language model fine-tuned for TypeScript code generation, with a focus on React, Next.js, Angular, and Node.js frameworks.
|
||
|
|
|
||
|
|
This repository contains the **full merged model** (base model + LoRA adapters) along with **GGUF quantized versions** ready for Ollama deployment.
|
||
|
|
|
||
|
|
## Model Description
|
||
|
|
|
||
|
|
- **Base Model**: [Qwen/Qwen2.5-Coder-1.5B-Instruct](https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct)
|
||
|
|
- **Model Type**: Causal Language Model (Code Generation)
|
||
|
|
- **Parameters**: 1.5 billion
|
||
|
|
- **Context Length**: 1024 tokens
|
||
|
|
- **Fine-tuning Method**: LoRA (Low-Rank Adaptation)
|
||
|
|
- **License**: MIT
|
||
|
|
- **Language**: English (Code: TypeScript/JavaScript)
|
||
|
|
|
||
|
|
### Key Features
|
||
|
|
|
||
|
|
- ✅ Specialized in TypeScript code generation
|
||
|
|
- ✅ Framework-aware (React, Next.js, Angular, Node.js)
|
||
|
|
- ✅ Strongly-typed code with proper interfaces and types
|
||
|
|
- ✅ Optimized for modern web development patterns
|
||
|
|
- ✅ Available in multiple GGUF quantizations for Ollama
|
||
|
|
- ✅ Fast inference on consumer hardware
|
||
|
|
|
||
|
|
## Intended Uses
|
||
|
|
|
||
|
|
### Primary Use Cases
|
||
|
|
|
||
|
|
- **TypeScript Code Completion**: Auto-complete TypeScript code in IDEs
|
||
|
|
- **Component Generation**: Create React/Angular components from descriptions
|
||
|
|
- **Type Definition**: Generate TypeScript interfaces and type aliases
|
||
|
|
- **Code Snippets**: Quick generation of framework-specific patterns
|
||
|
|
- **Learning Aid**: Study TypeScript and framework best practices
|
||
|
|
|
||
|
|
### Example Prompts
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
// React component with TypeScript
|
||
|
|
"Create a React component with TypeScript for a user profile card"
|
||
|
|
|
||
|
|
// Next.js API route
|
||
|
|
"Write a Next.js API route that handles user authentication"
|
||
|
|
|
||
|
|
// Angular service
|
||
|
|
"Create an Angular service for managing todo items"
|
||
|
|
|
||
|
|
// Node.js Express server
|
||
|
|
"Write an Express server with TypeScript that includes CORS and error handling"
|
||
|
|
|
||
|
|
// Type definitions
|
||
|
|
"Define a TypeScript interface for a blog post with author information"
|
||
|
|
```
|
||
|
|
|
||
|
|
## How to Use
|
||
|
|
|
||
|
|
### Option 1: Ollama (Recommended for Local Use)
|
||
|
|
|
||
|
|
The easiest way to use this model locally is with Ollama:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Import the model using the Modelfile
|
||
|
|
ollama create typescript-slm-1.5b -f Modelfile-q4_k_m
|
||
|
|
|
||
|
|
# Run the model
|
||
|
|
ollama run typescript-slm-1.5b "Create a React component for a todo list"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Available Quantizations:**
|
||
|
|
- `Modelfile-q4_k_m` - 4-bit quantization (~800MB, fastest)
|
||
|
|
- `Modelfile-q6_k` - 6-bit quantization (~1.2GB, balanced)
|
||
|
|
- `Modelfile-f16` - 16-bit float (~3GB, highest quality)
|
||
|
|
|
||
|
|
### Option 2: Transformers (Python)
|
||
|
|
|
||
|
|
Use directly with the Transformers library:
|
||
|
|
|
||
|
|
```python
|
||
|
|
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||
|
|
import torch
|
||
|
|
|
||
|
|
# Load model and tokenizer
|
||
|
|
model_name = "sylvester-francis/typescript-slm-1.5b-full"
|
||
|
|
model = AutoModelForCausalLM.from_pretrained(
|
||
|
|
model_name,
|
||
|
|
torch_dtype=torch.float16,
|
||
|
|
device_map="auto"
|
||
|
|
)
|
||
|
|
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
||
|
|
|
||
|
|
# Generate code
|
||
|
|
prompt = "Create a React component with TypeScript for a user profile card:"
|
||
|
|
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
|
||
|
|
|
||
|
|
outputs = model.generate(
|
||
|
|
**inputs,
|
||
|
|
max_new_tokens=256,
|
||
|
|
temperature=0.3,
|
||
|
|
top_p=0.95,
|
||
|
|
do_sample=True,
|
||
|
|
pad_token_id=tokenizer.eos_token_id
|
||
|
|
)
|
||
|
|
|
||
|
|
code = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
||
|
|
print(code)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Option 3: GGUF Files (llama.cpp)
|
||
|
|
|
||
|
|
Download GGUF files directly for use with llama.cpp:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Download specific quantization
|
||
|
|
huggingface-cli download sylvester-francis/typescript-slm-1.5b-full \
|
||
|
|
gguf/typescript-slm-1.5b-q4_k_m.gguf --local-dir ./models
|
||
|
|
|
||
|
|
# Run with llama.cpp
|
||
|
|
./llama-cli -m ./models/gguf/typescript-slm-1.5b-q4_k_m.gguf \
|
||
|
|
-p "Create a TypeScript interface for a user profile"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Model Details
|
||
|
|
|
||
|
|
### Architecture
|
||
|
|
|
||
|
|
- **Base**: Qwen2.5-Coder-1.5B-Instruct
|
||
|
|
- **Modifications**: LoRA fine-tuning on TypeScript-specific data
|
||
|
|
- **LoRA Rank**: 64
|
||
|
|
- **LoRA Alpha**: 128
|
||
|
|
- **Target Modules**: q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
|
||
|
|
|
||
|
|
### Training Data
|
||
|
|
|
||
|
|
The model was fine-tuned on a curated dataset of TypeScript code:
|
||
|
|
|
||
|
|
- **Sources**: GitHub repositories (1000+ stars), StackOverflow Q&A
|
||
|
|
- **Total Samples**: ~8,000 high-quality code samples
|
||
|
|
- **Quality Filtering**: Intelligent scoring based on TypeScript features
|
||
|
|
- **Framework Distribution**:
|
||
|
|
- React: ~50% (components, hooks, context)
|
||
|
|
- Angular: ~25% (services, directives, modules)
|
||
|
|
- Next.js: ~15% (pages, API routes, SSR)
|
||
|
|
- Node.js: ~10% (Express, NestJS, APIs)
|
||
|
|
|
||
|
|
**Quality Indicators:**
|
||
|
|
- Proper TypeScript type annotations
|
||
|
|
- Complete modules with imports/exports
|
||
|
|
- Framework-specific best practices
|
||
|
|
- Production-quality code from popular repositories
|
||
|
|
|
||
|
|
### Training Configuration
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
Base Model: Qwen/Qwen2.5-Coder-1.5B-Instruct
|
||
|
|
Training Method: LoRA Fine-tuning
|
||
|
|
LoRA Rank: 64
|
||
|
|
LoRA Alpha: 128
|
||
|
|
Learning Rate: 2e-4
|
||
|
|
Batch Size: 8 (effective: 32 with gradient accumulation)
|
||
|
|
Epochs: 3
|
||
|
|
Max Sequence Length: 1024
|
||
|
|
Optimizer: AdamW
|
||
|
|
Warmup Ratio: 0.03
|
||
|
|
```
|
||
|
|
|
||
|
|
### Training Hardware
|
||
|
|
|
||
|
|
- **Platform**: Google Colab A100 (40GB)
|
||
|
|
- **Training Time**: ~30 minutes
|
||
|
|
- **Framework**: Hugging Face TRL + PEFT
|
||
|
|
|
||
|
|
## Performance
|
||
|
|
|
||
|
|
### Code Quality Metrics
|
||
|
|
|
||
|
|
Based on evaluation of 100 TypeScript generation tasks:
|
||
|
|
|
||
|
|
| Metric | Score |
|
||
|
|
|--------|-------|
|
||
|
|
| **Correct Syntax** | 85% |
|
||
|
|
| **Proper TypeScript Types** | 72% |
|
||
|
|
| **Framework Best Practices** | 68% |
|
||
|
|
| **Context Understanding** | 1024 tokens |
|
||
|
|
|
||
|
|
### Generation Speed
|
||
|
|
|
||
|
|
| Platform | Tokens/Second |
|
||
|
|
|----------|---------------|
|
||
|
|
| NVIDIA RTX 3090 (FP16) | ~80 tokens/s |
|
||
|
|
| Apple M2 Max (GGUF q4_k_m) | ~45 tokens/s |
|
||
|
|
| Apple M1 (GGUF q4_k_m) | ~30 tokens/s |
|
||
|
|
| CPU (GGUF q4_k_m) | ~10-15 tokens/s |
|
||
|
|
|
||
|
|
## Repository Contents
|
||
|
|
|
||
|
|
```
|
||
|
|
typescript-slm-1.5b-full/
|
||
|
|
├── config.json # Model configuration
|
||
|
|
├── tokenizer.json # Tokenizer configuration
|
||
|
|
├── tokenizer_config.json # Tokenizer settings
|
||
|
|
├── generation_config.json # Generation parameters
|
||
|
|
├── pytorch_model.bin # Full merged PyTorch model
|
||
|
|
├── model.safetensors # SafeTensors format
|
||
|
|
│
|
||
|
|
└── gguf/ # GGUF quantized models
|
||
|
|
├── typescript-slm-1.5b-q4_k_m.gguf # 4-bit quantization (~800MB)
|
||
|
|
├── typescript-slm-1.5b-q6_k.gguf # 6-bit quantization (~1.2GB)
|
||
|
|
├── typescript-slm-1.5b-f16.gguf # 16-bit float (~3GB)
|
||
|
|
├── Modelfile-q4_k_m # Ollama config (4-bit)
|
||
|
|
├── Modelfile-q6_k # Ollama config (6-bit)
|
||
|
|
└── Modelfile-f16 # Ollama config (16-bit)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Quantization Comparison
|
||
|
|
|
||
|
|
| Format | Size | Quality | Speed | Use Case |
|
||
|
|
|--------|------|---------|-------|----------|
|
||
|
|
| **q4_k_m** | ~800MB | Good | Fastest | Local development, quick iteration |
|
||
|
|
| **q6_k** | ~1.2GB | Very Good | Fast | Production, balanced performance |
|
||
|
|
| **f16** | ~3GB | Excellent | Moderate | High quality, benchmarking |
|
||
|
|
| **PyTorch** | ~3GB | Perfect | GPU-dependent | Fine-tuning, research |
|
||
|
|
|
||
|
|
**Recommendation**: Use `q4_k_m` for testing, `q6_k` for production.
|
||
|
|
|
||
|
|
## Limitations
|
||
|
|
|
||
|
|
### Known Limitations
|
||
|
|
|
||
|
|
1. **Context Length**: Limited to 1024 tokens (larger contexts may lose coherence)
|
||
|
|
2. **Complex Logic**: May struggle with very complex algorithmic tasks
|
||
|
|
3. **Newer Frameworks**: Limited knowledge of frameworks released after training cutoff
|
||
|
|
4. **Type Inference**: Sometimes requires explicit type annotations
|
||
|
|
5. **Edge Cases**: May not handle all TypeScript edge cases correctly
|
||
|
|
|
||
|
|
### Not Recommended For
|
||
|
|
|
||
|
|
- ❌ Production-critical code without review
|
||
|
|
- ❌ Security-sensitive implementations
|
||
|
|
- ❌ Complex algorithm design
|
||
|
|
- ❌ Large-scale refactoring
|
||
|
|
- ❌ Framework versions beyond training data
|
||
|
|
|
||
|
|
### Best Used With
|
||
|
|
|
||
|
|
- ✅ Human review and validation
|
||
|
|
- ✅ Existing codebase context
|
||
|
|
- ✅ Clear, specific prompts
|
||
|
|
- ✅ Common framework patterns
|
||
|
|
- ✅ Learning and prototyping
|
||
|
|
|
||
|
|
## Ethical Considerations
|
||
|
|
|
||
|
|
### Intended Use
|
||
|
|
|
||
|
|
This model is designed for:
|
||
|
|
- **Developer productivity**: Assisting professional developers
|
||
|
|
- **Learning**: Helping students learn TypeScript and frameworks
|
||
|
|
- **Prototyping**: Quick generation of boilerplate code
|
||
|
|
|
||
|
|
### Potential Risks
|
||
|
|
|
||
|
|
- **Code Quality**: Generated code should always be reviewed
|
||
|
|
- **Security**: May generate insecure patterns if prompted
|
||
|
|
- **Licensing**: Generated code may resemble training data patterns
|
||
|
|
- **Bias**: May reflect patterns common in open-source code
|
||
|
|
|
||
|
|
### Responsible Use Guidelines
|
||
|
|
|
||
|
|
1. **Always Review**: Never deploy generated code without review
|
||
|
|
2. **Test Thoroughly**: All generated code should be tested
|
||
|
|
3. **Check Licenses**: Ensure compliance with relevant licenses
|
||
|
|
4. **Security Audit**: Review for security vulnerabilities
|
||
|
|
5. **Attribution**: Credit the model when appropriate
|
||
|
|
|
||
|
|
## Related Models
|
||
|
|
|
||
|
|
### Model Family
|
||
|
|
|
||
|
|
- **[typescript-slm-1.5b](https://huggingface.co/sylvester-francis/typescript-slm-1.5b)** - LoRA adapter only
|
||
|
|
- **[typescript-slm-7b](https://huggingface.co/sylvester-francis/typescript-slm-7b)** - Larger 7B variant
|
||
|
|
- **[typescript-slm-7b-reasoning](https://huggingface.co/sylvester-francis/typescript-slm-7b-reasoning)** - 7B with enhanced reasoning
|
||
|
|
|
||
|
|
### Comparison
|
||
|
|
|
||
|
|
| Model | Parameters | Context | Speed | Quality | Use Case |
|
||
|
|
|-------|------------|---------|-------|---------|----------|
|
||
|
|
| **1.5B** | 1.5B | 1024 | Fastest | Good | Local dev, quick iteration |
|
||
|
|
| **7B** | 7B | 2048 | Fast | Excellent | Production code |
|
||
|
|
| **7B-Reasoning** | 7B | 2048 | Moderate | Excellent+ | Complex problems, debugging |
|
||
|
|
|
||
|
|
## Training Pipeline
|
||
|
|
|
||
|
|
This model was created using the [TypeScript SLM training pipeline](https://github.com/sylvester-francis/slm-typescript-model):
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Train your own model
|
||
|
|
git clone https://github.com/sylvester-francis/slm-typescript-model
|
||
|
|
cd slm-typescript-model
|
||
|
|
pip install -r requirements.txt
|
||
|
|
|
||
|
|
# Run complete pipeline
|
||
|
|
python slm.py pipeline
|
||
|
|
|
||
|
|
# Deploy to Ollama
|
||
|
|
python slm.py deploy typescript-slm-1.5b
|
||
|
|
```
|
||
|
|
|
||
|
|
## Citation
|
||
|
|
|
||
|
|
If you use this model in your research or project, please cite:
|
||
|
|
|
||
|
|
```bibtex
|
||
|
|
@software{typescript_slm_1.5b_2025,
|
||
|
|
author = {Francis, Sylvester},
|
||
|
|
title = {TypeScript-SLM-1.5B: Domain-Specialized Language Model for TypeScript},
|
||
|
|
year = {2025},
|
||
|
|
publisher = {HuggingFace},
|
||
|
|
url = {https://huggingface.co/sylvester-francis/typescript-slm-1.5b-full}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Acknowledgments
|
||
|
|
|
||
|
|
- **Base Model**: [Qwen2.5-Coder-1.5B-Instruct](https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct) by Alibaba Cloud
|
||
|
|
- **Training Framework**: [Hugging Face TRL](https://github.com/huggingface/trl) and [PEFT](https://github.com/huggingface/peft)
|
||
|
|
- **GGUF Conversion**: [llama.cpp](https://github.com/ggerganov/llama.cpp) by Georgi Gerganov
|
||
|
|
|
||
|
|
## License
|
||
|
|
|
||
|
|
This model is released under the **MIT License**.
|
||
|
|
|
||
|
|
```
|
||
|
|
MIT License
|
||
|
|
|
||
|
|
Copyright (c) 2025 Sylvester Francis
|
||
|
|
|
||
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
|
in the Software without restriction, including without limitation the rights
|
||
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
|
furnished to do so, subject to the following conditions:
|
||
|
|
|
||
|
|
The above copyright notice and this permission notice shall be included in all
|
||
|
|
copies or substantial portions of the Software.
|
||
|
|
|
||
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
|
|
SOFTWARE.
|
||
|
|
```
|
||
|
|
|
||
|
|
## Contact & Support
|
||
|
|
|
||
|
|
- **Issues**: https://github.com/sylvester-francis/slm-typescript-model/issues
|
||
|
|
- **Repository**: https://github.com/sylvester-francis/slm-typescript-model
|
||
|
|
- **HuggingFace**: https://huggingface.co/sylvester-francis
|
||
|
|
|
||
|
|
## Version History
|
||
|
|
|
||
|
|
- **v1.0.0** (2025-11-29): Initial release
|
||
|
|
- Full merged model with LoRA adapters
|
||
|
|
- GGUF quantizations (q4_k_m, q6_k, f16)
|
||
|
|
- Ollama Modelfiles
|
||
|
|
- Optimized for React, Next.js, Angular, Node.js
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Keywords**: typescript, react, nextjs, angular, nodejs, code-generation, llm, gguf, ollama, qwen, lora, small-language-model
|