Skip to content

feat(openenv)!: make OpenEnv an optional extra with no version cap - #342

Merged
earakely-scale merged 4 commits into
mainfrom
feat/openenv-extra
Oct 27, 2026
Merged

earakely-scale merged 4 commits into
mainfrom
feat/openenv-extra

Conversation

@earakely-scale

@earakely-scale earakely-scale commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

OpenEnv becomes an optional extra, agentenv-framework[openenv], with a floor and no cap. The normal jobs keep testing the OpenEnv that uv.lock pins, Dependabot's weekly lock update brings new OpenEnv releases through them, and a break a release brings is fixed when it's found.

Why:

  • OpenEnv ships a minor release every week (0.5.0 on 09-17 through 0.10.0 on 10-22). So openenv>=0.9,<0.11 would expire with 0.11, likely this week.
  • Once it expires, every install of the framework is held to an old OpenEnv, and an environment that needs a newer one can't install the framework at all. TRL's AsyncGRPO harness and openenv import both live on OpenEnv's current releases.
  • Of the other RL libraries on PyPI, only verifiers declares OpenEnv, and it does so this way: an optional extra, openenv>=0.4.1, no cap.
  • Only agent_env.openenv imports OpenEnv.

Changes

  • pyproject.toml: openenv leaves the core dependencies for an openenv extra, openenv>=0.9 with no cap, and dev installs the extra. uv.lock keeps openenv 0.10.0.
  • fastapi becomes a core dependency (>=0.110, the retired explorer extra's floor). The explorer (agent-env up) imports it, and since feat(openenv): serve every bundle task as an OpenEnv env #230 retired that extra, core had it only through openenv.
  • agent_env.openenv: without the extra, importing it raises ImportError: agent_env.openenv requires pip install 'agentenv-framework[openenv]', as the smol provider does for its extra.
  • Tests: tst/unit/test_optional_extras_stay_optional.py now also checks that importing agent_env.openenv without the extra names the extra, and that the explorer imports with every extra's own modules blocked. Without the fastapi line, that second test fails with No module named 'fastapi'. The OpenEnv server joins the not-core modules there, beside the Sail and Smol providers. A package whose __init__ needs its extra no longer counts as a core import failure while the walker lists modules.
  • Docs: the README's OpenEnv section gives the install line, AGENTS.md's openenv/ row describes the extra, and THIRD_PARTY_NOTICES.md names the openenv extra. Its 196 entries are unchanged, and they match uv export with the named extras exactly.

Breaking: agent_env.openenv now needs pip install 'agentenv-framework[openenv]'. A plain install no longer pulls OpenEnv's 55 packages (gradio, pandas, numpy and others); measured, a fresh venv is 232 MB without the extra and 441 MB with it.

Test plan

  • pytest tst/unit packages/agentenv-protocol/tests: 10802 passed, 64 skipped.
  • tst/unit/openenv against openenv 0.9.0 (the floor), 0.10.0 (the latest release) and main (0.10.1.dev0): 27 passed each time.
  • tst/unit/test_runtime_dependencies_are_imported.py and tst/unit/test_optional_extras_stay_optional.py: 41 passed.
  • Fresh installs from this branch:
    • Without the extra: no openenv or gradio, every core module imports (the explorer included), agent-env --help works, and import agent_env.openenv names the extra. The venv is 232 MB.
    • With [openenv]: build_app imports, with openenv 0.10.0.
  • ruff check.
  • A one-off compatibility run, on this PR's first revision: tst/unit/openenv and tst/integration/openenv against openenv 0.9.0 (the floor), 0.10.0 and main (0.10.1.dev0) passed 34 of 34 each. The workflow that ran them was then dropped to keep CI simple.

🤖 Generated with Claude Code

RetriggerView in GreptileConfidence Score: 5/5

The PR appears safe to merge, with the documented requirement to install the `openenv` extra.

Summary

OpenEnv moves from a required dependency to the openenv extra.

  • OpenEnv now installs only when users choose its extra.

No actionable new issues were found. The review used the full PR diff because the previous and current heads have different merge bases with the target commit. No previous review threads were supplied. Tests were not run during this review.

Reviews (3) · Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." · Reviewed by Greptile

OpenEnv ships a minor release a week, so a two-minor cap expires every
two weeks and holds every install of the framework to an old OpenEnv.
openenv moves from the core dependencies to an `openenv` extra with a
floor and no cap, as verifiers declares it, and a weekly workflow runs
the OpenEnv tests against the floor, OpenEnv's latest release and its
main branch. agent_env.openenv without the extra names it, and a plain
install no longer pulls OpenEnv's 55 packages (gradio, pandas, numpy).

BREAKING CHANGE: agent_env.openenv needs `pip install
'agentenv-framework[openenv]'`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
earakely-scale and others added 3 commits October 26, 2026 17:48
The explorer (agent-env up) imports fastapi, which core had only through
openenv since the explorer extra was retired; with openenv optional, a
plain install could no longer import it. fastapi joins the core
dependencies at the explorer extra's old floor, and a test imports the
explorer with every extra's own modules blocked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keep it simple: the normal jobs test the OpenEnv that uv.lock pins, and a
break a new OpenEnv release brings is fixed when it's found.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@earakely-scale
earakely-scale merged commit b5e37cc into main Oct 27, 2026
15 checks passed
@earakely-scale
earakely-scale deleted the feat/openenv-extra branch October 27, 2026 05:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant