Skip to content

Commit 6701fb7

Browse files
Centralize sync and async agent start requests
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 664a5b2 commit 6701fb7

17 files changed

+220
-72
lines changed

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ This runs lint, format checks, compile checks, tests, and package build.
7979
- `tests/test_agent_examples_coverage.py` (agent task example coverage enforcement),
8080
- `tests/test_agent_operation_metadata_usage.py` (shared agent operation-metadata usage enforcement),
8181
- `tests/test_agent_payload_helper_usage.py` (shared agent start-payload helper usage enforcement),
82+
- `tests/test_agent_start_helper_usage.py` (shared agent start-request helper usage enforcement),
8283
- `tests/test_agent_stop_helper_usage.py` (shared agent stop-request helper usage enforcement),
8384
- `tests/test_agent_task_read_helper_usage.py` (shared agent task read-helper usage enforcement),
8485
- `tests/test_agent_terminal_status_helper_usage.py` (shared agent terminal-status helper usage enforcement),
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from typing import Any, Dict, Type, TypeVar
2+
3+
from .response_utils import parse_response_model
4+
5+
T = TypeVar("T")
6+
7+
8+
def start_agent_task(
9+
*,
10+
client: Any,
11+
route_prefix: str,
12+
payload: Dict[str, Any],
13+
model: Type[T],
14+
operation_name: str,
15+
) -> T:
16+
response = client.transport.post(
17+
client._build_url(route_prefix),
18+
data=payload,
19+
)
20+
return parse_response_model(
21+
response.data,
22+
model=model,
23+
operation_name=operation_name,
24+
)
25+
26+
27+
async def start_agent_task_async(
28+
*,
29+
client: Any,
30+
route_prefix: str,
31+
payload: Dict[str, Any],
32+
model: Type[T],
33+
operation_name: str,
34+
) -> T:
35+
response = await client.transport.post(
36+
client._build_url(route_prefix),
37+
data=payload,
38+
)
39+
return parse_response_model(
40+
response.data,
41+
model=model,
42+
operation_name=operation_name,
43+
)

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
from ...browser_use_payload_utils import build_browser_use_start_payload
55
from ...agent_operation_metadata import BROWSER_USE_OPERATION_METADATA
66
from ...agent_route_constants import BROWSER_USE_TASK_ROUTE_PREFIX
7+
from ...agent_start_utils import start_agent_task_async
78
from ...agent_stop_utils import stop_agent_task_async
89
from ...agent_task_read_utils import get_agent_task_async, get_agent_task_status_async
910
from ...job_wait_utils import wait_for_job_result_with_defaults_async
10-
from ...response_utils import parse_response_model
1111
from ...start_job_utils import build_started_job_context
1212

1313
from .....models import (
@@ -35,12 +35,10 @@ async def start(
3535
self, params: StartBrowserUseTaskParams
3636
) -> StartBrowserUseTaskResponse:
3737
payload = build_browser_use_start_payload(params)
38-
response = await self._client.transport.post(
39-
self._client._build_url(self._ROUTE_PREFIX),
40-
data=payload,
41-
)
42-
return parse_response_model(
43-
response.data,
38+
return await start_agent_task_async(
39+
client=self._client,
40+
route_prefix=self._ROUTE_PREFIX,
41+
payload=payload,
4442
model=StartBrowserUseTaskResponse,
4543
operation_name=self._OPERATION_METADATA.start_operation_name,
4644
)

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
from ...agent_payload_utils import build_agent_start_payload
44
from ...agent_operation_metadata import CLAUDE_COMPUTER_USE_OPERATION_METADATA
55
from ...agent_route_constants import CLAUDE_COMPUTER_USE_TASK_ROUTE_PREFIX
6+
from ...agent_start_utils import start_agent_task_async
67
from ...agent_status_utils import is_agent_terminal_status
78
from ...agent_stop_utils import stop_agent_task_async
89
from ...agent_task_read_utils import get_agent_task_async, get_agent_task_status_async
910
from ...job_wait_utils import wait_for_job_result_with_defaults_async
10-
from ...response_utils import parse_response_model
1111
from ...start_job_utils import build_started_job_context
1212

1313
from .....models import (
@@ -38,12 +38,10 @@ async def start(
3838
params,
3939
error_message="Failed to serialize Claude Computer Use start params",
4040
)
41-
response = await self._client.transport.post(
42-
self._client._build_url(self._ROUTE_PREFIX),
43-
data=payload,
44-
)
45-
return parse_response_model(
46-
response.data,
41+
return await start_agent_task_async(
42+
client=self._client,
43+
route_prefix=self._ROUTE_PREFIX,
44+
payload=payload,
4745
model=StartClaudeComputerUseTaskResponse,
4846
operation_name=self._OPERATION_METADATA.start_operation_name,
4947
)

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
from ...agent_payload_utils import build_agent_start_payload
44
from ...agent_operation_metadata import CUA_OPERATION_METADATA
55
from ...agent_route_constants import CUA_TASK_ROUTE_PREFIX
6+
from ...agent_start_utils import start_agent_task_async
67
from ...agent_status_utils import is_agent_terminal_status
78
from ...agent_stop_utils import stop_agent_task_async
89
from ...agent_task_read_utils import get_agent_task_async, get_agent_task_status_async
910
from ...job_wait_utils import wait_for_job_result_with_defaults_async
10-
from ...response_utils import parse_response_model
1111
from ...start_job_utils import build_started_job_context
1212

1313
from .....models import (
@@ -36,12 +36,10 @@ async def start(self, params: StartCuaTaskParams) -> StartCuaTaskResponse:
3636
params,
3737
error_message="Failed to serialize CUA start params",
3838
)
39-
response = await self._client.transport.post(
40-
self._client._build_url(self._ROUTE_PREFIX),
41-
data=payload,
42-
)
43-
return parse_response_model(
44-
response.data,
39+
return await start_agent_task_async(
40+
client=self._client,
41+
route_prefix=self._ROUTE_PREFIX,
42+
payload=payload,
4543
model=StartCuaTaskResponse,
4644
operation_name=self._OPERATION_METADATA.start_operation_name,
4745
)

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
from ...agent_payload_utils import build_agent_start_payload
44
from ...agent_operation_metadata import GEMINI_COMPUTER_USE_OPERATION_METADATA
55
from ...agent_route_constants import GEMINI_COMPUTER_USE_TASK_ROUTE_PREFIX
6+
from ...agent_start_utils import start_agent_task_async
67
from ...agent_status_utils import is_agent_terminal_status
78
from ...agent_stop_utils import stop_agent_task_async
89
from ...agent_task_read_utils import get_agent_task_async, get_agent_task_status_async
910
from ...job_wait_utils import wait_for_job_result_with_defaults_async
10-
from ...response_utils import parse_response_model
1111
from ...start_job_utils import build_started_job_context
1212

1313
from .....models import (
@@ -38,12 +38,10 @@ async def start(
3838
params,
3939
error_message="Failed to serialize Gemini Computer Use start params",
4040
)
41-
response = await self._client.transport.post(
42-
self._client._build_url(self._ROUTE_PREFIX),
43-
data=payload,
44-
)
45-
return parse_response_model(
46-
response.data,
41+
return await start_agent_task_async(
42+
client=self._client,
43+
route_prefix=self._ROUTE_PREFIX,
44+
payload=payload,
4745
model=StartGeminiComputerUseTaskResponse,
4846
operation_name=self._OPERATION_METADATA.start_operation_name,
4947
)

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
from ...agent_payload_utils import build_agent_start_payload
44
from ...agent_operation_metadata import HYPER_AGENT_OPERATION_METADATA
55
from ...agent_route_constants import HYPER_AGENT_TASK_ROUTE_PREFIX
6+
from ...agent_start_utils import start_agent_task_async
67
from ...agent_status_utils import is_agent_terminal_status
78
from ...agent_stop_utils import stop_agent_task_async
89
from ...agent_task_read_utils import get_agent_task_async, get_agent_task_status_async
910
from ...job_wait_utils import wait_for_job_result_with_defaults_async
10-
from ...response_utils import parse_response_model
1111
from ...start_job_utils import build_started_job_context
1212

1313
from .....models import (
@@ -38,12 +38,10 @@ async def start(
3838
params,
3939
error_message="Failed to serialize HyperAgent start params",
4040
)
41-
response = await self._client.transport.post(
42-
self._client._build_url(self._ROUTE_PREFIX),
43-
data=payload,
44-
)
45-
return parse_response_model(
46-
response.data,
41+
return await start_agent_task_async(
42+
client=self._client,
43+
route_prefix=self._ROUTE_PREFIX,
44+
payload=payload,
4745
model=StartHyperAgentTaskResponse,
4846
operation_name=self._OPERATION_METADATA.start_operation_name,
4947
)

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
from ...browser_use_payload_utils import build_browser_use_start_payload
55
from ...agent_operation_metadata import BROWSER_USE_OPERATION_METADATA
66
from ...agent_route_constants import BROWSER_USE_TASK_ROUTE_PREFIX
7+
from ...agent_start_utils import start_agent_task
78
from ...agent_stop_utils import stop_agent_task
89
from ...agent_task_read_utils import get_agent_task, get_agent_task_status
910
from ...job_wait_utils import wait_for_job_result_with_defaults
10-
from ...response_utils import parse_response_model
1111
from ...start_job_utils import build_started_job_context
1212

1313
from .....models import (
@@ -33,12 +33,10 @@ def __init__(self, client):
3333

3434
def start(self, params: StartBrowserUseTaskParams) -> StartBrowserUseTaskResponse:
3535
payload = build_browser_use_start_payload(params)
36-
response = self._client.transport.post(
37-
self._client._build_url(self._ROUTE_PREFIX),
38-
data=payload,
39-
)
40-
return parse_response_model(
41-
response.data,
36+
return start_agent_task(
37+
client=self._client,
38+
route_prefix=self._ROUTE_PREFIX,
39+
payload=payload,
4240
model=StartBrowserUseTaskResponse,
4341
operation_name=self._OPERATION_METADATA.start_operation_name,
4442
)

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
from ...agent_status_utils import is_agent_terminal_status
55
from ...agent_operation_metadata import CLAUDE_COMPUTER_USE_OPERATION_METADATA
66
from ...agent_route_constants import CLAUDE_COMPUTER_USE_TASK_ROUTE_PREFIX
7+
from ...agent_start_utils import start_agent_task
78
from ...agent_stop_utils import stop_agent_task
89
from ...agent_task_read_utils import get_agent_task, get_agent_task_status
910
from ...job_wait_utils import wait_for_job_result_with_defaults
10-
from ...response_utils import parse_response_model
1111
from ...start_job_utils import build_started_job_context
1212

1313
from .....models import (
@@ -38,12 +38,10 @@ def start(
3838
params,
3939
error_message="Failed to serialize Claude Computer Use start params",
4040
)
41-
response = self._client.transport.post(
42-
self._client._build_url(self._ROUTE_PREFIX),
43-
data=payload,
44-
)
45-
return parse_response_model(
46-
response.data,
41+
return start_agent_task(
42+
client=self._client,
43+
route_prefix=self._ROUTE_PREFIX,
44+
payload=payload,
4745
model=StartClaudeComputerUseTaskResponse,
4846
operation_name=self._OPERATION_METADATA.start_operation_name,
4947
)

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
from ...agent_payload_utils import build_agent_start_payload
44
from ...agent_operation_metadata import CUA_OPERATION_METADATA
55
from ...agent_route_constants import CUA_TASK_ROUTE_PREFIX
6+
from ...agent_start_utils import start_agent_task
67
from ...agent_status_utils import is_agent_terminal_status
78
from ...agent_stop_utils import stop_agent_task
89
from ...agent_task_read_utils import get_agent_task, get_agent_task_status
910
from ...job_wait_utils import wait_for_job_result_with_defaults
10-
from ...response_utils import parse_response_model
1111
from ...start_job_utils import build_started_job_context
1212

1313
from .....models import (
@@ -36,12 +36,10 @@ def start(self, params: StartCuaTaskParams) -> StartCuaTaskResponse:
3636
params,
3737
error_message="Failed to serialize CUA start params",
3838
)
39-
response = self._client.transport.post(
40-
self._client._build_url(self._ROUTE_PREFIX),
41-
data=payload,
42-
)
43-
return parse_response_model(
44-
response.data,
39+
return start_agent_task(
40+
client=self._client,
41+
route_prefix=self._ROUTE_PREFIX,
42+
payload=payload,
4543
model=StartCuaTaskResponse,
4644
operation_name=self._OPERATION_METADATA.start_operation_name,
4745
)

0 commit comments

Comments
 (0)