1
+ import logging
2
+ import os
3
+ import time
1
4
from abc import ABC , abstractmethod
2
- from typing import Any , Callable , Dict , Optional , Union
3
- from playwright .async_api import Page
5
+ from typing import Any , Callable , Optional
4
6
5
7
from .config import StagehandConfig
6
8
from .page import StagehandPage
7
9
from .utils import default_log_handler
8
- import os
9
- import time
10
- import logging
11
10
12
11
logger = logging .getLogger (__name__ )
13
12
@@ -17,6 +16,7 @@ class StagehandBase(ABC):
17
16
Base class for Stagehand client implementations.
18
17
Defines the common interface and functionality for both sync and async versions.
19
18
"""
19
+
20
20
def __init__ (
21
21
self ,
22
22
config : Optional [StagehandConfig ] = None ,
@@ -25,30 +25,46 @@ def __init__(
25
25
browserbase_api_key : Optional [str ] = None ,
26
26
browserbase_project_id : Optional [str ] = None ,
27
27
model_api_key : Optional [str ] = None ,
28
- on_log : Optional [Callable [[Dict [str , Any ]], Any ]] = default_log_handler ,
28
+ on_log : Optional [Callable [[dict [str , Any ]], Any ]] = default_log_handler ,
29
29
verbose : int = 1 ,
30
30
model_name : Optional [str ] = None ,
31
31
dom_settle_timeout_ms : Optional [int ] = None ,
32
32
debug_dom : Optional [bool ] = None ,
33
33
timeout_settings : Optional [float ] = None ,
34
34
stream_response : Optional [bool ] = None ,
35
- model_client_options : Optional [Dict [str , Any ]] = None ,
35
+ model_client_options : Optional [dict [str , Any ]] = None ,
36
36
):
37
37
"""
38
38
Initialize the Stagehand client with common configuration.
39
39
"""
40
40
self .server_url = server_url or os .getenv ("STAGEHAND_SERVER_URL" )
41
41
42
42
if config :
43
- self .browserbase_api_key = config .api_key or browserbase_api_key or os .getenv ("BROWSERBASE_API_KEY" )
44
- self .browserbase_project_id = config .project_id or browserbase_project_id or os .getenv ("BROWSERBASE_PROJECT_ID" )
43
+ self .browserbase_api_key = (
44
+ config .api_key
45
+ or browserbase_api_key
46
+ or os .getenv ("BROWSERBASE_API_KEY" )
47
+ )
48
+ self .browserbase_project_id = (
49
+ config .project_id
50
+ or browserbase_project_id
51
+ or os .getenv ("BROWSERBASE_PROJECT_ID" )
52
+ )
45
53
self .session_id = config .browserbase_session_id or session_id
46
54
self .model_name = config .model_name or model_name
47
- self .dom_settle_timeout_ms = config .dom_settle_timeout_ms or dom_settle_timeout_ms
48
- self .debug_dom = config .debug_dom if config .debug_dom is not None else debug_dom
55
+ self .dom_settle_timeout_ms = (
56
+ config .dom_settle_timeout_ms or dom_settle_timeout_ms
57
+ )
58
+ self .debug_dom = (
59
+ config .debug_dom if config .debug_dom is not None else debug_dom
60
+ )
49
61
else :
50
- self .browserbase_api_key = browserbase_api_key or os .getenv ("BROWSERBASE_API_KEY" )
51
- self .browserbase_project_id = browserbase_project_id or os .getenv ("BROWSERBASE_PROJECT_ID" )
62
+ self .browserbase_api_key = browserbase_api_key or os .getenv (
63
+ "BROWSERBASE_API_KEY"
64
+ )
65
+ self .browserbase_project_id = browserbase_project_id or os .getenv (
66
+ "BROWSERBASE_PROJECT_ID"
67
+ )
52
68
self .session_id = session_id
53
69
self .model_name = model_name
54
70
self .dom_settle_timeout_ms = dom_settle_timeout_ms
@@ -61,7 +77,9 @@ def __init__(
61
77
self .model_client_options ["apiKey" ] = self .model_api_key
62
78
63
79
# Handle streaming response setting directly
64
- self .streamed_response = stream_response if stream_response is not None else True
80
+ self .streamed_response = (
81
+ stream_response if stream_response is not None else True
82
+ )
65
83
66
84
self .on_log = on_log
67
85
self .verbose = verbose
@@ -74,9 +92,13 @@ def __init__(
74
92
# Validate essential fields if session_id was provided
75
93
if self .session_id :
76
94
if not self .browserbase_api_key :
77
- raise ValueError ("browserbase_api_key is required (or set BROWSERBASE_API_KEY in env)." )
95
+ raise ValueError (
96
+ "browserbase_api_key is required (or set BROWSERBASE_API_KEY in env)."
97
+ )
78
98
if not self .browserbase_project_id :
79
- raise ValueError ("browserbase_project_id is required (or set BROWSERBASE_PROJECT_ID in env)." )
99
+ raise ValueError (
100
+ "browserbase_project_id is required (or set BROWSERBASE_PROJECT_ID in env)."
101
+ )
80
102
81
103
@abstractmethod
82
104
def init (self ):
@@ -106,4 +128,4 @@ def _log(self, message: str, level: int = 1):
106
128
elif level == 2 :
107
129
logger .warning (formatted_msg )
108
130
else :
109
- logger .debug (formatted_msg )
131
+ logger .debug (formatted_msg )
0 commit comments