hyperbrowser 0.51.0__py3-none-any.whl → 0.73.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hyperbrowser/client/managers/async_manager/agents/__init__.py +2 -0
- hyperbrowser/client/managers/async_manager/agents/gemini_computer_use.py +71 -0
- hyperbrowser/client/managers/async_manager/computer_action.py +49 -4
- hyperbrowser/client/managers/async_manager/session.py +20 -0
- hyperbrowser/client/managers/sync_manager/agents/__init__.py +2 -0
- hyperbrowser/client/managers/sync_manager/agents/claude_computer_use.py +1 -1
- hyperbrowser/client/managers/sync_manager/agents/gemini_computer_use.py +71 -0
- hyperbrowser/client/managers/sync_manager/computer_action.py +49 -4
- hyperbrowser/client/managers/sync_manager/session.py +20 -0
- hyperbrowser/models/__init__.py +97 -0
- hyperbrowser/models/agents/browser_use.py +83 -2
- hyperbrowser/models/agents/claude_computer_use.py +18 -0
- hyperbrowser/models/agents/cua.py +16 -0
- hyperbrowser/models/agents/gemini_computer_use.py +135 -0
- hyperbrowser/models/agents/hyper_agent.py +11 -0
- hyperbrowser/models/computer_action.py +79 -6
- hyperbrowser/models/consts.py +20 -1
- hyperbrowser/models/extract.py +11 -0
- hyperbrowser/models/scrape.py +22 -0
- hyperbrowser/models/session.py +135 -11
- {hyperbrowser-0.51.0.dist-info → hyperbrowser-0.73.0.dist-info}/METADATA +4 -2
- {hyperbrowser-0.51.0.dist-info → hyperbrowser-0.73.0.dist-info}/RECORD +24 -21
- {hyperbrowser-0.51.0.dist-info → hyperbrowser-0.73.0.dist-info}/WHEEL +1 -1
- {hyperbrowser-0.51.0.dist-info → hyperbrowser-0.73.0.dist-info/licenses}/LICENSE +0 -0
|
@@ -2,7 +2,7 @@ from typing import Any, Dict, List, Literal, Optional, Type, Union
|
|
|
2
2
|
|
|
3
3
|
from pydantic import BaseModel, ConfigDict, Field
|
|
4
4
|
|
|
5
|
-
from ..consts import BrowserUseLlm
|
|
5
|
+
from ..consts import BrowserUseLlm, BrowserUseVersion
|
|
6
6
|
from ..session import CreateSessionParams
|
|
7
7
|
|
|
8
8
|
BrowserUseTaskStatus = Literal["pending", "running", "completed", "failed", "stopped"]
|
|
@@ -32,6 +32,9 @@ class StartBrowserUseTaskParams(BaseModel):
|
|
|
32
32
|
)
|
|
33
33
|
|
|
34
34
|
task: str
|
|
35
|
+
version: Optional[BrowserUseVersion] = Field(
|
|
36
|
+
default=None, serialization_alias="version"
|
|
37
|
+
)
|
|
35
38
|
llm: Optional[BrowserUseLlm] = Field(default=None, serialization_alias="llm")
|
|
36
39
|
session_id: Optional[str] = Field(default=None, serialization_alias="sessionId")
|
|
37
40
|
validate_output: Optional[bool] = Field(
|
|
@@ -193,15 +196,79 @@ class BrowserUseAgentHistory(BaseModel):
|
|
|
193
196
|
metadata: Optional[BrowserUseStepMetadata] = None
|
|
194
197
|
|
|
195
198
|
|
|
199
|
+
# ===== 0.7.10-specific response models =====
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
class BrowserUseAgentOutputV0710(BaseModel):
|
|
203
|
+
thinking: Optional[str] = None
|
|
204
|
+
evaluation_previous_goal: Optional[str] = None
|
|
205
|
+
memory: Optional[str] = None
|
|
206
|
+
next_goal: Optional[str] = None
|
|
207
|
+
action: list[dict]
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
class BrowserUseActionResultV0710(BaseModel):
|
|
211
|
+
is_done: Optional[bool] = False
|
|
212
|
+
success: Optional[bool] = None
|
|
213
|
+
error: Optional[str] = None
|
|
214
|
+
metadata: Optional[dict] = None
|
|
215
|
+
attachments: Optional[list[str]] = None
|
|
216
|
+
long_term_memory: Optional[str] = None
|
|
217
|
+
extracted_content: Optional[str] = None
|
|
218
|
+
include_extracted_content_only_once: Optional[bool] = False
|
|
219
|
+
include_in_memory: bool = False
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
class BrowserUseBrowserStateHistoryV0710(BaseModel):
|
|
223
|
+
url: str
|
|
224
|
+
title: str
|
|
225
|
+
tabs: list[dict]
|
|
226
|
+
interacted_element: Union[list[Union[dict, None]], list[None]]
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
class BrowserUseStepMetadataV0710(BaseModel):
|
|
230
|
+
step_start_time: float
|
|
231
|
+
step_end_time: float
|
|
232
|
+
step_number: int
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
class BrowserUseAgentHistoryV0710(BaseModel):
|
|
236
|
+
model_output: Union[BrowserUseAgentOutputV0710, None]
|
|
237
|
+
result: list[BrowserUseActionResultV0710]
|
|
238
|
+
state: BrowserUseBrowserStateHistoryV0710
|
|
239
|
+
metadata: Optional[BrowserUseStepMetadataV0710] = None
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
# ===== latest response models =====
|
|
243
|
+
|
|
244
|
+
BrowserUseAgentHistoryLatest = Dict[str, Any]
|
|
245
|
+
|
|
246
|
+
BrowserUseStep = Union[
|
|
247
|
+
BrowserUseAgentHistory, BrowserUseAgentHistoryV0710, BrowserUseAgentHistoryLatest
|
|
248
|
+
]
|
|
249
|
+
|
|
250
|
+
|
|
196
251
|
class BrowserUseTaskData(BaseModel):
|
|
197
252
|
model_config = ConfigDict(
|
|
198
253
|
populate_by_alias=True,
|
|
199
254
|
)
|
|
200
255
|
|
|
201
|
-
steps: list[
|
|
256
|
+
steps: list[BrowserUseStep]
|
|
202
257
|
final_result: Optional[str] = Field(default=None, alias="finalResult")
|
|
203
258
|
|
|
204
259
|
|
|
260
|
+
class BrowserUseTaskMetadata(BaseModel):
|
|
261
|
+
model_config = ConfigDict(
|
|
262
|
+
populate_by_alias=True,
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
input_tokens: Optional[int] = Field(default=None, alias="inputTokens")
|
|
266
|
+
output_tokens: Optional[int] = Field(default=None, alias="outputTokens")
|
|
267
|
+
num_task_steps_completed: Optional[int] = Field(
|
|
268
|
+
default=None, alias="numTaskStepsCompleted"
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
|
|
205
272
|
class BrowserUseTaskResponse(BaseModel):
|
|
206
273
|
"""
|
|
207
274
|
Response from a browser use task.
|
|
@@ -213,6 +280,20 @@ class BrowserUseTaskResponse(BaseModel):
|
|
|
213
280
|
|
|
214
281
|
job_id: str = Field(alias="jobId")
|
|
215
282
|
status: BrowserUseTaskStatus
|
|
283
|
+
metadata: Optional[BrowserUseTaskMetadata] = Field(default=None, alias="metadata")
|
|
216
284
|
data: Optional[BrowserUseTaskData] = Field(default=None, alias="data")
|
|
217
285
|
error: Optional[str] = Field(default=None, alias="error")
|
|
218
286
|
live_url: Optional[str] = Field(default=None, alias="liveUrl")
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
def cast_steps_for_version(
|
|
290
|
+
steps: List[BrowserUseStep], version: BrowserUseVersion
|
|
291
|
+
) -> List[BrowserUseStep]:
|
|
292
|
+
if version == "0.1.40":
|
|
293
|
+
return [BrowserUseAgentHistory.model_validate(s) for s in steps]
|
|
294
|
+
elif version == "0.7.10":
|
|
295
|
+
return [BrowserUseAgentHistoryV0710.model_validate(s) for s in steps]
|
|
296
|
+
elif version == "latest":
|
|
297
|
+
return steps
|
|
298
|
+
else:
|
|
299
|
+
raise ValueError(f"Invalid version: {version}")
|
|
@@ -48,6 +48,9 @@ class StartClaudeComputerUseTaskParams(BaseModel):
|
|
|
48
48
|
api_keys: Optional[ClaudeComputerUseApiKeys] = Field(
|
|
49
49
|
default=None, serialization_alias="apiKeys"
|
|
50
50
|
)
|
|
51
|
+
use_computer_action: Optional[bool] = Field(
|
|
52
|
+
default=None, serialization_alias="useComputerAction"
|
|
53
|
+
)
|
|
51
54
|
|
|
52
55
|
|
|
53
56
|
class StartClaudeComputerUseTaskResponse(BaseModel):
|
|
@@ -101,6 +104,18 @@ class ClaudeComputerUseTaskData(BaseModel):
|
|
|
101
104
|
final_result: Optional[str] = Field(default=None, alias="finalResult")
|
|
102
105
|
|
|
103
106
|
|
|
107
|
+
class ClaudeComputerUseTaskMetadata(BaseModel):
|
|
108
|
+
model_config = ConfigDict(
|
|
109
|
+
populate_by_alias=True,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
input_tokens: Optional[int] = Field(default=None, alias="inputTokens")
|
|
113
|
+
output_tokens: Optional[int] = Field(default=None, alias="outputTokens")
|
|
114
|
+
num_task_steps_completed: Optional[int] = Field(
|
|
115
|
+
default=None, alias="numTaskStepsCompleted"
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
|
|
104
119
|
class ClaudeComputerUseTaskResponse(BaseModel):
|
|
105
120
|
"""
|
|
106
121
|
Response from a Claude Computer Use task.
|
|
@@ -112,6 +127,9 @@ class ClaudeComputerUseTaskResponse(BaseModel):
|
|
|
112
127
|
|
|
113
128
|
job_id: str = Field(alias="jobId")
|
|
114
129
|
status: ClaudeComputerUseTaskStatus
|
|
130
|
+
metadata: Optional[ClaudeComputerUseTaskMetadata] = Field(
|
|
131
|
+
default=None, alias="metadata"
|
|
132
|
+
)
|
|
115
133
|
data: Optional[ClaudeComputerUseTaskData] = Field(default=None, alias="data")
|
|
116
134
|
error: Optional[str] = Field(default=None, alias="error")
|
|
117
135
|
live_url: Optional[str] = Field(default=None, alias="liveUrl")
|
|
@@ -42,6 +42,9 @@ class StartCuaTaskParams(BaseModel):
|
|
|
42
42
|
default=None, serialization_alias="useCustomApiKeys"
|
|
43
43
|
)
|
|
44
44
|
api_keys: Optional[CuaApiKeys] = Field(default=None, serialization_alias="apiKeys")
|
|
45
|
+
use_computer_action: Optional[bool] = Field(
|
|
46
|
+
default=None, serialization_alias="useComputerAction"
|
|
47
|
+
)
|
|
45
48
|
|
|
46
49
|
|
|
47
50
|
class StartCuaTaskResponse(BaseModel):
|
|
@@ -131,6 +134,18 @@ class CuaTaskData(BaseModel):
|
|
|
131
134
|
final_result: Optional[str] = Field(default=None, alias="finalResult")
|
|
132
135
|
|
|
133
136
|
|
|
137
|
+
class CuaTaskMetadata(BaseModel):
|
|
138
|
+
model_config = ConfigDict(
|
|
139
|
+
populate_by_alias=True,
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
input_tokens: Optional[int] = Field(default=None, alias="inputTokens")
|
|
143
|
+
output_tokens: Optional[int] = Field(default=None, alias="outputTokens")
|
|
144
|
+
num_task_steps_completed: Optional[int] = Field(
|
|
145
|
+
default=None, alias="numTaskStepsCompleted"
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
|
|
134
149
|
class CuaTaskResponse(BaseModel):
|
|
135
150
|
"""
|
|
136
151
|
Response from a CUA task.
|
|
@@ -142,6 +157,7 @@ class CuaTaskResponse(BaseModel):
|
|
|
142
157
|
|
|
143
158
|
job_id: str = Field(alias="jobId")
|
|
144
159
|
status: CuaTaskStatus
|
|
160
|
+
metadata: Optional[CuaTaskMetadata] = Field(default=None, alias="metadata")
|
|
145
161
|
data: Optional[CuaTaskData] = Field(default=None, alias="data")
|
|
146
162
|
error: Optional[str] = Field(default=None, alias="error")
|
|
147
163
|
live_url: Optional[str] = Field(default=None, alias="liveUrl")
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
from typing import Any, Literal, Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
+
|
|
5
|
+
from ..session import CreateSessionParams
|
|
6
|
+
from ..consts import GeminiComputerUseLlm
|
|
7
|
+
|
|
8
|
+
GeminiComputerUseTaskStatus = Literal[
|
|
9
|
+
"pending", "running", "completed", "failed", "stopped"
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class GeminiComputerUseApiKeys(BaseModel):
|
|
14
|
+
"""
|
|
15
|
+
API keys for the Gemini Computer Use task.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
model_config = ConfigDict(
|
|
19
|
+
populate_by_alias=True,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
google: Optional[str] = Field(default=None, serialization_alias="google")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class StartGeminiComputerUseTaskParams(BaseModel):
|
|
26
|
+
"""
|
|
27
|
+
Parameters for creating a new Gemini Computer Use task.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
model_config = ConfigDict(
|
|
31
|
+
populate_by_alias=True,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
task: str
|
|
35
|
+
llm: Optional[GeminiComputerUseLlm] = Field(default=None, serialization_alias="llm")
|
|
36
|
+
session_id: Optional[str] = Field(default=None, serialization_alias="sessionId")
|
|
37
|
+
max_failures: Optional[int] = Field(default=None, serialization_alias="maxFailures")
|
|
38
|
+
max_steps: Optional[int] = Field(default=None, serialization_alias="maxSteps")
|
|
39
|
+
keep_browser_open: Optional[bool] = Field(
|
|
40
|
+
default=None, serialization_alias="keepBrowserOpen"
|
|
41
|
+
)
|
|
42
|
+
session_options: Optional[CreateSessionParams] = Field(
|
|
43
|
+
default=None, serialization_alias="sessionOptions"
|
|
44
|
+
)
|
|
45
|
+
use_custom_api_keys: Optional[bool] = Field(
|
|
46
|
+
default=None, serialization_alias="useCustomApiKeys"
|
|
47
|
+
)
|
|
48
|
+
use_computer_action: Optional[bool] = Field(
|
|
49
|
+
default=None, serialization_alias="useComputerAction"
|
|
50
|
+
)
|
|
51
|
+
api_keys: Optional[GeminiComputerUseApiKeys] = Field(
|
|
52
|
+
default=None, serialization_alias="apiKeys"
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class StartGeminiComputerUseTaskResponse(BaseModel):
|
|
57
|
+
"""
|
|
58
|
+
Response from starting a Gemini Computer Use task.
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
model_config = ConfigDict(
|
|
62
|
+
populate_by_alias=True,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
job_id: str = Field(alias="jobId")
|
|
66
|
+
live_url: Optional[str] = Field(default=None, alias="liveUrl")
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class GeminiComputerUseTaskStatusResponse(BaseModel):
|
|
70
|
+
"""
|
|
71
|
+
Response from getting a Gemini Computer Use task status.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
model_config = ConfigDict(
|
|
75
|
+
populate_by_alias=True,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
status: GeminiComputerUseTaskStatus
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class GeminiComputerUseStepResponse(BaseModel):
|
|
82
|
+
"""
|
|
83
|
+
Response from a single Gemini Computer Use step.
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
model_config = ConfigDict(
|
|
87
|
+
populate_by_alias=True,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
candidates: Optional[list[Any]] = Field(
|
|
91
|
+
default=None, serialization_alias="candidates"
|
|
92
|
+
)
|
|
93
|
+
model_version: Optional[str] = Field(
|
|
94
|
+
default=None, serialization_alias="modelVersion"
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class GeminiComputerUseTaskData(BaseModel):
|
|
99
|
+
model_config = ConfigDict(
|
|
100
|
+
populate_by_alias=True,
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
steps: list[GeminiComputerUseStepResponse]
|
|
104
|
+
final_result: Optional[str] = Field(default=None, alias="finalResult")
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class GeminiComputerUseTaskMetadata(BaseModel):
|
|
108
|
+
model_config = ConfigDict(
|
|
109
|
+
populate_by_alias=True,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
input_tokens: Optional[int] = Field(default=None, alias="inputTokens")
|
|
113
|
+
output_tokens: Optional[int] = Field(default=None, alias="outputTokens")
|
|
114
|
+
num_task_steps_completed: Optional[int] = Field(
|
|
115
|
+
default=None, alias="numTaskStepsCompleted"
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class GeminiComputerUseTaskResponse(BaseModel):
|
|
120
|
+
"""
|
|
121
|
+
Response from a Gemini Computer Use task.
|
|
122
|
+
"""
|
|
123
|
+
|
|
124
|
+
model_config = ConfigDict(
|
|
125
|
+
populate_by_alias=True,
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
job_id: str = Field(alias="jobId")
|
|
129
|
+
status: GeminiComputerUseTaskStatus
|
|
130
|
+
metadata: Optional[GeminiComputerUseTaskMetadata] = Field(
|
|
131
|
+
default=None, alias="metadata"
|
|
132
|
+
)
|
|
133
|
+
data: Optional[GeminiComputerUseTaskData] = Field(default=None, alias="data")
|
|
134
|
+
error: Optional[str] = Field(default=None, alias="error")
|
|
135
|
+
live_url: Optional[str] = Field(default=None, alias="liveUrl")
|
|
@@ -126,6 +126,16 @@ class HyperAgentTaskData(BaseModel):
|
|
|
126
126
|
final_result: Optional[str] = Field(default=None, alias="finalResult")
|
|
127
127
|
|
|
128
128
|
|
|
129
|
+
class HyperAgentTaskMetadata(BaseModel):
|
|
130
|
+
model_config = ConfigDict(
|
|
131
|
+
populate_by_alias=True,
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
num_task_steps_completed: Optional[int] = Field(
|
|
135
|
+
default=None, alias="numTaskStepsCompleted"
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
129
139
|
class HyperAgentTaskResponse(BaseModel):
|
|
130
140
|
"""
|
|
131
141
|
Response from a HyperAgent task.
|
|
@@ -137,6 +147,7 @@ class HyperAgentTaskResponse(BaseModel):
|
|
|
137
147
|
|
|
138
148
|
job_id: str = Field(alias="jobId")
|
|
139
149
|
status: HyperAgentTaskStatus
|
|
150
|
+
metadata: Optional[HyperAgentTaskMetadata] = Field(default=None, alias="metadata")
|
|
140
151
|
data: Optional[HyperAgentTaskData] = Field(default=None, alias="data")
|
|
141
152
|
error: Optional[str] = Field(default=None, alias="error")
|
|
142
153
|
live_url: Optional[str] = Field(default=None, alias="liveUrl")
|
|
@@ -8,11 +8,20 @@ class ComputerAction(str, Enum):
|
|
|
8
8
|
|
|
9
9
|
CLICK = "click"
|
|
10
10
|
DRAG = "drag"
|
|
11
|
-
|
|
11
|
+
HOLD_KEY = "hold_key"
|
|
12
|
+
MOUSE_DOWN = "mouse_down"
|
|
13
|
+
MOUSE_UP = "mouse_up"
|
|
12
14
|
MOVE_MOUSE = "move_mouse"
|
|
15
|
+
PRESS_KEYS = "press_keys"
|
|
13
16
|
SCREENSHOT = "screenshot"
|
|
14
17
|
SCROLL = "scroll"
|
|
15
18
|
TYPE_TEXT = "type_text"
|
|
19
|
+
GET_CLIPBOARD_TEXT = "get_clipboard_text"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
ComputerActionMouseButton = Literal[
|
|
23
|
+
"left", "right", "middle", "back", "forward", "wheel"
|
|
24
|
+
]
|
|
16
25
|
|
|
17
26
|
|
|
18
27
|
class Coordinate(BaseModel):
|
|
@@ -28,11 +37,9 @@ class ClickActionParams(BaseModel):
|
|
|
28
37
|
model_config = ConfigDict(use_enum_values=True)
|
|
29
38
|
|
|
30
39
|
action: Literal[ComputerAction.CLICK] = ComputerAction.CLICK
|
|
31
|
-
x: int
|
|
32
|
-
y: int
|
|
33
|
-
button:
|
|
34
|
-
default="left"
|
|
35
|
-
)
|
|
40
|
+
x: Optional[int] = Field(default=None)
|
|
41
|
+
y: Optional[int] = Field(default=None)
|
|
42
|
+
button: ComputerActionMouseButton = Field(default="left")
|
|
36
43
|
num_clicks: int = Field(serialization_alias="numClicks", default=1)
|
|
37
44
|
return_screenshot: bool = Field(
|
|
38
45
|
serialization_alias="returnScreenshot", default=False
|
|
@@ -63,6 +70,43 @@ class PressKeysActionParams(BaseModel):
|
|
|
63
70
|
)
|
|
64
71
|
|
|
65
72
|
|
|
73
|
+
class HoldKeyActionParams(BaseModel):
|
|
74
|
+
"""Parameters for hold key action."""
|
|
75
|
+
|
|
76
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
77
|
+
|
|
78
|
+
action: Literal[ComputerAction.HOLD_KEY] = ComputerAction.HOLD_KEY
|
|
79
|
+
key: str
|
|
80
|
+
duration: int
|
|
81
|
+
return_screenshot: bool = Field(
|
|
82
|
+
serialization_alias="returnScreenshot", default=False
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class MouseDownActionParams(BaseModel):
|
|
87
|
+
"""Parameters for mouse down action."""
|
|
88
|
+
|
|
89
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
90
|
+
|
|
91
|
+
action: Literal[ComputerAction.MOUSE_DOWN] = ComputerAction.MOUSE_DOWN
|
|
92
|
+
button: ComputerActionMouseButton = Field(default="left")
|
|
93
|
+
return_screenshot: bool = Field(
|
|
94
|
+
serialization_alias="returnScreenshot", default=False
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class MouseUpActionParams(BaseModel):
|
|
99
|
+
"""Parameters for mouse up action."""
|
|
100
|
+
|
|
101
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
102
|
+
|
|
103
|
+
action: Literal[ComputerAction.MOUSE_UP] = ComputerAction.MOUSE_UP
|
|
104
|
+
button: ComputerActionMouseButton = Field(default="left")
|
|
105
|
+
return_screenshot: bool = Field(
|
|
106
|
+
serialization_alias="returnScreenshot", default=False
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
|
|
66
110
|
class MoveMouseActionParams(BaseModel):
|
|
67
111
|
"""Parameters for move mouse action."""
|
|
68
112
|
|
|
@@ -111,6 +155,19 @@ class TypeTextActionParams(BaseModel):
|
|
|
111
155
|
)
|
|
112
156
|
|
|
113
157
|
|
|
158
|
+
class GetClipboardTextActionParams(BaseModel):
|
|
159
|
+
"""Parameters for get clipboard text action."""
|
|
160
|
+
|
|
161
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
162
|
+
|
|
163
|
+
action: Literal[ComputerAction.GET_CLIPBOARD_TEXT] = (
|
|
164
|
+
ComputerAction.GET_CLIPBOARD_TEXT
|
|
165
|
+
)
|
|
166
|
+
return_screenshot: bool = Field(
|
|
167
|
+
serialization_alias="returnScreenshot", default=False
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
|
|
114
171
|
ComputerActionParams = Union[
|
|
115
172
|
ClickActionParams,
|
|
116
173
|
DragActionParams,
|
|
@@ -119,9 +176,24 @@ ComputerActionParams = Union[
|
|
|
119
176
|
ScreenshotActionParams,
|
|
120
177
|
ScrollActionParams,
|
|
121
178
|
TypeTextActionParams,
|
|
179
|
+
HoldKeyActionParams,
|
|
180
|
+
MouseDownActionParams,
|
|
181
|
+
MouseUpActionParams,
|
|
182
|
+
GetClipboardTextActionParams,
|
|
122
183
|
]
|
|
123
184
|
|
|
124
185
|
|
|
186
|
+
class ComputerActionResponseDataClipboardText(BaseModel):
|
|
187
|
+
"""Data for get clipboard text action."""
|
|
188
|
+
|
|
189
|
+
model_config = ConfigDict(populate_by_alias=True)
|
|
190
|
+
|
|
191
|
+
clipboard_text: Optional[str] = Field(default=None, alias="clipboardText")
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
ComputerActionResponseData = Union[ComputerActionResponseDataClipboardText]
|
|
195
|
+
|
|
196
|
+
|
|
125
197
|
class ComputerActionResponse(BaseModel):
|
|
126
198
|
"""Response from computer action API."""
|
|
127
199
|
|
|
@@ -131,5 +203,6 @@ class ComputerActionResponse(BaseModel):
|
|
|
131
203
|
|
|
132
204
|
success: bool
|
|
133
205
|
screenshot: Optional[str] = None
|
|
206
|
+
data: Optional[ComputerActionResponseData] = None
|
|
134
207
|
error: Optional[str] = None
|
|
135
208
|
message: Optional[str] = None
|
hyperbrowser/models/consts.py
CHANGED
|
@@ -10,14 +10,22 @@ RecordingStatus = Literal[
|
|
|
10
10
|
DownloadsStatus = Literal[
|
|
11
11
|
"not_enabled", "pending", "in_progress", "completed", "failed"
|
|
12
12
|
]
|
|
13
|
+
SessionEventLogType = Literal[
|
|
14
|
+
"captcha_detected", "captcha_solved", "captcha_error", "file_downloaded"
|
|
15
|
+
]
|
|
13
16
|
|
|
14
17
|
POLLING_ATTEMPTS = 5
|
|
15
18
|
|
|
19
|
+
BrowserUseVersion = Literal["0.1.40", "0.7.10", "latest"]
|
|
20
|
+
|
|
16
21
|
BrowserUseLlm = Literal[
|
|
17
22
|
"gpt-4o",
|
|
18
23
|
"gpt-4o-mini",
|
|
19
24
|
"gpt-4.1",
|
|
20
25
|
"gpt-4.1-mini",
|
|
26
|
+
"gpt-5",
|
|
27
|
+
"gpt-5-mini",
|
|
28
|
+
"claude-sonnet-4-5",
|
|
21
29
|
"claude-sonnet-4-20250514",
|
|
22
30
|
"claude-3-7-sonnet-20250219",
|
|
23
31
|
"claude-3-5-sonnet-20241022",
|
|
@@ -33,8 +41,19 @@ HyperAgentLlm = Literal[
|
|
|
33
41
|
"gpt-4.1-nano",
|
|
34
42
|
]
|
|
35
43
|
ClaudeComputerUseLlm = Literal[
|
|
36
|
-
"claude-
|
|
44
|
+
"claude-haiku-4-5-20251001",
|
|
45
|
+
"claude-sonnet-4-5",
|
|
37
46
|
"claude-sonnet-4-20250514",
|
|
47
|
+
"claude-3-7-sonnet-20250219",
|
|
48
|
+
]
|
|
49
|
+
GeminiComputerUseLlm = Literal["gemini-2.5-computer-use-preview-10-2025",]
|
|
50
|
+
SessionRegion = Literal[
|
|
51
|
+
"us-central",
|
|
52
|
+
"asia-south",
|
|
53
|
+
"us-dev",
|
|
54
|
+
"europe-west",
|
|
55
|
+
"us-west",
|
|
56
|
+
"us-east",
|
|
38
57
|
]
|
|
39
58
|
|
|
40
59
|
Country = Literal[
|
hyperbrowser/models/extract.py
CHANGED
|
@@ -55,6 +55,16 @@ class ExtractJobStatusResponse(BaseModel):
|
|
|
55
55
|
status: ExtractJobStatus
|
|
56
56
|
|
|
57
57
|
|
|
58
|
+
class ExtractJobMetadata(BaseModel):
|
|
59
|
+
model_config = ConfigDict(
|
|
60
|
+
populate_by_alias=True,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
input_tokens: Optional[int] = Field(default=None, alias="inputTokens")
|
|
64
|
+
output_tokens: Optional[int] = Field(default=None, alias="outputTokens")
|
|
65
|
+
num_pages_scraped: Optional[int] = Field(default=None, alias="numPagesScraped")
|
|
66
|
+
|
|
67
|
+
|
|
58
68
|
class ExtractJobResponse(BaseModel):
|
|
59
69
|
"""
|
|
60
70
|
Response from a extract job.
|
|
@@ -67,4 +77,5 @@ class ExtractJobResponse(BaseModel):
|
|
|
67
77
|
job_id: str = Field(alias="jobId")
|
|
68
78
|
status: ExtractJobStatus
|
|
69
79
|
error: Optional[str] = None
|
|
80
|
+
metadata: Optional[ExtractJobMetadata] = None
|
|
70
81
|
data: Optional[dict] = None
|
hyperbrowser/models/scrape.py
CHANGED
|
@@ -21,6 +21,25 @@ class ScreenshotOptions(BaseModel):
|
|
|
21
21
|
format: Optional[ScrapeScreenshotFormat] = Field(
|
|
22
22
|
default=None, serialization_alias="format"
|
|
23
23
|
)
|
|
24
|
+
crop_to_content: Optional[bool] = Field(
|
|
25
|
+
default=None, serialization_alias="cropToContent"
|
|
26
|
+
)
|
|
27
|
+
crop_to_content_max_height: Optional[int] = Field(
|
|
28
|
+
default=None, serialization_alias="cropToContentMaxHeight"
|
|
29
|
+
)
|
|
30
|
+
crop_to_content_min_height: Optional[int] = Field(
|
|
31
|
+
default=None, serialization_alias="cropToContentMinHeight"
|
|
32
|
+
)
|
|
33
|
+
wait_for: Optional[int] = Field(default=None, serialization_alias="waitFor")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class StorageStateOptions(BaseModel):
|
|
37
|
+
local_storage: Optional[dict[str, str]] = Field(
|
|
38
|
+
default=None, serialization_alias="localStorage"
|
|
39
|
+
)
|
|
40
|
+
session_storage: Optional[dict[str, str]] = Field(
|
|
41
|
+
default=None, serialization_alias="sessionStorage"
|
|
42
|
+
)
|
|
24
43
|
|
|
25
44
|
|
|
26
45
|
class ScrapeOptions(BaseModel):
|
|
@@ -46,6 +65,9 @@ class ScrapeOptions(BaseModel):
|
|
|
46
65
|
screenshot_options: Optional[ScreenshotOptions] = Field(
|
|
47
66
|
default=None, serialization_alias="screenshotOptions"
|
|
48
67
|
)
|
|
68
|
+
storage_state: Optional[StorageStateOptions] = Field(
|
|
69
|
+
default=None, serialization_alias="storageState"
|
|
70
|
+
)
|
|
49
71
|
|
|
50
72
|
|
|
51
73
|
class StartScrapeJobParams(BaseModel):
|