Instructions to use Nianchen/IndustryForge-27B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Nianchen/IndustryForge-27B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="Nianchen/IndustryForge-27B") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("Nianchen/IndustryForge-27B") model = AutoModelForMultimodalLM.from_pretrained("Nianchen/IndustryForge-27B", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.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(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use Nianchen/IndustryForge-27B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Nianchen/IndustryForge-27B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Nianchen/IndustryForge-27B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/Nianchen/IndustryForge-27B
- SGLang
How to use Nianchen/IndustryForge-27B 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 "Nianchen/IndustryForge-27B" \ --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": "Nianchen/IndustryForge-27B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'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 "Nianchen/IndustryForge-27B" \ --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": "Nianchen/IndustryForge-27B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use Nianchen/IndustryForge-27B with Docker Model Runner:
docker model run hf.co/Nianchen/IndustryForge-27B
IndustryForge-27B
IndustryForge-27B is a domain-enhanced multimodal foundation model for industrial CAD. It is built on top of Qwen/Qwen3.5-27B by multi-task SFT on six curated industrial-CAD sub-corpora, and is intended to serve as a common substrate for industrial-agent projects rather than as an end-to-end CAD generator.
It covers four shared CAD skills in a single 27B-parameter multimodal model:
- CAD visual understanding โ reading multi-view engineering drawings, isometric renders, and structured dimensional annotations (CAD-VQA);
- Parametric CAD code generation โ natural language / image โ executable CadQuery Python (text2cadquery);
- Industrial-software API (COM) code generation โ SolidWorks / Inventor / AutoCAD COM scripts (com_2d, com_3d, com_assembly);
- Assembly-level CAD code generation โ multi-part CadQuery + assembly scripts (text2cadquery-assembly).
This repository hosts the v4.1 release (checkpoint-6400-merged,
2026-04-29), the configuration evaluated in the technical report.
Highlights
- Large gains on CAD-domain benchmarks. On four domain benchmarks,
IndustryForge-27B lifts the base model by +33.65 pp on average and
wins 4/4 against
gpt-5.4. - Retains general capability. Across 11 general-capability benchmarks it averages +1.56 pp over the base model, with no catastrophic forgetting.
- First non-zero usable assembly-level pass rate (15.38%) among the models compared in the report.
Domain benchmark results
| Benchmark | Qwen3.5-27B | gpt-5.4 | IndustryForge-27B | ฮ vs base |
|---|---|---|---|---|
| CAD VQA (accuracy) | 84.10% | 87.12% | 88.23% | +4.13 |
CadQuery (passed@1e-3) |
7.82% | 72.36% | 77.88% | +70.06 |
| COM CAD (Inventor/SolidWorks, pass rate) | 28.33% | 30.00% | 73.33% | +45.00 |
CadQuery Assembly (passed@1e-3) |
0.00% | 3.85% | 15.38% | +15.38 |
| Mean | 30.06% | 48.33% | 63.71% | +33.65 |
General-capability results (11 benchmarks, mean)
| Model | Mean |
|---|---|
| Qwen3.5-27B | 81.86% |
| gpt-5.4 | 78.90% |
| IndustryForge-27B | 83.42% |
Benchmarks: aime26, arc, chartqa, gsm8k, gsm8k_v, math_vision, mmlu, mmmu, ocr_bench, science_qa, trivia_qa.
Training data
Six industrial-CAD sub-corpora, ~52k multimodal samples in total, mixed in a flat proportion (no hand-tuned re-weighting):
| Task family | Sub-corpora | Size |
|---|---|---|
| CAD visual understanding | cad_vqa | 4 k |
| Parametric CAD code | text2cadquery | 17 k |
| COM parts | com_2d (20 k) + com_3d (5 k) | 25 k |
| Assembly | text2cadquery-assembly (1 k) + com_assembly (5 k) | 6 k |
| Total | ~52 k |
All code samples are sandbox-executed before use; COM scripts were executed in
containerised Windows VMs (SolidWorks / Inventor / AutoCAD) and only samples
producing valid .stl / .step artefacts were kept. The corpora are
decontaminated against every downstream benchmark at both UUID and
AST-structural level.
Training recipe (v4.1)
| Item | Value |
|---|---|
| Base model | Qwen3.5-27B (multimodal, qwen3_5) |
| Method | Multi-task SFT (full-precision merged LoRA adapter) |
| PEFT | LoRA rank 8, alpha 32, all-linear; ViT + aligner frozen |
| Epochs | 1 |
| Effective batch size | 64 (per_device_train_batch_size=2, 8 GPUs) |
| Learning rate | 5e-5, cosine schedule, warmup ratio 0.05 |
| Sequence parallel | 8 |
| Sharding | DeepSpeed ZeRO-3 |
| Packing | padding_free=True (no padding tokens in loss) |
| Max sequence length | 262144 |
| Precision | bfloat16, FlashAttention (flash_attn) |
| Hardware | 1 node ร 8ร A100-80GB |
| Framework | ms-swift (swift sft) |
| Training steps | 6400 (max 6568; โ0.97 epoch of the packed corpus) |
The released weights are the merged full model (no adapter needed at
inference time), serialised in 12 safetensors shards in bfloat16.
Quickstart
Requires transformers >= 5.2.0.
from transformers import AutoProcessor, AutoModelForImageTextToText
import torch
from PIL import Image
MODEL_ID = "Nianchen/IndustryForge-27B"
processor = AutoProcessor.from_pretrained(MODEL_ID)
model = AutoModelForImageTextToText.from_pretrained(
MODEL_ID,
dtype=torch.bfloat16,
device_map="auto",
)
messages = [
{
"role": "user",
"content": [
{"type": "image", "image": Image.open("drawing.png")},
{"type": "text", "text": "Write a CadQuery script that reproduces this part."},
],
}
]
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
)
inputs = {k: (v.to(model.device) if hasattr(v, "to") else v) for k, v in inputs.items()}
with torch.inference_mode():
out = model.generate(**inputs, max_new_tokens=4096, do_sample=False)
print(processor.batch_decode(out[:, inputs["input_ids"].shape[1]:], skip_special_tokens=True)[0])
The model was trained with the Qwen3.5 chat template and expects normal
user/assistant turns; image inputs should follow Qwen3.5-VL preprocessing
(handled by AutoProcessor).
Intended use
- As a foundation substrate for downstream industrial agents that need to read CAD drawings, write CadQuery / COM code, or generate assembly scripts.
- Research on CAD code generation, industrial multimodal reasoning, and industrial-software automation.
Limitations
- Assembly-level capability is still limited (15.38%
passed@1e-3); single-part data dominates the training distribution. - Coverage is limited to the "Windows CAD trio" (SolidWorks, Inventor, AutoCAD); no Office / Adobe COM domains.
- Simulation and CAE are not modelled at the foundation layer.
- Generated code should always be sandbox-executed and geometry-checked before use in a real engineering pipeline.
- This release covers SFT only; closed-loop RL is not included.
Citation
@techreport{industryforge2026,
title = {IndustryForge-27B: A Domain-Enhanced Multimodal Foundation Model for Industrial CAD},
author = {Deng, Nianchen and Ai, Jiaxin and Hu, Tao and Zou, Shu and Dong, Yurui
and Li, Siqi and Cai, Xinyu and Yang, Xuemeng and Wen, Licheng
and Zhou, Hongbin and Zhang, Hairong and Cai, Pinlong and Shi, Botian},
year = {2026},
note = {Technical report. Model available at https://huggingface.co/Nianchen/IndustryForge-27B}
}
License
Released under the Apache License 2.0, following the license of the Qwen3.5-27B base model. Users must additionally comply with the base model's terms.
- Downloads last month
- 27