simulationlab-hr / models.py
renanserrano's picture
Upload folder using huggingface_hub
bd67f06 verified
"""Action and Observation models for the SimLab HR environment."""
from __future__ import annotations
from typing import Literal
from pydantic import Field
from openenv.core.env_server.types import Action, Observation
TOOL_SERVERS = ("hrms", "email", "calendar", "rocketchat")
ToolServerName = Literal["hrms", "email", "calendar", "rocketchat"]
class HRAction(Action):
"""An action in the HR environment — invoke a tool on one of the tool servers."""
tool_server: ToolServerName = Field(
...,
description="Which tool server to target: 'hrms' (employee records, leave, payroll), "
"'email' (send/read email), 'calendar' (schedule events), or 'rocketchat' (team chat).",
)
tool_name: str = Field(
...,
description="Name of the tool to invoke on the selected server. "
"Use the tools_available field from the observation to see what's available per server.",
)
parameters: dict = Field(
default_factory=dict,
description="Tool-specific parameters as a JSON object.",
)
class HRObservation(Observation):
"""Observation returned by the HR environment after each action."""
result: str = Field(
...,
description="Result of the tool invocation, or initial environment status on reset.",
)
is_error: bool = Field(
default=False,
description="Whether the tool invocation resulted in an error.",
)
tools_available: dict[str, list[str]] = Field(
default_factory=dict,
description="Available tools grouped by server: {'hrms': [...], 'email': [...], ...}.",
)
task_instruction: str = Field(
default="",
description="The task the agent should complete in this episode.",
)