Skip to content

Commit f80c39f

Browse files
authored
chore: add log_dir for browser and terminal tool (#3102)
1 parent 9b60320 commit f80c39f

File tree

6 files changed

+30
-4
lines changed

6 files changed

+30
-4
lines changed

camel/toolkits/hybrid_browser_toolkit/config_loader.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class ToolkitConfig:
5454

5555
cache_dir: str = "tmp/"
5656
browser_log_to_file: bool = False
57+
log_dir: Optional[str] = None
5758
session_id: Optional[str] = None
5859
enabled_tools: Optional[list] = None
5960

@@ -147,6 +148,7 @@ def to_ws_config(self) -> Dict[str, Any]:
147148
"screenshotTimeout": self.browser_config.screenshot_timeout,
148149
"pageStabilityTimeout": self.browser_config.page_stability_timeout,
149150
"browser_log_to_file": self.toolkit_config.browser_log_to_file,
151+
"log_dir": self.toolkit_config.log_dir,
150152
"session_id": self.toolkit_config.session_id,
151153
"viewport_limit": self.browser_config.viewport_limit,
152154
"connectOverCdp": self.browser_config.connect_over_cdp,

camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ def __new__(
3838
cache_dir: str = "tmp/",
3939
enabled_tools: Optional[List[str]] = None,
4040
browser_log_to_file: bool = False,
41+
log_dir: Optional[str] = None,
4142
session_id: Optional[str] = None,
4243
default_start_url: str = "https://google.com/",
4344
default_timeout: Optional[int] = None,
@@ -73,6 +74,8 @@ def __new__(
7374
Defaults to None.
7475
browser_log_to_file (bool): Whether to log browser actions to
7576
file. Defaults to False.
77+
log_dir (Optional[str]): Custom directory path for log files.
78+
If None, defaults to "browser_log". Defaults to None.
7679
session_id (Optional[str]): Session identifier. Defaults to None.
7780
default_start_url (str): Default URL to start with. Defaults
7881
to "https://google.com/".
@@ -123,6 +126,7 @@ def __new__(
123126
cache_dir=cache_dir,
124127
enabled_tools=enabled_tools,
125128
browser_log_to_file=browser_log_to_file,
129+
log_dir=log_dir,
126130
session_id=session_id,
127131
default_start_url=default_start_url,
128132
default_timeout=default_timeout,
@@ -167,6 +171,7 @@ def __new__(
167171
cache_dir=cache_dir,
168172
enabled_tools=enabled_tools,
169173
browser_log_to_file=browser_log_to_file,
174+
log_dir=log_dir,
170175
session_id=session_id,
171176
default_start_url=default_start_url,
172177
default_timeout=default_timeout,

camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ def __init__(
8686
cache_dir: str = "tmp/",
8787
enabled_tools: Optional[List[str]] = None,
8888
browser_log_to_file: bool = False,
89+
log_dir: Optional[str] = None,
8990
session_id: Optional[str] = None,
9091
default_start_url: str = "https://google.com/",
9192
default_timeout: Optional[int] = None,
@@ -116,6 +117,8 @@ def __init__(
116117
Defaults to None.
117118
browser_log_to_file (bool): Whether to log browser actions to
118119
file. Defaults to False.
120+
log_dir (Optional[str]): Custom directory path for log files.
121+
If None, defaults to "browser_log". Defaults to None.
119122
session_id (Optional[str]): Session identifier. Defaults to None.
120123
default_start_url (str): Default URL to start with. Defaults
121124
to "https://google.com/".
@@ -167,6 +170,7 @@ def __init__(
167170
viewport_limit=viewport_limit,
168171
cache_dir=cache_dir,
169172
browser_log_to_file=browser_log_to_file,
173+
log_dir=log_dir,
170174
session_id=session_id,
171175
enabled_tools=enabled_tools,
172176
connect_over_cdp=connect_over_cdp,

camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ def __init__(self, config: Optional[Dict[str, Any]] = None):
122122
self.browser_log_to_file = (config or {}).get(
123123
'browser_log_to_file', False
124124
)
125+
self.log_dir = (config or {}).get('log_dir', 'browser_log')
125126
self.session_id = (config or {}).get('session_id', 'default')
126127
self.log_file_path: Optional[str] = None
127128
self.log_buffer: List[Dict[str, Any]] = []
@@ -131,7 +132,7 @@ def __init__(self, config: Optional[Dict[str, Any]] = None):
131132

132133
# Set up log files if needed
133134
if self.browser_log_to_file:
134-
log_dir = "browser_log"
135+
log_dir = self.log_dir if self.log_dir else "browser_log"
135136
os.makedirs(log_dir, exist_ok=True)
136137
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
137138
self.log_file_path = os.path.join(

camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ def __init__(
9595
cache_dir: str = "tmp/",
9696
enabled_tools: Optional[List[str]] = None,
9797
browser_log_to_file: bool = False,
98+
log_dir: Optional[str] = None,
9899
session_id: Optional[str] = None,
99100
default_start_url: str = "https://google.com/",
100101
default_timeout: Optional[int] = None,
@@ -144,6 +145,8 @@ def __init__(
144145
and page loading times.
145146
Logs are saved to an auto-generated timestamped file.
146147
Defaults to `False`.
148+
log_dir (Optional[str]): Custom directory path for log files.
149+
If None, defaults to "browser_log". Defaults to `None`.
147150
session_id (Optional[str]): A unique identifier for this browser
148151
session. When multiple HybridBrowserToolkit instances are
149152
used
@@ -201,6 +204,7 @@ def __init__(
201204
self._web_agent_model = web_agent_model
202205
self._cache_dir = cache_dir
203206
self._browser_log_to_file = browser_log_to_file
207+
self._log_dir = log_dir
204208
self._default_start_url = default_start_url
205209
self._session_id = session_id or "default"
206210
self._viewport_limit = viewport_limit
@@ -237,7 +241,7 @@ def __init__(
237241
# Set up log file if needed
238242
if self.log_to_file:
239243
# Create log directory if it doesn't exist
240-
log_dir = "browser_log"
244+
log_dir = self._log_dir if self._log_dir else "browser_log"
241245
os.makedirs(log_dir, exist_ok=True)
242246

243247
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")

camel/toolkits/terminal_toolkit.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ class TerminalToolkit(BaseToolkit):
6666
connecting them to the terminal's standard input. This is useful
6767
for commands that require user input, like `ssh`. Interactive mode
6868
is only supported on macOS and Linux. (default: :obj:`False`)
69+
log_dir (Optional[str]): Custom directory path for log files.
70+
If None, logs are saved to the current working directory.
71+
(default: :obj:`None`)
6972
7073
Note:
7174
Most functions are compatible with Unix-based systems (macOS, Linux).
@@ -83,6 +86,7 @@ def __init__(
8386
clone_current_env: bool = False,
8487
safe_mode: bool = True,
8588
interactive: bool = False,
89+
log_dir: Optional[str] = None,
8690
):
8791
# Store timeout before calling super().__init__
8892
self._timeout = timeout
@@ -99,6 +103,7 @@ def __init__(
99103
self.use_shell_mode = use_shell_mode
100104
self._human_takeover_active = False
101105
self.interactive = interactive
106+
self.log_dir = log_dir
102107

103108
self.python_executable = sys.executable
104109
self.is_macos = platform.system() == 'Darwin'
@@ -153,8 +158,13 @@ def _setup_file_output(self):
153158
r"""Set up file output to replace GUI, using a fixed file to simulate
154159
terminal.
155160
"""
156-
157-
self.log_file = os.path.join(os.getcwd(), "camel_terminal.txt")
161+
# Use custom log directory if provided, otherwise use current directory
162+
if self.log_dir:
163+
# Create the log directory if it doesn't exist
164+
os.makedirs(self.log_dir, exist_ok=True)
165+
self.log_file = os.path.join(self.log_dir, "camel_terminal.txt")
166+
else:
167+
self.log_file = os.path.join(os.getcwd(), "camel_terminal.txt")
158168

159169
# Inform the user
160170
logger.info(f"Terminal output will be redirected to: {self.log_file}")

0 commit comments

Comments
 (0)