---
license: mit
library_name: transformers
base_model: Qwen/Qwen2.5-Coder-14B-Instruct
datasets:
- RnniaSnow/st-code-dataset
language:
- en
pipeline_tag: text-generation
tags:
- code
- plc
- iec-61131-3
- structured-text
- industrial-automation
- qwen
- llama-factory
---
# ST-Coder-14B
## 🤖 Model Description
**ST-Coder-14B** is a specialized code generation model fine-tuned on **Qwen2.5-Coder-14B-Instruct**. It is specifically optimized for **Industrial Automation** tasks, with a primary focus on the **IEC 61131-3 Structured Text (ST)** programming language.
Unlike general-purpose coding models, ST-Coder-14B has been trained on high-quality, domain-specific data to understand:
* **PLC Logic**: PID control, Motion Control, Safety logic, State Machines.
* **IEC 61131-3 Syntax**: Correct usage of `FUNCTION_BLOCK`, `VAR_INPUT`, `VAR_OUTPUT`, and strict typing rules.
* **Industrial Protocols**: Modbus, TCP/IP socket handling in ST, and vendor-specific nuances (Codesys, TwinCAT, Siemens SCL).
## 💻 Quick Start
### 1. Installation
```bash
pip install transformers torch accelerate
```
### 2. Inference with Transformers
```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# Load the model
model_id = "RnniaSnow/ST-Coder-14B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype="auto",
device_map="auto"
)
# Prepare the prompt
system_prompt = "You are an expert industrial automation engineer specializing in IEC 61131-3 Structured Text."
user_prompt = "Write a Function Block for a 3-axis motion control system with error handling."
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
# Generate
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=2048,
temperature=0.2, # Low temperature is recommended for code generation
top_p=0.9
)
# Decode output
output = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(output)
```
### 3. Usage with vLLM (Recommended for Production)
```bash
vllm serve RnniaSnow/ST-Coder-14B --tensor-parallel-size 1 --max-model-len 8192
```
## 🔧 Training Details
This model was trained using [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory) with the following configuration:
* **Base Model**: Qwen/Qwen2.5-Coder-14B-Instruct
* **Finetuning Method**: Full LoRA Merge (Target modules: `all`)
* **Precision**: BF16
* **Context Window**: 8192 tokens
* **Optimizer**: AdamW (Paged)
* **Learning Rate Strategy**: Cosine with warmup
The training data includes a mix of:
1. **Golden Samples**: Verified ST code from real-world engineering projects.
2. **Synthetic Data**: High-quality instruction-response pairs generated via DeepSeek-V3 distillation, focusing on edge cases and complex logic.
## ⚠️ Disclaimer & Safety
**Industrial Control Systems (ICS) carry significant physical risks.** * This model generates code based on statistical probabilities and does **not** guarantee functional correctness or safety.
* **Always** verify, simulate, and test generated code in a safe environment before deploying to physical hardware (PLCs, robots, drives).
* The authors assume no liability for any damage or injury resulting from the use of this model.
## 📜 License
This model is licensed under the [MIT License](https://opensource.org/licenses/MIT).