From 94379491a565d574dc2e6ad1d12dff101bccb74c Mon Sep 17 00:00:00 2001 From: rcholic Date: Sun, 28 Dec 2025 14:03:05 -0800 Subject: [PATCH] cap request payload to 10MB --- sentience/snapshot.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/sentience/snapshot.py b/sentience/snapshot.py index 6c90693..5644634 100644 --- a/sentience/snapshot.py +++ b/sentience/snapshot.py @@ -12,6 +12,9 @@ from .browser import SentienceBrowser from .models import Snapshot, SnapshotOptions +# Maximum payload size for API requests (10MB server limit) +MAX_PAYLOAD_BYTES = 10 * 1024 * 1024 + def _save_trace_to_file(raw_elements: list[dict[str, Any]], trace_path: str | None = None) -> None: """ @@ -221,6 +224,16 @@ def _snapshot_via_api( }, } + # Check payload size before sending (server has 10MB limit) + payload_json = json.dumps(payload) + payload_size = len(payload_json.encode("utf-8")) + if payload_size > MAX_PAYLOAD_BYTES: + raise ValueError( + f"Payload size ({payload_size / 1024 / 1024:.2f}MB) exceeds server limit " + f"({MAX_PAYLOAD_BYTES / 1024 / 1024:.0f}MB). " + f"Try reducing the number of elements on the page or filtering elements." + ) + headers = { "Authorization": f"Bearer {browser.api_key}", "Content-Type": "application/json", @@ -229,7 +242,7 @@ def _snapshot_via_api( try: response = requests.post( f"{browser.api_url}/v1/snapshot", - json=payload, + data=payload_json, # Reuse already-serialized JSON headers=headers, timeout=30, )