From 2e475fea983dda8b6498062e637317cab28be12b Mon Sep 17 00:00:00 2001 From: aydnOktay Date: Sat, 28 Mar 2026 13:10:42 +0300 Subject: [PATCH 1/2] docs: fix Windows note formatting in README for clarity --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 037f4bf..f278d67 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ OpenGradient enables developers to build AI applications with verifiable executi pip install opengradient ``` -**Note**: > **Windows users:** See the [Windows Installation Guide](./WINDOWS_INSTALL.md) for step-by-step setup instructions. +> **Note for Windows users:** See the [Windows Installation Guide](./WINDOWS_INSTALL.md) for step-by-step setup instructions. ### Claude Code Integration From f03b6d4ad0946b6608245962d368974107af46fb Mon Sep 17 00:00:00 2001 From: aydnOktay Date: Sat, 28 Mar 2026 13:13:05 +0300 Subject: [PATCH 2/2] chore(client): add default HTTP timeouts to requests to prevent hangs --- src/opengradient/client/alpha.py | 3 ++- src/opengradient/client/model_hub.py | 13 ++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/opengradient/client/alpha.py b/src/opengradient/client/alpha.py index a4e633e..1b13f65 100644 --- a/src/opengradient/client/alpha.py +++ b/src/opengradient/client/alpha.py @@ -29,6 +29,7 @@ # How much time we wait for txn to be included in chain INFERENCE_TX_TIMEOUT = 120 REGULAR_TX_TIMEOUT = 30 +HTTP_REQUEST_TIMEOUT = 30 # seconds PRECOMPILE_CONTRACT_ADDRESS = "0x00000000000000000000000000000000000000F4" @@ -198,7 +199,7 @@ def _get_inference_result_from_node(self, inference_id: str, inference_mode: Inf encoded_id = urllib.parse.quote(inference_id, safe="") url = f"{self._api_url}/artela-network/artela-rollkit/inference/tx/{encoded_id}" - response = requests.get(url) + response = requests.get(url, timeout=HTTP_REQUEST_TIMEOUT) if response.status_code == 200: resp = response.json() inference_result = resp.get("inference_results", {}) diff --git a/src/opengradient/client/model_hub.py b/src/opengradient/client/model_hub.py index f93f57e..2ca85ce 100644 --- a/src/opengradient/client/model_hub.py +++ b/src/opengradient/client/model_hub.py @@ -11,6 +11,7 @@ from ..types import FileUploadResult, ModelRepository # Security Update: Credentials moved to environment variables +_DEFAULT_HTTP_TIMEOUT = 30 # seconds _FIREBASE_CONFIG = { "apiKey": os.getenv("FIREBASE_API_KEY"), "authDomain": os.getenv("FIREBASE_AUTH_DOMAIN"), @@ -103,7 +104,7 @@ def create_model(self, model_name: str, model_desc: str, version: str = "1.00") payload = {"name": model_name, "description": model_desc} try: - response = requests.post(url, json=payload, headers=headers) + response = requests.post(url, json=payload, headers=headers, timeout=_DEFAULT_HTTP_TIMEOUT) response.raise_for_status() except requests.HTTPError as e: error_details = f"HTTP {e.response.status_code}: {e.response.text}" @@ -143,7 +144,13 @@ def create_version(self, model_name: str, notes: str = "", is_major: bool = Fals payload = {"notes": notes, "is_major": is_major} try: - response = requests.post(url, json=payload, headers=headers, allow_redirects=False) + response = requests.post( + url, + json=payload, + headers=headers, + allow_redirects=False, + timeout=_DEFAULT_HTTP_TIMEOUT, + ) response.raise_for_status() json_response = response.json() @@ -228,7 +235,7 @@ def list_files(self, model_name: str, version: str) -> List[Dict]: headers = {"Authorization": f"Bearer {self._get_auth_token()}"} try: - response = requests.get(url, headers=headers) + response = requests.get(url, headers=headers, timeout=_DEFAULT_HTTP_TIMEOUT) response.raise_for_status() result: list[dict] = response.json() return result