langchain
langchain copied to clipboard
Playwright bug? ValueError: Synchronous browser not provided to navigate_browser
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)
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.
Node.js v18.15.0
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 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:
Hello @ryanshrott,
Try to run agent using
await agent_chain.arun
, notagent.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
Hello @ryanshrott, Try to run agent using
await agent_chain.arun
, notagent.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.
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!