{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from langchain.agents.agent_toolkits import PlayWrightBrowserToolkit\n", "from langchain.tools.playwright.utils import (\n", " create_async_playwright_browser,\n", " create_sync_playwright_browser,# A synchronous browser is available, though it isn't compatible with jupyter.\n", ")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# This import is required only for jupyter notebooks, since they have their own eventloop\n", "import nest_asyncio\n", "nest_asyncio.apply()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[ClickTool(name='click_element', description='Click on an element with the given CSS selector', args_schema=, return_direct=False, verbose=False, callbacks=None, callback_manager=None, sync_browser=None, async_browser= version=113.0.5672.53>),\n", " NavigateTool(name='navigate_browser', description='Navigate a browser to the specified URL', args_schema=, return_direct=False, verbose=False, callbacks=None, callback_manager=None, sync_browser=None, async_browser= version=113.0.5672.53>),\n", " NavigateBackTool(name='previous_webpage', description='Navigate back to the previous page in the browser history', args_schema=, return_direct=False, verbose=False, callbacks=None, callback_manager=None, sync_browser=None, async_browser= version=113.0.5672.53>),\n", " ExtractTextTool(name='extract_text', description='Extract all the text on the current webpage', args_schema=, return_direct=False, verbose=False, callbacks=None, callback_manager=None, sync_browser=None, async_browser= version=113.0.5672.53>),\n", " ExtractHyperlinksTool(name='extract_hyperlinks', description='Extract all hyperlinks on the current webpage', args_schema=, return_direct=False, verbose=False, callbacks=None, callback_manager=None, sync_browser=None, async_browser= version=113.0.5672.53>),\n", " GetElementsTool(name='get_elements', description='Retrieve elements in the current web page matching the given CSS selector', args_schema=, return_direct=False, verbose=False, callbacks=None, callback_manager=None, sync_browser=None, async_browser= version=113.0.5672.53>),\n", " CurrentWebPageTool(name='current_webpage', description='Returns the URL of the current page', args_schema=, return_direct=False, verbose=False, callbacks=None, callback_manager=None, sync_browser=None, async_browser= version=113.0.5672.53>)]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "async_browser = create_async_playwright_browser()\n", "toolkit = PlayWrightBrowserToolkit.from_browser(async_browser=async_browser)\n", "tools = toolkit.get_tools()\n", "tools" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from langchain.agents import initialize_agent, AgentType\n", "from langchain.chat_models import ChatOpenAI, ChatAnthropic\n", "from langchain.llms import OpenAI\n", "\n", "llm = ChatOpenAI(temperature=0) # or any other LLM, e.g., ChatOpenAI(), OpenAI()\n", "\n", "agent_chain = initialize_agent(tools, llm, agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Retrying langchain.chat_models.openai.acompletion_with_retry.._completion_with_retry in 1.0 seconds as it raised APIConnectionError: Error communicating with OpenAI.\n", "Retrying langchain.chat_models.openai.acompletion_with_retry.._completion_with_retry in 2.0 seconds as it raised APIConnectionError: Error communicating with OpenAI.\n", "Retrying langchain.chat_models.openai.acompletion_with_retry.._completion_with_retry in 4.0 seconds as it raised APIConnectionError: Error communicating with OpenAI.\n", "Retrying langchain.chat_models.openai.acompletion_with_retry.._completion_with_retry in 8.0 seconds as it raised APIConnectionError: Error communicating with OpenAI.\n", "Retrying langchain.chat_models.openai.acompletion_with_retry.._completion_with_retry in 16.0 seconds as it raised APIConnectionError: Error communicating with OpenAI.\n" ] }, { "ename": "APIConnectionError", "evalue": "Error communicating with OpenAI", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTimeoutError\u001b[0m Traceback (most recent call last)", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/aiohttp/connector.py:980\u001b[0m, in \u001b[0;36mTCPConnector._wrap_create_connection\u001b[0;34m(self, req, timeout, client_error, *args, **kwargs)\u001b[0m\n\u001b[1;32m 979\u001b[0m \u001b[39masync\u001b[39;00m \u001b[39mwith\u001b[39;00m ceil_timeout(timeout\u001b[39m.\u001b[39msock_connect):\n\u001b[0;32m--> 980\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_loop\u001b[39m.\u001b[39mcreate_connection(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs) \u001b[39m# type: ignore[return-value] # noqa\u001b[39;00m\n\u001b[1;32m 981\u001b[0m \u001b[39mexcept\u001b[39;00m cert_errors \u001b[39mas\u001b[39;00m exc:\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/asyncio/base_events.py:1076\u001b[0m, in \u001b[0;36mBaseEventLoop.create_connection\u001b[0;34m(self, protocol_factory, host, port, ssl, family, proto, flags, sock, local_addr, server_hostname, ssl_handshake_timeout, happy_eyeballs_delay, interleave)\u001b[0m\n\u001b[1;32m 1075\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mlen\u001b[39m(exceptions) \u001b[39m==\u001b[39m \u001b[39m1\u001b[39m:\n\u001b[0;32m-> 1076\u001b[0m \u001b[39mraise\u001b[39;00m exceptions[\u001b[39m0\u001b[39m]\n\u001b[1;32m 1077\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 1078\u001b[0m \u001b[39m# If they all have the same str(), raise one.\u001b[39;00m\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/asyncio/base_events.py:1060\u001b[0m, in \u001b[0;36mBaseEventLoop.create_connection\u001b[0;34m(self, protocol_factory, host, port, ssl, family, proto, flags, sock, local_addr, server_hostname, ssl_handshake_timeout, happy_eyeballs_delay, interleave)\u001b[0m\n\u001b[1;32m 1059\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m-> 1060\u001b[0m sock \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_connect_sock(\n\u001b[1;32m 1061\u001b[0m exceptions, addrinfo, laddr_infos)\n\u001b[1;32m 1062\u001b[0m \u001b[39mbreak\u001b[39;00m\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/asyncio/base_events.py:969\u001b[0m, in \u001b[0;36mBaseEventLoop._connect_sock\u001b[0;34m(self, exceptions, addr_info, local_addr_infos)\u001b[0m\n\u001b[1;32m 968\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mOSError\u001b[39;00m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mno matching local address with \u001b[39m\u001b[39m{\u001b[39;00mfamily\u001b[39m=}\u001b[39;00m\u001b[39m found\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 969\u001b[0m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39msock_connect(sock, address)\n\u001b[1;32m 970\u001b[0m \u001b[39mreturn\u001b[39;00m sock\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/asyncio/selector_events.py:501\u001b[0m, in \u001b[0;36mBaseSelectorEventLoop.sock_connect\u001b[0;34m(self, sock, address)\u001b[0m\n\u001b[1;32m 500\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 501\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mawait\u001b[39;00m fut\n\u001b[1;32m 502\u001b[0m \u001b[39mfinally\u001b[39;00m:\n\u001b[1;32m 503\u001b[0m \u001b[39m# Needed to break cycles when an exception occurs.\u001b[39;00m\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/asyncio/futures.py:285\u001b[0m, in \u001b[0;36mFuture.__await__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 284\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_asyncio_future_blocking \u001b[39m=\u001b[39m \u001b[39mTrue\u001b[39;00m\n\u001b[0;32m--> 285\u001b[0m \u001b[39myield\u001b[39;00m \u001b[39mself\u001b[39m \u001b[39m# This tells Task to wait for completion.\u001b[39;00m\n\u001b[1;32m 286\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdone():\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/asyncio/tasks.py:304\u001b[0m, in \u001b[0;36mTask.__wakeup\u001b[0;34m(self, future)\u001b[0m\n\u001b[1;32m 303\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 304\u001b[0m future\u001b[39m.\u001b[39;49mresult()\n\u001b[1;32m 305\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mBaseException\u001b[39;00m \u001b[39mas\u001b[39;00m exc:\n\u001b[1;32m 306\u001b[0m \u001b[39m# This may also be a cancellation.\u001b[39;00m\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/asyncio/futures.py:201\u001b[0m, in \u001b[0;36mFuture.result\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 200\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_exception \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m--> 201\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_exception\u001b[39m.\u001b[39mwith_traceback(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_exception_tb)\n\u001b[1;32m 202\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_result\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/asyncio/selector_events.py:541\u001b[0m, in \u001b[0;36mBaseSelectorEventLoop._sock_connect_cb\u001b[0;34m(self, fut, sock, address)\u001b[0m\n\u001b[1;32m 539\u001b[0m \u001b[39mif\u001b[39;00m err \u001b[39m!=\u001b[39m \u001b[39m0\u001b[39m:\n\u001b[1;32m 540\u001b[0m \u001b[39m# Jump to any except clause below.\u001b[39;00m\n\u001b[0;32m--> 541\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mOSError\u001b[39;00m(err, \u001b[39mf\u001b[39m\u001b[39m'\u001b[39m\u001b[39mConnect call failed \u001b[39m\u001b[39m{\u001b[39;00maddress\u001b[39m}\u001b[39;00m\u001b[39m'\u001b[39m)\n\u001b[1;32m 542\u001b[0m \u001b[39mexcept\u001b[39;00m (\u001b[39mBlockingIOError\u001b[39;00m, \u001b[39mInterruptedError\u001b[39;00m):\n\u001b[1;32m 543\u001b[0m \u001b[39m# socket is still registered, the callback will be retried later\u001b[39;00m\n", "\u001b[0;31mTimeoutError\u001b[0m: [Errno 60] Connect call failed ('108.160.166.42', 443)", "\nThe above exception was the direct cause of the following exception:\n", "\u001b[0;31mClientConnectorError\u001b[0m Traceback (most recent call last)", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/openai/api_requestor.py:588\u001b[0m, in \u001b[0;36mAPIRequestor.arequest_raw\u001b[0;34m(self, method, url, session, params, supplied_headers, files, request_id, request_timeout)\u001b[0m\n\u001b[1;32m 587\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 588\u001b[0m result \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m session\u001b[39m.\u001b[39mrequest(\u001b[39m*\u001b[39m\u001b[39m*\u001b[39mrequest_kwargs)\n\u001b[1;32m 589\u001b[0m util\u001b[39m.\u001b[39mlog_info(\n\u001b[1;32m 590\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mOpenAI API response\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 591\u001b[0m path\u001b[39m=\u001b[39mabs_url,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 594\u001b[0m request_id\u001b[39m=\u001b[39mresult\u001b[39m.\u001b[39mheaders\u001b[39m.\u001b[39mget(\u001b[39m\"\u001b[39m\u001b[39mX-Request-Id\u001b[39m\u001b[39m\"\u001b[39m),\n\u001b[1;32m 595\u001b[0m )\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/aiohttp/client.py:536\u001b[0m, in \u001b[0;36mClientSession._request\u001b[0;34m(self, method, str_or_url, params, data, json, cookies, headers, skip_auto_headers, auth, allow_redirects, max_redirects, compress, chunked, expect100, raise_for_status, read_until_eof, proxy, proxy_auth, timeout, verify_ssl, fingerprint, ssl_context, ssl, proxy_headers, trace_request_ctx, read_bufsize)\u001b[0m\n\u001b[1;32m 535\u001b[0m \u001b[39massert\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_connector \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m\n\u001b[0;32m--> 536\u001b[0m conn \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_connector\u001b[39m.\u001b[39mconnect(\n\u001b[1;32m 537\u001b[0m req, traces\u001b[39m=\u001b[39mtraces, timeout\u001b[39m=\u001b[39mreal_timeout\n\u001b[1;32m 538\u001b[0m )\n\u001b[1;32m 539\u001b[0m \u001b[39mexcept\u001b[39;00m asyncio\u001b[39m.\u001b[39mTimeoutError \u001b[39mas\u001b[39;00m exc:\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/aiohttp/connector.py:540\u001b[0m, in \u001b[0;36mBaseConnector.connect\u001b[0;34m(self, req, traces, timeout)\u001b[0m\n\u001b[1;32m 539\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 540\u001b[0m proto \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_connection(req, traces, timeout)\n\u001b[1;32m 541\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_closed:\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/aiohttp/connector.py:901\u001b[0m, in \u001b[0;36mTCPConnector._create_connection\u001b[0;34m(self, req, traces, timeout)\u001b[0m\n\u001b[1;32m 900\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 901\u001b[0m _, proto \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_direct_connection(req, traces, timeout)\n\u001b[1;32m 903\u001b[0m \u001b[39mreturn\u001b[39;00m proto\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/aiohttp/connector.py:1206\u001b[0m, in \u001b[0;36mTCPConnector._create_direct_connection\u001b[0;34m(self, req, traces, timeout, client_error)\u001b[0m\n\u001b[1;32m 1205\u001b[0m \u001b[39massert\u001b[39;00m last_exc \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m\n\u001b[0;32m-> 1206\u001b[0m \u001b[39mraise\u001b[39;00m last_exc\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/aiohttp/connector.py:1175\u001b[0m, in \u001b[0;36mTCPConnector._create_direct_connection\u001b[0;34m(self, req, traces, timeout, client_error)\u001b[0m\n\u001b[1;32m 1174\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m-> 1175\u001b[0m transp, proto \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_wrap_create_connection(\n\u001b[1;32m 1176\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_factory,\n\u001b[1;32m 1177\u001b[0m host,\n\u001b[1;32m 1178\u001b[0m port,\n\u001b[1;32m 1179\u001b[0m timeout\u001b[39m=\u001b[39mtimeout,\n\u001b[1;32m 1180\u001b[0m ssl\u001b[39m=\u001b[39msslcontext,\n\u001b[1;32m 1181\u001b[0m family\u001b[39m=\u001b[39mhinfo[\u001b[39m\"\u001b[39m\u001b[39mfamily\u001b[39m\u001b[39m\"\u001b[39m],\n\u001b[1;32m 1182\u001b[0m proto\u001b[39m=\u001b[39mhinfo[\u001b[39m\"\u001b[39m\u001b[39mproto\u001b[39m\u001b[39m\"\u001b[39m],\n\u001b[1;32m 1183\u001b[0m flags\u001b[39m=\u001b[39mhinfo[\u001b[39m\"\u001b[39m\u001b[39mflags\u001b[39m\u001b[39m\"\u001b[39m],\n\u001b[1;32m 1184\u001b[0m server_hostname\u001b[39m=\u001b[39mhinfo[\u001b[39m\"\u001b[39m\u001b[39mhostname\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39mif\u001b[39;00m sslcontext \u001b[39melse\u001b[39;00m \u001b[39mNone\u001b[39;00m,\n\u001b[1;32m 1185\u001b[0m local_addr\u001b[39m=\u001b[39m\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_local_addr,\n\u001b[1;32m 1186\u001b[0m req\u001b[39m=\u001b[39mreq,\n\u001b[1;32m 1187\u001b[0m client_error\u001b[39m=\u001b[39mclient_error,\n\u001b[1;32m 1188\u001b[0m )\n\u001b[1;32m 1189\u001b[0m \u001b[39mexcept\u001b[39;00m ClientConnectorError \u001b[39mas\u001b[39;00m exc:\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/aiohttp/connector.py:988\u001b[0m, in \u001b[0;36mTCPConnector._wrap_create_connection\u001b[0;34m(self, req, timeout, client_error, *args, **kwargs)\u001b[0m\n\u001b[1;32m 987\u001b[0m \u001b[39mraise\u001b[39;00m\n\u001b[0;32m--> 988\u001b[0m \u001b[39mraise\u001b[39;00m client_error(req\u001b[39m.\u001b[39mconnection_key, exc) \u001b[39mfrom\u001b[39;00m \u001b[39mexc\u001b[39;00m\n", "\u001b[0;31mClientConnectorError\u001b[0m: Cannot connect to host api.openai.com:443 ssl:default [Connect call failed ('108.160.166.42', 443)]", "\nThe above exception was the direct cause of the following exception:\n", "\u001b[0;31mAPIConnectionError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[5], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m result \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m agent_chain\u001b[39m.\u001b[39marun(\u001b[39m\"\u001b[39m\u001b[39mWhat are the headers on langchain.com?\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 2\u001b[0m \u001b[39mprint\u001b[39m(result)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chains/base.py:259\u001b[0m, in \u001b[0;36mChain.arun\u001b[0;34m(self, callbacks, *args, **kwargs)\u001b[0m\n\u001b[1;32m 257\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mlen\u001b[39m(args) \u001b[39m!=\u001b[39m \u001b[39m1\u001b[39m:\n\u001b[1;32m 258\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39m`run` supports only one positional argument.\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 259\u001b[0m \u001b[39mreturn\u001b[39;00m (\u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39macall(args[\u001b[39m0\u001b[39m], callbacks\u001b[39m=\u001b[39mcallbacks))[\u001b[39mself\u001b[39m\u001b[39m.\u001b[39moutput_keys[\u001b[39m0\u001b[39m]]\n\u001b[1;32m 261\u001b[0m \u001b[39mif\u001b[39;00m kwargs \u001b[39mand\u001b[39;00m \u001b[39mnot\u001b[39;00m args:\n\u001b[1;32m 262\u001b[0m \u001b[39mreturn\u001b[39;00m (\u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39macall(kwargs, callbacks\u001b[39m=\u001b[39mcallbacks))[\u001b[39mself\u001b[39m\u001b[39m.\u001b[39moutput_keys[\u001b[39m0\u001b[39m]]\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chains/base.py:180\u001b[0m, in \u001b[0;36mChain.acall\u001b[0;34m(self, inputs, return_only_outputs, callbacks)\u001b[0m\n\u001b[1;32m 178\u001b[0m \u001b[39mexcept\u001b[39;00m (\u001b[39mKeyboardInterrupt\u001b[39;00m, \u001b[39mException\u001b[39;00m) \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 179\u001b[0m \u001b[39mawait\u001b[39;00m run_manager\u001b[39m.\u001b[39mon_chain_error(e)\n\u001b[0;32m--> 180\u001b[0m \u001b[39mraise\u001b[39;00m e\n\u001b[1;32m 181\u001b[0m \u001b[39mawait\u001b[39;00m run_manager\u001b[39m.\u001b[39mon_chain_end(outputs)\n\u001b[1;32m 182\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mprep_outputs(inputs, outputs, return_only_outputs)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chains/base.py:174\u001b[0m, in \u001b[0;36mChain.acall\u001b[0;34m(self, inputs, return_only_outputs, callbacks)\u001b[0m\n\u001b[1;32m 168\u001b[0m run_manager \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m callback_manager\u001b[39m.\u001b[39mon_chain_start(\n\u001b[1;32m 169\u001b[0m {\u001b[39m\"\u001b[39m\u001b[39mname\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m\u001b[39m__class__\u001b[39m\u001b[39m.\u001b[39m\u001b[39m__name__\u001b[39m},\n\u001b[1;32m 170\u001b[0m inputs,\n\u001b[1;32m 171\u001b[0m )\n\u001b[1;32m 172\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 173\u001b[0m outputs \u001b[39m=\u001b[39m (\n\u001b[0;32m--> 174\u001b[0m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_acall(inputs, run_manager\u001b[39m=\u001b[39mrun_manager)\n\u001b[1;32m 175\u001b[0m \u001b[39mif\u001b[39;00m new_arg_supported\n\u001b[1;32m 176\u001b[0m \u001b[39melse\u001b[39;00m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_acall(inputs)\n\u001b[1;32m 177\u001b[0m )\n\u001b[1;32m 178\u001b[0m \u001b[39mexcept\u001b[39;00m (\u001b[39mKeyboardInterrupt\u001b[39;00m, \u001b[39mException\u001b[39;00m) \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 179\u001b[0m \u001b[39mawait\u001b[39;00m run_manager\u001b[39m.\u001b[39mon_chain_error(e)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/agents/agent.py:952\u001b[0m, in \u001b[0;36mAgentExecutor._acall\u001b[0;34m(self, inputs, run_manager)\u001b[0m\n\u001b[1;32m 950\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 951\u001b[0m \u001b[39mwhile\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_should_continue(iterations, time_elapsed):\n\u001b[0;32m--> 952\u001b[0m next_step_output \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_atake_next_step(\n\u001b[1;32m 953\u001b[0m name_to_tool_map,\n\u001b[1;32m 954\u001b[0m color_mapping,\n\u001b[1;32m 955\u001b[0m inputs,\n\u001b[1;32m 956\u001b[0m intermediate_steps,\n\u001b[1;32m 957\u001b[0m run_manager\u001b[39m=\u001b[39mrun_manager,\n\u001b[1;32m 958\u001b[0m )\n\u001b[1;32m 959\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(next_step_output, AgentFinish):\n\u001b[1;32m 960\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_areturn(next_step_output, intermediate_steps)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/agents/agent.py:823\u001b[0m, in \u001b[0;36mAgentExecutor._atake_next_step\u001b[0;34m(self, name_to_tool_map, color_mapping, inputs, intermediate_steps, run_manager)\u001b[0m\n\u001b[1;32m 821\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 822\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mhandle_parsing_errors:\n\u001b[0;32m--> 823\u001b[0m \u001b[39mraise\u001b[39;00m e\n\u001b[1;32m 824\u001b[0m text \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(e)\u001b[39m.\u001b[39msplit(\u001b[39m\"\u001b[39m\u001b[39m`\u001b[39m\u001b[39m\"\u001b[39m)[\u001b[39m1\u001b[39m]\n\u001b[1;32m 825\u001b[0m observation \u001b[39m=\u001b[39m \u001b[39m\"\u001b[39m\u001b[39mInvalid or incomplete response\u001b[39m\u001b[39m\"\u001b[39m\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/agents/agent.py:816\u001b[0m, in \u001b[0;36mAgentExecutor._atake_next_step\u001b[0;34m(self, name_to_tool_map, color_mapping, inputs, intermediate_steps, run_manager)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Take a single step in the thought-action-observation loop.\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \n\u001b[1;32m 812\u001b[0m \u001b[39mOverride this to take control of how the agent makes and acts on choices.\u001b[39;00m\n\u001b[1;32m 813\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 814\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 815\u001b[0m \u001b[39m# Call the LLM to see what to do.\u001b[39;00m\n\u001b[0;32m--> 816\u001b[0m output \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39magent\u001b[39m.\u001b[39maplan(\n\u001b[1;32m 817\u001b[0m intermediate_steps,\n\u001b[1;32m 818\u001b[0m callbacks\u001b[39m=\u001b[39mrun_manager\u001b[39m.\u001b[39mget_child() \u001b[39mif\u001b[39;00m run_manager \u001b[39melse\u001b[39;00m \u001b[39mNone\u001b[39;00m,\n\u001b[1;32m 819\u001b[0m \u001b[39m*\u001b[39m\u001b[39m*\u001b[39minputs,\n\u001b[1;32m 820\u001b[0m )\n\u001b[1;32m 821\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 822\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mhandle_parsing_errors:\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/agents/agent.py:446\u001b[0m, in \u001b[0;36mAgent.aplan\u001b[0;34m(self, intermediate_steps, callbacks, **kwargs)\u001b[0m\n\u001b[1;32m 434\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Given input, decided what to do.\u001b[39;00m\n\u001b[1;32m 435\u001b[0m \n\u001b[1;32m 436\u001b[0m \u001b[39mArgs:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 443\u001b[0m \u001b[39m Action specifying what tool to use.\u001b[39;00m\n\u001b[1;32m 444\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 445\u001b[0m full_inputs \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mget_full_inputs(intermediate_steps, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n\u001b[0;32m--> 446\u001b[0m full_output \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mllm_chain\u001b[39m.\u001b[39mapredict(callbacks\u001b[39m=\u001b[39mcallbacks, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mfull_inputs)\n\u001b[1;32m 447\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39moutput_parser\u001b[39m.\u001b[39mparse(full_output)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chains/llm.py:230\u001b[0m, in \u001b[0;36mLLMChain.apredict\u001b[0;34m(self, callbacks, **kwargs)\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[39masync\u001b[39;00m \u001b[39mdef\u001b[39;00m \u001b[39mapredict\u001b[39m(\u001b[39mself\u001b[39m, callbacks: Callbacks \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs: Any) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m \u001b[39mstr\u001b[39m:\n\u001b[1;32m 216\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"Format prompt with kwargs and pass to LLM.\u001b[39;00m\n\u001b[1;32m 217\u001b[0m \n\u001b[1;32m 218\u001b[0m \u001b[39m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[39m completion = llm.predict(adjective=\"funny\")\u001b[39;00m\n\u001b[1;32m 229\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 230\u001b[0m \u001b[39mreturn\u001b[39;00m (\u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39macall(kwargs, callbacks\u001b[39m=\u001b[39mcallbacks))[\u001b[39mself\u001b[39m\u001b[39m.\u001b[39moutput_key]\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chains/base.py:180\u001b[0m, in \u001b[0;36mChain.acall\u001b[0;34m(self, inputs, return_only_outputs, callbacks)\u001b[0m\n\u001b[1;32m 178\u001b[0m \u001b[39mexcept\u001b[39;00m (\u001b[39mKeyboardInterrupt\u001b[39;00m, \u001b[39mException\u001b[39;00m) \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 179\u001b[0m \u001b[39mawait\u001b[39;00m run_manager\u001b[39m.\u001b[39mon_chain_error(e)\n\u001b[0;32m--> 180\u001b[0m \u001b[39mraise\u001b[39;00m e\n\u001b[1;32m 181\u001b[0m \u001b[39mawait\u001b[39;00m run_manager\u001b[39m.\u001b[39mon_chain_end(outputs)\n\u001b[1;32m 182\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mprep_outputs(inputs, outputs, return_only_outputs)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chains/base.py:174\u001b[0m, in \u001b[0;36mChain.acall\u001b[0;34m(self, inputs, return_only_outputs, callbacks)\u001b[0m\n\u001b[1;32m 168\u001b[0m run_manager \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m callback_manager\u001b[39m.\u001b[39mon_chain_start(\n\u001b[1;32m 169\u001b[0m {\u001b[39m\"\u001b[39m\u001b[39mname\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m\u001b[39m__class__\u001b[39m\u001b[39m.\u001b[39m\u001b[39m__name__\u001b[39m},\n\u001b[1;32m 170\u001b[0m inputs,\n\u001b[1;32m 171\u001b[0m )\n\u001b[1;32m 172\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 173\u001b[0m outputs \u001b[39m=\u001b[39m (\n\u001b[0;32m--> 174\u001b[0m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_acall(inputs, run_manager\u001b[39m=\u001b[39mrun_manager)\n\u001b[1;32m 175\u001b[0m \u001b[39mif\u001b[39;00m new_arg_supported\n\u001b[1;32m 176\u001b[0m \u001b[39melse\u001b[39;00m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_acall(inputs)\n\u001b[1;32m 177\u001b[0m )\n\u001b[1;32m 178\u001b[0m \u001b[39mexcept\u001b[39;00m (\u001b[39mKeyboardInterrupt\u001b[39;00m, \u001b[39mException\u001b[39;00m) \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 179\u001b[0m \u001b[39mawait\u001b[39;00m run_manager\u001b[39m.\u001b[39mon_chain_error(e)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chains/llm.py:195\u001b[0m, in \u001b[0;36mLLMChain._acall\u001b[0;34m(self, inputs, run_manager)\u001b[0m\n\u001b[1;32m 190\u001b[0m \u001b[39masync\u001b[39;00m \u001b[39mdef\u001b[39;00m \u001b[39m_acall\u001b[39m(\n\u001b[1;32m 191\u001b[0m \u001b[39mself\u001b[39m,\n\u001b[1;32m 192\u001b[0m inputs: Dict[\u001b[39mstr\u001b[39m, Any],\n\u001b[1;32m 193\u001b[0m run_manager: Optional[AsyncCallbackManagerForChainRun] \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m,\n\u001b[1;32m 194\u001b[0m ) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m Dict[\u001b[39mstr\u001b[39m, \u001b[39mstr\u001b[39m]:\n\u001b[0;32m--> 195\u001b[0m response \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39magenerate([inputs], run_manager\u001b[39m=\u001b[39mrun_manager)\n\u001b[1;32m 196\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcreate_outputs(response)[\u001b[39m0\u001b[39m]\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chains/llm.py:90\u001b[0m, in \u001b[0;36mLLMChain.agenerate\u001b[0;34m(self, input_list, run_manager)\u001b[0m\n\u001b[1;32m 88\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Generate LLM result from inputs.\"\"\"\u001b[39;00m\n\u001b[1;32m 89\u001b[0m prompts, stop \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39maprep_prompts(input_list)\n\u001b[0;32m---> 90\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mllm\u001b[39m.\u001b[39magenerate_prompt(\n\u001b[1;32m 91\u001b[0m prompts, stop, callbacks\u001b[39m=\u001b[39mrun_manager\u001b[39m.\u001b[39mget_child() \u001b[39mif\u001b[39;00m run_manager \u001b[39melse\u001b[39;00m \u001b[39mNone\u001b[39;00m\n\u001b[1;32m 92\u001b[0m )\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chat_models/base.py:149\u001b[0m, in \u001b[0;36mBaseChatModel.agenerate_prompt\u001b[0;34m(self, prompts, stop, callbacks)\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[39masync\u001b[39;00m \u001b[39mdef\u001b[39;00m \u001b[39magenerate_prompt\u001b[39m(\n\u001b[1;32m 143\u001b[0m \u001b[39mself\u001b[39m,\n\u001b[1;32m 144\u001b[0m prompts: List[PromptValue],\n\u001b[1;32m 145\u001b[0m stop: Optional[List[\u001b[39mstr\u001b[39m]] \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m,\n\u001b[1;32m 146\u001b[0m callbacks: Callbacks \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m,\n\u001b[1;32m 147\u001b[0m ) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m LLMResult:\n\u001b[1;32m 148\u001b[0m prompt_messages \u001b[39m=\u001b[39m [p\u001b[39m.\u001b[39mto_messages() \u001b[39mfor\u001b[39;00m p \u001b[39min\u001b[39;00m prompts]\n\u001b[0;32m--> 149\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39magenerate(prompt_messages, stop\u001b[39m=\u001b[39mstop, callbacks\u001b[39m=\u001b[39mcallbacks)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chat_models/base.py:126\u001b[0m, in \u001b[0;36mBaseChatModel.agenerate\u001b[0;34m(self, messages, stop, callbacks)\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m (\u001b[39mKeyboardInterrupt\u001b[39;00m, \u001b[39mException\u001b[39;00m) \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 125\u001b[0m \u001b[39mawait\u001b[39;00m run_manager\u001b[39m.\u001b[39mon_llm_error(e)\n\u001b[0;32m--> 126\u001b[0m \u001b[39mraise\u001b[39;00m e\n\u001b[1;32m 127\u001b[0m llm_output \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_combine_llm_outputs([res\u001b[39m.\u001b[39mllm_output \u001b[39mfor\u001b[39;00m res \u001b[39min\u001b[39;00m results])\n\u001b[1;32m 128\u001b[0m generations \u001b[39m=\u001b[39m [res\u001b[39m.\u001b[39mgenerations \u001b[39mfor\u001b[39;00m res \u001b[39min\u001b[39;00m results]\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chat_models/base.py:116\u001b[0m, in \u001b[0;36mBaseChatModel.agenerate\u001b[0;34m(self, messages, stop, callbacks)\u001b[0m\n\u001b[1;32m 112\u001b[0m new_arg_supported \u001b[39m=\u001b[39m inspect\u001b[39m.\u001b[39msignature(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_agenerate)\u001b[39m.\u001b[39mparameters\u001b[39m.\u001b[39mget(\n\u001b[1;32m 113\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mrun_manager\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 114\u001b[0m )\n\u001b[1;32m 115\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 116\u001b[0m results \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m asyncio\u001b[39m.\u001b[39mgather(\n\u001b[1;32m 117\u001b[0m \u001b[39m*\u001b[39m[\n\u001b[1;32m 118\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_agenerate(m, stop\u001b[39m=\u001b[39mstop, run_manager\u001b[39m=\u001b[39mrun_manager)\n\u001b[1;32m 119\u001b[0m \u001b[39mif\u001b[39;00m new_arg_supported\n\u001b[1;32m 120\u001b[0m \u001b[39melse\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_agenerate(m, stop\u001b[39m=\u001b[39mstop)\n\u001b[1;32m 121\u001b[0m \u001b[39mfor\u001b[39;00m m \u001b[39min\u001b[39;00m messages\n\u001b[1;32m 122\u001b[0m ]\n\u001b[1;32m 123\u001b[0m )\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m (\u001b[39mKeyboardInterrupt\u001b[39;00m, \u001b[39mException\u001b[39;00m) \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 125\u001b[0m \u001b[39mawait\u001b[39;00m run_manager\u001b[39m.\u001b[39mon_llm_error(e)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/asyncio/tasks.py:304\u001b[0m, in \u001b[0;36mTask.__wakeup\u001b[0;34m(self, future)\u001b[0m\n\u001b[1;32m 302\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__wakeup\u001b[39m(\u001b[39mself\u001b[39m, future):\n\u001b[1;32m 303\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 304\u001b[0m future\u001b[39m.\u001b[39;49mresult()\n\u001b[1;32m 305\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mBaseException\u001b[39;00m \u001b[39mas\u001b[39;00m exc:\n\u001b[1;32m 306\u001b[0m \u001b[39m# This may also be a cancellation.\u001b[39;00m\n\u001b[1;32m 307\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__step(exc)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/asyncio/tasks.py:232\u001b[0m, in \u001b[0;36mTask.__step\u001b[0;34m(***failed resolving arguments***)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 229\u001b[0m \u001b[39mif\u001b[39;00m exc \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 230\u001b[0m \u001b[39m# We use the `send` method directly, because coroutines\u001b[39;00m\n\u001b[1;32m 231\u001b[0m \u001b[39m# don't have `__iter__` and `__next__` methods.\u001b[39;00m\n\u001b[0;32m--> 232\u001b[0m result \u001b[39m=\u001b[39m coro\u001b[39m.\u001b[39;49msend(\u001b[39mNone\u001b[39;49;00m)\n\u001b[1;32m 233\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 234\u001b[0m result \u001b[39m=\u001b[39m coro\u001b[39m.\u001b[39mthrow(exc)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chat_models/openai.py:318\u001b[0m, in \u001b[0;36mChatOpenAI._agenerate\u001b[0;34m(self, messages, stop, run_manager)\u001b[0m\n\u001b[1;32m 316\u001b[0m \u001b[39mreturn\u001b[39;00m ChatResult(generations\u001b[39m=\u001b[39m[ChatGeneration(message\u001b[39m=\u001b[39mmessage)])\n\u001b[1;32m 317\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 318\u001b[0m response \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m acompletion_with_retry(\n\u001b[1;32m 319\u001b[0m \u001b[39mself\u001b[39m, messages\u001b[39m=\u001b[39mmessage_dicts, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mparams\n\u001b[1;32m 320\u001b[0m )\n\u001b[1;32m 321\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_chat_result(response)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chat_models/openai.py:67\u001b[0m, in \u001b[0;36macompletion_with_retry\u001b[0;34m(llm, **kwargs)\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[39m@retry_decorator\u001b[39m\n\u001b[1;32m 63\u001b[0m \u001b[39masync\u001b[39;00m \u001b[39mdef\u001b[39;00m \u001b[39m_completion_with_retry\u001b[39m(\u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs: Any) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m Any:\n\u001b[1;32m 64\u001b[0m \u001b[39m# Use OpenAI's async api https://github.com/openai/openai-python#async-api\u001b[39;00m\n\u001b[1;32m 65\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mawait\u001b[39;00m llm\u001b[39m.\u001b[39mclient\u001b[39m.\u001b[39macreate(\u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n\u001b[0;32m---> 67\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mawait\u001b[39;00m _completion_with_retry(\u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/tenacity/_asyncio.py:88\u001b[0m, in \u001b[0;36mAsyncRetrying.wraps..async_wrapped\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[39m@functools\u001b[39m\u001b[39m.\u001b[39mwraps(fn)\n\u001b[1;32m 87\u001b[0m \u001b[39masync\u001b[39;00m \u001b[39mdef\u001b[39;00m \u001b[39masync_wrapped\u001b[39m(\u001b[39m*\u001b[39margs: t\u001b[39m.\u001b[39mAny, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs: t\u001b[39m.\u001b[39mAny) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m t\u001b[39m.\u001b[39mAny:\n\u001b[0;32m---> 88\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mawait\u001b[39;00m fn(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/tenacity/_asyncio.py:47\u001b[0m, in \u001b[0;36mAsyncRetrying.__call__\u001b[0;34m(self, fn, *args, **kwargs)\u001b[0m\n\u001b[1;32m 45\u001b[0m retry_state \u001b[39m=\u001b[39m RetryCallState(retry_object\u001b[39m=\u001b[39m\u001b[39mself\u001b[39m, fn\u001b[39m=\u001b[39mfn, args\u001b[39m=\u001b[39margs, kwargs\u001b[39m=\u001b[39mkwargs)\n\u001b[1;32m 46\u001b[0m \u001b[39mwhile\u001b[39;00m \u001b[39mTrue\u001b[39;00m:\n\u001b[0;32m---> 47\u001b[0m do \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49miter(retry_state\u001b[39m=\u001b[39;49mretry_state)\n\u001b[1;32m 48\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(do, DoAttempt):\n\u001b[1;32m 49\u001b[0m \u001b[39mtry\u001b[39;00m:\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/tenacity/__init__.py:325\u001b[0m, in \u001b[0;36mBaseRetrying.iter\u001b[0;34m(self, retry_state)\u001b[0m\n\u001b[1;32m 323\u001b[0m retry_exc \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mretry_error_cls(fut)\n\u001b[1;32m 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mreraise:\n\u001b[0;32m--> 325\u001b[0m \u001b[39mraise\u001b[39;00m retry_exc\u001b[39m.\u001b[39;49mreraise()\n\u001b[1;32m 326\u001b[0m \u001b[39mraise\u001b[39;00m retry_exc \u001b[39mfrom\u001b[39;00m \u001b[39mfut\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mexception\u001b[39;00m()\n\u001b[1;32m 328\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mwait:\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/tenacity/__init__.py:158\u001b[0m, in \u001b[0;36mRetryError.reraise\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 156\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mreraise\u001b[39m(\u001b[39mself\u001b[39m) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m t\u001b[39m.\u001b[39mNoReturn:\n\u001b[1;32m 157\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mlast_attempt\u001b[39m.\u001b[39mfailed:\n\u001b[0;32m--> 158\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mlast_attempt\u001b[39m.\u001b[39;49mresult()\n\u001b[1;32m 159\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mself\u001b[39m\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/concurrent/futures/_base.py:451\u001b[0m, in \u001b[0;36mFuture.result\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 449\u001b[0m \u001b[39mraise\u001b[39;00m CancelledError()\n\u001b[1;32m 450\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_state \u001b[39m==\u001b[39m FINISHED:\n\u001b[0;32m--> 451\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m__get_result()\n\u001b[1;32m 453\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_condition\u001b[39m.\u001b[39mwait(timeout)\n\u001b[1;32m 455\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_state \u001b[39min\u001b[39;00m [CANCELLED, CANCELLED_AND_NOTIFIED]:\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/concurrent/futures/_base.py:403\u001b[0m, in \u001b[0;36mFuture.__get_result\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 401\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_exception:\n\u001b[1;32m 402\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 403\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_exception\n\u001b[1;32m 404\u001b[0m \u001b[39mfinally\u001b[39;00m:\n\u001b[1;32m 405\u001b[0m \u001b[39m# Break a reference cycle with the exception in self._exception\u001b[39;00m\n\u001b[1;32m 406\u001b[0m \u001b[39mself\u001b[39m \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/tenacity/_asyncio.py:50\u001b[0m, in \u001b[0;36mAsyncRetrying.__call__\u001b[0;34m(self, fn, *args, **kwargs)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(do, DoAttempt):\n\u001b[1;32m 49\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 50\u001b[0m result \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m fn(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n\u001b[1;32m 51\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mBaseException\u001b[39;00m: \u001b[39m# noqa: B902\u001b[39;00m\n\u001b[1;32m 52\u001b[0m retry_state\u001b[39m.\u001b[39mset_exception(sys\u001b[39m.\u001b[39mexc_info()) \u001b[39m# type: ignore[arg-type]\u001b[39;00m\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/langchain/chat_models/openai.py:65\u001b[0m, in \u001b[0;36macompletion_with_retry.._completion_with_retry\u001b[0;34m(**kwargs)\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[39m@retry_decorator\u001b[39m\n\u001b[1;32m 63\u001b[0m \u001b[39masync\u001b[39;00m \u001b[39mdef\u001b[39;00m \u001b[39m_completion_with_retry\u001b[39m(\u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs: Any) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m Any:\n\u001b[1;32m 64\u001b[0m \u001b[39m# Use OpenAI's async api https://github.com/openai/openai-python#async-api\u001b[39;00m\n\u001b[0;32m---> 65\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mawait\u001b[39;00m llm\u001b[39m.\u001b[39mclient\u001b[39m.\u001b[39macreate(\u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/openai/api_resources/chat_completion.py:45\u001b[0m, in \u001b[0;36mChatCompletion.acreate\u001b[0;34m(cls, *args, **kwargs)\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[39mwhile\u001b[39;00m \u001b[39mTrue\u001b[39;00m:\n\u001b[1;32m 44\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 45\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mawait\u001b[39;00m \u001b[39msuper\u001b[39m()\u001b[39m.\u001b[39macreate(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n\u001b[1;32m 46\u001b[0m \u001b[39mexcept\u001b[39;00m TryAgain \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 47\u001b[0m \u001b[39mif\u001b[39;00m timeout \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mand\u001b[39;00m time\u001b[39m.\u001b[39mtime() \u001b[39m>\u001b[39m start \u001b[39m+\u001b[39m timeout:\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/openai/api_resources/abstract/engine_api_resource.py:217\u001b[0m, in \u001b[0;36mEngineAPIResource.acreate\u001b[0;34m(cls, api_key, api_base, api_type, request_id, api_version, organization, **params)\u001b[0m\n\u001b[1;32m 192\u001b[0m \u001b[39m@classmethod\u001b[39m\n\u001b[1;32m 193\u001b[0m \u001b[39masync\u001b[39;00m \u001b[39mdef\u001b[39;00m \u001b[39macreate\u001b[39m(\n\u001b[1;32m 194\u001b[0m \u001b[39mcls\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 201\u001b[0m \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mparams,\n\u001b[1;32m 202\u001b[0m ):\n\u001b[1;32m 203\u001b[0m (\n\u001b[1;32m 204\u001b[0m deployment_id,\n\u001b[1;32m 205\u001b[0m engine,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 215\u001b[0m api_key, api_base, api_type, api_version, organization, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mparams\n\u001b[1;32m 216\u001b[0m )\n\u001b[0;32m--> 217\u001b[0m response, _, api_key \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m requestor\u001b[39m.\u001b[39marequest(\n\u001b[1;32m 218\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mpost\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 219\u001b[0m url,\n\u001b[1;32m 220\u001b[0m params\u001b[39m=\u001b[39mparams,\n\u001b[1;32m 221\u001b[0m headers\u001b[39m=\u001b[39mheaders,\n\u001b[1;32m 222\u001b[0m stream\u001b[39m=\u001b[39mstream,\n\u001b[1;32m 223\u001b[0m request_id\u001b[39m=\u001b[39mrequest_id,\n\u001b[1;32m 224\u001b[0m request_timeout\u001b[39m=\u001b[39mrequest_timeout,\n\u001b[1;32m 225\u001b[0m )\n\u001b[1;32m 227\u001b[0m \u001b[39mif\u001b[39;00m stream:\n\u001b[1;32m 228\u001b[0m \u001b[39m# must be an iterator\u001b[39;00m\n\u001b[1;32m 229\u001b[0m \u001b[39massert\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39misinstance\u001b[39m(response, OpenAIResponse)\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/openai/api_requestor.py:300\u001b[0m, in \u001b[0;36mAPIRequestor.arequest\u001b[0;34m(self, method, url, params, headers, files, stream, request_id, request_timeout)\u001b[0m\n\u001b[1;32m 298\u001b[0m session \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m ctx\u001b[39m.\u001b[39m\u001b[39m__aenter__\u001b[39m()\n\u001b[1;32m 299\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 300\u001b[0m result \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39marequest_raw(\n\u001b[1;32m 301\u001b[0m method\u001b[39m.\u001b[39mlower(),\n\u001b[1;32m 302\u001b[0m url,\n\u001b[1;32m 303\u001b[0m session,\n\u001b[1;32m 304\u001b[0m params\u001b[39m=\u001b[39mparams,\n\u001b[1;32m 305\u001b[0m supplied_headers\u001b[39m=\u001b[39mheaders,\n\u001b[1;32m 306\u001b[0m files\u001b[39m=\u001b[39mfiles,\n\u001b[1;32m 307\u001b[0m request_id\u001b[39m=\u001b[39mrequest_id,\n\u001b[1;32m 308\u001b[0m request_timeout\u001b[39m=\u001b[39mrequest_timeout,\n\u001b[1;32m 309\u001b[0m )\n\u001b[1;32m 310\u001b[0m resp, got_stream \u001b[39m=\u001b[39m \u001b[39mawait\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_interpret_async_response(result, stream)\n\u001b[1;32m 311\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m:\n", "File \u001b[0;32m~/anaconda3/lib/python3.10/site-packages/openai/api_requestor.py:605\u001b[0m, in \u001b[0;36mAPIRequestor.arequest_raw\u001b[0;34m(self, method, url, session, params, supplied_headers, files, request_id, request_timeout)\u001b[0m\n\u001b[1;32m 603\u001b[0m \u001b[39mraise\u001b[39;00m error\u001b[39m.\u001b[39mTimeout(\u001b[39m\"\u001b[39m\u001b[39mRequest timed out\u001b[39m\u001b[39m\"\u001b[39m) \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 604\u001b[0m \u001b[39mexcept\u001b[39;00m aiohttp\u001b[39m.\u001b[39mClientError \u001b[39mas\u001b[39;00m e:\n\u001b[0;32m--> 605\u001b[0m \u001b[39mraise\u001b[39;00m error\u001b[39m.\u001b[39mAPIConnectionError(\u001b[39m\"\u001b[39m\u001b[39mError communicating with OpenAI\u001b[39m\u001b[39m\"\u001b[39m) \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n", "\u001b[0;31mAPIConnectionError\u001b[0m: Error communicating with OpenAI" ] } ], "source": [ "result = await agent_chain.arun(\"What are the headers on langchain.com?\")\n", "print(result)" ] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.10" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }