from ctx_to_lora.data.preprocessing_fn import parse_clipper_user_message
from ctx_to_lora.eval_utils import compute_clipper_metrics, extract_clipper_answer
def test_parse_clipper_user_message_splits_context_and_prompt():
user_message = (
"You are provided with a context and a statement.\n\n"
"Book body\n\n"
"A claim.\n\n"
"Is it true or false?"
)
context, prompt = parse_clipper_user_message(user_message)
assert context == "Book body"
assert "A claim." in prompt
assert "" not in prompt
def test_extract_clipper_answer_prefers_answer_tag():
text = "Reasoning mentions false.TRUE"
assert extract_clipper_answer(text) == "true"
def test_compute_clipper_metrics_reports_pair_accuracy():
decoded_txts = [
{
"generated": "TRUE",
"label": "TRUE",
"clipper_status": "true",
"clipper_pair_id": "pair-a",
},
{
"generated": "false",
"label": "FALSE",
"clipper_status": "false",
"clipper_pair_id": "pair-a",
},
{
"generated": "true",
"label": "TRUE",
"clipper_status": "true",
"clipper_pair_id": "pair-b",
},
{
"generated": "true",
"label": "FALSE",
"clipper_status": "false",
"clipper_pair_id": "pair-b",
},
]
metrics, per_sample, counts = compute_clipper_metrics(decoded_txts)
assert metrics["clipper_accuracy"] == 0.75
assert metrics["clipper_true_accuracy"] == 1.0
assert metrics["clipper_false_accuracy"] == 0.5
assert metrics["clipper_pair_accuracy"] == 0.5
assert per_sample["clipper_pair_accuracy"] == [1.0, 1.0, 0.0, 0.0]
assert counts["clipper_pair_accuracy"] == 2