88
99from eval_protocol .benchmarks .registry import export_benchmark
1010from eval_protocol .models import EvaluateResult , EvaluationRow , Message , MetricResult
11+ from eval_protocol .pytest .default_base_rollout_process import BaseRolloutProcessor
1112from eval_protocol .pytest .default_single_turn_rollout_process import (
12- default_single_turn_rollout_processor ,
13+ SingleTurnRolloutProcessor ,
1314)
1415from eval_protocol .pytest .evaluation_test import evaluation_test
16+ from eval_protocol .pytest .types import RolloutProcessorConfig
1517
1618SYSTEM_PROMPT = (
1719 "You are a helpful assistant. Read the question and options carefully. "
@@ -61,19 +63,31 @@ def _strip_gt_messages(msgs: List[Message]) -> List[Message]:
6163 return [m for m in msgs if not (m .role == "system" and (m .content or "" ).startswith ("__GT__:" ))]
6264
6365
64- def gpqa_strip_gt_rollout_processor (rows : List [EvaluationRow ], config ) -> List [asyncio .Task [EvaluationRow ]]:
65- """Preprocess rows to set ground_truth and remove __GT__ messages, then delegate to default processor."""
66- processed : List [EvaluationRow ] = []
67- for r in rows :
68- gt_tokens = [m .content for m in r .messages if m .role == "system" and (m .content or "" ).startswith ("__GT__:" )]
69- if gt_tokens :
70- gt_val = gt_tokens [- 1 ].split (":" , 1 )[1 ].strip ()
71- r .ground_truth = gt_val
72- r .messages = [
73- m for m in r .messages if not (m .role == "system" and (m .content or "" ).startswith ("__GT__:" ))
66+ class GPQAStripGTRolloutProcessor (BaseRolloutProcessor ):
67+ """Preprocess rows to set ground_truth and remove __GT__ messages, then delegate to SingleTurnRolloutProcessor."""
68+
69+ def __init__ (self ):
70+ super ().__init__ ()
71+ self .single_turn_processor = SingleTurnRolloutProcessor ()
72+
73+ def __call__ (self , rows : List [EvaluationRow ], config : RolloutProcessorConfig ) -> List [asyncio .Task [EvaluationRow ]]:
74+ """Preprocess rows and delegate to SingleTurnRolloutProcessor."""
75+ processed : List [EvaluationRow ] = []
76+
77+ for r in rows :
78+ gt_tokens = [
79+ m .content for m in r .messages if m .role == "system" and (m .content or "" ).startswith ("__GT__:" )
7480 ]
75- processed .append (r )
76- return default_single_turn_rollout_processor (processed , config )
81+ if gt_tokens :
82+ gt_val = gt_tokens [- 1 ].split (":" , 1 )[1 ].strip ()
83+ r .ground_truth = gt_val
84+ r .messages = [
85+ m for m in r .messages if not (m .role == "system" and (m .content or "" ).startswith ("__GT__:" ))
86+ ]
87+ processed .append (r )
88+
89+ # Delegate to SingleTurnRolloutProcessor
90+ return self .single_turn_processor (processed , config )
7791
7892
7993@export_benchmark ("gpqa" )
@@ -82,7 +96,7 @@ def gpqa_strip_gt_rollout_processor(rows: List[EvaluationRow], config) -> List[a
8296 completion_params = [
8397 {"extra_body" : {"reasoning_effort" : "low" }, "model" : "fireworks_ai/accounts/fireworks/models/gpt-oss-120b" }
8498 ],
85- rollout_processor = gpqa_strip_gt_rollout_processor ,
99+ rollout_processor = GPQAStripGTRolloutProcessor () ,
86100 aggregation_method = "mean" ,
87101 passed_threshold = None ,
88102 num_runs = 8 ,
0 commit comments