CoolFace
Modelpublic

Tilakoid/qwen3-1.7b-vscode-triage-lora

sourceHugging Faceapache-2.0updated 9d agoView on Hugging Face
0likes20downloads
Model Card

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-256 0826d2c66cba38ea3b1bcf2a92a12eb2fb7292443e31a98243a79bc12db44ac6

Base model and provenance

Three base references appear in this history and are distinct:

  1. 1.The original saved adapter_config.json named the floating base unsloth/Qwen3-1.7B with no revision pin. Original config SHA-256: 460345e6d3301589dfb1ecbccc7f16f98b238807dfd289d32e863b2ef49323d6.
  2. 2.A reconstructed training mirror: unsloth/Qwen3-1.7B@6262b50d6c1f8ee5e4ac750d710c33603bfc2a0c.
  3. 3.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 revision 15c7d77e083d0cd30ae84cc5de6add1dce6cf950

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):

actualpredicted bugpredicted feature-requestpredicted invalid
bug9370
feature-request13870

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.md
  • —LICENSE (Apache License 2.0, same text as the benchmark repository root)
  • —adapter_config.json
  • —adapter_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.

python
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-request

Intended 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.