| from typing import Any, Dict |
|
|
| try: |
| from openenv.core import EnvClient |
| except Exception: |
| try: |
| from openenv.core.client import EnvClient |
| except Exception: |
| class EnvClient: |
| def __class_getitem__(cls, _item): |
| return cls |
|
|
| def __init__(self, *args, **kwargs): |
| self.base_url = kwargs.get("base_url") |
|
|
| try: |
| from openenv.core.env_server import State |
| except Exception: |
| from pydantic import BaseModel as State |
|
|
| try: |
| from models import RedTeamAction, RedTeamObservation, RedTeamState |
| except Exception: |
| from .models import RedTeamAction, RedTeamObservation, RedTeamState |
|
|
|
|
| class RedteampentestlabEnv(EnvClient[RedTeamAction, RedTeamObservation, State]): |
| env_name = "redteampentestlab" |
| action_type = RedTeamAction |
| observation_type = RedTeamObservation |
|
|
| def _step_payload(self, action: RedTeamAction) -> Dict[str, Any]: |
| if hasattr(action, "model_dump"): |
| return action.model_dump() |
| return {"action": getattr(action, "action", str(action))} |
|
|
| def _parse_result(self, result: Dict[str, Any]) -> RedTeamObservation: |
| if hasattr(RedTeamObservation, "model_validate"): |
| return RedTeamObservation.model_validate(result) |
| return RedTeamObservation(**result) |
|
|
| def _parse_state(self, state_payload: Dict[str, Any]) -> State: |
| if hasattr(RedTeamState, "model_validate"): |
| return RedTeamState.model_validate(state_payload) |
| return RedTeamState(**state_payload) |