From 896cdfb79abc10e635439b748a7ac2644d4b576b Mon Sep 17 00:00:00 2001 From: Adam-Vandervorst Date: Fri, 13 Jan 2023 11:43:49 +0100 Subject: [PATCH] Use a monotonic clock for intervals --- openai/api_resources/abstract/engine_api_resource.py | 8 ++++---- openai/api_resources/completion.py | 8 ++++---- openai/api_resources/edit.py | 8 ++++---- openai/api_resources/embedding.py | 8 ++++---- openai/api_resources/engine.py | 8 ++++---- openai/tests/test_file_cli.py | 4 ++-- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/openai/api_resources/abstract/engine_api_resource.py b/openai/api_resources/abstract/engine_api_resource.py index 1f172d8cbd..021076c296 100644 --- a/openai/api_resources/abstract/engine_api_resource.py +++ b/openai/api_resources/abstract/engine_api_resource.py @@ -296,10 +296,10 @@ def instance_url(self): return url def wait(self, timeout=None): - start = time.time() + start = time.monotonic() while self.status != "complete": self.timeout = ( - min(timeout + start - time.time(), MAX_TIMEOUT) + min(timeout + start - time.monotonic(), MAX_TIMEOUT) if timeout is not None else MAX_TIMEOUT ) @@ -311,10 +311,10 @@ def wait(self, timeout=None): async def await_(self, timeout=None): """Async version of `EngineApiResource.wait`""" - start = time.time() + start = time.monotonic() while self.status != "complete": self.timeout = ( - min(timeout + start - time.time(), MAX_TIMEOUT) + min(timeout + start - time.monotonic(), MAX_TIMEOUT) if timeout is not None else MAX_TIMEOUT ) diff --git a/openai/api_resources/completion.py b/openai/api_resources/completion.py index 6912b4b730..992db11954 100644 --- a/openai/api_resources/completion.py +++ b/openai/api_resources/completion.py @@ -17,14 +17,14 @@ def create(cls, *args, **kwargs): See https://beta.openai.com/docs/api-reference/completions/create for a list of valid parameters. """ - start = time.time() + start = time.monotonic() timeout = kwargs.pop("timeout", None) while True: try: return super().create(*args, **kwargs) except TryAgain as e: - if timeout is not None and time.time() > start + timeout: + if timeout is not None and time.monotonic() > start + timeout: raise util.log_info("Waiting for model to warm up", error=e) @@ -37,14 +37,14 @@ async def acreate(cls, *args, **kwargs): See https://beta.openai.com/docs/api-reference/completions/create for a list of valid parameters. """ - start = time.time() + start = time.monotonic() timeout = kwargs.pop("timeout", None) while True: try: return await super().acreate(*args, **kwargs) except TryAgain as e: - if timeout is not None and time.time() > start + timeout: + if timeout is not None and time.monotonic() > start + timeout: raise util.log_info("Waiting for model to warm up", error=e) diff --git a/openai/api_resources/edit.py b/openai/api_resources/edit.py index 985f062ddb..ed5f2581ce 100644 --- a/openai/api_resources/edit.py +++ b/openai/api_resources/edit.py @@ -13,7 +13,7 @@ def create(cls, *args, **kwargs): """ Creates a new edit for the provided input, instruction, and parameters. """ - start = time.time() + start = time.monotonic() timeout = kwargs.pop("timeout", None) api_type = kwargs.pop("api_type", None) @@ -27,7 +27,7 @@ def create(cls, *args, **kwargs): try: return super().create(*args, **kwargs) except TryAgain as e: - if timeout is not None and time.time() > start + timeout: + if timeout is not None and time.monotonic() > start + timeout: raise util.log_info("Waiting for model to warm up", error=e) @@ -37,7 +37,7 @@ async def acreate(cls, *args, **kwargs): """ Creates a new edit for the provided input, instruction, and parameters. """ - start = time.time() + start = time.monotonic() timeout = kwargs.pop("timeout", None) api_type = kwargs.pop("api_type", None) @@ -51,7 +51,7 @@ async def acreate(cls, *args, **kwargs): try: return await super().acreate(*args, **kwargs) except TryAgain as e: - if timeout is not None and time.time() > start + timeout: + if timeout is not None and time.monotonic() > start + timeout: raise util.log_info("Waiting for model to warm up", error=e) diff --git a/openai/api_resources/embedding.py b/openai/api_resources/embedding.py index 5f1cfe5609..37f0c8e800 100644 --- a/openai/api_resources/embedding.py +++ b/openai/api_resources/embedding.py @@ -19,7 +19,7 @@ def create(cls, *args, **kwargs): See https://beta.openai.com/docs/api-reference/embeddings for a list of valid parameters. """ - start = time.time() + start = time.monotonic() timeout = kwargs.pop("timeout", None) user_provided_encoding_format = kwargs.get("encoding_format", None) @@ -46,7 +46,7 @@ def create(cls, *args, **kwargs): return response except TryAgain as e: - if timeout is not None and time.time() > start + timeout: + if timeout is not None and time.monotonic() > start + timeout: raise util.log_info("Waiting for model to warm up", error=e) @@ -59,7 +59,7 @@ async def acreate(cls, *args, **kwargs): See https://beta.openai.com/docs/api-reference/embeddings for a list of valid parameters. """ - start = time.time() + start = time.monotonic() timeout = kwargs.pop("timeout", None) user_provided_encoding_format = kwargs.get("encoding_format", None) @@ -85,7 +85,7 @@ async def acreate(cls, *args, **kwargs): return response except TryAgain as e: - if timeout is not None and time.time() > start + timeout: + if timeout is not None and time.monotonic() > start + timeout: raise util.log_info("Waiting for model to warm up", error=e) diff --git a/openai/api_resources/engine.py b/openai/api_resources/engine.py index 5a0c467c2f..918131c098 100644 --- a/openai/api_resources/engine.py +++ b/openai/api_resources/engine.py @@ -10,7 +10,7 @@ class Engine(ListableAPIResource, UpdateableAPIResource): OBJECT_NAME = "engines" def generate(self, timeout=None, **params): - start = time.time() + start = time.monotonic() while True: try: return self.request( @@ -21,13 +21,13 @@ def generate(self, timeout=None, **params): plain_old_data=True, ) except TryAgain as e: - if timeout is not None and time.time() > start + timeout: + if timeout is not None and time.monotonic() > start + timeout: raise util.log_info("Waiting for model to warm up", error=e) async def agenerate(self, timeout=None, **params): - start = time.time() + start = time.monotonic() while True: try: return await self.arequest( @@ -38,7 +38,7 @@ async def agenerate(self, timeout=None, **params): plain_old_data=True, ) except TryAgain as e: - if timeout is not None and time.time() > start + timeout: + if timeout is not None and time.monotonic() > start + timeout: raise util.log_info("Waiting for model to warm up", error=e) diff --git a/openai/tests/test_file_cli.py b/openai/tests/test_file_cli.py index 69ea29e2a0..60e5ed5590 100644 --- a/openai/tests/test_file_cli.py +++ b/openai/tests/test_file_cli.py @@ -18,7 +18,7 @@ def test_file_cli() -> None: assert file_obj["bytes"] == len(contents) file_id: str = file_obj["id"] assert file_id.startswith("file-") - start_time = time.time() + start_time = time.monotonic() while True: delete_result = subprocess.run( ["openai", "api", "files.delete", "-i", file_id], @@ -30,7 +30,7 @@ def test_file_cli() -> None: break elif STILL_PROCESSING in delete_result.stderr: time.sleep(0.5) - if start_time + 60 < time.time(): + if start_time + 60 < time.monotonic(): raise RuntimeError("timed out waiting for file to become available") continue else: