|
|
|
|
|
|
|
|
|
|
|
|
| """
|
| My Env Environment Implementation.
|
|
|
| A simple test environment that echoes back messages sent to it.
|
| Perfect for testing HTTP server infrastructure.
|
| """
|
|
|
| from uuid import uuid4
|
|
|
| from openenv.core.env_server.interfaces import Environment
|
| from openenv.core.env_server.types import State
|
|
|
| from models import MyAction, MyObservation
|
|
|
|
|
| class MyEnvironment(Environment):
|
| """
|
| A simple echo environment that echoes back messages.
|
|
|
| This environment is designed for testing the HTTP server infrastructure.
|
| It maintains minimal state and simply echoes back whatever message it receives.
|
|
|
| Example:
|
| >>> env = MyEnvironment()
|
| >>> obs = env.reset()
|
| >>> print(obs.echoed_message) # "My Env environment ready!"
|
| >>>
|
| >>> obs = env.step(MyAction(message="Hello"))
|
| >>> print(obs.echoed_message) # "Hello"
|
| >>> print(obs.message_length) # 5
|
| """
|
|
|
|
|
|
|
|
|
|
|
| SUPPORTS_CONCURRENT_SESSIONS: bool = True
|
|
|
| def __init__(self):
|
| """Initialize the my_env environment."""
|
| self._state = State(episode_id=str(uuid4()), step_count=0)
|
| self._reset_count = 0
|
|
|
| def reset(self) -> MyObservation:
|
| """
|
| Reset the environment.
|
|
|
| Returns:
|
| MyObservation with a ready message
|
| """
|
| self._state = State(episode_id=str(uuid4()), step_count=0)
|
| self._reset_count += 1
|
|
|
| return MyObservation(
|
| echoed_message="My Env environment ready!",
|
| message_length=0,
|
| done=False,
|
| reward=0.0,
|
| )
|
|
|
| def step(self, action: MyAction) -> MyObservation:
|
| """
|
| Execute a step in the environment by echoing the message.
|
|
|
| Args:
|
| action: MyAction containing the message to echo
|
|
|
| Returns:
|
| MyObservation with the echoed message and its length
|
| """
|
| self._state.step_count += 1
|
|
|
| message = action.message
|
| length = len(message)
|
|
|
|
|
| reward = length * 0.1
|
|
|
| return MyObservation(
|
| echoed_message=message,
|
| message_length=length,
|
| done=False,
|
| reward=reward,
|
| metadata={"original_message": message, "step": self._state.step_count},
|
| )
|
|
|
| @property
|
| def state(self) -> State:
|
| """
|
| Get the current environment state.
|
|
|
| Returns:
|
| Current State with episode_id and step_count
|
| """
|
| return self._state
|
|
|