123456789101112131415161718192021222324252627282930313233343536 |
- from typing import Type
- from langchain.utilities import BingSearchAPIWrapper
- from pydantic import BaseModel, Field
- from app.core.tools.base_tool import BaseTool
- from config.llm import tool_settings
- class WebSearchToolInput(BaseModel):
- query: str = Field(
- ...,
- description="Search query. Use a format suitable for Bing and, if necessary, "
- "use Bing's advanced search function",
- )
- class WebSearchTool(BaseTool):
- name: str = "web_search"
- description: str = (
- "A tool for performing a Bing search and extracting snippets and webpages "
- "when you need to search for something you don't know or when your information "
- "is not up to date. "
- "Input should be a search query."
- )
- args_schema: Type[BaseModel] = WebSearchToolInput
- _bing_search_api_wrapper = BingSearchAPIWrapper(
- bing_search_url=tool_settings.BING_SEARCH_URL,
- bing_subscription_key=tool_settings.BING_SUBSCRIPTION_KEY,
- k=tool_settings.WEB_SEARCH_NUM_RESULTS,
- )
- def run(self, query: str) -> dict:
- return self._bing_search_api_wrapper.results(query=query, num_results=tool_settings.WEB_SEARCH_NUM_RESULTS)
|