How to use from
Docker Model Runner
docker model run hf.co/XCombinator/sft-fab-instruct-all
Quick Links

XCombinator โ€” Fab Process model (SFT, all-family)

โš ๏ธ Post-deadline upload notice. This Hugging Face repository was published after the Zero One Hack_01 submission deadline (2026-05-31 10:00 CET), solely to give judges download access. The weights are the exact checkpoint trained and submitted before the deadline โ€” they have not been retrained, fine-tuned further, or modified. Only the act of uploading/hosting happened after the deadline. File timestamps reflect the upload, not the training.

Full fine-tune of Qwen/Qwen2.5-1.5B-Instruct on semiconductor wafer-fab process logic for the Zero One Hack_01 Industrial AI (Infineon) track. One promptable model for all three graded tasks: next-step prediction, sequence completion, and anomaly (rule-violation) detection, over a fixed ~120-step uppercase fab vocabulary across three product families (MOSFET / IGBT / IC).

This is the team XCombinator headline checkpoint (sft-instruct-all).

Prompt format (important)

The model was trained on a unified JSON format: a system prompt that states the task + output schema, a numbered user sequence, and a single JSON answer:

  • next-step / completion โ†’ {"reasoning": "...", "steps": ["STEP", ...]}
  • anomaly โ†’ {"reasoning": "...", "valid": true|false, "rule": "RULE_..."|null}

Build the exact messages with zo_train.prompts.build_messages(task, item) from the project repo, then apply the tokenizer's chat template. Minimal next-step example:

from transformers import AutoModelForCausalLM, AutoTokenizer

tok = AutoTokenizer.from_pretrained("XCombinator/sft-fab-instruct-all")
model = AutoModelForCausalLM.from_pretrained("XCombinator/sft-fab-instruct-all", torch_dtype="auto")

system = (
    "You are a semiconductor wafer fabrication process-sequence assistant.\n"
    "TASK โ€” Next-step prediction. Reply with one JSON object: "
    '{"reasoning": "...", "steps": ["BEST", "ALT2", ...]} (exact fab step names).'
)
user = (
    "Product family: MOSFET\n"
    "Partial sequence (numbered in execution order):\n"
    "1. RECEIVE WAFER LOT\n2. CLEAN WAFER\n3. GROW FIELD OXIDE\n4. COAT RESIST\n5. EXPOSE PATTERN\n\n"
    "Respond with the JSON object described in OUTPUT FORMAT."
)
msgs = [{"role": "system", "content": system}, {"role": "user", "content": user}]
prompt = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
ids = tok(prompt, return_tensors="pt").to(model.device)
out = model.generate(**ids, max_new_tokens=128, do_sample=False)
print(tok.decode(out[0][ids["input_ids"].shape[1]:], skip_special_tokens=True))
# -> {"reasoning": "", "steps": ["DEVELOP PHOTORESIST"]}

Use the repo's zo-track / judge-eval harness for scored evaluation; pass --model XCombinator/sft-fab-instruct-all --predictor hf.

Evaluation (MOSFET labeled eval, nโ‰ˆ200)

task this model n-gram baseline frozen base
next-step (top-1) 0.475 0.69 ~0
sequence completion (block-acc) 0.555 0.637 ~0
anomaly (F1) 0.567 0.89 0

The data-scaled sibling checkpoints push completion block-accuracy to 0.745 (beating the n-gram). See the project repo + submissions/XCombinator/REPORT.md for the full study.

Notes

  • Full fine-tune (not a LoRA adapter) โ€” loads directly with from_pretrained.
  • Trained on Leonardo (CINECA) A100; deterministic data factory over the organizer grammar.
Downloads last month
-
Safetensors
Model size
2B params
Tensor type
F32
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for XCombinator/sft-fab-instruct-all

Finetuned
(1694)
this model