Skip to content

Commit 0ab3771

Browse files
Harden Claude/Gemini/HyperAgent start param serialization
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 0da0ad0 commit 0ab3771

7 files changed

Lines changed: 444 additions & 6 deletions

File tree

hyperbrowser/client/managers/async_manager/agents/claude_computer_use.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
wait_for_job_result_async,
77
)
88
from ...response_utils import parse_response_model
9+
from .....exceptions import HyperbrowserError
910

1011
from .....models import (
1112
POLLING_ATTEMPTS,
@@ -24,9 +25,22 @@ def __init__(self, client):
2425
async def start(
2526
self, params: StartClaudeComputerUseTaskParams
2627
) -> StartClaudeComputerUseTaskResponse:
28+
try:
29+
payload = params.model_dump(exclude_none=True, by_alias=True)
30+
except HyperbrowserError:
31+
raise
32+
except Exception as exc:
33+
raise HyperbrowserError(
34+
"Failed to serialize Claude Computer Use start params",
35+
original_error=exc,
36+
) from exc
37+
if type(payload) is not dict:
38+
raise HyperbrowserError(
39+
"Failed to serialize Claude Computer Use start params"
40+
)
2741
response = await self._client.transport.post(
2842
self._client._build_url("/task/claude-computer-use"),
29-
data=params.model_dump(exclude_none=True, by_alias=True),
43+
data=payload,
3044
)
3145
return parse_response_model(
3246
response.data,

hyperbrowser/client/managers/async_manager/agents/gemini_computer_use.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
wait_for_job_result_async,
77
)
88
from ...response_utils import parse_response_model
9+
from .....exceptions import HyperbrowserError
910

1011
from .....models import (
1112
POLLING_ATTEMPTS,
@@ -24,9 +25,22 @@ def __init__(self, client):
2425
async def start(
2526
self, params: StartGeminiComputerUseTaskParams
2627
) -> StartGeminiComputerUseTaskResponse:
28+
try:
29+
payload = params.model_dump(exclude_none=True, by_alias=True)
30+
except HyperbrowserError:
31+
raise
32+
except Exception as exc:
33+
raise HyperbrowserError(
34+
"Failed to serialize Gemini Computer Use start params",
35+
original_error=exc,
36+
) from exc
37+
if type(payload) is not dict:
38+
raise HyperbrowserError(
39+
"Failed to serialize Gemini Computer Use start params"
40+
)
2741
response = await self._client.transport.post(
2842
self._client._build_url("/task/gemini-computer-use"),
29-
data=params.model_dump(exclude_none=True, by_alias=True),
43+
data=payload,
3044
)
3145
return parse_response_model(
3246
response.data,

hyperbrowser/client/managers/async_manager/agents/hyper_agent.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
wait_for_job_result_async,
77
)
88
from ...response_utils import parse_response_model
9+
from .....exceptions import HyperbrowserError
910

1011
from .....models import (
1112
POLLING_ATTEMPTS,
@@ -24,9 +25,20 @@ def __init__(self, client):
2425
async def start(
2526
self, params: StartHyperAgentTaskParams
2627
) -> StartHyperAgentTaskResponse:
28+
try:
29+
payload = params.model_dump(exclude_none=True, by_alias=True)
30+
except HyperbrowserError:
31+
raise
32+
except Exception as exc:
33+
raise HyperbrowserError(
34+
"Failed to serialize HyperAgent start params",
35+
original_error=exc,
36+
) from exc
37+
if type(payload) is not dict:
38+
raise HyperbrowserError("Failed to serialize HyperAgent start params")
2739
response = await self._client.transport.post(
2840
self._client._build_url("/task/hyper-agent"),
29-
data=params.model_dump(exclude_none=True, by_alias=True),
41+
data=payload,
3042
)
3143
return parse_response_model(
3244
response.data,

hyperbrowser/client/managers/sync_manager/agents/claude_computer_use.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from ....polling import build_operation_name, ensure_started_job_id, wait_for_job_result
44
from ...response_utils import parse_response_model
5+
from .....exceptions import HyperbrowserError
56

67
from .....models import (
78
POLLING_ATTEMPTS,
@@ -20,9 +21,22 @@ def __init__(self, client):
2021
def start(
2122
self, params: StartClaudeComputerUseTaskParams
2223
) -> StartClaudeComputerUseTaskResponse:
24+
try:
25+
payload = params.model_dump(exclude_none=True, by_alias=True)
26+
except HyperbrowserError:
27+
raise
28+
except Exception as exc:
29+
raise HyperbrowserError(
30+
"Failed to serialize Claude Computer Use start params",
31+
original_error=exc,
32+
) from exc
33+
if type(payload) is not dict:
34+
raise HyperbrowserError(
35+
"Failed to serialize Claude Computer Use start params"
36+
)
2337
response = self._client.transport.post(
2438
self._client._build_url("/task/claude-computer-use"),
25-
data=params.model_dump(exclude_none=True, by_alias=True),
39+
data=payload,
2640
)
2741
return parse_response_model(
2842
response.data,

hyperbrowser/client/managers/sync_manager/agents/gemini_computer_use.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from ....polling import build_operation_name, ensure_started_job_id, wait_for_job_result
44
from ...response_utils import parse_response_model
5+
from .....exceptions import HyperbrowserError
56

67
from .....models import (
78
POLLING_ATTEMPTS,
@@ -20,9 +21,22 @@ def __init__(self, client):
2021
def start(
2122
self, params: StartGeminiComputerUseTaskParams
2223
) -> StartGeminiComputerUseTaskResponse:
24+
try:
25+
payload = params.model_dump(exclude_none=True, by_alias=True)
26+
except HyperbrowserError:
27+
raise
28+
except Exception as exc:
29+
raise HyperbrowserError(
30+
"Failed to serialize Gemini Computer Use start params",
31+
original_error=exc,
32+
) from exc
33+
if type(payload) is not dict:
34+
raise HyperbrowserError(
35+
"Failed to serialize Gemini Computer Use start params"
36+
)
2337
response = self._client.transport.post(
2438
self._client._build_url("/task/gemini-computer-use"),
25-
data=params.model_dump(exclude_none=True, by_alias=True),
39+
data=payload,
2640
)
2741
return parse_response_model(
2842
response.data,

hyperbrowser/client/managers/sync_manager/agents/hyper_agent.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from ....polling import build_operation_name, ensure_started_job_id, wait_for_job_result
44
from ...response_utils import parse_response_model
5+
from .....exceptions import HyperbrowserError
56

67
from .....models import (
78
POLLING_ATTEMPTS,
@@ -18,9 +19,20 @@ def __init__(self, client):
1819
self._client = client
1920

2021
def start(self, params: StartHyperAgentTaskParams) -> StartHyperAgentTaskResponse:
22+
try:
23+
payload = params.model_dump(exclude_none=True, by_alias=True)
24+
except HyperbrowserError:
25+
raise
26+
except Exception as exc:
27+
raise HyperbrowserError(
28+
"Failed to serialize HyperAgent start params",
29+
original_error=exc,
30+
) from exc
31+
if type(payload) is not dict:
32+
raise HyperbrowserError("Failed to serialize HyperAgent start params")
2133
response = self._client.transport.post(
2234
self._client._build_url("/task/hyper-agent"),
23-
data=params.model_dump(exclude_none=True, by_alias=True),
35+
data=payload,
2436
)
2537
return parse_response_model(
2638
response.data,

0 commit comments

Comments
 (0)