jatshi/EvidenceAgent-MM-Qwen3-1.7B-GRPO-LoRA
EvidenceAgent-MM Qwen3-1.7B GRPO LoRA
This repository contains the final LoRA adapter for EvidenceAgent-MM, a verifiable multimodal meeting and classroom assistant. The adapter turns retrieved evidence into a strict JSON response containing an answer or safe refusal, claim-level evidence IDs, missing-evidence fields, a clarification question, and confidence.
The adapter must be loaded on top of Qwen/Qwen3-1.7B. It is not an ASR, OCR, or speaker-diarization model; those upstream tools belong to the EvidenceAgent-MM retrieval pipeline.
Training
The training chain was executed on one RTX 4090:
- supervised fine-tuning on schema-valid grounded responses;
- DPO on chosen/rejected evidence and refusal behavior;
- 100 GRPO steps with a shaped verifiability reward.
The native Qwen chat template was used with thinking disabled. The GRPO run used 80 training examples from the checked-in EAMM bronze benchmark. Mean training reward increased from 0.5532 over the first 20 steps to 0.7796 over the last 20 steps (0.7101 across all 100 steps).
Evaluation
The held-out benchmark is deliberately small: 120 questions across 12 synthetic meeting sessions, with session-level train/validation/test separation. Validation and test each contain 20 questions from two sessions. These numbers demonstrate the structured-output and evidence-contract behavior on this bronze benchmark; they are not evidence of broad real-world meeting generalization.
Inference was measured with Transformers on an RTX 4090. Peak allocated VRAM was approximately 3.40 GiB.
Usage
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
base_id = "Qwen/Qwen3-1.7B"
adapter_id = "jatshi/EvidenceAgent-MM-Qwen3-1.7B-GRPO-LoRA"
tokenizer = AutoTokenizer.from_pretrained(adapter_id)
base = AutoModelForCausalLM.from_pretrained(
base_id,
torch_dtype=torch.bfloat16,
device_map="auto",
)
model = PeftModel.from_pretrained(base, adapter_id)
messages = [
{
"role": "system",
"content": (
"Return only the EvidenceAgent-MM JSON contract. Cite only evidence "
"IDs present in the supplied context; clarify or abstain when evidence "
"is insufficient."
),
},
{
"role": "user",
"content": (
"Question: 谁提出了低延迟检索方案?\n"
"Evidence:\n"
"- [meeting:utt:01] 00:10-00:14 张同学:我建议采用方案 A。\n"
"- [meeting:ocr:01] slide 4: 方案 A,P95=40ms"
),
},
]
inputs = tokenizer.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
enable_thinking=False,
return_tensors="pt",
).to(model.device)
with torch.inference_mode():
output = model.generate(inputs, max_new_tokens=512, do_sample=False)
print(tokenizer.decode(output[0, inputs.shape[-1]:], skip_special_tokens=True))Limitations
- The benchmark sessions are synthetic and templated; only two sessions are held out for each evaluation split.
- Reward components validate schema, status, citation overlap, grounding, and abstention behavior. They do not replace human factuality review.
- The model can still omit secondary cross-modal citations, reflected in the citation score of
0.80. - Use the full EvidenceAgent-MM evidence gate in safety-sensitive settings. Do not treat model confidence as calibrated probability.
Reproducibility
Training code, dataset generator, reward implementation, DeepSpeed single-GPU comparison, evaluation scripts, and deterministic ablations are in the EvidenceAgent-MM repository.
Framework versions for this run: PyTorch 2.10.0+cu128, Transformers 5.14.1, TRL 0.29.1, PEFT 0.20.0.
