Training
- 524 generated lab runs with injected faults, on Oracle 26ai Free (AWR) and 12.2 SE2 (Statspack). The 472 runs where the fault actually reached the report give 425 for training and 61 for validation.
- 3 epochs, batch 16, linear LR decay. This adapter is the third epoch, chosen on validation.
- About $2 of Tinker compute, including evaluation.
Results (18 held-out lab runs, scored once)
Table with columns: Qwen3-8B, AWR, Statspack, Top cause right, False causes| Qwen3-8B | AWR | Statspack | Top cause right | False causes |
|---|
| Untuned | 5/9 | 6/9 | 11/18 | 38 |
| This adapter | 8/9 | 8/9 | 18/18 | 0 |
A run passes when the injected cause is in the top 2, or both causes are in the top 3 when two were injected. cpu_cap isn't counted as a false cause. Both misses are a full-scan + commit-storm pair where the model names only the commit storm.
These are lab faults, one or two at a time, on short windows. Real systems are messier; treat the output as a first pass for a DBA, not a verdict.
Files
adapter_model.safetensors, adapter_config.json: PEFT format for Qwen/Qwen3-8B.
second-opinion-qwen3-lora-f16.gguf: the same adapter for llama.cpp. In my tests it works when merged with llama-export-lora into Ollama's qwen3:8b Q4_K_M weights and quantized to Q8_0 (lab/tune/export.py). There it agreed with the Tinker-hosted model's top cause on 17 of 18 held-out runs. Requantizing to Q4 lost the tuning.
from peft import PeftModelfrom transformers import AutoModelForCausalLM, AutoTokenizer base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-8B", torch_dtype="auto", device_map="auto")model = PeftModel.from_pretrained(base, "pyaroslav/second-opinion-qwen3-8b-lora")tok = AutoTokenizer.from_pretrained("Qwen/Qwen3-8B")