| from __future__ import annotations |
|
|
| import json |
| import os |
| import urllib.request |
|
|
|
|
| BASE_URL = os.getenv("OPENENV_BASE_URL", "http://localhost:8000").rstrip("/") |
|
|
|
|
| def post(path: str, payload: dict) -> dict: |
| request = urllib.request.Request( |
| f"{BASE_URL}{path}", |
| data=json.dumps(payload).encode("utf-8"), |
| headers={"Content-Type": "application/json"}, |
| method="POST", |
| ) |
| with urllib.request.urlopen(request, timeout=240) as response: |
| return json.loads(response.read().decode("utf-8")) |
|
|
|
|
| def four_leg_chair_code() -> str: |
| return "\n".join( |
| [ |
| "import cadquery as cq", |
| "", |
| "seat_w = 500", |
| "seat_d = 460", |
| "seat_t = 55", |
| "leg_h = 420", |
| "leg_t = 42", |
| "back_h = 420", |
| "back_t = 48", |
| "rail_t = 28", |
| "", |
| "def make_seat():", |
| " return cq.Workplane('XY').box(seat_w, seat_d, seat_t).translate((0, 0, leg_h))", |
| "", |
| "def make_leg(x, y):", |
| " return cq.Workplane('XY').box(leg_t, leg_t, leg_h).translate((x, y, leg_h / 2))", |
| "", |
| "def make_backrest():", |
| " return cq.Workplane('XY').box(seat_w, back_t, back_h).translate((0, -seat_d / 2 + back_t / 2, leg_h + back_h / 2))", |
| "", |
| "def make_crossbar(y):", |
| " return cq.Workplane('XY').box(seat_w - leg_t, rail_t, rail_t).translate((0, y, 210))", |
| "", |
| "leg_x = seat_w / 2 - 58", |
| "leg_y = seat_d / 2 - 58", |
| "fixture = make_seat().union(make_backrest())", |
| "for x in [-leg_x, leg_x]:", |
| " for y in [-leg_y, leg_y]:", |
| " fixture = fixture.union(make_leg(x, y))", |
| "fixture = fixture.union(make_crossbar(-leg_y)).union(make_crossbar(leg_y)).clean()", |
| ] |
| ) |
|
|
|
|
| def main() -> None: |
| print("[START] cadforge_cadquery baseline") |
| reset = post("/reset", {"task_id": "four_leg_chair_700n"}) |
| observation = reset.get("observation", reset) |
| print("[STEP]", json.dumps({"reset_reward": reset.get("reward"), "task_id": observation.get("task_id")})) |
|
|
| result = post( |
| "/step", |
| { |
| "action": { |
| "task_id": "four_leg_chair_700n", |
| "reward_mode": "fast", |
| "code": four_leg_chair_code(), |
| } |
| }, |
| ) |
| obs = result.get("observation", {}) |
| print( |
| "[STEP]", |
| json.dumps( |
| { |
| "reward": result.get("reward"), |
| "done": result.get("done"), |
| "reward_json": obs.get("reward_json", {}), |
| "notes": obs.get("verifier_notes", []), |
| } |
| ), |
| ) |
| print("[END]", json.dumps({"final_reward": result.get("reward"), "done": result.get("done")})) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|