Text Generation
Transformers
Safetensors
English
qwen3
bf16
bash
shell
command-generation
lora
easycommand
conversational
text-generation-inference
Instructions to use dirac-run/ec-0.6b with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use dirac-run/ec-0.6b with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="dirac-run/ec-0.6b") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("dirac-run/ec-0.6b") model = AutoModelForCausalLM.from_pretrained("dirac-run/ec-0.6b", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use dirac-run/ec-0.6b with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "dirac-run/ec-0.6b" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "dirac-run/ec-0.6b", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/dirac-run/ec-0.6b
- SGLang
How to use dirac-run/ec-0.6b with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "dirac-run/ec-0.6b" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "dirac-run/ec-0.6b", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "dirac-run/ec-0.6b" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "dirac-run/ec-0.6b", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use dirac-run/ec-0.6b with Docker Model Runner:
docker model run hf.co/dirac-run/ec-0.6b
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.
|