File size: 4,522 Bytes
e408149
1b5d5de
ed7cf36
 
 
 
 
 
 
 
 
 
 
e408149
ed7cf36
 
 
 
 
7628882
ed7cf36
 
 
7628882
ed7cf36
 
 
 
7628882
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ed7cf36
 
 
 
 
 
 
 
 
 
 
7628882
 
ed7cf36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7628882
ed7cf36
 
 
7628882
ed7cf36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b8af59e
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
---
license: apache-2.0
base_model: Qwen/Qwen3.5-9B-Base
tags:
  - cobol
  - mainframe
  - code
  - legacy-modernization
  - qwen3_5
  - lora
language:
  - en
pipeline_tag: text-generation
---

# FL-9B-4

FL-9B-4 is a COBOL / mainframe code model fine-tuned from **Qwen/Qwen3.5-9B-Base**
via supervised fine-tuning (SFT) on a curated COBOL instruction dataset. It targets
legacy-code understanding, COBOL generation, and COBOL-to-Java translation.

- **Base model:** Qwen/Qwen3.5-9B-Base (dense 9B, hybrid linear + full attention)
- **Method:** LoRA SFT (assistant-only masking), ~3 epochs, bf16
- **Domain:** COBOL, GnuCOBOL, mainframe knowledge, COBOL and Java

## Benchmark results

All code benchmarks compile and execute generated programs against reference
tests. Evaluated greedy (temperature 0), single sample per task, via vLLM.
"Base" = Qwen/Qwen3.5-9B-Base (no fine-tuning), evaluated with the same harness
and an injected ChatML template, so the delta reflects the SFT alone.

| Benchmark | Metric | Base | **FL-9B-4** |
|---|---|---|---|
| **COBOLEval** | pass@1 | 0.68% | **36.99%** |
| | compile rate | 8.65% | 82.10% |
| | test pass rate | 1.46% | 52.98% |
| **COBOL-JavaTrans (C2J)** | pass@1 | 42.66% | **80.42%** |
| | compile success rate (CSR) | 46.85% | 96.50% |
| **MainframeBench** | MCQ accuracy | 66.23% | **71.26%** |
| | QA - Token F1 | 11.68% | 12.75% |
| | QA - ROUGE-L | 9.33% | 10.29% |
| | Summarization - Token F1 | 23.62% | 27.64% |
| | Summarization - ROUGE-L | 16.38% | 20.25% |
| **CobolCodeBench** | INSTRUCT compile rate | 2.17% | **47.83%** |
| | COMPLETE compile rate | 0.00% | 32.61% |

The fine-tuning produces very large gains on COBOL generation and understanding:
COBOLEval pass@1 rises from ~1% to 37%, COBOL compile rate from 9% to 82%, and
CobolCodeBench COMPLETE from 0% to 33%. COBOL-to-Java translation nearly doubles in
pass@1 (from 43% to 80%). MainframeBench MCQ moves less (from 66% to 71%), since factual
mainframe knowledge is largely already present in the base model.

### Notes on evaluation

The MainframeBench MCQ, CobolCodeBench INSTRUCT and COMPLETE numbers were produced
after fixing harness-side generation limits (the default 16-token MCQ budget and
2048-token code budget truncated answers, and single-format `cobc` invocation
rejected valid programs written in a different column format). Fixed evaluation
uses a larger generation budget and tries `variable`, `free` and `fixed` COBOL
formats when compiling. Reported numbers reflect the model's actual capability,
not the truncated defaults.

The strongest results - COBOL-to-Java translation (80% pass@1) and COBOLEval
(82% compile) - show the model reliably produces valid, working COBOL and
translates legacy code into working Java.

## Intended use

- Translating legacy COBOL programs to Java
- Completing and generating GnuCOBOL programs
- Answering mainframe / COBOL knowledge questions
- Assisting with legacy-code modernization workflows

## Limitations

- Open-ended QA and summarization scores (Token F1 / ROUGE-L) are modest; the
  model is stronger at code generation and translation than at free-form prose.
- COBOL generation quality varies with column-format conventions; generated code
  may mix fixed and free formats.
- Not evaluated for safety-critical or production mainframe deployment without
  human review.

## Training

| Setting | Value |
|---|---|
| Base | Qwen/Qwen3.5-9B-Base |
| Method | LoRA (r=32, alpha=64), assistant-only SFT |
| Precision | bf16 |
| Epochs | ~3 |
| Sequence length | 8192 (packed) |
| Hardware | 1x NVIDIA RTX PRO 6000 Blackwell (96 GB) |
| Frameworks | Unsloth + Transformers |

LoRA adapters were applied to attention projections, MLP projections, and the
linear-attention (`in_proj_*`/`out_proj`) modules of the hybrid Qwen3.5
architecture; the vision tower, MTP head, and router/embedding/LM-head were
excluded.

## How to use

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "FLs-AI/FL-9B-4"  # adjust to your repo
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="bfloat16", device_map="auto")

messages = [{"role": "user", "content": "Translate this COBOL program to Java:\n\n<COBOL here>"}]
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(inputs, max_new_tokens=2048, temperature=0.0)
print(tok.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))
```