from __future__ import annotations from typing import Dict, Any, Optional from .ledger import Ledger class Adapter: def __init__(self, ledger: Ledger): self.ledger = ledger def publish(self, payload: Dict[str, Any]) -> None: raise NotImplementedError class MLFlowAdapter(Adapter): """A tiny MLFlow-like adapter that publishes experiments to the ledger.""" def publish(self, payload: Dict[str, Any]) -> None: # expect payload to contain contract_type and payload contract_type = payload.get("type", "Experiment") data = payload.get("payload", {}) self.ledger.add_record(contract_type, data) class WandBAdapter(Adapter): """A tiny WandB-like adapter for provenance publishing.""" def publish(self, payload: Dict[str, Any]) -> None: contract_type = payload.get("type", "Experiment") data = payload.get("payload", {}) self.ledger.add_record(contract_type, data)