Spaces:
Running
Running
File size: 1,890 Bytes
f920a21 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
"""
CodingEnv
---------
Client-side wrapper for the Coding environment server.
Talks HTTP to a single base_url exposing: /reset and /step.
- users instantiate CodingEnv with a base_url provided by the higher-level
vector/orchestration layer.
- Environment authors ship the Docker image that serves the HTTP API.
(Seeds, episode IDs, request IDs, capabilities can be added later in the payloads.)
"""
from __future__ import annotations
from typing import TYPE_CHECKING, Optional
from core.http_env_client import HTTPEnvClient
from core.types import StepResult
from .models import CodeAction, CodeObservation, CodeState
if TYPE_CHECKING:
from core.containers.runtime import ContainerProvider
class CodingEnv(HTTPEnvClient[CodeAction, CodeObservation]):
# --- HTTPEnvClient abstract hooks ---
def _step_payload(self, action: CodeAction) -> dict:
# Shape expected by the server's /step endpoint under "action"
return {
"code": action.code,
}
def _parse_result(self, payload: dict) -> StepResult[CodeObservation]:
# Expecting: { "observation": {...}, "reward": <float|null>, "done": <bool>, "info": {...} }
obs = CodeObservation(**payload["observation"])
return StepResult(
observation=obs,
reward=payload.get("reward"),
done=bool(payload.get("done", False)),
)
def _parse_state(self, payload: dict) -> CodeState:
"""
Parse server response into CodeState object.
Args:
payload: JSON response from /state endpoint
Returns:
CodeState object with episode_id, step_count, and last_exit_code
"""
return CodeState(
episode_id=payload.get("episode_id"),
step_count=payload.get("step_count", 0),
last_exit_code=payload.get("last_exit_code", 0),
)
|