from abc import ABC, abstractmethod from solar_eval.models.sample import EvalSample from solar_eval.providers.base import BaseProvider class BasePipeline(ABC): @abstractmethod async def run( self, sample: EvalSample, *, prompts: str, provider: BaseProvider, model: str, temperature: float = 0.0, max_tokens: int = 8000, reasoning_effort: str | None = None, messages: list[dict[str, str]] | None = None, ) -> EvalSample: """`sample.input` 을 읽어 `sample.output` 을 채우고 되돌려준다. 멀티스텝 파이프라인은 스텝마다 `sample.output` 을 덮어쓰면서 `sample.artifacts["step_outputs"]` 에 {스텝 이름: 그 스텝 직후 output} 을 누적한다. usage/timing 메타데이터는 `sample.artifacts["usage"]` / `sample.artifacts["inference_time_ms"]` 에 담는다. Args: sample: 채울 샘플. `sample.input` 이 파이프라인 입력이다. prompts: single-step 의 시스템 프롬프트. multi-step 은 스텝별 프롬프트가 생성자에서 이미 주입돼 있어 이 인자를 쓰지 않는다. """ ...