Spaces:
Running
Running
Download solar_eval/cli/client.py from dev-strender/proofread-demo: direct link, hf CLI and curl.
- Browser
- Download file 2.09 kB
-
https://huggingface.co/spaces/dev-strender/proofread-demo/resolve/483134ace86f21c444532ef540c77505aadb29b9/solar_eval/cli/client.py
- Command line
-
hf download hf://spaces/dev-strender/proofread-demo@483134ace86f21c444532ef540c77505aadb29b9/solar_eval/cli/client.py
-
curl -L -o client.py https://huggingface.co/spaces/dev-strender/proofread-demo/resolve/483134ace86f21c444532ef540c77505aadb29b9/solar_eval/cli/client.py
2.09 kB
| """HTTP client wrapper for remote eval-engine API.""" | |
| import json as json_module | |
| from typing import Any, Iterator | |
| import click | |
| import httpx | |
| class EvalClient: | |
| """Synchronous HTTP client for the eval engine REST API.""" | |
| def __init__(self, base_url: str, timeout: int = 300) -> None: | |
| self.base_url = base_url.rstrip("/") | |
| self._client = httpx.Client(timeout=timeout) | |
| def _url(self, path: str) -> str: | |
| return f"{self.base_url}{path}" | |
| def _handle_error(self, exc: httpx.HTTPStatusError) -> None: | |
| try: | |
| detail = exc.response.json().get("detail", exc.response.text) | |
| except Exception: | |
| detail = exc.response.text | |
| raise click.ClickException(f"API error ({exc.response.status_code}): {detail}") | |
| def get(self, path: str, params: dict[str, Any] | None = None) -> Any: | |
| resp = self._client.get(self._url(path), params=params) | |
| try: | |
| resp.raise_for_status() | |
| except httpx.HTTPStatusError as e: | |
| self._handle_error(e) | |
| return resp.json() | |
| def post(self, path: str, json: dict[str, Any] | None = None) -> Any: | |
| resp = self._client.post(self._url(path), json=json) | |
| try: | |
| resp.raise_for_status() | |
| except httpx.HTTPStatusError as e: | |
| self._handle_error(e) | |
| return resp.json() | |
| def put(self, path: str, json: dict[str, Any] | None = None) -> Any: | |
| resp = self._client.put(self._url(path), json=json) | |
| try: | |
| resp.raise_for_status() | |
| except httpx.HTTPStatusError as e: | |
| self._handle_error(e) | |
| return resp.json() | |
| def stream_sse(self, path: str, json: dict[str, Any] | None = None) -> Iterator[dict]: | |
| with self._client.stream("POST", self._url(path), json=json, timeout=None) as resp: | |
| for line in resp.iter_lines(): | |
| if not line or not line.startswith("data: "): | |
| continue | |
| data = line[len("data: "):] | |
| if data.strip(): | |
| yield json_module.loads(data) | |