langchain-ai / langchain

🦜🔗 Build context-aware reasoning applications
https://python.langchain.com
MIT License
93.49k stars 15.06k forks source link

Playwright bug? ValueError: Synchronous browser not provided to navigate_browser #3903

Closed ryanshrott closed 1 year ago

ryanshrott commented 1 year ago

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 commented 1 year ago

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

labdmitriy commented 1 year ago

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)

Badrul-Goomblepop commented 1 year ago

@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: 
lelour commented 1 year ago

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

labdmitriy commented 1 year ago

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.

dosubot[bot] commented 1 year ago

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!