postmortem_env / client.py
yashppawar's picture
Upload folder using huggingface_hub
b29893e verified
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
"""PostMortem Environment Client."""
from typing import Dict
from openenv.core import EnvClient
from openenv.core.client_types import StepResult
from openenv.core.env_server.types import State
from .models import PostmortemAction, PostmortemObservation
class PostmortemEnv(EnvClient[PostmortemAction, PostmortemObservation, State]):
"""
Client for the PostMortem incident-triage environment.
Example:
>>> client = PostmortemEnv.from_docker_image("postmortem_env-env:latest")
>>> try:
... r = client.reset()
... print(r.observation.task_description)
... r = client.step(PostmortemAction(tool="ack"))
... finally:
... client.close()
"""
def _step_payload(self, action: PostmortemAction) -> Dict:
return {"tool": action.tool, "args": action.args}
def _parse_result(self, payload: Dict) -> StepResult[PostmortemObservation]:
obs_data = payload.get("observation", {})
observation = PostmortemObservation(
task_id=obs_data.get("task_id", ""),
task_description=obs_data.get("task_description", ""),
available_services=obs_data.get("available_services", []) or [],
available_trace_ids=obs_data.get("available_trace_ids", []) or [],
tool_result=obs_data.get("tool_result", ""),
subgoals=obs_data.get("subgoals", {}) or {},
reward_so_far=obs_data.get("reward_so_far", 0.0) or 0.0,
steps_remaining=obs_data.get("steps_remaining", 0) or 0,
last_error=obs_data.get("last_error", "") or "",
done=payload.get("done", False),
reward=payload.get("reward"),
metadata=obs_data.get("metadata", {}) or {},
)
return StepResult(
observation=observation,
reward=payload.get("reward"),
done=payload.get("done", False),
)
def _parse_state(self, payload: Dict) -> State:
return State(
episode_id=payload.get("episode_id"),
step_count=payload.get("step_count", 0),
)