langchain icon indicating copy to clipboard operation
langchain copied to clipboard

Playwright bug? ValueError: Synchronous browser not provided to navigate_browser

Open ryanshrott opened this issue 1 year ago • 2 comments

Error I am getting:


> Entering new AgentExecutor chain...
I need to navigate to the TechCrunch website and search for an article about Clubhouse.
Action: navigate_browser
Action Input: https://techcrunch.com/Traceback (most recent call last):
  File "c:\Users\ryans\Documents\JobsGPT\test.py", line 45, in <module>
    out = agent.run("Is there an article about Clubhouse on https://techcrunch.com/? today")
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ryans\.conda\envs\jobsgpt\Lib\site-packages\langchain\chains\base.py", line 238, in run
    return self(args[0], callbacks=callbacks)[self.output_keys[0]]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ryans\.conda\envs\jobsgpt\Lib\site-packages\langchain\chains\base.py", line 142, in __call__
    raise e
  File "C:\Users\ryans\.conda\envs\jobsgpt\Lib\site-packages\langchain\chains\base.py", line 136, in __call__
    self._call(inputs, run_manager=run_manager)
  File "C:\Users\ryans\.conda\envs\jobsgpt\Lib\site-packages\langchain\agents\agent.py", line 855, in _call
    next_step_output = self._take_next_step(
                       ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ryans\.conda\envs\jobsgpt\Lib\site-packages\langchain\agents\agent.py", line 749, in _take_next_step
    observation = tool.run(
                  ^^^^^^^^^
  File "C:\Users\ryans\.conda\envs\jobsgpt\Lib\site-packages\langchain\tools\base.py", line 251, in run
    raise e
  File "C:\Users\ryans\.conda\envs\jobsgpt\Lib\site-packages\langchain\tools\base.py", line 245, in run
    self._run(*tool_args, run_manager=run_manager, **tool_kwargs)
  File "C:\Users\ryans\.conda\envs\jobsgpt\Lib\site-packages\langchain\tools\playwright\navigate.py", line 36, in _run
    raise ValueError(f"Synchronous browser not provided to {self.name}")
ValueError: Synchronous browser not provided to navigate_browser

Minimal example

from langchain.agents.agent_toolkits import PlayWrightBrowserToolkit
from langchain.chains.conversation.memory import ConversationBufferWindowMemory
from langchain.tools.playwright.utils import (
    create_async_playwright_browser,
    create_sync_playwright_browser,# A synchronous browser is available, though it isn't compatible with jupyter.
)
from langchain.chat_models import ChatOpenAI
import os
OPENAI_API_KEY="KEY"
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
async_browser = create_async_playwright_browser()
toolkit = PlayWrightBrowserToolkit.from_browser(async_browser=async_browser)

tools = toolkit.get_tools()

tools_by_name = {tool.name: tool for tool in tools}
navigate_tool = tools_by_name["navigate_browser"]
get_elements_tool = tools_by_name["get_elements"]

print(tools)

# conversational agent memory
memory = ConversationBufferWindowMemory(
    memory_key='chat_history',
    k=3,
    return_messages=True
)

from langchain.agents import initialize_agent
# Set up the turbo LLM
turbo_llm = ChatOpenAI(
    temperature=0,
    model_name='gpt-3.5-turbo'
)
from langchain.agents import AgentType

# create our agent
agent = initialize_agent(
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    tools=tools,
    llm=turbo_llm,
    verbose=True,
)

out = agent.run("Is there an article about Clubhouse on https://techcrunch.com/? today")

print(out)

ryanshrott avatar May 01 '23 18:05 ryanshrott

I tried changing from async to sync and it seemed to resolve this issue, but new error is occuring now.

sync_browser = create_sync_playwright_browser() toolkit = PlayWrightBrowserToolkit.from_browser(sync_browser=sync_browser)

ERROR:

Entering new AgentExecutor chain... I need to navigate to nhl.com and extract the current news stories Action: navigate_browser Action Input: "https://www.nhl.com/" Observation: Navigating to https://www.nhl.com/ returned status code 200 Thought:Traceback (most recent call last): File "c:\Users\ryans\Documents\JobsGPT\test.py", line 45, in out = agent.run("What are current news stories on nhl.com") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\langchain\chains\base.py", line 238, in run return self(args[0], callbacks=callbacks)[self.output_keys[0]] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\langchain\chains\base.py", line 142, in call raise e File "C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\langchain\chains\base.py", line 136, in call self._call(inputs, run_manager=run_manager) File "C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\langchain\agents\agent.py", line 855, in _call next_step_output = self._take_next_step( ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\langchain\agents\agent.py", line 723, in _take_next_step output = self.agent.plan( ^^^^^^^^^^^^^^^^ File "C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\langchain\agents\agent.py", line 424, in plan return self.output_parser.parse(full_output) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\langchain\agents\mrkl\output_parser.py", line 26, in parse raise OutputParserException(f"Could not parse LLM output: {text}") langchain.schema.OutputParserException: Could not parse LLM output: Now that I'm on the NHL homepage, I need to find the section with the current news stories Action: extract_text (jobsgpt) PS C:\Users\ryans\Documents\JobsGPT> node:events:491 throw er; // Unhandled 'error' event ^

Error: EPIPE: broken pipe, write at Socket._write (node:internal/net:61:25) at writeOrBuffer (node:internal/streams/writable:392:12) at _write (node:internal/streams/writable:333:10) at Writable.write (node:internal/streams/writable:337:10) at PipeTransport.send (C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\playwright\driver\package\lib\protocol\transport.js:51:21) at dispatcherConnection.onmessage (C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\playwright\driver\package\lib\cli\driver.js:51:57) at DispatcherConnection._sendMessageToClient (C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\playwright\driver\package\lib\server\dispatchers\dispatcher.js:188:10) at DispatcherConnection.sendEvent (C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\playwright\driver\package\lib\server\dispatchers\dispatcher.js:153:10) at FrameDispatcher._dispatchEvent (C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\playwright\driver\package\lib\server\dispatchers\dispatcher.js:88:22) at Frame. (C:\Users\ryans.conda\envs\jobsgpt\Lib\site-packages\playwright\driver\package\lib\server\dispatchers\frameDispatcher.js:51:12) Emitted 'error' event on Socket instance at: at emitErrorNT (node:internal/streams/destroy:151:8) at emitErrorCloseNT (node:internal/streams/destroy:116:3) at processTicksAndRejections (node:internal/process/task_queues:82:21) at runNextTicks (node:internal/process/task_queues:64:3) at listOnTimeout (node:internal/timers:538:9) at process.processTimers (node:internal/timers:512:7) { errno: -4047, syscall: 'write', code: 'EPIPE' }

Node.js v18.15.0

ryanshrott avatar May 01 '23 18:05 ryanshrott

Hello @ryanshrott,

Try to run agent using await agent_chain.arun, not agent.run: https://python.langchain.com/en/latest/modules/agents/toolkits/examples/playwright.html#:~:text=result%20%3D%20await%20agent_chain.arun(%22What%20are%20the%20headers%20on%20langchain.com%3F%22)%0Aprint(result)

labdmitriy avatar May 14 '23 16:05 labdmitriy

@labdmitriy I have a bug which I believe migh be related. On the structured chat agent tutorial, line async_browser = create_async_playwright_browser()

gives an error in Jupyter. I will however try running in regular Python next.

File ~\anaconda3\lib\asyncio\base_events.py:491, in BaseEventLoop._make_subprocess_transport(self, protocol, args, shell, stdin, stdout, stderr, bufsize, extra, **kwargs)
    487 async def _make_subprocess_transport(self, protocol, args, shell,
    488                                      stdin, stdout, stderr, bufsize,
    489                                      extra=None, **kwargs):
    490     """Create subprocess transport."""
--> 491     raise NotImplementedError

NotImplementedError: 

Badrul-Goomblepop avatar May 24 '23 08:05 Badrul-Goomblepop

Hello @ryanshrott,

Try to run agent using await agent_chain.arun, not agent.run: https://python.langchain.com/en/latest/modules/agents/toolkits/examples/playwright.html#:~:text=result%20%3D%20await%20agent_chain.arun(%22What%20are%20the%20headers%20on%20langchain.com%3F%22)%0Aprint(result)

when running the sample code, it shows,

result = await agent_chain.arun("What are the headers on langchain.com?")
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

SyntaxError: 'await' outside function

lelour avatar May 29 '23 07:05 lelour

Hello @ryanshrott, Try to run agent using await agent_chain.arun, not agent.run: https://python.langchain.com/en/latest/modules/agents/toolkits/examples/playwright.html#:~:text=result%20%3D%20await%20agent_chain.arun(%22What%20are%20the%20headers%20on%20langchain.com%3F%22)%0Aprint(result)

when running the sample code, it shows,

result = await agent_chain.arun("What are the headers on langchain.com?")
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

SyntaxError: 'await' outside function

Yes, you need to create async function wrapper to execute it in Python script, or run in Jupyter notebook directly.

labdmitriy avatar May 29 '23 13:05 labdmitriy

Hi, @ryanshrott. I'm Dosu, and I'm helping the LangChain team manage their backlog. I wanted to let you know that we are marking this issue as stale.

Based on my understanding, the issue you reported is a bug in Playwright where a ValueError is raised when trying to navigate to a website using Playwright in a synchronous manner. You mentioned that you tried changing from async to sync, but encountered a new error. Other users suggested using await agent_chain.arun instead of agent.run and running the code in an async function wrapper or in Jupyter notebook directly.

Before we close this issue, we wanted to check with you if it is still relevant to the latest version of the LangChain repository. If it is, please let us know by commenting on the issue. Otherwise, feel free to close the issue yourself or it will be automatically closed in 7 days.

Thank you for your contribution to the LangChain repository!

dosubot[bot] avatar Sep 16 '23 16:09 dosubot[bot]