ddg-web-search-chat / web_search.py
pabloce's picture
Update web_search.py
0d2a833 verified
raw
history blame
No virus
2.56 kB
from llama_cpp_agent import LlamaCppAgent, MessagesFormatterType
from llama_cpp_agent.chat_history.messages import Roles
from llama_cpp_agent.llm_output_settings import LlmStructuredOutputSettings
from llama_cpp_agent.providers import LlamaCppServerProvider
from llama_cpp_agent.providers.provider_base import LlmProvider
from web_search_interfaces import WebCrawler, WebSearchProvider
from default_web_crawlers import TrafilaturaWebCrawler
from default_web_search_providers import DDGWebSearchProvider
class WebSearchTool:
def __init__(self, llm_provider: LlmProvider, message_formatter_type: MessagesFormatterType, context_character_limit: int = 7500,
web_crawler: WebCrawler = None, web_search_provider: WebSearchProvider = None):
self.summarising_agent = LlamaCppAgent(llm_provider, debug_output=True,
system_prompt="You are a text summarization and information extraction specialist and you are able to summarize and filter out information relevant to a specific query.",
predefined_messages_formatter_type=message_formatter_type)
if web_crawler is None:
self.web_crawler = TrafilaturaWebCrawler()
else:
self.web_crawler = web_crawler
if web_search_provider is None:
self.web_search_provider = DDGWebSearchProvider()
else:
self.web_search_provider = web_search_provider
self.context_character_limit = context_character_limit
def search_web(self, search_query: str):
"""
Search the web for information.
Args:
search_query (str): Search query to search for.
"""
results = self.web_search_provider.search_web(search_query)
result_string = ''
for res in results:
web_info = self.web_crawler.get_website_content_from_url(res)
if web_info != "":
web_info = self.summarising_agent.get_chat_response(
f"Please summarize the following Website content and extract relevant information to this query:'{search_query}'.\n\n" + web_info,
add_response_to_chat_history=False, add_message_to_chat_history=False)
result_string += web_info
res = result_string.strip()
return "Please combine this summarizes results below, into one summary as markdown document:\nResults:\n\n" + res[:self.context_character_limit]
def get_tool(self):
return self.search_web