Tilakoid/qwen3-1.7b-vscode-triage-lora
Qwen3-1.7B VS Code Issue Triage LoRA
LoRA adapter for generative triage of VS Code GitHub issues into exactly one of two labels: bug or feature-request. Labels are decoded generatively from the instruction-tuned base. There is no classifier head.
Adapter details
- PEFT LoRA for
CAUSAL_LM - Rank 16, alpha 32, dropout 0, bias
none, inference mode enabled - Target modules:
q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj - Training precision: bf16
- Training data: 1,593 training examples, 3 epochs, checkpoint-600
- Published weight
adapter_model.safetensors: 69,782,384 bytes, SHA-2560826d2c66cba38ea3b1bcf2a92a12eb2fb7292443e31a98243a79bc12db44ac6
Base model and provenance
Three base references appear in this history and are distinct:
- The original saved
adapter_config.jsonnamed the floating baseunsloth/Qwen3-1.7Bwith no revision pin. Original config SHA-256:460345e6d3301589dfb1ecbccc7f16f98b238807dfd289d32e863b2ef49323d6. - A reconstructed training mirror:
unsloth/Qwen3-1.7B@6262b50d6c1f8ee5e4ac750d710c33603bfc2a0c. - The tested and publication-time operational base:
Qwen/Qwen3-1.7B@70d244cc86ccca08cf5af4e1e306ecf908b1ad5e.
Common base tensors were verified equivalent. The official revision is not claimed as training provenance.
The staged adapter_config.json intentionally changes only base_model_name_or_path to Qwen/Qwen3-1.7B and revision to 70d244cc86ccca08cf5af4e1e306ecf908b1ad5e. Every other field from the original config is preserved. Staged config SHA-256: fd2db12d952dff36baef9f52ab2dcc2d3e172cf11475cabfe7cb80dbf5a81998.
Provenance class C: this is an existing independent checkpoint-600 adapter. It is not authenticated as either historical adapter: not the adapter proven to have produced the final benchmark 89%, and not authenticated as the committed standalone 90% adapter.
Evaluation
Fresh adapter-specific evaluation only. No baseline delta is reported.
- Evaluator: Git commit
3e692b556c2e6e8afc0d676f73b390a734a5bc7a - Frozen config SHA-256:
10c3d896f8b9498959896435eeef38138fee02f6a986fa755b79ad8664969f03 - Base:
Qwen/Qwen3-1.7B@70d244cc86ccca08cf5af4e1e306ecf908b1ad5e - Adapter SHA-256:
0826d2c66cba38ea3b1bcf2a92a12eb2fb7292443e31a98243a79bc12db44ac6 - Test set: 200 rows, SHA-256
9fc58e7070c327adaa7b522cf1cd530b90c077dbd54513d00ea31dead5712025, dataset revision15c7d77e083d0cd30ae84cc5de6add1dce6cf950
Prompt and decoding:
- System prompt:
Classify the GitHub issue into exactly one category: bug or feature-request. Return only the category name. enable_thinking=False, max issue tokens 1800, max new tokens 12, greedy decoding, padding with EOS
Results:
- Strict accuracy: 90% (180/200)
- Semantic accuracy: 90% (180/200)
- Valid label rate: 100% (200/200)
Confusion (rows = actual label):
Recall: bug 93%, feature-request 87%.
Deterministic prediction fields match the old untracked local CSV for 200/200 rows. Committed historical comparisons agree at 198/200 rows each. Files are not claimed to be byte-identical. Raw metrics and prediction files are not included here.
Files
Only adapter files are published. Tokenizer files (tokenizer.json, tokenizer_config.json, chat_template.jinja) are intentionally excluded because evaluation used the official pinned base tokenizer.
README.mdLICENSE(Apache License 2.0, same text as the benchmark repository root)adapter_config.jsonadapter_model.safetensors
Usage
Load the official base and tokenizer at the exact base revision, then attach the adapter from Tilakoid/qwen3-1.7b-vscode-triage-lora. No adapter revision is pinned yet, so none is specified.
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
base_id = "Qwen/Qwen3-1.7B"
base_revision = "70d244cc86ccca08cf5af4e1e306ecf908b1ad5e"
adapter_id = "Tilakoid/qwen3-1.7b-vscode-triage-lora"
tokenizer = AutoTokenizer.from_pretrained(base_id, revision=base_revision)
model = AutoModelForCausalLM.from_pretrained(
base_id, revision=base_revision, dtype=torch.bfloat16, device_map="auto"
)
model = PeftModel.from_pretrained(model, adapter_id)
model.eval()
system_prompt = (
"Classify the GitHub issue into exactly one category: "
"bug or feature-request. Return only the category name."
)
issue = "Settings sync stops responding after the latest update."
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": issue},
]
prompt = tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True, enable_thinking=False
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
output = model.generate(
**inputs, max_new_tokens=12, do_sample=False, pad_token_id=tokenizer.eos_token_id
)
label = tokenizer.decode(output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True).strip()
print(label) # one of: bug, feature-requestIntended use and limitations
- Scope: one repository (VS Code), two labels (
bug,feature-request) - Evaluated on a public frozen test set; the score is not a private or held-out claim
- No severity prediction, no developer assignment, no issue routing beyond the two labels
- Output is generative text; strict accuracy depends on exact-match decoding of the label string
- Single-run evaluation; no variance estimate across seeds or runs
- Domain transfer to other repositories or issue trackers is not established
Reproduction
- Benchmark repository: https://github.com/RayhanHaqi/github-triage-slm-benchmark
- Dataset (pinned revision): https://huggingface.co/datasets/Tilakoid/vscode-bug-feature-triage/tree/15c7d77e083d0cd30ae84cc5de6add1dce6cf950
Base model: https://huggingface.co/Qwen/Qwen3-1.7B (Apache-2.0). This adapter is released under Apache-2.0; see LICENSE.
