Views
No views yet
Qwen/Qwen2.5-3B-Instruct
with Group Relative Policy Optimization (GRPO); no supervised fine-tuning
checkpoint was used.| Policy | Exact resolution | Mean verified reward | Strict JSON | Backend errors |
|---|---|---|---|---|
| Qwen2.5-3B-Instruct | 1.92% (16/832) | 11.88% | 63.58% | 0.00% |
| CrashDiag GRPO adapter | 27.40% (228/832) | 41.91% | 94.59% | 0.00% |
resolved_subfaults / total_subfaults. In the raw
mechanical-evaluation JSON, the historical success_rate field stores this mean
verified reward; resolved_episodes / total_episodes is the exact-resolution
rate.evaluation/
and trainer diagnostics under
training/.| Property | Value |
|---|---|
| Base model | Qwen/Qwen2.5-3B-Instruct |
| Method | direct GRPO with mechanically executed rewards |
| Dataset | 6,656 train / 832 held-out v5 episodes |
| LoRA | rank 16, alpha 32, dropout 0.05 |
| Target modules | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj |
| Optimizer steps | 832 |
| Effective batch | 8 prompts (batch 4, accumulation 2) |
| Generations per prompt | 4 |
| Learning rate | 5e-6, constant with 5% warmup |
| Context limits | 1,024 prompt tokens / 96 completion tokens |
| Sampling | temperature 1.0, top-p 0.95 |
| Precision and compute | BF16 on one NVIDIA L4 (24 GB) |
| Training runtime | approximately 8.2 hours |
1git clone https://github.com/Indium-AI-Labs/CrashDiag.git
2cd CrashDiag
3python -m pip install -e ".[train]"1import json
2import torch
3from peft import AutoPeftModelForCausalLM
4from transformers import AutoTokenizer
5
6from training.hard_scenarios import HARD_SYSTEM_PROMPT
7
8model_id = "Indium-AI-Labs/CrashDiag-Qwen2.5-3B-GRPO"
9tokenizer = AutoTokenizer.from_pretrained(model_id)
10model = AutoPeftModelForCausalLM.from_pretrained(
11 model_id,
12 torch_dtype="auto",
13 device_map="auto",
14).eval()
15
16observation = {
17 "observation": {
18 "incident_window": {"gateway": "degraded", "http_family": "5xx"},
19 "telemetry": {"signals": ["sensor-12:red", "sensor-20:red"]},
20 }
21}
22messages = [
23 {"role": "system", "content": HARD_SYSTEM_PROMPT},
24 {"role": "user", "content": json.dumps(observation, separators=(",", ":"))},
25]
26input_ids = tokenizer.apply_chat_template(
27 messages,
28 tokenize=True,
29 add_generation_prompt=True,
30 return_tensors="pt",
31).to(model.device)
32
33with torch.inference_mode():
34 output_ids = model.generate(
35 input_ids,
36 max_new_tokens=96,
37 do_sample=False,
38 pad_token_id=tokenizer.eos_token_id,
39 )
40
41print(tokenizer.decode(output_ids[0, input_ids.shape[1]:], skip_special_tokens=True)){"actions":[{"action":"restart_app","parameters":{}}]}crashdiag.agents.parse_workflow before executing them. The
environment caps workflows at eight actions and restricts actions to its declared
allowlist.adapter_model.safetensors and adapter_config.json: final LoRA adapter.evaluation/: full 832-episode GRPO/base outputs, summaries, metrics, and charts.training/: trainer results, metric history, summaries, and diagnostic charts.20260820T101800IST-qwen2.5_3b-grpo20260820T101800IST-qwen2.5_3b-grpo-eval20260818T092323IST-qwen2.5_3b-base-eval