File size: 2,938 Bytes
6de1b61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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()