From 789d60ef1cd4031efe39a1d9d2db5d123f53dfb3 Mon Sep 17 00:00:00 2001 From: 9fo <71867245+9fo@users.noreply.github.com> Date: Thu, 27 Apr 2023 16:05:06 -0700 Subject: openaihosted finished --- openaihosted/__init__.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 openaihosted/__init__.py diff --git a/openaihosted/__init__.py b/openaihosted/__init__.py new file mode 100644 index 00000000..c773b3f9 --- /dev/null +++ b/openaihosted/__init__.py @@ -0,0 +1,60 @@ +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: + return Completion.__get_failure_response() + + sentence = "" + + 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={}) + + @classmethod + def __get_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 -- cgit v1.2.3