CoolFace
Apppublic

aroniscunt/Browser_Web_UI_Automation

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
test_agents.py401 linesDownload Raw Back to tests
1import pdb
2
3from dotenv import load_dotenv
4
5load_dotenv()
6import sys
7
8sys.path.append(".")
9import asyncio
10import os
11import sys
12from pprint import pprint
13
14from browser_use import Agent
15from browser_use.agent.views import AgentHistoryList
16
17from src.utils import utils
18
19
20async def test_browser_use_agent():
21    from browser_use.browser.browser import Browser, BrowserConfig
22    from browser_use.browser.context import (
23        BrowserContextConfig
24    )
25    from browser_use.agent.service import Agent
26
27    from src.browser.custom_browser import CustomBrowser
28    from src.controller.custom_controller import CustomController
29    from src.utils import llm_provider
30    from src.agent.browser_use.browser_use_agent import BrowserUseAgent
31
32    llm = llm_provider.get_llm_model(
33        provider="openai",
34        model_name="gpt-4o",
35        temperature=0.8,
36    )
37
38    # llm = llm_provider.get_llm_model(
39    #     provider="google",
40    #     model_name="gemini-2.0-flash",
41    #     temperature=0.6,
42    #     api_key=os.getenv("GOOGLE_API_KEY", "")
43    # )
44
45    # llm = utils.get_llm_model(
46    #     provider="deepseek",
47    #     model_name="deepseek-reasoner",
48    #     temperature=0.8
49    # )
50
51    # llm = utils.get_llm_model(
52    #     provider="deepseek",
53    #     model_name="deepseek-chat",
54    #     temperature=0.8
55    # )
56
57    # llm = utils.get_llm_model(
58    #     provider="ollama", model_name="qwen2.5:7b", temperature=0.5
59    # )
60
61    # llm = utils.get_llm_model(
62    #     provider="ollama", model_name="deepseek-r1:14b", temperature=0.5
63    # )
64
65    window_w, window_h = 1280, 1100
66
67    # llm = llm_provider.get_llm_model(
68    #     provider="azure_openai",
69    #     model_name="gpt-4o",
70    #     temperature=0.5,
71    #     base_url=os.getenv("AZURE_OPENAI_ENDPOINT", ""),
72    #     api_key=os.getenv("AZURE_OPENAI_API_KEY", ""),
73    # )
74
75    mcp_server_config = {
76        "mcpServers": {
77            # "markitdown": {
78            #     "command": "docker",
79            #     "args": [
80            #         "run",
81            #         "--rm",
82            #         "-i",
83            #         "markitdown-mcp:latest"
84            #     ]
85            # },
86            "desktop-commander": {
87                "command": "npx",
88                "args": [
89                    "-y",
90                    "@wonderwhy-er/desktop-commander"
91                ]
92            },
93        }
94    }
95    controller = CustomController()
96    await controller.setup_mcp_client(mcp_server_config)
97    use_own_browser = True
98    use_vision = True  # Set to False when using DeepSeek
99
100    max_actions_per_step = 10
101    browser = None
102    browser_context = None
103
104    try:
105        extra_browser_args = []
106        if use_own_browser:
107            browser_binary_path = os.getenv("BROWSER_PATH", None)
108            if browser_binary_path == "":
109                browser_binary_path = None
110            browser_user_data = os.getenv("BROWSER_USER_DATA", None)
111            if browser_user_data:
112                extra_browser_args += [f"--user-data-dir={browser_user_data}"]
113        else:
114            browser_binary_path = None
115        browser = CustomBrowser(
116            config=BrowserConfig(
117                headless=False,
118                browser_binary_path=browser_binary_path,
119                extra_browser_args=extra_browser_args,
120                new_context_config=BrowserContextConfig(
121                    window_width=window_w,
122                    window_height=window_h,
123                )
124            )
125        )
126        browser_context = await browser.new_context(
127            config=BrowserContextConfig(
128                trace_path=None,
129                save_recording_path=None,
130                save_downloads_path="./tmp/downloads",
131                window_height=window_h,
132                window_width=window_w,
133            )
134        )
135        agent = BrowserUseAgent(
136            # task="download pdf from https://arxiv.org/pdf/2311.16498 and rename this pdf to 'mcp-test.pdf'",
137            task="give me nvidia stock price",
138            llm=llm,
139            browser=browser,
140            browser_context=browser_context,
141            controller=controller,
142            use_vision=use_vision,
143            max_actions_per_step=max_actions_per_step,
144            generate_gif=True
145        )
146        history: AgentHistoryList = await agent.run(max_steps=100)
147
148        print("Final Result:")
149        pprint(history.final_result(), indent=4)
150
151        print("\nErrors:")
152        pprint(history.errors(), indent=4)
153
154    except Exception:
155        import traceback
156        traceback.print_exc()
157    finally:
158        if browser_context:
159            await browser_context.close()
160        if browser:
161            await browser.close()
162        if controller:
163            await controller.close_mcp_client()
164
165
166async def test_browser_use_parallel():
167    from browser_use.browser.browser import Browser, BrowserConfig
168    from browser_use.browser.context import (
169        BrowserContextConfig,
170    )
171    from browser_use.agent.service import Agent
172
173    from src.browser.custom_browser import CustomBrowser
174    from src.controller.custom_controller import CustomController
175    from src.utils import llm_provider
176    from src.agent.browser_use.browser_use_agent import BrowserUseAgent
177
178    # llm = utils.get_llm_model(
179    #     provider="openai",
180    #     model_name="gpt-4o",
181    #     temperature=0.8,
182    #     base_url=os.getenv("OPENAI_ENDPOINT", ""),
183    #     api_key=os.getenv("OPENAI_API_KEY", ""),
184    # )
185
186    # llm = utils.get_llm_model(
187    #     provider="google",
188    #     model_name="gemini-2.0-flash",
189    #     temperature=0.6,
190    #     api_key=os.getenv("GOOGLE_API_KEY", "")
191    # )
192
193    # llm = utils.get_llm_model(
194    #     provider="deepseek",
195    #     model_name="deepseek-reasoner",
196    #     temperature=0.8
197    # )
198
199    # llm = utils.get_llm_model(
200    #     provider="deepseek",
201    #     model_name="deepseek-chat",
202    #     temperature=0.8
203    # )
204
205    # llm = utils.get_llm_model(
206    #     provider="ollama", model_name="qwen2.5:7b", temperature=0.5
207    # )
208
209    # llm = utils.get_llm_model(
210    #     provider="ollama", model_name="deepseek-r1:14b", temperature=0.5
211    # )
212
213    window_w, window_h = 1280, 1100
214
215    llm = llm_provider.get_llm_model(
216        provider="azure_openai",
217        model_name="gpt-4o",
218        temperature=0.5,
219        base_url=os.getenv("AZURE_OPENAI_ENDPOINT", ""),
220        api_key=os.getenv("AZURE_OPENAI_API_KEY", ""),
221    )
222
223    mcp_server_config = {
224        "mcpServers": {
225            # "markitdown": {
226            #     "command": "docker",
227            #     "args": [
228            #         "run",
229            #         "--rm",
230            #         "-i",
231            #         "markitdown-mcp:latest"
232            #     ]
233            # },
234            "desktop-commander": {
235                "command": "npx",
236                "args": [
237                    "-y",
238                    "@wonderwhy-er/desktop-commander"
239                ]
240            },
241            # "filesystem": {
242            #     "command": "npx",
243            #     "args": [
244            #         "-y",
245            #         "@modelcontextprotocol/server-filesystem",
246            #         "/Users/xxx/ai_workspace",
247            #     ]
248            # },
249        }
250    }
251    controller = CustomController()
252    await controller.setup_mcp_client(mcp_server_config)
253    use_own_browser = True
254    use_vision = True  # Set to False when using DeepSeek
255
256    max_actions_per_step = 10
257    browser = None
258    browser_context = None
259
260    try:
261        extra_browser_args = []
262        if use_own_browser:
263            browser_binary_path = os.getenv("BROWSER_PATH", None)
264            if browser_binary_path == "":
265                browser_binary_path = None
266            browser_user_data = os.getenv("BROWSER_USER_DATA", None)
267            if browser_user_data:
268                extra_browser_args += [f"--user-data-dir={browser_user_data}"]
269        else:
270            browser_binary_path = None
271        browser = CustomBrowser(
272            config=BrowserConfig(
273                headless=False,
274                browser_binary_path=browser_binary_path,
275                extra_browser_args=extra_browser_args,
276                new_context_config=BrowserContextConfig(
277                    window_width=window_w,
278                    window_height=window_h,
279                )
280            )
281        )
282        browser_context = await browser.new_context(
283            config=BrowserContextConfig(
284                trace_path=None,
285                save_recording_path=None,
286                save_downloads_path="./tmp/downloads",
287                window_height=window_h,
288                window_width=window_w,
289                force_new_context=True
290            )
291        )
292        agents = [
293            BrowserUseAgent(task=task, llm=llm, browser=browser, controller=controller)
294            for task in [
295                'Search Google for weather in Tokyo',
296                # 'Check Reddit front page title',
297                # 'Find NASA image of the day',
298                # 'Check top story on CNN',
299                # 'Search latest SpaceX launch date',
300                # 'Look up population of Paris',
301                'Find current time in Sydney',
302                'Check who won last Super Bowl',
303                # 'Search trending topics on Twitter',
304            ]
305        ]
306
307        history = await asyncio.gather(*[agent.run() for agent in agents])
308        print("Final Result:")
309        pprint(history.final_result(), indent=4)
310
311        print("\nErrors:")
312        pprint(history.errors(), indent=4)
313
314        pdb.set_trace()
315
316    except Exception:
317        import traceback
318
319        traceback.print_exc()
320    finally:
321        if browser_context:
322            await browser_context.close()
323        if browser:
324            await browser.close()
325        if controller:
326            await controller.close_mcp_client()
327
328
329async def test_deep_research_agent():
330    from src.agent.deep_research.deep_research_agent import DeepResearchAgent, PLAN_FILENAME, REPORT_FILENAME
331    from src.utils import llm_provider
332
333    llm = llm_provider.get_llm_model(
334        provider="openai",
335        model_name="gpt-4o",
336        temperature=0.5
337    )
338
339    # llm = llm_provider.get_llm_model(
340    #     provider="bedrock",
341    # )
342
343    mcp_server_config = {
344        "mcpServers": {
345            "desktop-commander": {
346                "command": "npx",
347                "args": [
348                    "-y",
349                    "@wonderwhy-er/desktop-commander"
350                ]
351            },
352        }
353    }
354
355    browser_config = {"headless": False, "window_width": 1280, "window_height": 1100, "use_own_browser": False}
356    agent = DeepResearchAgent(llm=llm, browser_config=browser_config, mcp_server_config=mcp_server_config)
357    research_topic = "Give me investment advices of nvidia and tesla."
358    task_id_to_resume = ""  # Set this to resume a previous task ID
359
360    print(f"Starting research on: {research_topic}")
361
362    try:
363        # Call run and wait for the final result dictionary
364        result = await agent.run(research_topic,
365                                 task_id=task_id_to_resume,
366                                 save_dir="./tmp/deep_research",
367                                 max_parallel_browsers=1,
368                                 )
369
370        print("\n--- Research Process Ended ---")
371        print(f"Status: {result.get('status')}")
372        print(f"Message: {result.get('message')}")
373        print(f"Task ID: {result.get('task_id')}")
374
375        # Check the final state for the report
376        final_state = result.get('final_state', {})
377        if final_state:
378            print("\n--- Final State Summary ---")
379            print(
380                f"  Plan Steps Completed: {sum(1 for item in final_state.get('research_plan', []) if item.get('status') == 'completed')}")
381            print(f"  Total Search Results Logged: {len(final_state.get('search_results', []))}")
382            if final_state.get("final_report"):
383                print("  Final Report: Generated (content omitted). You can find it in the output directory.")
384                # print("\n--- Final Report ---") # Optionally print report
385                # print(final_state["final_report"])
386            else:
387                print("  Final Report: Not generated.")
388        else:
389            print("Final state information not available.")
390
391
392    except Exception as e:
393        print(f"\n--- An unhandled error occurred outside the agent run ---")
394        print(e)
395
396
397if __name__ == "__main__":
398    asyncio.run(test_browser_use_agent())
399    # asyncio.run(test_browser_use_parallel())
400    # asyncio.run(test_deep_research_agent())
401