build(agent): new-agents#a6e6ec iteration
This commit is contained in:
parent
6a05967ee6
commit
339a9bab9e
|
|
@ -0,0 +1,135 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from dataclasses import dataclass, asdict
|
||||||
|
from typing import Dict, Any, List, Optional
|
||||||
|
|
||||||
|
from .protocol import LocalProblem, CanonicalPlan
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True)
|
||||||
|
class LocalProblemDSL:
|
||||||
|
# Minimal domain-specific language for a per-shard problem
|
||||||
|
id: str
|
||||||
|
domain: str = "default"
|
||||||
|
assets: List[str] = None
|
||||||
|
objective: str = ""
|
||||||
|
constraints: Dict[str, Any] = None
|
||||||
|
|
||||||
|
def to_dict(self) -> Dict[str, Any]:
|
||||||
|
return asdict(self)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_dict(d: Dict[str, Any]) -> "LocalProblemDSL":
|
||||||
|
if d is None:
|
||||||
|
d = {}
|
||||||
|
return LocalProblemDSL(
|
||||||
|
id=d.get("id", ""),
|
||||||
|
domain=d.get("domain", "default"),
|
||||||
|
assets=d.get("assets", []),
|
||||||
|
objective=d.get("objective", ""),
|
||||||
|
constraints=d.get("constraints", {}),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True)
|
||||||
|
class SharedVariablesDSL:
|
||||||
|
version: int
|
||||||
|
signals: Dict[str, float]
|
||||||
|
priors: Dict[str, float]
|
||||||
|
|
||||||
|
def to_dict(self) -> Dict[str, Any]:
|
||||||
|
return asdict(self)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_dict(d: Dict[str, Any]) -> "SharedVariablesDSL":
|
||||||
|
return SharedVariablesDSL(
|
||||||
|
version=int(d.get("version", 0)),
|
||||||
|
signals=dict(d.get("signals", {})),
|
||||||
|
priors=dict(d.get("priors", {})),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True)
|
||||||
|
class PlanDeltaDSL:
|
||||||
|
delta_id: str
|
||||||
|
timestamp: float
|
||||||
|
changes: Dict[str, Any]
|
||||||
|
contract_id: str = ""
|
||||||
|
|
||||||
|
def to_dict(self) -> Dict[str, Any]:
|
||||||
|
return asdict(self)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_dict(d: Dict[str, Any]) -> "PlanDeltaDSL":
|
||||||
|
return PlanDeltaDSL(
|
||||||
|
delta_id=d.get("delta_id", ""),
|
||||||
|
timestamp=float(d.get("timestamp", 0.0)),
|
||||||
|
changes=dict(d.get("changes", {})),
|
||||||
|
contract_id=d.get("contract_id", ""),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True)
|
||||||
|
class DualVariables:
|
||||||
|
multipliers: Dict[str, float] = None
|
||||||
|
|
||||||
|
def to_dict(self) -> Dict[str, Any]:
|
||||||
|
return {"multipliers": self.multipliers or {}}
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_dict(d: Dict[str, Any]) -> "DualVariables":
|
||||||
|
return DualVariables(multipliers=dict(d.get("multipliers", {})))
|
||||||
|
|
||||||
|
|
||||||
|
class GraphOfContractsRegistry:
|
||||||
|
"""Lightweight in-memory registry for Graph-of-Contracts metadata.
|
||||||
|
|
||||||
|
This is intentionally small and dependency-free to bootstrap adapters
|
||||||
|
and schemas across domains. It is not a persistent store; tests can
|
||||||
|
extend it if needed.
|
||||||
|
"""
|
||||||
|
|
||||||
|
_registry: Dict[str, Dict[str, Any]] = {}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def register_contract(cls, adapter_name: str, version: str, schema: Dict[str, Any]) -> None:
|
||||||
|
cls._registry[adapter_name] = {
|
||||||
|
"version": version,
|
||||||
|
"schema": schema,
|
||||||
|
}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_contract(cls, adapter_name: str) -> Optional[Dict[str, Any]]:
|
||||||
|
return cls._registry.get(adapter_name)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def all_contracts(cls) -> Dict[str, Dict[str, Any]]:
|
||||||
|
return dict(cls._registry)
|
||||||
|
|
||||||
|
|
||||||
|
def to_canonical_from_dsl(local_dsl: LocalProblemDSL) -> CanonicalPlan:
|
||||||
|
"""Translate a minimal LocalProblemDSL into the canonical CanonicalPlan.
|
||||||
|
|
||||||
|
This is a pragmatic bridge that preserves existing canonical representations
|
||||||
|
while enabling a DSL-driven composition workflow.
|
||||||
|
"""
|
||||||
|
# Translate DSL into a LocalProblem object using only lightweight fields
|
||||||
|
lp = LocalProblem(
|
||||||
|
shard_id=local_dsl.id,
|
||||||
|
projection=local_dsl.assets or [],
|
||||||
|
predicates=[local_dsl.objective] if local_dsl.objective else [],
|
||||||
|
costs=0.0,
|
||||||
|
constraints=local_dsl.constraints or {},
|
||||||
|
)
|
||||||
|
|
||||||
|
return CanonicalPlan(projection=lp.projection, predicates=lp.predicates, estimated_cost=0.0)
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"LocalProblemDSL",
|
||||||
|
"SharedVariablesDSL",
|
||||||
|
"PlanDeltaDSL",
|
||||||
|
"DualVariables",
|
||||||
|
"GraphOfContractsRegistry",
|
||||||
|
"to_canonical_from_dsl",
|
||||||
|
]
|
||||||
Loading…
Reference in New Issue