| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | 
                        - from langchain import SerpAPIWrapper
 - from pydantic import Field, BaseModel
 - 
 - 
 - class OptimizedSerpAPIInput(BaseModel):
 -     query: str = Field(..., description="search query.")
 - 
 - 
 - class OptimizedSerpAPIWrapper(SerpAPIWrapper):
 - 
 -     @staticmethod
 -     def _process_response(res: dict, num_results: int = 5) -> str:
 -         """Process response from SerpAPI."""
 -         if "error" in res.keys():
 -             raise ValueError(f"Got error from SerpAPI: {res['error']}")
 -         if "answer_box" in res.keys() and type(res["answer_box"]) == list:
 -             res["answer_box"] = res["answer_box"][0]
 -         if "answer_box" in res.keys() and "answer" in res["answer_box"].keys():
 -             toret = res["answer_box"]["answer"]
 -         elif "answer_box" in res.keys() and "snippet" in res["answer_box"].keys():
 -             toret = res["answer_box"]["snippet"]
 -         elif (
 -             "answer_box" in res.keys()
 -             and "snippet_highlighted_words" in res["answer_box"].keys()
 -         ):
 -             toret = res["answer_box"]["snippet_highlighted_words"][0]
 -         elif (
 -             "sports_results" in res.keys()
 -             and "game_spotlight" in res["sports_results"].keys()
 -         ):
 -             toret = res["sports_results"]["game_spotlight"]
 -         elif (
 -             "shopping_results" in res.keys()
 -             and "title" in res["shopping_results"][0].keys()
 -         ):
 -             toret = res["shopping_results"][:3]
 -         elif (
 -             "knowledge_graph" in res.keys()
 -             and "description" in res["knowledge_graph"].keys()
 -         ):
 -             toret = res["knowledge_graph"]["description"]
 -         elif 'organic_results' in res.keys() and len(res['organic_results']) > 0:
 -             toret = ""
 -             for result in res["organic_results"][:num_results]:
 -                 if "link" in result:
 -                     toret += "----------------\nlink: " + result["link"] + "\n"
 -                 if "snippet" in result:
 -                     toret += "snippet: " + result["snippet"] + "\n"
 -         else:
 -             toret = "No good search result found"
 -         return "search result:\n" + toret
 
 
  |