from __future__ import annotations from dataclasses import dataclass from typing import Any, Dict, Protocol from service.tasks import TaskRecord @dataclass(frozen=True) class EngineRunOutput: raw: Any normalized: Any meta: Dict[str, Any] def to_dict(self) -> Dict[str, Any]: return {"raw": self.raw, "normalized": self.normalized, "meta": self.meta} class Engine(Protocol): name: str def run(self, task: TaskRecord) -> EngineRunOutput: ...