diff --git a/boost/src/chat.py b/boost/src/chat.py index b3f252a..41d1521 100644 --- a/boost/src/chat.py +++ b/boost/src/chat.py @@ -49,6 +49,10 @@ def plain(self): def history(self): return self.tail.history() + def text(self): + # __str__ already does exactly this + return f"{self}" + def __create_node(self, **kwargs): NodeType = self.chat_node_type return NodeType(**kwargs) diff --git a/boost/src/custom_modules/discussurl.py b/boost/src/custom_modules/discussurl.py new file mode 100644 index 0000000..9c6d50b --- /dev/null +++ b/boost/src/custom_modules/discussurl.py @@ -0,0 +1,40 @@ +import re +import requests + +url_regex = r"(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))" +prompt = """ + +Your task is to fulfill the user's request by discussing provided content. + + + +{content} + + + +{request} + +""".strip() + +ID_PREFIX = "discussurl" + + +async def apply(chat, llm): + text = chat.text() + urls = re.findall(url_regex, text) + + # No - URLs - proceed as usual + if len(urls) == 0: + return await llm.stream_final_completion() + + # Yes - URLs - read them + content = "" + for url in urls: + await llm.emit_status(f"Reading {url[0]}...") + content += requests.get(url[0]).text + + await llm.stream_final_completion( + prompt=prompt, + content=content, + request=chat.tail.content, + )