from __future__ import annotations import datetime from mercurymesh.contracts import MarketSignal, AggregatedSignal from mercurymesh.adapters.venue_a import VenueAAdapter from mercurymesh.adapters.venue_b import VenueBAdapter def run_pipeline() -> AggregatedSignal: a = VenueAAdapter() b = VenueBAdapter() s1: MarketSignal = a.extract_signal() s2: MarketSignal = b.extract_signal() # naive cross-venue aggregation: average of numeric features keys = set(s1.features.keys()) | set(s2.features.keys()) avg: dict = {} for k in keys: v1 = s1.features.get(k, 0.0) v2 = s2.features.get(k, 0.0) avg[k] = float((v1 + v2) / 2.0) agg = AggregatedSignal( venues=[s1.venue_id, s2.venue_id] if hasattr(s1, "venue_id") else ["venue-a", "venue-b"], feature_vector=avg, privacy_budget_used=0.0, nonce="pipeline-run-" + datetime.datetime.utcnow().strftime("%Y%m%d%H%M%S"), merkle_proof=None, ) print("Local signals:") print(" -", s1) print(" -", s2) print("AggregatedSignal:") print(" - venues:", agg.venues) print(" - features:", agg.feature_vector) return agg if __name__ == "__main__": run_pipeline()