From be04fcd7f326a02ace84ea66d614298bee15f9e0 Mon Sep 17 00:00:00 2001 From: ezerinz Date: Fri, 28 Apr 2023 16:38:05 +0800 Subject: update code, handle escape sequence and others --- openaihosted/__init__.py | 96 ++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 47 deletions(-) (limited to 'openaihosted/__init__.py') diff --git a/openaihosted/__init__.py b/openaihosted/__init__.py index c773b3f9..4f25a2be 100644 --- a/openaihosted/__init__.py +++ b/openaihosted/__init__.py @@ -1,60 +1,62 @@ import json import re -from fake_useragent import UserAgent - import requests + class Completion: @staticmethod - def create( - systemprompt:str, - text:str, - assistantprompt:str - ): - - data = [ - {"role": "system", "content": systemprompt}, - {"role": "user", "content": "hi"}, - {"role": "assistant", "content": assistantprompt}, - {"role": "user", "content": text}, - ] - url = f'https://openai.a2hosted.com/chat?q={Completion.__get_query_param(data)}' - - try: - response = requests.get(url, headers=Completion.__get_headers(), stream=True) - except: + def create(messages): + headers = { + "authority": "openai.a2hosted.com", + "accept": "text/event-stream", + "accept-language": "en-US,en;q=0.9,id;q=0.8,ja;q=0.7", + "cache-control": "no-cache", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "user-agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0", + } + + query_param = Completion.__create_query_param(messages) + url = f"https://openai.a2hosted.com/chat?q={query_param}" + request = requests.get(url, headers=headers, stream=True) + if request.status_code != 200: return Completion.__get_failure_response() - sentence = "" + content = request.content + response = Completion.__join_response(content) + + return {"responses": response} - for message in response.iter_content(chunk_size=1024): - message = message.decode('utf-8') - msg_match, num_match = re.search(r'"msg":"([^"]+)"', message), re.search(r'\[DONE\] (\d+)', message) - if msg_match: - # Put the captured group into a sentence - sentence += msg_match.group(1) - return { - 'response': sentence - } - - @classmethod - def __get_headers(cls) -> dict: - return { - 'authority': 'openai.a2hosted.com', - 'accept': 'text/event-stream', - 'accept-language': 'en-US,en;q=0.9,id;q=0.8,ja;q=0.7', - 'cache-control': 'no-cache', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'cross-site', - 'user-agent': UserAgent().random - } - @classmethod def __get_failure_response(cls) -> dict: - return dict(response='Unable to fetch the response, Please try again.', links=[], extra={}) - + return dict( + response="Unable to fetch the response, Please try again.", + links=[], + extra={}, + ) + + @classmethod + def __multiple_replace(cls, string, reps) -> str: + for original, replacement in reps.items(): + string = string.replace(original, replacement) + return string + @classmethod - def __get_query_param(cls, conversation) -> str: + def __create_query_param(cls, conversation) -> str: encoded_conversation = json.dumps(conversation) - return encoded_conversation.replace(" ", "%20").replace('"', '%22').replace("'", "%27") \ No newline at end of file + replacement = {" ": "%20", '"': "%22", "'": "%27"} + return Completion.__multiple_replace(encoded_conversation, replacement) + + @classmethod + def __convert_escape_codes(cls, text) -> str: + replacement = {'\\\\"': '"', '\\"': '"', "\\n": "\n", "\\'": "'"} + return Completion.__multiple_replace(text, replacement) + + @classmethod + def __join_response(cls, data) -> str: + data = data.decode("utf-8") + find_ans = re.findall(r'(?<={"msg":)[^}]*', str(data)) + ans = [Completion.__convert_escape_codes(x[1:-1]) for x in find_ans] + response = "".join(ans) + return response -- cgit v1.2.3 From b2d5309ce61fa0086845cb8d43564e044985c2d2 Mon Sep 17 00:00:00 2001 From: "t.me/xtekky" <98614666+xtekky@users.noreply.github.com> Date: Fri, 28 Apr 2023 23:58:49 +0100 Subject: readme --- openaihosted/__init__.py | 62 ------------------------------------------------ 1 file changed, 62 deletions(-) delete mode 100644 openaihosted/__init__.py (limited to 'openaihosted/__init__.py') diff --git a/openaihosted/__init__.py b/openaihosted/__init__.py deleted file mode 100644 index 4f25a2be..00000000 --- a/openaihosted/__init__.py +++ /dev/null @@ -1,62 +0,0 @@ -import json -import re -import requests - - -class Completion: - @staticmethod - def create(messages): - headers = { - "authority": "openai.a2hosted.com", - "accept": "text/event-stream", - "accept-language": "en-US,en;q=0.9,id;q=0.8,ja;q=0.7", - "cache-control": "no-cache", - "sec-fetch-dest": "empty", - "sec-fetch-mode": "cors", - "sec-fetch-site": "cross-site", - "user-agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0", - } - - query_param = Completion.__create_query_param(messages) - url = f"https://openai.a2hosted.com/chat?q={query_param}" - request = requests.get(url, headers=headers, stream=True) - if request.status_code != 200: - return Completion.__get_failure_response() - - content = request.content - response = Completion.__join_response(content) - - return {"responses": response} - - @classmethod - def __get_failure_response(cls) -> dict: - return dict( - response="Unable to fetch the response, Please try again.", - links=[], - extra={}, - ) - - @classmethod - def __multiple_replace(cls, string, reps) -> str: - for original, replacement in reps.items(): - string = string.replace(original, replacement) - return string - - @classmethod - def __create_query_param(cls, conversation) -> str: - encoded_conversation = json.dumps(conversation) - replacement = {" ": "%20", '"': "%22", "'": "%27"} - return Completion.__multiple_replace(encoded_conversation, replacement) - - @classmethod - def __convert_escape_codes(cls, text) -> str: - replacement = {'\\\\"': '"', '\\"': '"', "\\n": "\n", "\\'": "'"} - return Completion.__multiple_replace(text, replacement) - - @classmethod - def __join_response(cls, data) -> str: - data = data.decode("utf-8") - find_ans = re.findall(r'(?<={"msg":)[^}]*', str(data)) - ans = [Completion.__convert_escape_codes(x[1:-1]) for x in find_ans] - response = "".join(ans) - return response -- cgit v1.2.3