From 5ba897a802a9dc6121c166468bc4add380182464 Mon Sep 17 00:00:00 2001
From: Harrison Chase <hw.chase.17@gmail.com>
Date: Mon, 24 Oct 2022 21:22:55 -0700
Subject: [PATCH] add dependencies for easier install

---
 langchain/chains/natbot/crawler.py |  9 ++-------
 langchain/chains/serpapi.py        | 13 ++-----------
 langchain/llms/cohere.py           | 16 ++++------------
 langchain/llms/openai.py           | 12 ++----------
 requirements.txt                   |  3 ---
 setup.py                           |  8 +++++++-
 6 files changed, 17 insertions(+), 44 deletions(-)

diff --git a/langchain/chains/natbot/crawler.py b/langchain/chains/natbot/crawler.py
index 341b890b2fa..3ece86fd0f3 100644
--- a/langchain/chains/natbot/crawler.py
+++ b/langchain/chains/natbot/crawler.py
@@ -3,6 +3,8 @@
 import time
 from sys import platform
 
+from playwright.sync_api import sync_playwright
+
 black_listed_elements = {
     "html",
     "head",
@@ -21,13 +23,6 @@ black_listed_elements = {
 
 class Crawler:
     def __init__(self):
-        try:
-            from playwright.sync_api import sync_playwright
-        except ImportError:
-            raise ValueError(
-                "Could not import playwright python package. "
-                "Please it install it with `pip install playwright`."
-            )
         self.browser = (
             sync_playwright()
             .start()
diff --git a/langchain/chains/serpapi.py b/langchain/chains/serpapi.py
index ffa6062c98f..cb17aa4cbfc 100644
--- a/langchain/chains/serpapi.py
+++ b/langchain/chains/serpapi.py
@@ -7,6 +7,7 @@ import sys
 from typing import Any, Dict, List
 
 from pydantic import BaseModel, Extra, root_validator
+from serpapi import GoogleSearch
 
 from langchain.chains.base import Chain
 
@@ -38,7 +39,6 @@ class SerpAPIChain(Chain, BaseModel):
             serpapi = SerpAPIChain()
     """
 
-    search_engine: Any  #: :meta private:
     input_key: str = "search_query"  #: :meta private:
     output_key: str = "search_result"  #: :meta private:
 
@@ -71,15 +71,6 @@ class SerpAPIChain(Chain, BaseModel):
                 "Did not find SerpAPI API key, please add an environment variable"
                 " `SERPAPI_API_KEY` which contains it."
             )
-        try:
-            from serpapi import GoogleSearch
-
-            values["search_engine"] = GoogleSearch
-        except ImportError:
-            raise ValueError(
-                "Could not import serpapi python package. "
-                "Please it install it with `pip install google-search-results`."
-            )
         return values
 
     def _run(self, inputs: Dict[str, Any]) -> Dict[str, str]:
@@ -92,7 +83,7 @@ class SerpAPIChain(Chain, BaseModel):
             "hl": "en",
         }
         with HiddenPrints():
-            search = self.search_engine(params)
+            search = GoogleSearch(params)
             res = search.get_dict()
 
         if "answer_box" in res.keys() and "answer" in res["answer_box"].keys():
diff --git a/langchain/llms/cohere.py b/langchain/llms/cohere.py
index 340ae95595b..f0bd8336813 100644
--- a/langchain/llms/cohere.py
+++ b/langchain/llms/cohere.py
@@ -1,7 +1,8 @@
 """Wrapper around Cohere APIs."""
 import os
-from typing import Any, Dict, List, Optional
+from typing import Dict, List, Optional
 
+import cohere
 from pydantic import BaseModel, Extra, root_validator
 
 from langchain.llms.base import LLM
@@ -28,7 +29,6 @@ class Cohere(BaseModel, LLM):
             cohere = Cohere(model="gptd-instruct-tft")
     """
 
-    client: Any  #: :meta private:
     model: str = "gptd-instruct-tft"
     """Model name to use."""
 
@@ -63,15 +63,6 @@ class Cohere(BaseModel, LLM):
                 "Did not find Cohere API key, please add an environment variable"
                 " `COHERE_API_KEY` which contains it."
             )
-        try:
-            import cohere
-
-            values["client"] = cohere.Client(os.environ["COHERE_API_KEY"])
-        except ImportError:
-            raise ValueError(
-                "Could not import cohere python package. "
-                "Please it install it with `pip install cohere`."
-            )
         return values
 
     def __call__(self, prompt: str, stop: Optional[List[str]] = None) -> str:
@@ -89,7 +80,8 @@ class Cohere(BaseModel, LLM):
 
                 response = cohere("Tell me a joke.")
         """
-        response = self.client.generate(
+        client = cohere.Client(os.environ["COHERE_API_KEY"])
+        response = client.generate(
             model=self.model,
             prompt=prompt,
             max_tokens=self.max_tokens,
diff --git a/langchain/llms/openai.py b/langchain/llms/openai.py
index 4dc29d90c8c..a7151ee15c9 100644
--- a/langchain/llms/openai.py
+++ b/langchain/llms/openai.py
@@ -2,6 +2,7 @@
 import os
 from typing import Any, Dict, List, Mapping, Optional
 
+import openai
 from pydantic import BaseModel, Extra, root_validator
 
 from langchain.llms.base import LLM
@@ -51,15 +52,6 @@ class OpenAI(BaseModel, LLM):
                 "Did not find OpenAI API key, please add an environment variable"
                 " `OPENAI_API_KEY` which contains it."
             )
-        try:
-            import openai
-
-            values["client"] = openai.Completion
-        except ImportError:
-            raise ValueError(
-                "Could not import openai python package. "
-                "Please it install it with `pip install openai`."
-            )
         return values
 
     @property
@@ -90,7 +82,7 @@ class OpenAI(BaseModel, LLM):
 
                 response = openai("Tell me a joke.")
         """
-        response = self.client.create(
+        response = openai.Completion.create(
             model=self.model_name, prompt=prompt, stop=stop, **self._default_params
         )
         return response["choices"][0]["text"]
diff --git a/requirements.txt b/requirements.txt
index 4f1a9711b04..e632c7b8bd9 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,6 +4,3 @@ isort
 mypy
 flake8
 flake8-docstrings
-cohere
-openai
-google-search-results
diff --git a/setup.py b/setup.py
index b84bd60913d..1689546b7e3 100644
--- a/setup.py
+++ b/setup.py
@@ -14,7 +14,13 @@ setup(
     version=__version__,
     packages=find_packages(),
     description="Building applications with LLMs through composability",
-    install_requires=["pydantic"],
+    install_requires=[
+        "pydantic",
+        "cohere",
+        "openai",
+        "google-search-results",
+        "playwright",
+    ],
     long_description=long_description,
     license="MIT",
     url="https://github.com/hwchase17/langchain",