File size: 8,886 Bytes
79f6380
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3f61e98
 
79f6380
011281e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79f6380
 
 
 
 
 
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
---
license: apache-2.0
language:
- en
library_name: transformers
pipeline_tag: text-generation
base_model: Qwen/Qwen3-0.6B
base_model_relation: finetune
datasets:
- dirac-run/ec-training-data
tags:
- safetensors
- bf16
- bash
- shell
- command-generation
- lora
- easycommand
---

# EasyCommand 0.6B: trainable checkpoint

The selected **A1** EasyCommand checkpoint, supplied as a complete merged
BF16 Hugging Face model and its original cumulative FP32 LoRA adapter.
It generates GNU/Linux Bash commands from English requests, using COMMAND JSON.

This is a fine-tuned model derived from [Qwen/Qwen3-0.6B](https://huggingface.co/Qwen/Qwen3-0.6B/tree/c1899de289a04d12100db370d81485cdf75e47ca),
pinned to revision c1899de289a04d12100db370d81485cdf75e47ca. It is not the untouched upstream model.
The merged weight file is 1,192,135,096 bytes (1.19 GB).

## Files and uses

- model.safetensors, configuration and tokenizer: standalone Transformers
  inference or a starting point for a new fine-tuning run.
- [adapter/](adapter/README.md): the original trained LoRA weights and portable
  PEFT configuration, for continuing the existing adapter with its pinned base.
- [system-prompt.txt](system-prompt.txt): the exact evaluated serving prompt.
- [training.json](training.json): training recipe and initializer lineage.
- [manifest.json](manifest.json) and SHA256SUMS: file identity and integrity.

The matching [GGUF release](https://huggingface.co/dirac-run/ec-0.6b-gguf) provides the
evaluated quantized deployment files. The [dataset](https://huggingface.co/datasets/dirac-run/ec-training-data)
is available separately under Apache-2.0.

## Load the merged model

The release was checked with Transformers 4.57.6, PyTorch 2.9.1 and PEFT 0.21.1.
Install PyTorch for your hardware, plus transformers, accelerate, safetensors and
huggingface_hub; add peft when using the adapter.

~~~python
import json
from pathlib import Path
import torch
from huggingface_hub import hf_hub_download
from transformers import AutoModelForCausalLM, AutoTokenizer

repo = "dirac-run/ec-0.6b"
tokenizer = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(
    repo, dtype=torch.bfloat16, device_map="auto"
)
model.eval()
system = Path(hf_hub_download(repo, "system-prompt.txt")).read_text()
messages = [
    {"role": "system", "content": system},
    {"role": "user", "content": "print the system uptime"},
]
inputs = tokenizer.apply_chat_template(
    messages, tokenize=True, add_generation_prompt=True,
    enable_thinking=False, return_dict=True, return_tensors="pt"
).to(model.device)
with torch.inference_mode():
    output = model.generate(
        **inputs, do_sample=False, max_new_tokens=256,
        eos_token_id=151645, pad_token_id=151643
    )
response = tokenizer.decode(
    output[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True
)
print(json.loads(response)["value"])
~~~

This prints a proposed command; it does not execute it. Qwen3 thinking is disabled; the assistant prefix contains the empty thinking
block before the generated JSON.
Keep the system prompt, chat template and greedy decoding when reproducing the
documented deployment profile. JSON is learned behavior; no grammar is applied.
Other backends, numeric formats or kernels can change outputs.

## Continue the original LoRA adapter

~~~python
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM

base = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-0.6B",
    revision="c1899de289a04d12100db370d81485cdf75e47ca",
    dtype=torch.bfloat16,
)
model = PeftModel.from_pretrained(
    base, "dirac-run/ec-0.6b", subfolder="adapter", is_trainable=True
)
~~~

Use the pinned original upstream model with the existing adapter. Applying that
adapter to the merged EasyCommand model would apply the learned change twice.
To add a new adapter to the merged model instead, load the root checkpoint and
create a fresh LoRA configuration. Both approaches start a new optimization run:
optimizer, scheduler and RNG states from the old run are not included.

## Training and conversion

One weighted epoch of 474,635 presentations took 14,833 LoRA updates from the
upstream weights. The selected adapter then received 200 repair/replay updates
from that trained state; its saved weights include both stages.

Both stages used rank 32, alpha 64, dropout 0.05 and all q/k/v/o attention and
gate/up/down MLP projections, with effective batch 32, a frozen BF16 base and
FP32 adapters. AdamW used warmup and cosine decay. The parent peak LR was 0.0002;
the continuation used 5e-6, ten warmup updates and 50% repair / 50% replay
sampling from 2,564 source rows. The parent ran on H100, the continuation on A40.
Assistant answer and EOS tokens were supervised; prompt/padding tokens were masked.

The longer [parent training prompt](training-system-prompt.txt) differs from the
177-byte serving/continuation prompt. The released dataset is a deduplicated union
of 401,975 pairs, including other repair experiments. One flat pass over it does
not reproduce historical repetition, sampling or this model's exact exposure.

The merged checkpoint computes base plus scaled LoRA delta in FP32, then rounds
once to BF16. Its pre-rounding merge was verified byte-for-byte against the FP32
merge used to produce the selected GGUF. Tied embedding/output weights are
preserved. The adapter binary remains the original FP32 file; only its
non-portable base path was replaced with the pinned HF base ID/revision.

## Evaluation and limitations

The per-quant ALFA-updated and six-panel internal results are reported on the
[matching GGUF card](https://huggingface.co/dirac-run/ec-0.6b-gguf#downloads-and-measured-results).
The merged BF16 export has passed loading, generation and tensor checks. Adapter
loading and finite, nonzero training gradients were also checked without an
optimizer update. This newly rounded BF16 export has not received a fresh full
benchmark run; do not transfer a GGUF score to it.

ALFA-updated is a separately documented benchmark variant, not original ALFA.
ALFA failures and internal panels informed data repair and checkpoint selection.
Those results are development measurements, not an untouched independent test.

The model targets English requests, Bash and GNU/Linux utilities. It does not
inspect the live filesystem or know which tools are installed. It gives a
best-effort command rather than clarification or inability responses. Commands
can be incorrect, incomplete or destructive; inspect them before execution.
The [ec application](https://github.com/dirac-run/ec) is published separately;
the Transformers example here also works independently of it.

### Published original-ALFA results (different protocol)

These externally reported results provide context. **They are not directly
comparable with our ALFA-updated measurements.** Sources checked on 5 October 2026.

| Model/configuration | Reported download size | Original-ALFA pass rate | Source |
|---|---:|---:|---|
| GPT-4o, cloud API (published reference) | — | 73.0% | [whatisit benchmarks](https://github.com/ThorOdinson246/whatisit-nl2sh#benchmarks) |
| nl2sh-3b Q4_K_M | 1.9 GB | 65.7% | [whatisit benchmarks](https://github.com/ThorOdinson246/whatisit-nl2sh#benchmarks) |
| Community nl2sh-qwen25-coder-1.5b Q4_K_M | 941 MB | 65.67% | [Community model card](https://huggingface.co/barbarabhb/nl2sh-qwen25-coder-1.5b-GGUF) |
| whatisit / nl2sh-1.5b Q4_K_M | 941 MB | 62.0% | [whatisit benchmarks](https://github.com/ThorOdinson246/whatisit-nl2sh#benchmarks) |
| Qwen2.5-Coder-7B, untuned | 4.4 GB | 61.3% | [whatisit benchmarks](https://github.com/ThorOdinson246/whatisit-nl2sh#benchmarks) |
| Qwen2.5-Coder-1.5B, untuned | 941 MB | 54.0% | [whatisit benchmarks](https://github.com/ThorOdinson246/whatisit-nl2sh#benchmarks) |

The local-model sources report 300 tasks, temperature 0, a 64-token output cap,
and the unmodified upstream scorer with embedding threshold 0.75. GPT-4o's
73.0% is the benchmark paper's published reference, not a run by us or a
measurement under that local serving profile. Sizes retain the authors' units
and rounding; the untuned rows' quantization is not specified in the source table.

The [community author also remeasured whatisit at **59.0%**](https://huggingface.co/barbarabhb/nl2sh-qwen25-coder-1.5b-GGUF)
on their own rig, versus its upstream published **62.0%**. Both are external
original-ALFA measurements, distinct from our **191/300 (63.67%) ALFA-updated**
result. No EC-versus-external ranking across these two grading protocols is implied.

## License and integrity

The model and this documentation are licensed under [Apache-2.0](LICENSE),
with upstream/project attribution in [NOTICE](NOTICE).
The adapter has the same terms. Verify downloaded files from the repository root
with sha256sum --check SHA256SUMS.