ruimartinscorrea commited on
Commit
40bed20
·
verified ·
1 Parent(s): 19647dc

Update src/controller/custom_controller.py

Browse files
Files changed (1) hide show
  1. src/controller/custom_controller.py +14 -3
src/controller/custom_controller.py CHANGED
@@ -1,16 +1,17 @@
1
  import pdb
 
2
  import pyperclip
3
  from typing import Optional, Type, Callable, Dict, Any, Union, Awaitable, TypeVar
4
  from pydantic import BaseModel
5
  from browser_use.agent.views import ActionResult
6
  from browser_use.browser.context import BrowserContext
7
- from browser_use.controller.service import Controller
8
  from browser_use.controller.registry.service import Registry, RegisteredAction
9
  from main_content_extractor import MainContentExtractor
10
  from browser_use.controller.views import (
11
  ClickElementAction,
12
  DoneAction,
13
- # ExtractPageContentAction was removed here
14
  GoToUrlAction,
15
  InputTextAction,
16
  OpenTabAction,
@@ -34,6 +35,7 @@ logger = logging.getLogger(__name__)
34
 
35
  Context = TypeVar('Context')
36
 
 
37
  class CustomController(Controller):
38
  def __init__(self, exclude_actions: list[str] = [],
39
  output_model: Optional[Type[BaseModel]] = None,
@@ -79,6 +81,7 @@ class CustomController(Controller):
79
  return ActionResult(error=f'File {path} does not exist')
80
 
81
  dom_el = await browser.get_dom_element_by_index(index)
 
82
  file_upload_dom_el = dom_el.get_file_upload_element()
83
 
84
  if file_upload_dom_el is None:
@@ -108,9 +111,11 @@ class CustomController(Controller):
108
  self,
109
  action: ActionModel,
110
  browser_context: Optional[BrowserContext] = None,
 
111
  page_extraction_llm: Optional[BaseChatModel] = None,
112
  sensitive_data: Optional[Dict[str, str]] = None,
113
  available_file_paths: Optional[list[str]] = None,
 
114
  context: Context | None = None,
115
  ) -> ActionResult:
116
  """Execute an action"""
@@ -119,6 +124,7 @@ class CustomController(Controller):
119
  for action_name, params in action.model_dump(exclude_unset=True).items():
120
  if params is not None:
121
  if action_name.startswith("mcp"):
 
122
  logger.debug(f"Invoke MCP tool: {action_name}")
123
  mcp_tool = self.registry.registry.actions.get(action_name).function
124
  result = await mcp_tool.ainvoke(params)
@@ -152,6 +158,9 @@ class CustomController(Controller):
152
  self.register_mcp_tools()
153
 
154
  def register_mcp_tools(self):
 
 
 
155
  if self.mcp_client:
156
  for server_name in self.mcp_client.server_name_to_tools:
157
  for tool in self.mcp_client.server_name_to_tools[server_name]:
@@ -163,9 +172,11 @@ class CustomController(Controller):
163
  param_model=create_tool_param_model(tool),
164
  )
165
  logger.info(f"Add mcp tool: {tool_name}")
 
 
166
  else:
167
  logger.warning(f"MCP client not started.")
168
 
169
  async def close_mcp_client(self):
170
  if self.mcp_client:
171
- await self.mcp_client.__aexit__(None, None, None)
 
1
  import pdb
2
+
3
  import pyperclip
4
  from typing import Optional, Type, Callable, Dict, Any, Union, Awaitable, TypeVar
5
  from pydantic import BaseModel
6
  from browser_use.agent.views import ActionResult
7
  from browser_use.browser.context import BrowserContext
8
+ from browser_use.controller.service import Controller, DoneAction
9
  from browser_use.controller.registry.service import Registry, RegisteredAction
10
  from main_content_extractor import MainContentExtractor
11
  from browser_use.controller.views import (
12
  ClickElementAction,
13
  DoneAction,
14
+ ExtractPageContentAction,
15
  GoToUrlAction,
16
  InputTextAction,
17
  OpenTabAction,
 
35
 
36
  Context = TypeVar('Context')
37
 
38
+
39
  class CustomController(Controller):
40
  def __init__(self, exclude_actions: list[str] = [],
41
  output_model: Optional[Type[BaseModel]] = None,
 
81
  return ActionResult(error=f'File {path} does not exist')
82
 
83
  dom_el = await browser.get_dom_element_by_index(index)
84
+
85
  file_upload_dom_el = dom_el.get_file_upload_element()
86
 
87
  if file_upload_dom_el is None:
 
111
  self,
112
  action: ActionModel,
113
  browser_context: Optional[BrowserContext] = None,
114
+ #
115
  page_extraction_llm: Optional[BaseChatModel] = None,
116
  sensitive_data: Optional[Dict[str, str]] = None,
117
  available_file_paths: Optional[list[str]] = None,
118
+ #
119
  context: Context | None = None,
120
  ) -> ActionResult:
121
  """Execute an action"""
 
124
  for action_name, params in action.model_dump(exclude_unset=True).items():
125
  if params is not None:
126
  if action_name.startswith("mcp"):
127
+ # this is a mcp tool
128
  logger.debug(f"Invoke MCP tool: {action_name}")
129
  mcp_tool = self.registry.registry.actions.get(action_name).function
130
  result = await mcp_tool.ainvoke(params)
 
158
  self.register_mcp_tools()
159
 
160
  def register_mcp_tools(self):
161
+ """
162
+ Register the MCP tools used by this controller.
163
+ """
164
  if self.mcp_client:
165
  for server_name in self.mcp_client.server_name_to_tools:
166
  for tool in self.mcp_client.server_name_to_tools[server_name]:
 
172
  param_model=create_tool_param_model(tool),
173
  )
174
  logger.info(f"Add mcp tool: {tool_name}")
175
+ logger.debug(
176
+ f"Registered {len(self.mcp_client.server_name_to_tools[server_name])} mcp tools for {server_name}")
177
  else:
178
  logger.warning(f"MCP client not started.")
179
 
180
  async def close_mcp_client(self):
181
  if self.mcp_client:
182
+ await self.mcp_client.__aexit__(None, None, None)