|
|
--- |
|
|
license: apache-2.0 |
|
|
language: |
|
|
- en |
|
|
tags: |
|
|
- text-generation |
|
|
- cli |
|
|
- shell |
|
|
- command-line |
|
|
- sft |
|
|
- instruction-following |
|
|
pipeline_tag: text-generation |
|
|
widget: |
|
|
- text: "Instruction: List all files in the current directory\nCommand:" |
|
|
example_title: List files |
|
|
- text: "Instruction: Find all Python files\nCommand:" |
|
|
example_title: Find Python files |
|
|
- text: "Instruction: Show disk usage\nCommand:" |
|
|
example_title: Disk usage |
|
|
--- |
|
|
|
|
|
# Tiny-LLM CLI SFT (54M) |
|
|
|
|
|
A **54 million parameter** language model fine-tuned for CLI command generation. |
|
|
|
|
|
## Model Description |
|
|
|
|
|
This model is a Supervised Fine-Tuned (SFT) version of [jonmabe/tiny-llm-54m](https://huggingface.co/jonmabe/tiny-llm-54m), trained to generate Unix/Linux shell commands from natural language instructions. |
|
|
|
|
|
### Training Data |
|
|
|
|
|
- **Geddy's NL2Bash dataset**: ~2,300 natural language to bash command pairs |
|
|
- **NL2Bash benchmark**: Standard benchmark for command translation |
|
|
- **Synthetic examples**: Additional generated pairs |
|
|
- **Total**: ~13,000 training pairs |
|
|
|
|
|
### Training Details |
|
|
|
|
|
| Parameter | Value | |
|
|
|-----------|-------| |
|
|
| Base Model | tiny-llm-54m | |
|
|
| Training Steps | 2,000 | |
|
|
| Best Checkpoint | Step 1,000 | |
|
|
| Best Val Loss | 1.2456 | |
|
|
| Learning Rate | 5e-5 | |
|
|
| Batch Size | 16 | |
|
|
| Hardware | NVIDIA RTX 5090 | |
|
|
| Training Time | ~9 minutes | |
|
|
|
|
|
## Architecture |
|
|
|
|
|
- **Parameters**: 54.93M |
|
|
- **Layers**: 12 |
|
|
- **Hidden Size**: 512 |
|
|
- **Attention Heads**: 8 |
|
|
- **Intermediate Size**: 1408 |
|
|
- **Max Position**: 512 |
|
|
- **Vocabulary**: 32,000 tokens |
|
|
- **Features**: RoPE, RMSNorm, SwiGLU, Weight Tying |
|
|
|
|
|
## Usage |
|
|
|
|
|
### Prompt Format |
|
|
|
|
|
``` |
|
|
Instruction: <natural language description> |
|
|
Command: |
|
|
``` |
|
|
|
|
|
### Example |
|
|
|
|
|
```python |
|
|
from model import TinyLLM |
|
|
import torch |
|
|
|
|
|
# Load model |
|
|
checkpoint = torch.load("best_model.pt", map_location="cpu") |
|
|
model = TinyLLM(checkpoint["config"]["model"]) |
|
|
model.load_state_dict(checkpoint["model_state_dict"]) |
|
|
model.eval() |
|
|
|
|
|
# Generate |
|
|
prompt = "Instruction: Find all Python files modified in the last day\nCommand:" |
|
|
# ... tokenize and generate |
|
|
``` |
|
|
|
|
|
## Limitations |
|
|
|
|
|
⚠️ **Known Issues:** |
|
|
- Tokenizer decode shows raw BPE tokens (Ġ = space, Ċ = newline) |
|
|
- Model generates fragments of correct commands but output can be noisy |
|
|
- Needs more training steps for reliable generation |
|
|
- Small model size limits command complexity |
|
|
|
|
|
## Improvement Plan |
|
|
|
|
|
1. **Fix tokenizer decode** - Proper BPE to text conversion |
|
|
2. **Longer training** - 5,000-10,000 steps |
|
|
3. **Data quality** - Curate cleaner training pairs |
|
|
4. **Lower LR** - More stable convergence with 1e-5 |
|
|
|
|
|
## License |
|
|
|
|
|
Apache 2.0 |
|
|
|
|
|
## Citation |
|
|
|
|
|
```bibtex |
|
|
@misc{tiny-llm-cli-sft-2026, |
|
|
author = {Jon Mabe}, |
|
|
title = {Tiny-LLM CLI SFT: Small Language Model for Command Generation}, |
|
|
year = {2026}, |
|
|
publisher = {HuggingFace}, |
|
|
url = {https://huggingface.co/jonmabe/tiny-llm-cli-sft} |
|
|
} |
|
|
``` |
|
|
|