evals/solvers/human_cli_solver.py (29 lines of code) (raw):

from typing import Any from evals.record import record_sampling from evals.solvers.solver import Solver, SolverResult from evals.task_state import Message, TaskState class HumanCliSolver(Solver): """Solver that prints prompts to the command line and reads input from it. NOTE: With more than a single thread messages from different threads will mix, so this makes sense only with EVALS_SEQUENTIAL=1. """ def __init__( self, input_prompt: str = "assistant (you): ", postprocessors: list[str] = [], registry: Any = None, ): """ Args: input_prompt: Prompt to be printed before the user input. If None, no prompt is printed. """ super().__init__(postprocessors=postprocessors) self.input_prompt = input_prompt def _solve(self, task_state: TaskState, **kwargs) -> SolverResult: msgs = [Message("system", task_state.task_description)] msgs += task_state.messages prompt = ( "\n".join([f"{msg.role}: {msg.content}" for msg in msgs]) + f"\n{self.input_prompt}" ) answer = input(prompt) record_sampling( prompt=prompt, sampled=answer, model="human", ) return SolverResult(answer) @property def name(self) -> str: return "human"