Spaces:
Running
Running
| """Lightweight HTTP client for the current FastAPI incident triage server.""" | |
| from __future__ import annotations | |
| from typing import Any, Dict, Optional | |
| import requests | |
| try: | |
| from .models import IncidentAction, IncidentState, StepResult | |
| except ImportError: | |
| from models import IncidentAction, IncidentState, StepResult | |
| class IncidentTriageClient: | |
| """Small helper for calling the local FastAPI endpoints from scripts or notebooks.""" | |
| def __init__(self, base_url: str = "http://localhost:7860", timeout: float = 30.0): | |
| self.base_url = base_url.rstrip("/") | |
| self.timeout = timeout | |
| self.session = requests.Session() | |
| def __enter__(self) -> "IncidentTriageClient": | |
| return self | |
| def __exit__(self, exc_type, exc, tb) -> None: | |
| self.close() | |
| def close(self) -> None: | |
| self.session.close() | |
| def tasks(self) -> Dict[str, Any]: | |
| return self._request("GET", "/tasks") | |
| def grader_info(self) -> Dict[str, Any]: | |
| return self._request("GET", "/grader") | |
| def reset( | |
| self, | |
| task_type: Optional[str] = None, | |
| ticket_id: Optional[str] = None, | |
| seed: Optional[int] = None, | |
| ) -> StepResult: | |
| return StepResult( | |
| **self._request( | |
| "POST", | |
| "/reset", | |
| json={ | |
| "task_type": task_type, | |
| "ticket_id": ticket_id, | |
| "seed": seed, | |
| }, | |
| ) | |
| ) | |
| def state(self, session_id: str) -> IncidentState: | |
| return IncidentState( | |
| **self._request("GET", "/state", params={"session_id": session_id}) | |
| ) | |
| def step(self, session_id: str, action: IncidentAction | Dict[str, Any]) -> StepResult: | |
| payload = action.model_dump() if isinstance(action, IncidentAction) else action | |
| result = self._request( | |
| "POST", | |
| "/step", | |
| params={"session_id": session_id}, | |
| json=payload, | |
| ) | |
| return StepResult(**result) | |
| def _request(self, method: str, path: str, **kwargs: Any) -> Dict[str, Any]: | |
| response = self.session.request( | |
| method=method, | |
| url=f"{self.base_url}{path}", | |
| timeout=self.timeout, | |
| **kwargs, | |
| ) | |
| response.raise_for_status() | |
| return response.json() | |