|
27 | 27 |
|
28 | 28 |
|
29 | 29 | DEFAULT_HTTP_TIMEOUT = 12
|
| 30 | +DEFAULT_RETRY_SLEEP = 0.1 |
30 | 31 |
|
31 | 32 | if "LLAMA_SANITIZE" in os.environ or "GITHUB_ACTION" in os.environ:
|
32 | 33 | DEFAULT_HTTP_TIMEOUT = 30
|
@@ -256,25 +257,56 @@ def make_request(
|
256 | 257 | data: dict | Any | None = None,
|
257 | 258 | headers: dict | None = None,
|
258 | 259 | timeout: float | None = None,
|
| 260 | + retry_timeout: float = DEFAULT_HTTP_TIMEOUT, |
| 261 | + retry_sleep: float = DEFAULT_RETRY_SLEEP, |
| 262 | + exp_ok: bool = True, |
259 | 263 | ) -> ServerResponse:
|
260 |
| - url = f"http://{self.server_host}:{self.server_port}{path}" |
261 |
| - parse_body = False |
262 |
| - if method == "GET": |
263 |
| - response = requests.get(url, headers=headers, timeout=timeout) |
264 |
| - parse_body = True |
265 |
| - elif method == "POST": |
266 |
| - response = requests.post(url, headers=headers, json=data, timeout=timeout) |
267 |
| - parse_body = True |
268 |
| - elif method == "OPTIONS": |
269 |
| - response = requests.options(url, headers=headers, timeout=timeout) |
270 |
| - else: |
271 |
| - raise ValueError(f"Unimplemented method: {method}") |
272 |
| - result = ServerResponse() |
273 |
| - result.headers = dict(response.headers) |
274 |
| - result.status_code = response.status_code |
275 |
| - result.body = response.json() if parse_body else None |
276 |
| - print("Response from server", json.dumps(result.body, indent=2)) |
277 |
| - return result |
| 264 | + start_time = time.time() |
| 265 | + retry = False |
| 266 | + try: |
| 267 | + url = f"http://{self.server_host}:{self.server_port}{path}" |
| 268 | + parse_body = False |
| 269 | + if method == "GET": |
| 270 | + response = requests.get(url, headers=headers, timeout=timeout) |
| 271 | + parse_body = True |
| 272 | + elif method == "POST": |
| 273 | + response = requests.post(url, headers=headers, json=data, timeout=timeout) |
| 274 | + parse_body = True |
| 275 | + elif method == "OPTIONS": |
| 276 | + response = requests.options(url, headers=headers, timeout=timeout) |
| 277 | + else: |
| 278 | + raise ValueError(f"Unimplemented method: {method}") |
| 279 | + request_dt = time.time() - start_time |
| 280 | + result = ServerResponse() |
| 281 | + result.headers = dict(response.headers) |
| 282 | + result.status_code = response.status_code |
| 283 | + if ( |
| 284 | + exp_ok and |
| 285 | + (response.status_code < 200 or response.status_code >= 300) and |
| 286 | + retry_timeout > request_dt |
| 287 | + ): |
| 288 | + retry = True |
| 289 | + else: |
| 290 | + result.body = response.json() if parse_body else None |
| 291 | + print("Response from server", json.dumps(result.body, indent=2)) |
| 292 | + return result |
| 293 | + except Exception: |
| 294 | + request_dt = time.time() - start_time |
| 295 | + if retry_timeout > request_dt: |
| 296 | + retry = True |
| 297 | + else: |
| 298 | + raise |
| 299 | + if retry: |
| 300 | + time.sleep(retry_sleep) |
| 301 | + return self.make_request( |
| 302 | + method=method, |
| 303 | + path=path, |
| 304 | + data=data, |
| 305 | + headers=headers, |
| 306 | + timeout=timeout, |
| 307 | + retry_timeout=retry_timeout - request_dt - retry_sleep, |
| 308 | + ) |
| 309 | + |
278 | 310 |
|
279 | 311 | def make_stream_request(
|
280 | 312 | self,
|
|
0 commit comments