Career_Planning_OpenEnv / server /environment.py
junaid12kh's picture
Upload 16 files
31fe961 verified
from __future__ import annotations
from typing import Any
from pydantic import Field
from openenv.core.env_server import Action, Environment, Observation, State
from agents import SmartCareerAgent
from logging_utils import get_logger
logger = get_logger("environment")
class CareerAction(Action):
query: str = ""
class CareerObservation(Observation):
output: dict[str, Any]
class CareerState(State):
last_query: str = ""
last_output: dict[str, Any] = Field(default_factory=dict)
class CareerEnvironment(Environment[CareerAction, CareerObservation, CareerState]):
def __init__(self) -> None:
super().__init__()
self._agent = SmartCareerAgent()
self._state = CareerState()
logger.info("CareerEnvironment initialized.")
def reset(
self,
seed: int | None = None,
episode_id: str | None = None,
**kwargs: Any,
) -> CareerObservation:
logger.info("reset called seed=%r episode_id=%r", seed, episode_id)
self._agent = SmartCareerAgent()
self._state = CareerState(episode_id=episode_id)
return CareerObservation(output={"status": "ok"}, done=False, reward=None)
def step(
self,
action: CareerAction,
timeout_s: float | None = None,
**kwargs: Any,
) -> CareerObservation:
query = action.query or ""
logger.info("step called query=%r timeout_s=%r", query, timeout_s)
result = self._agent.respond(query)
self._state.step_count += 1
self._state.last_query = query
self._state.last_output = result
logger.info("step completed step_count=%s intent=%s", self._state.step_count, result.get("intent"))
return CareerObservation(output=result, done=False, reward=None)
@property
def state(self) -> CareerState:
logger.info("state requested step_count=%s", self._state.step_count)
return self._state