PrefMatcher-7B instantiates the
Preference Match metric proposed in the
CUPID benchmark (COLM 2025). The model takes a preference description and an evaluation checklist to assess whether each checklist item matches or is covered by the preference. The model is trained using
Qwen2.5-7B-Instruct as its base model. PrefMatcher provides a high-fidelity, cost efficient judge for automatic evaluation on the CUPID benchmark.
PrefMatcher-7B was finetuned through QLoRA for 1 epoch on 4k data samples (i.e., prefernece-checklist matches). PrefMatcher achieved a Krippendorff's alpha of 0.748 with human annotations. The data samples were created through the synthesis pipeline for the CUPID benchmark, which were then evaluated or matched by GPT-4o. The model was trained through the
torchtune library.
Here is example code to use the model with
VLLM to predict the match between a preference and an evaluation checklist.
1from vllm import LLM, SamplingParams
2
3model_name = "kixlab/prefmatcher-7b"
4
5# Load the model
6llm = LLM(
7 model=model_name,
8 load_format="safetensors",
9 kv_cache_dtype="auto",
10 max_model_len=512
11)
12
13# Prepare example input
14preference = "Analysis should focus exclusively on visible surface defects and their direct correlation to specific printer settings."
15checklist = [
16 "Does the training document provide a detailed framework?",
17 "Does the training document provide a systematic framework?",
18 "Does the framework link external and internal test cube measurements to specific diagnostics?",
19 "Does the framework link external and internal test cube measurements to specific quality improvement actions?",
20]
21
22checklist_str = "\n".join([f"{i+1}. {item}" for i, item in enumerate(checklist)])
23messages = [{
24 "role": "system",
25 "content": "You are an analytical and insightful assistant that can determine the similarity between **evaluation checklists** and **evaluation criteria**. A criterion describes an aspect of AI outputs that should be evaluated. A checklist contain questions that are used to evaluate more specific or fine-grained aspects of the AI outputs. You will be provided with pairs of checklists and criteria. For each pair, you should determine whether each entry in the checklist is **covered** by the criterion. **Covered** means that the criterion and the checklist entry will evaluate the same or similar aspects of an AI output, even if they use different wording or phrasing."
26},
27{
28 "role": "user",
29 "content": f"#### Criterion\n\n{preference}\n\n#### Checklist\n\n{checklist_str}"
30}]
31
32sampling_params = SamplingParams(
33 max_tokens=512,
34 temperature=0.7
35)
36
37# Generate the output
38outputs = llm.chat(messages, sampling_params=sampling_params, use_tqdm=False)
39
40# Print the output
41print(outputs[0].outputs[0].text)
1@article{kim2025cupid,
2 title = {CUPID: Evaluating Personalized and Contextualized Alignment of LLMs from Interactions},
3 author = {Kim, Tae Soo and Lee, Yoonjoo and Park, Yoonah and Kim, Jiho and Kim, Young-Ho and Kim, Juho},
4 journal = {arXiv preprint arXiv:2508.01674},
5 year = {2025},
6}