immunoorg-v3 / client.py
hirann's picture
Initial deploy of cleaned ImmunoOrg 2.0 repo (elite scenario mix + 6 evidence PNGs + 3-reward GRPO pipeline)
e7b864e verified
"""
ImmunoOrg OpenEnv client
=========================
Thin OpenEnv ``EnvClient`` binding for the ImmunoOrg environment.
This module is intentionally **server-free**: it only imports the
shared wire schemas from ``immunoorg.api_models`` so it can be
installed (or vendored) by external training code without dragging
in the FastAPI server, the simulator, or any of the heavy
``immunoorg`` engines.
Usage
-----
.. code-block:: python
from client import ImmunoOrgEnv, ImmunoOrgAction
with ImmunoOrgEnv(base_url="https://hirann-immunoorg-2.hf.space").sync() as env:
obs = env.reset()
obs = env.step(ImmunoOrgAction(
action_type="tactical",
tactical_action="scan_logs",
target="web-server-00",
reasoning="Detection phase scan.",
))
If the ``openenv`` package is unavailable (e.g. inside a minimal
container), the module still exposes the wire schemas so callers can
talk to the FastAPI endpoints with plain ``requests``.
"""
from __future__ import annotations
from immunoorg.api_models import ImmunoOrgAction, ImmunoOrgObservation
try:
from openenv.core import EnvClient
class ImmunoOrgEnv(EnvClient[ImmunoOrgAction, ImmunoOrgObservation, dict]):
"""OpenEnv client for ImmunoOrg."""
action_type = ImmunoOrgAction
observation_type = ImmunoOrgObservation
except ImportError: # pragma: no cover - openenv is an optional dep here
ImmunoOrgEnv = None # type: ignore[assignment]
__all__ = ["ImmunoOrgEnv", "ImmunoOrgAction", "ImmunoOrgObservation"]