|
|
|
|
@ -28,6 +28,9 @@ class BingSearchTool(BuiltinTool):
|
|
|
|
|
if not query:
|
|
|
|
|
raise Exception('query is required')
|
|
|
|
|
|
|
|
|
|
limit = min(tool_parameters.get('limit', 5), 10)
|
|
|
|
|
result_type = tool_parameters.get('result_type', 'text') or 'text'
|
|
|
|
|
|
|
|
|
|
market = tool_parameters.get('market', 'US')
|
|
|
|
|
lang = tool_parameters.get('language', 'en')
|
|
|
|
|
|
|
|
|
|
@ -49,13 +52,24 @@ class BingSearchTool(BuiltinTool):
|
|
|
|
|
raise Exception(f'Error {response.status_code}: {response.text}')
|
|
|
|
|
|
|
|
|
|
response = response.json()
|
|
|
|
|
# get the first 5 results
|
|
|
|
|
search_results = response['webPages']['value'][:5]
|
|
|
|
|
results = []
|
|
|
|
|
for result in search_results:
|
|
|
|
|
results.append(self.create_text_message(
|
|
|
|
|
text=f'{result["name"]}: {result["url"]}'
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
return results
|
|
|
|
|
|
|
|
|
|
search_results = response['webPages']['value'][:limit]
|
|
|
|
|
|
|
|
|
|
if result_type == 'link':
|
|
|
|
|
results = []
|
|
|
|
|
for result in search_results:
|
|
|
|
|
results.append(self.create_text_message(
|
|
|
|
|
text=f'{result["name"]}: {result["url"]}'
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
return results
|
|
|
|
|
else:
|
|
|
|
|
# construct text
|
|
|
|
|
text = ''
|
|
|
|
|
for i, result in enumerate(search_results):
|
|
|
|
|
text += f'{i+1}: {result["name"]} - {result["snippet"]}\n'
|
|
|
|
|
|
|
|
|
|
text += '\n\nRelated Searches:\n'
|
|
|
|
|
for related in response['relatedSearches']['value']:
|
|
|
|
|
text += f'{related["displayText"]} - {related["webSearchUrl"]}\n'
|
|
|
|
|
|
|
|
|
|
return self.create_text_message(text=self.summary(user_id=user_id, content=text))
|
|
|
|
|
|