triage_agent_env / client.py
yahid's picture
Upload folder using huggingface_hub
f9b8755 verified
Raw
History Blame Contribute Delete
2.6 kB
"""TriageAgent Environment Client."""
from typing import Dict, Optional
from openenv.core import EnvClient
from openenv.core.client_types import StepResult
from openenv.core.env_server.types import State
from .models import TriageAction, TriageObservation
class TriageAgentEnvClient(EnvClient[TriageAction, TriageObservation, State]):
"""
Client for the TriageAgent environment.
Maintains a persistent WebSocket connection to the environment server.
Each client instance has its own dedicated environment session.
Example:
>>> with TriageAgentEnvClient(base_url="http://localhost:8000") as client:
... result = client.reset()
... print(result.observation.ticket_title)
... action = TriageAction(tool_name="search_kb", query="password reset")
... result = client.step(action)
... print(result.observation.tool_result)
"""
def _step_payload(self, action: TriageAction) -> Dict:
return {
"tool_name": action.tool_name,
"query": action.query,
"status": action.status,
"max_results": action.max_results,
"ticket_id": action.ticket_id,
"article_id": action.article_id,
"incident_id": action.incident_id,
"resolution": action.resolution,
"cited_artifacts": action.cited_artifacts,
"confidence": action.confidence,
"escalate": action.escalate,
}
def _parse_result(self, payload: Dict) -> StepResult[TriageObservation]:
obs_data = payload.get("observation", {})
observation = TriageObservation(
ticket_id=obs_data.get("ticket_id", ""),
ticket_title=obs_data.get("ticket_title", ""),
ticket_description=obs_data.get("ticket_description", ""),
tool_name=obs_data.get("tool_name", ""),
tool_result=obs_data.get("tool_result", {}),
turn=obs_data.get("turn", 0),
max_turns=obs_data.get("max_turns", 20),
remaining_budget=obs_data.get("remaining_budget", 20),
done=payload.get("done", False),
reward=payload.get("reward"),
info=obs_data.get("info", {}),
)
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),
)