burtenshaw HF Staff commited on
Commit
f62e1df
·
verified ·
1 Parent(s): 507d375

Upload folder using huggingface_hub

Browse files
Files changed (5) hide show
  1. README.md +2 -2
  2. client.py +2 -1
  3. pyproject.toml +1 -1
  4. server/app.py +12 -2
  5. uv.lock +62 -82
README.md CHANGED
@@ -102,7 +102,7 @@ rollout_func = build_harness_rollout_func(
102
 
103
  BrowserGym exposes `click`, `fill`, `send_keys`, `scroll`, and `noop` as MCP-style
104
  tools while still translating them back into the underlying `BrowserGymAction`
105
- strings. See [examples/browsergym_harness.py](https://github.com/meta-pytorch/OpenEnv/blob/main/examples/browsergym_harness.py)
106
  for a full TRL-oriented example.
107
 
108
  ### Available Tasks by Benchmark
@@ -592,4 +592,4 @@ browsergym_env/
592
  - [WebArena Paper](https://arxiv.org/abs/2307.13854)
593
  - [WebArena Website](https://webarena.dev/)
594
  - [VisualWebArena Paper](https://jykoh.com/vwa)
595
- - [OpenEnv Documentation](https://github.com/meta-pytorch/OpenEnv)
 
102
 
103
  BrowserGym exposes `click`, `fill`, `send_keys`, `scroll`, and `noop` as MCP-style
104
  tools while still translating them back into the underlying `BrowserGymAction`
105
+ strings. See [examples/browsergym_harness.py](https://github.com/huggingface/OpenEnv/blob/main/examples/browsergym_harness.py)
106
  for a full TRL-oriented example.
107
 
108
  ### Available Tasks by Benchmark
 
592
  - [WebArena Paper](https://arxiv.org/abs/2307.13854)
593
  - [WebArena Website](https://webarena.dev/)
594
  - [VisualWebArena Paper](https://jykoh.com/vwa)
595
+ - [OpenEnv Documentation](https://github.com/huggingface/OpenEnv)
client.py CHANGED
@@ -99,13 +99,14 @@ class BrowserGymEnv(
99
  last_action_error=obs_data.get("last_action_error", False),
100
  done=payload.get("done", False),
101
  reward=payload.get("reward"),
102
- metadata=obs_data.get("metadata", {}),
103
  )
104
 
105
  return StepResult(
106
  observation=observation,
107
  reward=payload.get("reward"),
108
  done=payload.get("done", False),
 
109
  )
110
 
111
  def _parse_state(self, payload: Dict[str, Any]) -> BrowserGymState:
 
99
  last_action_error=obs_data.get("last_action_error", False),
100
  done=payload.get("done", False),
101
  reward=payload.get("reward"),
102
+ metadata=payload.get("metadata", obs_data.get("metadata", {})),
103
  )
104
 
105
  return StepResult(
106
  observation=observation,
107
  reward=payload.get("reward"),
108
  done=payload.get("done", False),
109
+ metadata=payload.get("metadata"),
110
  )
111
 
112
  def _parse_state(self, payload: Dict[str, Any]) -> BrowserGymState:
pyproject.toml CHANGED
@@ -8,7 +8,7 @@ version = "0.1.0"
8
  description = "BrowserGym Environment for OpenEnv - Web automation using Playwright"
9
  requires-python = ">=3.10"
10
  dependencies = [
11
- "openenv-core[core]>=0.3.0",
12
  "browsergym-core==0.14.3",
13
  "browsergym-miniwob==0.14.3",
14
  "gymnasium>=0.29.0",
 
8
  description = "BrowserGym Environment for OpenEnv - Web automation using Playwright"
9
  requires-python = ">=3.10"
10
  dependencies = [
11
+ "openenv[core]>=0.2.3",
12
  "browsergym-core==0.14.3",
13
  "browsergym-miniwob==0.14.3",
14
  "gymnasium>=0.29.0",
server/app.py CHANGED
@@ -1,6 +1,7 @@
1
  """FastAPI server for the BrowserGym environment."""
2
 
3
  import os
 
4
  from functools import partial
5
 
6
  from browsergym_env.models import BrowserGymAction, BrowserGymObservation
@@ -14,7 +15,9 @@ headless = os.environ.get("BROWSERGYM_HEADLESS", "true").lower() == "true"
14
  viewport_width = int(os.environ.get("BROWSERGYM_VIEWPORT_WIDTH", "1280"))
15
  viewport_height = int(os.environ.get("BROWSERGYM_VIEWPORT_HEIGHT", "720"))
16
  timeout = float(os.environ.get("BROWSERGYM_TIMEOUT", "10000"))
17
- port = int(os.environ.get("BROWSERGYM_PORT", "8000"))
 
 
18
 
19
  max_concurrent = int(os.environ.get("MAX_CONCURRENT_ENVS", "8"))
20
 
@@ -39,7 +42,14 @@ def main():
39
  """Main entry point for running the server."""
40
  import uvicorn
41
 
42
- uvicorn.run(app, host="0.0.0.0", port=port)
 
 
 
 
 
 
 
43
 
44
 
45
  if __name__ == "__main__":
 
1
  """FastAPI server for the BrowserGym environment."""
2
 
3
  import os
4
+ from contextlib import suppress
5
  from functools import partial
6
 
7
  from browsergym_env.models import BrowserGymAction, BrowserGymObservation
 
15
  viewport_width = int(os.environ.get("BROWSERGYM_VIEWPORT_WIDTH", "1280"))
16
  viewport_height = int(os.environ.get("BROWSERGYM_VIEWPORT_HEIGHT", "720"))
17
  timeout = float(os.environ.get("BROWSERGYM_TIMEOUT", "10000"))
18
+ port = int(
19
+ os.environ.get("SBX_SERVICE_PORT", os.environ.get("BROWSERGYM_PORT", "8000"))
20
+ )
21
 
22
  max_concurrent = int(os.environ.get("MAX_CONCURRENT_ENVS", "8"))
23
 
 
42
  """Main entry point for running the server."""
43
  import uvicorn
44
 
45
+ if proxy_dir := os.environ.get("SBX_PROXY_DIR"):
46
+ socket_path = os.path.join(proxy_dir, f"{port}.sock")
47
+ os.makedirs(proxy_dir, exist_ok=True)
48
+ with suppress(FileNotFoundError):
49
+ os.unlink(socket_path)
50
+ uvicorn.run(app, uds=socket_path)
51
+ else:
52
+ uvicorn.run(app, host="0.0.0.0", port=port)
53
 
54
 
55
  if __name__ == "__main__":
uv.lock CHANGED
@@ -29,15 +29,6 @@ wheels = [
29
  { url = "https://files.pythonhosted.org/packages/50/25/da1f0b4dd970e52bf5a36c204c107e11a0c6d3ed195eba0bfbc664c312b2/aiofile-3.9.0-py3-none-any.whl", hash = "sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa", size = 19539, upload-time = "2024-10-08T10:39:32.955Z" },
30
  ]
31
 
32
- [[package]]
33
- name = "aiofiles"
34
- version = "24.1.0"
35
- source = { registry = "https://pypi.org/simple" }
36
- sdist = { url = "https://files.pythonhosted.org/packages/0b/03/a88171e277e8caa88a4c77808c20ebb04ba74cc4681bf1e9416c862de237/aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c", size = 30247, upload-time = "2024-06-24T11:02:03.584Z" }
37
- wheels = [
38
- { url = "https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5", size = 15896, upload-time = "2024-06-24T11:02:01.529Z" },
39
- ]
40
-
41
  [[package]]
42
  name = "annotated-doc"
43
  version = "0.0.4"
@@ -919,15 +910,6 @@ wheels = [
919
  { url = "https://files.pythonhosted.org/packages/4f/67/684fa2d2de1e7504549d4ca457b4f854ccec3cd3be03bd86b33b599fbf58/fastmcp-3.2.0-py3-none-any.whl", hash = "sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681", size = 705550, upload-time = "2026-03-30T20:25:35.499Z" },
920
  ]
921
 
922
- [[package]]
923
- name = "ffmpy"
924
- version = "1.0.0"
925
- source = { registry = "https://pypi.org/simple" }
926
- sdist = { url = "https://files.pythonhosted.org/packages/7d/d2/1c4c582d71bcc65c76fa69fab85de6257d50fdf6fd4a2317c53917e9a581/ffmpy-1.0.0.tar.gz", hash = "sha256:b12932e95435c8820f1cd041024402765f821971e4bae753b327fc02a6e12f8b", size = 5101, upload-time = "2025-11-11T06:24:23.856Z" }
927
- wheels = [
928
- { url = "https://files.pythonhosted.org/packages/55/56/dd3669eccebb6d8ac81e624542ebd53fe6f08e1b8f2f8d50aeb7e3b83f99/ffmpy-1.0.0-py3-none-any.whl", hash = "sha256:5640e5f0fd03fb6236d0e119b16ccf6522db1c826fdf35dcb87087b60fd7504f", size = 5614, upload-time = "2025-11-11T06:24:22.818Z" },
929
- ]
930
-
931
  [[package]]
932
  name = "filelock"
933
  version = "3.25.2"
@@ -948,15 +930,13 @@ wheels = [
948
 
949
  [[package]]
950
  name = "gradio"
951
- version = "6.10.0"
952
  source = { registry = "https://pypi.org/simple" }
953
  dependencies = [
954
- { name = "aiofiles" },
955
  { name = "anyio" },
956
  { name = "audioop-lts", marker = "python_full_version >= '3.13'" },
957
  { name = "brotli" },
958
  { name = "fastapi" },
959
- { name = "ffmpy" },
960
  { name = "gradio-client" },
961
  { name = "groovy" },
962
  { name = "hf-gradio" },
@@ -984,14 +964,14 @@ dependencies = [
984
  { name = "typing-extensions" },
985
  { name = "uvicorn" },
986
  ]
987
- sdist = { url = "https://files.pythonhosted.org/packages/c4/74/740c507b076263f9064ca39c5c244d773c8d4063e1ce630b57d6197ac50f/gradio-6.10.0.tar.gz", hash = "sha256:f76797536f5b62bc1558f622017351133d0087ee5f51aab139af04e82ed3bf2a", size = 58021607, upload-time = "2026-03-24T21:20:13.399Z" }
988
  wheels = [
989
- { url = "https://files.pythonhosted.org/packages/cd/ba/fc89989d0a62e4d38c82f54c44b1145e455466a688297cc69cdcbf321ea5/gradio-6.10.0-py3-none-any.whl", hash = "sha256:e20035ef046a30266c0b5ddbe05f2168193d06914dd89eebe2decde77ec510fe", size = 42962248, upload-time = "2026-03-24T21:20:09.938Z" },
990
  ]
991
 
992
  [[package]]
993
  name = "gradio-client"
994
- version = "2.4.0"
995
  source = { registry = "https://pypi.org/simple" }
996
  dependencies = [
997
  { name = "fsspec" },
@@ -1000,9 +980,9 @@ dependencies = [
1000
  { name = "packaging" },
1001
  { name = "typing-extensions" },
1002
  ]
1003
- sdist = { url = "https://files.pythonhosted.org/packages/4e/4a/ddfaa8b3fef0238768a42301a3361981af1afd90f92c27adfe6cd031eca7/gradio_client-2.4.0.tar.gz", hash = "sha256:781885374f86759b8db5195e13e716c301d14e48e0442aef63362f1eeea4cce2", size = 58203, upload-time = "2026-03-24T21:20:25.276Z" }
1004
  wheels = [
1005
- { url = "https://files.pythonhosted.org/packages/f0/b3/10cb03cf684aab2bec97cb0b9bbba4f93e7a20c6e0f3b4100c235a55ad93/gradio_client-2.4.0-py3-none-any.whl", hash = "sha256:7c170807b924ed6056b2a1fa9d659d349dd20567c00ee0b4dc249dc1e2def620", size = 59156, upload-time = "2026-03-24T21:20:24.018Z" },
1006
  ]
1007
 
1008
  [[package]]
@@ -1076,15 +1056,15 @@ wheels = [
1076
 
1077
  [[package]]
1078
  name = "hf-gradio"
1079
- version = "0.3.0"
1080
  source = { registry = "https://pypi.org/simple" }
1081
  dependencies = [
1082
  { name = "gradio-client" },
1083
  { name = "typer" },
1084
  ]
1085
- sdist = { url = "https://files.pythonhosted.org/packages/48/d8/1771d6f1591099ecd10776782d08c6f87e7c2501f9e9e6ffb7c2ecc07d0c/hf_gradio-0.3.0.tar.gz", hash = "sha256:e74a0f9eab14a1d6f54c523c2192aa5283ca51f01605f661b2542387da5b9fc0", size = 6235, upload-time = "2026-03-27T13:13:43.9Z" }
1086
  wheels = [
1087
- { url = "https://files.pythonhosted.org/packages/4c/52/04816d2a15691a63cec3187e3e592c4493448eb4834492eadd532972b035/hf_gradio-0.3.0-py3-none-any.whl", hash = "sha256:159d33d1f0affae8164d29c0c51a63dfcc0bbc90803b07c6f139137206a796ae", size = 4154, upload-time = "2026-03-23T19:50:08.586Z" },
1088
  ]
1089
 
1090
  [[package]]
@@ -2029,6 +2009,41 @@ wheels = [
2029
  { url = "https://files.pythonhosted.org/packages/12/cf/03675d8bd8ecbf4445504d8071adab19f5f993676795708e36402ab38263/openapi_pydantic-0.5.1-py3-none-any.whl", hash = "sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146", size = 96381, upload-time = "2025-01-08T19:29:25.275Z" },
2030
  ]
2031
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2032
  [[package]]
2033
  name = "openenv-browsergym-env"
2034
  version = "0.1.0"
@@ -2038,7 +2053,7 @@ dependencies = [
2038
  { name = "browsergym-miniwob" },
2039
  { name = "greenlet" },
2040
  { name = "gymnasium" },
2041
- { name = "openenv-core", extra = ["core"] },
2042
  { name = "pillow" },
2043
  { name = "playwright" },
2044
  ]
@@ -2057,7 +2072,7 @@ requires-dist = [
2057
  { name = "greenlet", specifier = "==3.0.3" },
2058
  { name = "gymnasium", specifier = ">=0.29.0" },
2059
  { name = "ipykernel", marker = "extra == 'dev'", specifier = ">=6.29.5" },
2060
- { name = "openenv-core", extras = ["core"], specifier = ">=0.2.3" },
2061
  { name = "pillow", specifier = ">=10.0.0" },
2062
  { name = "playwright", specifier = "==1.44.0" },
2063
  { name = "pytest", marker = "extra == 'dev'", specifier = ">=9.0.3" },
@@ -2065,41 +2080,6 @@ requires-dist = [
2065
  ]
2066
  provides-extras = ["dev"]
2067
 
2068
- [[package]]
2069
- name = "openenv-core"
2070
- version = "0.2.3"
2071
- source = { registry = "https://pypi.org/simple" }
2072
- dependencies = [
2073
- { name = "fastapi" },
2074
- { name = "fastmcp" },
2075
- { name = "gradio" },
2076
- { name = "httpx" },
2077
- { name = "huggingface-hub" },
2078
- { name = "openai" },
2079
- { name = "pydantic" },
2080
- { name = "pyyaml" },
2081
- { name = "requests" },
2082
- { name = "rich" },
2083
- { name = "tomli" },
2084
- { name = "tomli-w" },
2085
- { name = "typer" },
2086
- { name = "uvicorn" },
2087
- { name = "websockets" },
2088
- ]
2089
- sdist = { url = "https://files.pythonhosted.org/packages/93/f3/41a5ed932a2507438c985e9d959dcaa1a6c46f293995c064348c0e52dd40/openenv_core-0.2.3.tar.gz", hash = "sha256:48aefd774474556297ce012b80f2ceb271db51253d7fd0838e6e2dcc329db0c3", size = 146944, upload-time = "2026-03-28T18:56:28.415Z" }
2090
- wheels = [
2091
- { url = "https://files.pythonhosted.org/packages/2f/22/38c339e370d198008f2c17ebdda1ae8f23bb4e1509dc7ae8eab6dc9b9cbe/openenv_core-0.2.3-py3-none-any.whl", hash = "sha256:f75a20c94452057a5f53a86e6d71a9f6a461524c3d6a865aa9344d257a92b795", size = 174557, upload-time = "2026-03-28T18:56:26.874Z" },
2092
- ]
2093
-
2094
- [package.optional-dependencies]
2095
- core = [
2096
- { name = "fastapi" },
2097
- { name = "pydantic" },
2098
- { name = "requests" },
2099
- { name = "uvicorn" },
2100
- { name = "websockets" },
2101
- ]
2102
-
2103
  [[package]]
2104
  name = "opentelemetry-api"
2105
  version = "1.40.0"
@@ -3329,15 +3309,15 @@ wheels = [
3329
 
3330
  [[package]]
3331
  name = "starlette"
3332
- version = "0.52.1"
3333
  source = { registry = "https://pypi.org/simple" }
3334
  dependencies = [
3335
  { name = "anyio" },
3336
  { name = "typing-extensions", marker = "python_full_version < '3.13'" },
3337
  ]
3338
- sdist = { url = "https://files.pythonhosted.org/packages/c4/68/79977123bb7be889ad680d79a40f339082c1978b5cfcf62c2d8d196873ac/starlette-0.52.1.tar.gz", hash = "sha256:834edd1b0a23167694292e94f597773bc3f89f362be6effee198165a35d62933", size = 2653702, upload-time = "2026-01-18T13:34:11.062Z" }
3339
  wheels = [
3340
- { url = "https://files.pythonhosted.org/packages/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl", hash = "sha256:0029d43eb3d273bc4f83a08720b4912ea4b071087a3b48db01b7c839f7954d74", size = 74272, upload-time = "2026-01-18T13:34:09.188Z" },
3341
  ]
3342
 
3343
  [[package]]
@@ -3414,19 +3394,19 @@ wheels = [
3414
 
3415
  [[package]]
3416
  name = "tornado"
3417
- version = "6.5.5"
3418
- source = { registry = "https://pypi.org/simple" }
3419
- sdist = { url = "https://files.pythonhosted.org/packages/f8/f1/3173dfa4a18db4a9b03e5d55325559dab51ee653763bb8745a75af491286/tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9", size = 516006, upload-time = "2026-03-10T21:31:02.067Z" }
3420
- wheels = [
3421
- { url = "https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa", size = 445983, upload-time = "2026-03-10T21:30:44.28Z" },
3422
- { url = "https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521", size = 444246, upload-time = "2026-03-10T21:30:46.571Z" },
3423
- { url = "https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5", size = 447229, upload-time = "2026-03-10T21:30:48.273Z" },
3424
- { url = "https://files.pythonhosted.org/packages/34/01/74e034a30ef59afb4097ef8659515e96a39d910b712a89af76f5e4e1f93c/tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07", size = 448192, upload-time = "2026-03-10T21:30:51.22Z" },
3425
- { url = "https://files.pythonhosted.org/packages/be/00/fe9e02c5a96429fce1a1d15a517f5d8444f9c412e0bb9eadfbe3b0fc55bf/tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e", size = 448039, upload-time = "2026-03-10T21:30:53.52Z" },
3426
- { url = "https://files.pythonhosted.org/packages/82/9e/656ee4cec0398b1d18d0f1eb6372c41c6b889722641d84948351ae19556d/tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca", size = 447445, upload-time = "2026-03-10T21:30:55.541Z" },
3427
- { url = "https://files.pythonhosted.org/packages/5a/76/4921c00511f88af86a33de770d64141170f1cfd9c00311aea689949e274e/tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7", size = 448582, upload-time = "2026-03-10T21:30:57.142Z" },
3428
- { url = "https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b", size = 448990, upload-time = "2026-03-10T21:30:58.857Z" },
3429
- { url = "https://files.pythonhosted.org/packages/b7/c8/876602cbc96469911f0939f703453c1157b0c826ecb05bdd32e023397d4e/tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6", size = 448016, upload-time = "2026-03-10T21:31:00.43Z" },
3430
  ]
3431
 
3432
  [[package]]
 
29
  { url = "https://files.pythonhosted.org/packages/50/25/da1f0b4dd970e52bf5a36c204c107e11a0c6d3ed195eba0bfbc664c312b2/aiofile-3.9.0-py3-none-any.whl", hash = "sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa", size = 19539, upload-time = "2024-10-08T10:39:32.955Z" },
30
  ]
31
 
 
 
 
 
 
 
 
 
 
32
  [[package]]
33
  name = "annotated-doc"
34
  version = "0.0.4"
 
910
  { url = "https://files.pythonhosted.org/packages/4f/67/684fa2d2de1e7504549d4ca457b4f854ccec3cd3be03bd86b33b599fbf58/fastmcp-3.2.0-py3-none-any.whl", hash = "sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681", size = 705550, upload-time = "2026-03-30T20:25:35.499Z" },
911
  ]
912
 
 
 
 
 
 
 
 
 
 
913
  [[package]]
914
  name = "filelock"
915
  version = "3.25.2"
 
930
 
931
  [[package]]
932
  name = "gradio"
933
+ version = "6.16.0"
934
  source = { registry = "https://pypi.org/simple" }
935
  dependencies = [
 
936
  { name = "anyio" },
937
  { name = "audioop-lts", marker = "python_full_version >= '3.13'" },
938
  { name = "brotli" },
939
  { name = "fastapi" },
 
940
  { name = "gradio-client" },
941
  { name = "groovy" },
942
  { name = "hf-gradio" },
 
964
  { name = "typing-extensions" },
965
  { name = "uvicorn" },
966
  ]
967
+ sdist = { url = "https://files.pythonhosted.org/packages/a3/26/44044687cdd16d0d9d9137c8f9d445eb68391b14583c82a6c2d528da952c/gradio-6.16.0.tar.gz", hash = "sha256:a48d03ffb436644265e4386388ad8a50ec183c8e1fdd3bae0548f7f229c474da", size = 36441812, upload-time = "2026-06-03T19:07:12.973Z" }
968
  wheels = [
969
+ { url = "https://files.pythonhosted.org/packages/2a/12/ac98683fa45d84c2c96c14acdb040aa746209089ea045c766f380549ecec/gradio-6.16.0-py3-none-any.whl", hash = "sha256:a5de01bf17336bf421d52af4b5dbd9fdbd530762c485067748456ccb797700bb", size = 20097732, upload-time = "2026-06-03T19:07:09.904Z" },
970
  ]
971
 
972
  [[package]]
973
  name = "gradio-client"
974
+ version = "2.5.0"
975
  source = { registry = "https://pypi.org/simple" }
976
  dependencies = [
977
  { name = "fsspec" },
 
980
  { name = "packaging" },
981
  { name = "typing-extensions" },
982
  ]
983
+ sdist = { url = "https://files.pythonhosted.org/packages/e8/e6/6b6029f5fe2ad7f1211105d530e34d991014c2cae463f9223033031cfc4f/gradio_client-2.5.0.tar.gz", hash = "sha256:4cde99bad62149595c30c90876ca2e405e3a13687ecf895474f3412cb476673d", size = 59013, upload-time = "2026-04-20T23:16:21.518Z" }
984
  wheels = [
985
+ { url = "https://files.pythonhosted.org/packages/78/81/0a861b8e1ff42960139c6cd4c7dd591292fa09ea1ae2d87677441cba4c00/gradio_client-2.5.0-py3-none-any.whl", hash = "sha256:d43e2179c29076292a76485ad7ed2e6eaa19d14ac58283bd7f5beabfe4ca958c", size = 59952, upload-time = "2026-04-20T23:16:20.186Z" },
986
  ]
987
 
988
  [[package]]
 
1056
 
1057
  [[package]]
1058
  name = "hf-gradio"
1059
+ version = "0.4.1"
1060
  source = { registry = "https://pypi.org/simple" }
1061
  dependencies = [
1062
  { name = "gradio-client" },
1063
  { name = "typer" },
1064
  ]
1065
+ sdist = { url = "https://files.pythonhosted.org/packages/ce/86/c9694b7cfada5780e75769e60dc161a161f4dd7fc91b61db5e3a3338bef9/hf_gradio-0.4.1.tar.gz", hash = "sha256:a017d942618f0d495a58ee4563047fa04bef614c00e0cb789a9a6d0633cffa7b", size = 6560, upload-time = "2026-04-22T14:01:32.334Z" }
1066
  wheels = [
1067
+ { url = "https://files.pythonhosted.org/packages/30/2d/afff2ee87e75d8eb85c92bb8cf0e15b05c23c2ebd8fd8dec781d8601ed7f/hf_gradio-0.4.1-py3-none-any.whl", hash = "sha256:76b8cb8be6abe62d74c1ad2d35b42f0629db89aa9e1a8d033cecfe7c856eeab3", size = 4482, upload-time = "2026-04-17T19:53:31.827Z" },
1068
  ]
1069
 
1070
  [[package]]
 
2009
  { url = "https://files.pythonhosted.org/packages/12/cf/03675d8bd8ecbf4445504d8071adab19f5f993676795708e36402ab38263/openapi_pydantic-0.5.1-py3-none-any.whl", hash = "sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146", size = 96381, upload-time = "2025-01-08T19:29:25.275Z" },
2010
  ]
2011
 
2012
+ [[package]]
2013
+ name = "openenv"
2014
+ version = "0.3.1"
2015
+ source = { registry = "https://pypi.org/simple" }
2016
+ dependencies = [
2017
+ { name = "fastapi" },
2018
+ { name = "fastmcp" },
2019
+ { name = "gradio" },
2020
+ { name = "httpx" },
2021
+ { name = "huggingface-hub" },
2022
+ { name = "openai" },
2023
+ { name = "pydantic" },
2024
+ { name = "pyyaml" },
2025
+ { name = "requests" },
2026
+ { name = "rich" },
2027
+ { name = "tomli" },
2028
+ { name = "tomli-w" },
2029
+ { name = "typer" },
2030
+ { name = "uvicorn" },
2031
+ { name = "websockets" },
2032
+ ]
2033
+ sdist = { url = "https://files.pythonhosted.org/packages/7a/16/12825046f4180173d8f845ad95ff7b7aac32486391d822df38d4e52b82df/openenv-0.3.1.tar.gz", hash = "sha256:9e99a08872c781c7c16d5ba214e532caf5cf29f2278eb9cc478544dc538f3918", size = 165346, upload-time = "2026-06-02T08:47:23.918Z" }
2034
+ wheels = [
2035
+ { url = "https://files.pythonhosted.org/packages/cc/28/20af86f825054561c10eb31236e19835f79036fd4a9f600f529adef42b7b/openenv-0.3.1-py3-none-any.whl", hash = "sha256:9cad4b66c08a04fd9d9fe48d7b13cd31f8322b348ff24891646e4440e0b7468c", size = 194867, upload-time = "2026-06-02T08:47:22.469Z" },
2036
+ ]
2037
+
2038
+ [package.optional-dependencies]
2039
+ core = [
2040
+ { name = "fastapi" },
2041
+ { name = "pydantic" },
2042
+ { name = "requests" },
2043
+ { name = "uvicorn" },
2044
+ { name = "websockets" },
2045
+ ]
2046
+
2047
  [[package]]
2048
  name = "openenv-browsergym-env"
2049
  version = "0.1.0"
 
2053
  { name = "browsergym-miniwob" },
2054
  { name = "greenlet" },
2055
  { name = "gymnasium" },
2056
+ { name = "openenv", extra = ["core"] },
2057
  { name = "pillow" },
2058
  { name = "playwright" },
2059
  ]
 
2072
  { name = "greenlet", specifier = "==3.0.3" },
2073
  { name = "gymnasium", specifier = ">=0.29.0" },
2074
  { name = "ipykernel", marker = "extra == 'dev'", specifier = ">=6.29.5" },
2075
+ { name = "openenv", extras = ["core"], specifier = ">=0.2.3" },
2076
  { name = "pillow", specifier = ">=10.0.0" },
2077
  { name = "playwright", specifier = "==1.44.0" },
2078
  { name = "pytest", marker = "extra == 'dev'", specifier = ">=9.0.3" },
 
2080
  ]
2081
  provides-extras = ["dev"]
2082
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2083
  [[package]]
2084
  name = "opentelemetry-api"
2085
  version = "1.40.0"
 
3309
 
3310
  [[package]]
3311
  name = "starlette"
3312
+ version = "1.0.1"
3313
  source = { registry = "https://pypi.org/simple" }
3314
  dependencies = [
3315
  { name = "anyio" },
3316
  { name = "typing-extensions", marker = "python_full_version < '3.13'" },
3317
  ]
3318
+ sdist = { url = "https://files.pythonhosted.org/packages/08/a3/84e821cc54b4ab50ae6dbc6ac3800a651b65ec35f045cc73785380654057/starlette-1.0.1.tar.gz", hash = "sha256:512399c5f1de7fac99c88572212ded9ddeddef2fb32afa82d724000e88b38f4f", size = 2659596, upload-time = "2026-05-21T21:58:58.433Z" }
3319
  wheels = [
3320
+ { url = "https://files.pythonhosted.org/packages/ec/e1/b2df4bc09a1e51ff664c1e17018a4274b42e5e9352e4a478ea540512dc88/starlette-1.0.1-py3-none-any.whl", hash = "sha256:7c0e69b2ee1c848bd54669d908500117a3ee13de603a21427e5c6fc1adf98dcd", size = 72802, upload-time = "2026-05-21T21:58:56.551Z" },
3321
  ]
3322
 
3323
  [[package]]
 
3394
 
3395
  [[package]]
3396
  name = "tornado"
3397
+ version = "6.5.6"
3398
+ source = { registry = "https://pypi.org/simple" }
3399
+ sdist = { url = "https://files.pythonhosted.org/packages/50/57/6d7303a77ae439d9189108f76c0c4fd89ee5e2cc8387bffb55232565c4ed/tornado-6.5.6.tar.gz", hash = "sha256:9a365179fe8ff6b8766f602c0f67c185d778193e9bdd828b19f0b6ed7764177d", size = 518139, upload-time = "2026-05-27T15:35:54.646Z" }
3400
+ wheels = [
3401
+ { url = "https://files.pythonhosted.org/packages/1b/0d/b4f481e18c5a51864e6d12b9a05ecf72919696680b747c958c3fc1f4fbae/tornado-6.5.6-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:65fcfaafb079435c2c19dc9e07c0f1cf0fa9051759ed0a7d0a3ba7ea7f64919c", size = 447737, upload-time = "2026-05-27T15:35:38.122Z" },
3402
+ { url = "https://files.pythonhosted.org/packages/9e/9c/5430c39fcab1144d35860f457b15e9c08b4bc7ac86764354204e983d6183/tornado-6.5.6-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:38bc01b4acacded2de63ae78023548e41ebe6fbed3ec05a796d7ae3ad893887e", size = 445899, upload-time = "2026-05-27T15:35:40.519Z" },
3403
+ { url = "https://files.pythonhosted.org/packages/8b/79/fa7e14a2f939c807a8d30619b4eb604eab219601b78792516ebe22d40cf9/tornado-6.5.6-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b942e6a137fda31ff54bf8e6e2c8d1c37f1f50583f3ed53fb840b53b9601d104", size = 448964, upload-time = "2026-05-27T15:35:42.106Z" },
3404
+ { url = "https://files.pythonhosted.org/packages/a7/71/bd67d5f5199f937dafe03a49a37989f60f600ff6fef34c79412a829d97bd/tornado-6.5.6-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8666946e70171b8c3f1fc9b7876fac492e84822c4c7f3746f4e8f8bc9ac92a79", size = 449935, upload-time = "2026-05-27T15:35:43.906Z" },
3405
+ { url = "https://files.pythonhosted.org/packages/cc/a4/c24388c9cf5b3c3a513b56a158af9f23092c9a2810d789e294310797df21/tornado-6.5.6-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1c34cfab7ad6d104f052f55de06d39bbafc5885cfeb4da688803308dbcfa90b7", size = 449767, upload-time = "2026-05-27T15:35:45.793Z" },
3406
+ { url = "https://files.pythonhosted.org/packages/a5/eb/6a07ad550c3f7b37244bd0becdf293ec3d3e961783d8b720a97df50de1b2/tornado-6.5.6-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:385f35e4e22fb52551dfcda4cdc8c30c61c2c001aef5ddad99cdfe116952efd3", size = 449174, upload-time = "2026-05-27T15:35:47.485Z" },
3407
+ { url = "https://files.pythonhosted.org/packages/bb/84/3469e098dccdb6763130e06aacd786bb4363fca7b590a55c101ddf34ed30/tornado-6.5.6-cp39-abi3-win32.whl", hash = "sha256:db475f1b67b2809b10bb16264829087724ca8d24fe4ed47f7b8675cae453ef86", size = 450230, upload-time = "2026-05-27T15:35:49.322Z" },
3408
+ { url = "https://files.pythonhosted.org/packages/d2/3c/273a04e0b9dd9016f1685cca0c1c8795a71ac88a34a8c889a0b443483226/tornado-6.5.6-cp39-abi3-win_amd64.whl", hash = "sha256:6739bf1e8eb09230f1280ddbd3236f0309db70f2c551a8dbc40f62babdf82f79", size = 450667, upload-time = "2026-05-27T15:35:51.194Z" },
3409
+ { url = "https://files.pythonhosted.org/packages/02/98/0cffe22a224f60c5fb1e3aa0b76f9da2e1ca78b0e9545e3d077c68ce60a7/tornado-6.5.6-cp39-abi3-win_arm64.whl", hash = "sha256:2543597b24a695d72338a9a77818362d72387c03ae173f1f169eadc5c91466ac", size = 449690, upload-time = "2026-05-27T15:35:52.902Z" },
3410
  ]
3411
 
3412
  [[package]]