build(agent): new-agents-4#58ba63 iteration
This commit is contained in:
parent
c4004abdea
commit
5d0abe531b
|
|
@ -0,0 +1,83 @@
|
|||
"""EnergiBridge: tiny canonical bridge for cross-domain interoperability.
|
||||
|
||||
This module provides a minimal, production-friendly scaffolding that
|
||||
captures the essence of the EnergiBridge concept described in the MVP
|
||||
documentation. It is intentionally lightweight and does not change the
|
||||
existing runtime paths of the demo/tests. The goal is to offer a clean,
|
||||
extensible place for future adapters to map canonical DeltaForge primitives
|
||||
to vendor-agnostic representations and vice-versa.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
from .core import Asset, MarketSignal, StrategyDelta, PlanDelta
|
||||
|
||||
|
||||
@dataclass
|
||||
class LocalProblem:
|
||||
"""Canonical, per-site optimization task (a light stand-in for a local problem).
|
||||
|
||||
This is intentionally small: it captures the asset, a compact objective tag,
|
||||
and the current market signal snapshot from a venue.
|
||||
"""
|
||||
asset: Asset
|
||||
objective: str
|
||||
signals: List[MarketSignal]
|
||||
deadline: Optional[float] = None
|
||||
|
||||
|
||||
@dataclass
|
||||
class ContractDescriptor:
|
||||
"""Descriptor for an adapter contract in the Graph-of-Contracts registry."""
|
||||
adapter_name: str
|
||||
version: str
|
||||
capabilities: List[str]
|
||||
|
||||
|
||||
class GraphOfContracts:
|
||||
"""Minimal in-memory registry for adapter contracts."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._registry: Dict[str, ContractDescriptor] = {}
|
||||
|
||||
def register(self, adapter_name: str, version: str, capabilities: List[str]) -> None:
|
||||
self._registry[adapter_name] = ContractDescriptor(
|
||||
adapter_name=adapter_name, version=version, capabilities=capabilities
|
||||
)
|
||||
|
||||
def get(self, adapter_name: str) -> Optional[ContractDescriptor]:
|
||||
return self._registry.get(adapter_name)
|
||||
|
||||
def list_all(self) -> List[ContractDescriptor]:
|
||||
return list(self._registry.values())
|
||||
|
||||
|
||||
class EnergiBridge:
|
||||
"""Bridges canonical IR to adapter-specific signals in a minimal fashion.
|
||||
|
||||
The bridge exposes a small API surface suitable for MVPs:
|
||||
- map_signals_to_local_problems: convert MarketSignal streams into LocalProblem
|
||||
- plan_to_local_problems: convert a PlanDelta into envelope-ready LocalProblems
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.contracts = GraphOfContracts()
|
||||
|
||||
def map_signals_to_local_problems(self, signals: List[MarketSignal], objective: str = "delta-hedge") -> List[LocalProblem]:
|
||||
"""Convert a list of market signals into LocalProblem instances."""
|
||||
problems: List[LocalProblem] = []
|
||||
for s in signals:
|
||||
problems.append(LocalProblem(asset=s.asset, objective=objective, signals=[s]))
|
||||
return problems
|
||||
|
||||
def plan_to_local_problems(self, plan: PlanDelta) -> List[LocalProblem]:
|
||||
"""Convert a PlanDelta into a set of LocalProblems based on contained deltas."""
|
||||
problems: List[LocalProblem] = []
|
||||
for d in plan.deltas:
|
||||
problems.append(LocalProblem(asset=d.asset, objective="delta-hedge", signals=[]))
|
||||
return problems
|
||||
|
||||
|
||||
__all__ = ["EnergiBridge", "LocalProblem", "GraphOfContracts", "ContractDescriptor"]
|
||||
Loading…
Reference in New Issue