build(agent): molt-y#23e5c8 iteration
This commit is contained in:
parent
4942360fdc
commit
cb09e8d3b7
|
|
@ -0,0 +1,77 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
"""Tiny DSL sketch and helper to bootstrap GridVerse DSL usage.
|
||||||
|
|
||||||
|
This module provides a minimal, safe path to convert a small, human-friendly
|
||||||
|
DSL into GridVerse canonical contracts via the existing bridge helpers. The
|
||||||
|
goal is to enable rapid prototyping of cross-domain problems without touching
|
||||||
|
the solver or registry code.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from typing import Any, Dict
|
||||||
|
import re
|
||||||
|
|
||||||
|
from gridverse.core_contracts import LocalProblem, SharedVariables
|
||||||
|
from gridverse.bridge_energia import to_canonical, CanonicalBundle
|
||||||
|
|
||||||
|
|
||||||
|
def _parse_value(v: str) -> Any:
|
||||||
|
v = v.strip()
|
||||||
|
if v.lower() in {"true", "false"}:
|
||||||
|
return v.lower() == "true"
|
||||||
|
if v.isdigit():
|
||||||
|
return int(v)
|
||||||
|
try:
|
||||||
|
return float(v)
|
||||||
|
except ValueError:
|
||||||
|
return v
|
||||||
|
|
||||||
|
|
||||||
|
def _parse_variables(part: str) -> Dict[str, Any]:
|
||||||
|
result: Dict[str, Any] = {}
|
||||||
|
# allow comma or semicolon separated entries
|
||||||
|
items = [p for p in re.split(r"[,;]", part) if p.strip()]
|
||||||
|
for item in items:
|
||||||
|
if "=" in item:
|
||||||
|
k, v = item.split("=", 1)
|
||||||
|
result[k.strip()] = _parse_value(v.strip())
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def parse_local_problem_from_dsl(text: str) -> LocalProblem:
|
||||||
|
# Very small DSL format (case-sensitive for simplicity):
|
||||||
|
# site_id=<id>
|
||||||
|
# description=<description>
|
||||||
|
# variables=<k1>=<v1>,<k2>=<v2>;...
|
||||||
|
site_id = "dsl_site"
|
||||||
|
description = "Parsed from DSL"
|
||||||
|
variables: Dict[str, Any] = {}
|
||||||
|
|
||||||
|
for line in text.splitlines():
|
||||||
|
line = line.strip()
|
||||||
|
if not line:
|
||||||
|
continue
|
||||||
|
if line.startswith("site_id="):
|
||||||
|
site_id = line.split("=", 1)[1].strip()
|
||||||
|
elif line.startswith("description="):
|
||||||
|
description = line.split("=", 1)[1].strip()
|
||||||
|
elif line.startswith("variables="):
|
||||||
|
var_part = line.split("=", 1)[1].strip()
|
||||||
|
variables = _parse_variables(var_part)
|
||||||
|
|
||||||
|
return LocalProblem(site_id=site_id, description=description, variables=variables)
|
||||||
|
|
||||||
|
|
||||||
|
def dsl_to_canonical_bundle(text: str, version: str | None = None) -> CanonicalBundle:
|
||||||
|
"""Convert a tiny DSL snippet into a CanonicalBundle via the bridge.
|
||||||
|
|
||||||
|
The function produces a minimal canon bundle with the parsed LocalProblem and
|
||||||
|
an empty SharedVariables payload. It is intentionally lightweight and
|
||||||
|
suitable for bootstrapping demos.
|
||||||
|
"""
|
||||||
|
lp = parse_local_problem_from_dsl(text)
|
||||||
|
lp_dict = lp.to_dict()
|
||||||
|
sv = SharedVariables(signals={}, version=1)
|
||||||
|
sv_dict = sv.to_dict()
|
||||||
|
plan_delta: Dict[str, Any] = {}
|
||||||
|
return to_canonical(lp_dict, sv_dict, plan_delta, version)
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
# GridVerse DSL Sketch (Conceptual)
|
||||||
|
|
||||||
|
This document outlines a tiny, human-friendly DSL to describe a LocalProblem
|
||||||
|
and its associated SharedVariables that GridVerse adapters will map into a
|
||||||
|
canonical bundle for cross-domain optimization.
|
||||||
|
|
||||||
|
Core concepts
|
||||||
|
- LocalProblem (Objects): a local optimization task at a site with a set of
|
||||||
|
tunable variables.
|
||||||
|
- SharedVariables (Morphisms): signals exchanged with other sites or global
|
||||||
|
constraints.
|
||||||
|
- PlanDelta: incremental actions derived from solving the local/global problem.
|
||||||
|
- Governance/Audit: lightweight metadata for traceability (version/timestamp).
|
||||||
|
|
||||||
|
Tiny DSL example
|
||||||
|
site_id=siteA
|
||||||
|
description=DER and building load coordination
|
||||||
|
variables=pv_capacity=5,load=10,storage=2
|
||||||
|
variables=another_key=42
|
||||||
|
|
||||||
|
Notes
|
||||||
|
- This DSL is intentionally minimal to bootstrap interoperability without
|
||||||
|
introducing a full language runtime.
|
||||||
|
- A real system would support richer types, validation, and versioning hooks.
|
||||||
Loading…
Reference in New Issue