|
--- |
|
title: Linux Command Generator (Llama 3.2 1B) |
|
tags: |
|
- text-generation |
|
- instruction-tuned |
|
- llama |
|
- unsloth |
|
- lora |
|
- linux |
|
- command-generation |
|
license: other |
|
language: |
|
- en |
|
library_name: transformers |
|
pipeline_tag: text-generation |
|
datasets: |
|
- custom |
|
base_model: unsloth/Llama-3.2-1B-Instruct |
|
--- |
|
|
|
### mecha-org/linux-command-generator-llama3.2-1b |
|
|
|
Natural language → Linux command. A compact Llama 3.2 1B Instruct model fine‑tuned (LoRA) to turn plain‑English requests into correct shell commands. |
|
|
|
## Video Demonstration of the model running on the Mecha Comet |
|
<video controls> |
|
<source src="https://web-assets.mecha.so/hugging-face/mecha-command-generator-aug-10-2025.mp4" type="video/mp4"> |
|
Your browser does not support the video tag. |
|
</video> |
|
For more information of the Mecha Comet, our pocket little handheld computer - click <a href="https://mecha.so/comet">here</a> |
|
|
|
### TL;DR |
|
- Base: `unsloth/Llama-3.2-1B-Instruct` |
|
- Method: LoRA (r=16, alpha=16, dropout=0) |
|
- Context: 2048 tokens |
|
- Data: 8,669 pairs across 11 categories |
|
- Use cases: quick command lookup, learning CLI, automation |
|
|
|
## Run with Ollama (baby steps) |
|
|
|
1) Install Ollama: see `https://ollama.com/download`. |
|
|
|
2) Verify install: |
|
```bash |
|
ollama --version |
|
``` |
|
|
|
3) Run the model interactively: |
|
```bash |
|
ollama run mecha-org/linux-command-generator-llama3.2-1b |
|
``` |
|
Then type a request, e.g.: |
|
- "List all files in the current directory with detailed information" |
|
- "Compress the file data.txt using bzip2" |
|
- "Find all .py files in the current directory and subdirectories" |
|
|
|
Press Ctrl+C to exit. |
|
|
|
4) One‑off (non‑interactive): |
|
```bash |
|
ollama run mecha-org/linux-command-generator-llama3.2-1b -p "Display the first 5 lines of access.log" |
|
# Expected: head -n 5 access.log |
|
``` |
|
|
|
5) Get command‑only answers (when needed): |
|
```bash |
|
ollama run mecha-org/linux-command-generator-llama3.2-1b -p "Output only the command with no explanation. Show system information including kernel version" |
|
# Expected: uname -a |
|
``` |
|
|
|
|
|
### Use a local GGUF with Ollama (fallback) |
|
If you have `model.gguf`, put it next to a `Modelfile`: |
|
|
|
``` |
|
FROM ./model.gguf |
|
PARAMETER temperature 0.2 |
|
PARAMETER top_p 0.9 |
|
PARAMETER num_ctx 2048 |
|
SYSTEM You are a Linux command generator. Output only the command with no explanation. |
|
TEMPLATE {{ .Prompt }} |
|
``` |
|
|
|
Create and run: |
|
```bash |
|
ollama create linux-cmd-gen -f Modelfile |
|
ollama run linux-cmd-gen -p "Find all .py files recursively" |
|
# Expected: find . -name "*.py" |
|
``` |
|
|
|
## Other ways to use (optional) |
|
|
|
### Transformers |
|
```python |
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
import torch |
|
|
|
model_id = "mecha-org/linux-command-generator-llama3.2-1b" |
|
tokenizer = AutoTokenizer.from_pretrained(model_id) |
|
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16 if torch.cuda.is_available() else None) |
|
|
|
def generate_command(description: str) -> str: |
|
messages = [{"role": "user", "content": description}] |
|
inputs = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt") |
|
if torch.cuda.is_available(): |
|
inputs = inputs.to(model.device) |
|
model = model.to("cuda") |
|
outputs = model.generate(input_ids=inputs, max_new_tokens=64) |
|
return tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
|
|
print(generate_command("List all files in the current directory with detailed information")) |
|
# -> ls -la |
|
``` |
|
|
|
### Unsloth |
|
```python |
|
from unsloth import FastLanguageModel |
|
|
|
model_id = "mecha-org/linux-command-generator-llama3.2-1b" |
|
model, tokenizer = FastLanguageModel.from_pretrained(model_name=model_id, max_seq_length=2048) |
|
FastLanguageModel.for_inference(model) |
|
|
|
msgs = [{"role": "user", "content": "Compress the file data.txt using bzip2"}] |
|
inputs = tokenizer.apply_chat_template(msgs, tokenize=True, add_generation_prompt=True, return_tensors="pt") |
|
output = model.generate(input_ids=inputs, max_new_tokens=32) |
|
print(tokenizer.decode(output[0], skip_special_tokens=True)) |
|
# -> bzip2 data.txt |
|
``` |
|
|
|
## Example prompts → commands |
|
- "Show system information including kernel version" → `uname -a` |
|
- "Find all .py files in the current directory and subdirectories" → `find . -name "*.py"` |
|
- "Display the first 5 lines of access.log" → `head -n 5 access.log` |
|
- "Change permissions of script.sh to make it executable for owner" → `chmod +x script.sh` |
|
- "Create a tar archive backup.tar containing all files in the documents folder" → `tar -cf backup.tar documents/` |
|
|
|
## Dataset (overview) |
|
8,669 input→command pairs across: |
|
- Compression & Archiving: bzip2, gzip, tar, zip |
|
- File & Directory: cd, cp, find, ls, mkdir, mv, pwd, rm, rmdir, touch |
|
- Permissions & Ownership: chgrp, chmod, chown |
|
- Viewing & Editing: cat, echo, head, less, tail, vim |
|
- Networking: curl, dig, host, ifconfig, ip, netstat, ping, ssh, wget |
|
- Package mgmt: apt, dpkg |
|
- Process mgmt: kill, killall, nice, pkill, renice |
|
- Search & Filter: awk, grep, locate, sed |
|
- System info/monitoring: df, du, free, top, uname |
|
- User/group: useradd, usermod, groupadd, passwd, sudo |
|
- Misc/system control: cron, systemctl, tmux, screen, service |
|
|
|
Format: |
|
```json |
|
{"input": "Describe what you want to do", "output": "linux_command_here"} |
|
``` |
|
|
|
## Training details |
|
- Base: `unsloth/Llama-3.2-1B-Instruct` |
|
- LoRA on attention + MLP projections: |
|
- r=16, lora_alpha=16, lora_dropout=0 |
|
- target_modules: ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"] |
|
- Max sequence length: 2048 |
|
- SFT on responses only (TRL SFTTrainer), Unsloth-optimized |
|
- Example hparams: per‑device batch 2, grad accum 4, epochs 3, lr 2e‑4 |
|
- Reference: Tesla P100 16GB (~45 minutes), ~2.8GB VRAM (adapters) |
|
|
|
## Safety and responsible use |
|
- Always inspect commands before executing. |
|
- Avoid destructive operations unless you fully understand consequences. |
|
- For apps, add denylists and validations (e.g., block `rm -rf /`, `mkfs`, `dd`). |
|
|
|
## Notes on GGUF |
|
- Works with `llama.cpp` and Ollama. |
|
- Typical memory (approx.): q4_k_s ~600MB, q4_k_m ~700MB, q8_0 ~1.1GB, f16 ~2.2GB. |
|
|
|
## License |
|
Derived from Meta Llama 3.2. Use must comply with the base model license. Check your deployment context for any additional constraints. |
|
|
|
## Citation |
|
``` |
|
@software{hrsvrn_linux_command_generator_llama32_1b, |
|
author = {Harshvardhan Vatsa}, |
|
title = {Linux Command Generator (Llama 3.2 1B)}, |
|
year = {2025}, |
|
url = {https://huggingface.co/mecha-org/linux-command-generator-llama3.2-1b} |
|
} |
|
``` |
|
|
|
## Acknowledgements |
|
- Base: `unsloth/Llama-3.2-1B-Instruct` |
|
- Libraries: `unsloth`, `transformers`, `trl`, `accelerate`, `bitsandbytes` |
|
|
|
|