File size: 6,607 Bytes
b93b87f
76e3d54
b93b87f
76e3d54
 
 
 
 
 
 
 
b93b87f
76e3d54
 
 
 
 
 
b93b87f
 
04fa802
76e3d54
 
 
543b791
75ba507
 
 
 
543b791
75ba507
76e3d54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
04fa802
76e3d54
 
 
 
 
 
 
 
 
 
04fa802
76e3d54
 
 
 
 
04fa802
76e3d54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
04fa802
76e3d54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
04fa802
76e3d54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b93b87f
76e3d54
 
 
 
 
 
04fa802
76e3d54
 
b93b87f
76e3d54
 
 
b93b87f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
---
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`