Skip to content

Commit 91b097b

Browse files
authored
add default HTTP timeouts to requests to prevent hangs (#214)
* docs: fix Windows note formatting in README for clarity * chore(client): add default HTTP timeouts to requests to prevent hangs
1 parent 0ce5437 commit 91b097b

2 files changed

Lines changed: 12 additions & 4 deletions

File tree

src/opengradient/client/alpha.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
# How much time we wait for txn to be included in chain
3030
INFERENCE_TX_TIMEOUT = 120
3131
REGULAR_TX_TIMEOUT = 30
32+
HTTP_REQUEST_TIMEOUT = 30 # seconds
3233

3334
PRECOMPILE_CONTRACT_ADDRESS = "0x00000000000000000000000000000000000000F4"
3435

@@ -198,7 +199,7 @@ def _get_inference_result_from_node(self, inference_id: str, inference_mode: Inf
198199
encoded_id = urllib.parse.quote(inference_id, safe="")
199200
url = f"{self._api_url}/artela-network/artela-rollkit/inference/tx/{encoded_id}"
200201

201-
response = requests.get(url)
202+
response = requests.get(url, timeout=HTTP_REQUEST_TIMEOUT)
202203
if response.status_code == 200:
203204
resp = response.json()
204205
inference_result = resp.get("inference_results", {})

src/opengradient/client/model_hub.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from ..types import FileUploadResult, ModelRepository
1212

1313
# Security Update: Credentials moved to environment variables
14+
_DEFAULT_HTTP_TIMEOUT = 30 # seconds
1415
_FIREBASE_CONFIG = {
1516
"apiKey": os.getenv("FIREBASE_API_KEY"),
1617
"authDomain": os.getenv("FIREBASE_AUTH_DOMAIN"),
@@ -103,7 +104,7 @@ def create_model(self, model_name: str, model_desc: str, version: str = "1.00")
103104
payload = {"name": model_name, "description": model_desc}
104105

105106
try:
106-
response = requests.post(url, json=payload, headers=headers)
107+
response = requests.post(url, json=payload, headers=headers, timeout=_DEFAULT_HTTP_TIMEOUT)
107108
response.raise_for_status()
108109
except requests.HTTPError as e:
109110
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
143144
payload = {"notes": notes, "is_major": is_major}
144145

145146
try:
146-
response = requests.post(url, json=payload, headers=headers, allow_redirects=False)
147+
response = requests.post(
148+
url,
149+
json=payload,
150+
headers=headers,
151+
allow_redirects=False,
152+
timeout=_DEFAULT_HTTP_TIMEOUT,
153+
)
147154
response.raise_for_status()
148155

149156
json_response = response.json()
@@ -228,7 +235,7 @@ def list_files(self, model_name: str, version: str) -> List[Dict]:
228235
headers = {"Authorization": f"Bearer {self._get_auth_token()}"}
229236

230237
try:
231-
response = requests.get(url, headers=headers)
238+
response = requests.get(url, headers=headers, timeout=_DEFAULT_HTTP_TIMEOUT)
232239
response.raise_for_status()
233240
result: list[dict] = response.json()
234241
return result

0 commit comments

Comments
 (0)