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
|