hyperbrowser 0.44.0__py3-none-any.whl → 0.72.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.
Potentially problematic release.
This version of hyperbrowser might be problematic. Click here for more details.
- hyperbrowser/client/async_client.py +4 -0
- hyperbrowser/client/base.py +1 -1
- hyperbrowser/client/managers/async_manager/agents/__init__.py +2 -0
- hyperbrowser/client/managers/async_manager/agents/browser_use.py +8 -0
- hyperbrowser/client/managers/async_manager/agents/gemini_computer_use.py +71 -0
- hyperbrowser/client/managers/async_manager/computer_action.py +165 -0
- hyperbrowser/client/managers/async_manager/crawl.py +1 -0
- hyperbrowser/client/managers/async_manager/scrape.py +1 -0
- hyperbrowser/client/managers/async_manager/session.py +42 -1
- hyperbrowser/client/managers/async_manager/team.py +12 -0
- hyperbrowser/client/managers/sync_manager/agents/__init__.py +2 -0
- hyperbrowser/client/managers/sync_manager/agents/browser_use.py +8 -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 +165 -0
- hyperbrowser/client/managers/sync_manager/crawl.py +1 -0
- hyperbrowser/client/managers/sync_manager/scrape.py +1 -0
- hyperbrowser/client/managers/sync_manager/session.py +40 -1
- hyperbrowser/client/managers/sync_manager/team.py +12 -0
- hyperbrowser/client/sync.py +4 -0
- hyperbrowser/config.py +2 -2
- hyperbrowser/models/__init__.py +137 -0
- hyperbrowser/models/agents/browser_use.py +113 -3
- hyperbrowser/models/agents/claude_computer_use.py +38 -0
- hyperbrowser/models/agents/cua.py +32 -0
- hyperbrowser/models/agents/gemini_computer_use.py +135 -0
- hyperbrowser/models/agents/hyper_agent.py +31 -0
- hyperbrowser/models/computer_action.py +208 -0
- hyperbrowser/models/consts.py +27 -0
- hyperbrowser/models/extract.py +11 -0
- hyperbrowser/models/scrape.py +18 -0
- hyperbrowser/models/session.py +148 -11
- hyperbrowser/models/team.py +15 -0
- {hyperbrowser-0.44.0.dist-info → hyperbrowser-0.72.0.dist-info}/METADATA +8 -2
- hyperbrowser-0.72.0.dist-info/RECORD +60 -0
- {hyperbrowser-0.44.0.dist-info → hyperbrowser-0.72.0.dist-info}/WHEEL +1 -1
- {hyperbrowser-0.44.0.dist-info → hyperbrowser-0.72.0.dist-info/licenses}/LICENSE +1 -1
- hyperbrowser-0.44.0.dist-info/RECORD +0 -51
|
@@ -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")
|
|
@@ -8,6 +8,20 @@ from ..session import CreateSessionParams
|
|
|
8
8
|
HyperAgentTaskStatus = Literal["pending", "running", "completed", "failed", "stopped"]
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
class HyperAgentApiKeys(BaseModel):
|
|
12
|
+
"""
|
|
13
|
+
API keys for the HyperAgent task.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
model_config = ConfigDict(
|
|
17
|
+
populate_by_alias=True,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
openai: Optional[str] = Field(default=None, serialization_alias="openai")
|
|
21
|
+
anthropic: Optional[str] = Field(default=None, serialization_alias="anthropic")
|
|
22
|
+
google: Optional[str] = Field(default=None, serialization_alias="google")
|
|
23
|
+
|
|
24
|
+
|
|
11
25
|
class StartHyperAgentTaskParams(BaseModel):
|
|
12
26
|
"""
|
|
13
27
|
Parameters for creating a new HyperAgent task.
|
|
@@ -27,6 +41,12 @@ class StartHyperAgentTaskParams(BaseModel):
|
|
|
27
41
|
session_options: Optional[CreateSessionParams] = Field(
|
|
28
42
|
default=None, serialization_alias="sessionOptions"
|
|
29
43
|
)
|
|
44
|
+
use_custom_api_keys: Optional[bool] = Field(
|
|
45
|
+
default=None, serialization_alias="useCustomApiKeys"
|
|
46
|
+
)
|
|
47
|
+
api_keys: Optional[HyperAgentApiKeys] = Field(
|
|
48
|
+
default=None, serialization_alias="apiKeys"
|
|
49
|
+
)
|
|
30
50
|
|
|
31
51
|
|
|
32
52
|
class StartHyperAgentTaskResponse(BaseModel):
|
|
@@ -106,6 +126,16 @@ class HyperAgentTaskData(BaseModel):
|
|
|
106
126
|
final_result: Optional[str] = Field(default=None, alias="finalResult")
|
|
107
127
|
|
|
108
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
|
+
|
|
109
139
|
class HyperAgentTaskResponse(BaseModel):
|
|
110
140
|
"""
|
|
111
141
|
Response from a HyperAgent task.
|
|
@@ -117,6 +147,7 @@ class HyperAgentTaskResponse(BaseModel):
|
|
|
117
147
|
|
|
118
148
|
job_id: str = Field(alias="jobId")
|
|
119
149
|
status: HyperAgentTaskStatus
|
|
150
|
+
metadata: Optional[HyperAgentTaskMetadata] = Field(default=None, alias="metadata")
|
|
120
151
|
data: Optional[HyperAgentTaskData] = Field(default=None, alias="data")
|
|
121
152
|
error: Optional[str] = Field(default=None, alias="error")
|
|
122
153
|
live_url: Optional[str] = Field(default=None, alias="liveUrl")
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
from typing import List, Literal, Optional, Union
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ComputerAction(str, Enum):
|
|
7
|
+
"""Computer action types."""
|
|
8
|
+
|
|
9
|
+
CLICK = "click"
|
|
10
|
+
DRAG = "drag"
|
|
11
|
+
HOLD_KEY = "hold_key"
|
|
12
|
+
MOUSE_DOWN = "mouse_down"
|
|
13
|
+
MOUSE_UP = "mouse_up"
|
|
14
|
+
MOVE_MOUSE = "move_mouse"
|
|
15
|
+
PRESS_KEYS = "press_keys"
|
|
16
|
+
SCREENSHOT = "screenshot"
|
|
17
|
+
SCROLL = "scroll"
|
|
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
|
+
]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class Coordinate(BaseModel):
|
|
28
|
+
"""Coordinate model for drag actions."""
|
|
29
|
+
|
|
30
|
+
x: int
|
|
31
|
+
y: int
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ClickActionParams(BaseModel):
|
|
35
|
+
"""Parameters for click action."""
|
|
36
|
+
|
|
37
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
38
|
+
|
|
39
|
+
action: Literal[ComputerAction.CLICK] = ComputerAction.CLICK
|
|
40
|
+
x: Optional[int] = Field(default=None)
|
|
41
|
+
y: Optional[int] = Field(default=None)
|
|
42
|
+
button: ComputerActionMouseButton = Field(default="left")
|
|
43
|
+
num_clicks: int = Field(serialization_alias="numClicks", default=1)
|
|
44
|
+
return_screenshot: bool = Field(
|
|
45
|
+
serialization_alias="returnScreenshot", default=False
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class DragActionParams(BaseModel):
|
|
50
|
+
"""Parameters for drag action."""
|
|
51
|
+
|
|
52
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
53
|
+
|
|
54
|
+
action: Literal[ComputerAction.DRAG] = ComputerAction.DRAG
|
|
55
|
+
path: List[Coordinate]
|
|
56
|
+
return_screenshot: bool = Field(
|
|
57
|
+
serialization_alias="returnScreenshot", default=False
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class PressKeysActionParams(BaseModel):
|
|
62
|
+
"""Parameters for press keys action."""
|
|
63
|
+
|
|
64
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
65
|
+
|
|
66
|
+
action: Literal[ComputerAction.PRESS_KEYS] = ComputerAction.PRESS_KEYS
|
|
67
|
+
keys: List[str]
|
|
68
|
+
return_screenshot: bool = Field(
|
|
69
|
+
serialization_alias="returnScreenshot", default=False
|
|
70
|
+
)
|
|
71
|
+
|
|
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
|
+
|
|
110
|
+
class MoveMouseActionParams(BaseModel):
|
|
111
|
+
"""Parameters for move mouse action."""
|
|
112
|
+
|
|
113
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
114
|
+
|
|
115
|
+
action: Literal[ComputerAction.MOVE_MOUSE] = ComputerAction.MOVE_MOUSE
|
|
116
|
+
x: int = Field(ge=0)
|
|
117
|
+
y: int = Field(ge=0)
|
|
118
|
+
return_screenshot: bool = Field(
|
|
119
|
+
serialization_alias="returnScreenshot", default=False
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
class ScreenshotActionParams(BaseModel):
|
|
124
|
+
"""Parameters for screenshot action."""
|
|
125
|
+
|
|
126
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
127
|
+
|
|
128
|
+
action: Literal[ComputerAction.SCREENSHOT] = ComputerAction.SCREENSHOT
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class ScrollActionParams(BaseModel):
|
|
132
|
+
"""Parameters for scroll action."""
|
|
133
|
+
|
|
134
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
135
|
+
|
|
136
|
+
action: Literal[ComputerAction.SCROLL] = ComputerAction.SCROLL
|
|
137
|
+
x: int
|
|
138
|
+
y: int
|
|
139
|
+
scroll_x: int = Field(serialization_alias="scrollX")
|
|
140
|
+
scroll_y: int = Field(serialization_alias="scrollY")
|
|
141
|
+
return_screenshot: bool = Field(
|
|
142
|
+
serialization_alias="returnScreenshot", default=False
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
class TypeTextActionParams(BaseModel):
|
|
147
|
+
"""Parameters for type text action."""
|
|
148
|
+
|
|
149
|
+
model_config = ConfigDict(use_enum_values=True)
|
|
150
|
+
|
|
151
|
+
action: Literal[ComputerAction.TYPE_TEXT] = ComputerAction.TYPE_TEXT
|
|
152
|
+
text: str
|
|
153
|
+
return_screenshot: bool = Field(
|
|
154
|
+
serialization_alias="returnScreenshot", default=False
|
|
155
|
+
)
|
|
156
|
+
|
|
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
|
+
|
|
171
|
+
ComputerActionParams = Union[
|
|
172
|
+
ClickActionParams,
|
|
173
|
+
DragActionParams,
|
|
174
|
+
PressKeysActionParams,
|
|
175
|
+
MoveMouseActionParams,
|
|
176
|
+
ScreenshotActionParams,
|
|
177
|
+
ScrollActionParams,
|
|
178
|
+
TypeTextActionParams,
|
|
179
|
+
HoldKeyActionParams,
|
|
180
|
+
MouseDownActionParams,
|
|
181
|
+
MouseUpActionParams,
|
|
182
|
+
GetClipboardTextActionParams,
|
|
183
|
+
]
|
|
184
|
+
|
|
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
|
+
|
|
197
|
+
class ComputerActionResponse(BaseModel):
|
|
198
|
+
"""Response from computer action API."""
|
|
199
|
+
|
|
200
|
+
model_config = ConfigDict(
|
|
201
|
+
populate_by_alias=True,
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
success: bool
|
|
205
|
+
screenshot: Optional[str] = None
|
|
206
|
+
data: Optional[ComputerActionResponseData] = None
|
|
207
|
+
error: Optional[str] = None
|
|
208
|
+
message: Optional[str] = None
|
hyperbrowser/models/consts.py
CHANGED
|
@@ -10,16 +10,28 @@ 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",
|
|
24
|
+
"gpt-4.1",
|
|
25
|
+
"gpt-4.1-mini",
|
|
26
|
+
"gpt-5",
|
|
27
|
+
"gpt-5-mini",
|
|
28
|
+
"claude-sonnet-4-5",
|
|
29
|
+
"claude-sonnet-4-20250514",
|
|
19
30
|
"claude-3-7-sonnet-20250219",
|
|
20
31
|
"claude-3-5-sonnet-20241022",
|
|
21
32
|
"claude-3-5-haiku-20241022",
|
|
22
33
|
"gemini-2.0-flash",
|
|
34
|
+
"gemini-2.5-flash",
|
|
23
35
|
]
|
|
24
36
|
HyperAgentLlm = Literal[
|
|
25
37
|
"gpt-4o",
|
|
@@ -28,6 +40,21 @@ HyperAgentLlm = Literal[
|
|
|
28
40
|
"gpt-4.1-mini",
|
|
29
41
|
"gpt-4.1-nano",
|
|
30
42
|
]
|
|
43
|
+
ClaudeComputerUseLlm = Literal[
|
|
44
|
+
"claude-haiku-4-5-20251001",
|
|
45
|
+
"claude-sonnet-4-5",
|
|
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",
|
|
57
|
+
]
|
|
31
58
|
|
|
32
59
|
Country = Literal[
|
|
33
60
|
"AD",
|
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,21 @@ 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
|
+
|
|
31
|
+
|
|
32
|
+
class StorageStateOptions(BaseModel):
|
|
33
|
+
local_storage: Optional[dict[str, str]] = Field(
|
|
34
|
+
default=None, serialization_alias="localStorage"
|
|
35
|
+
)
|
|
36
|
+
session_storage: Optional[dict[str, str]] = Field(
|
|
37
|
+
default=None, serialization_alias="sessionStorage"
|
|
38
|
+
)
|
|
24
39
|
|
|
25
40
|
|
|
26
41
|
class ScrapeOptions(BaseModel):
|
|
@@ -46,6 +61,9 @@ class ScrapeOptions(BaseModel):
|
|
|
46
61
|
screenshot_options: Optional[ScreenshotOptions] = Field(
|
|
47
62
|
default=None, serialization_alias="screenshotOptions"
|
|
48
63
|
)
|
|
64
|
+
storage_state: Optional[StorageStateOptions] = Field(
|
|
65
|
+
default=None, serialization_alias="storageState"
|
|
66
|
+
)
|
|
49
67
|
|
|
50
68
|
|
|
51
69
|
class StartScrapeJobParams(BaseModel):
|