XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

update code, handle escape sequence and others

be04fcd7
ezerinz <edwinnnzx@gmail.com>
提交于

代码差异

1 个文件 +49 -47
Modified openaihosted/__init__.py +49 -47
@@ -1,60 +1,62 @@
1 1 import json
2 2 import re
3 from fake_useragent import UserAgent
4
5 3 import requests
6 4
5
7 6 class Completion:
8 7 @staticmethod
9 def create(
10 systemprompt:str,
11 text:str,
12 assistantprompt:str
13 ):
14
15 data = [
16 {"role": "system", "content": systemprompt},
17 {"role": "user", "content": "hi"},
18 {"role": "assistant", "content": assistantprompt},
19 {"role": "user", "content": text},
20 ]
21 url = f'https://openai.a2hosted.com/chat?q={Completion.__get_query_param(data)}'
22
23 try:
24 response = requests.get(url, headers=Completion.__get_headers(), stream=True)
25 except:
8 def create(messages):
9 headers = {
10 "authority": "openai.a2hosted.com",
11 "accept": "text/event-stream",
12 "accept-language": "en-US,en;q=0.9,id;q=0.8,ja;q=0.7",
13 "cache-control": "no-cache",
14 "sec-fetch-dest": "empty",
15 "sec-fetch-mode": "cors",
16 "sec-fetch-site": "cross-site",
17 "user-agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0",
18 }
19
20 query_param = Completion.__create_query_param(messages)
21 url = f"https://openai.a2hosted.com/chat?q={query_param}"
22 request = requests.get(url, headers=headers, stream=True)
23 if request.status_code != 200:
26 24 return Completion.__get_failure_response()
27 25
28 sentence = ""
26 content = request.content
27 response = Completion.__join_response(content)
28
29 return {"responses": response}
29 30
30 for message in response.iter_content(chunk_size=1024):
31 message = message.decode('utf-8')
32 msg_match, num_match = re.search(r'"msg":"([^"]+)"', message), re.search(r'\[DONE\] (\d+)', message)
33 if msg_match:
34 # Put the captured group into a sentence
35 sentence += msg_match.group(1)
36 return {
37 'response': sentence
38 }
39
40 @classmethod
41 def __get_headers(cls) -> dict:
42 return {
43 'authority': 'openai.a2hosted.com',
44 'accept': 'text/event-stream',
45 'accept-language': 'en-US,en;q=0.9,id;q=0.8,ja;q=0.7',
46 'cache-control': 'no-cache',
47 'sec-fetch-dest': 'empty',
48 'sec-fetch-mode': 'cors',
49 'sec-fetch-site': 'cross-site',
50 'user-agent': UserAgent().random
51 }
52
53 31 @classmethod
54 32 def __get_failure_response(cls) -> dict:
55 return dict(response='Unable to fetch the response, Please try again.', links=[], extra={})
56
33 return dict(
34 response="Unable to fetch the response, Please try again.",
35 links=[],
36 extra={},
37 )
38
39 @classmethod
40 def __multiple_replace(cls, string, reps) -> str:
41 for original, replacement in reps.items():
42 string = string.replace(original, replacement)
43 return string
44
57 45 @classmethod
58 def __get_query_param(cls, conversation) -> str:
46 def __create_query_param(cls, conversation) -> str:
59 47 encoded_conversation = json.dumps(conversation)
60 return encoded_conversation.replace(" ", "%20").replace('"', '%22').replace("'", "%27")
48 replacement = {" ": "%20", '"': "%22", "'": "%27"}
49 return Completion.__multiple_replace(encoded_conversation, replacement)
50
51 @classmethod
52 def __convert_escape_codes(cls, text) -> str:
53 replacement = {'\\\\"': '"', '\\"': '"', "\\n": "\n", "\\'": "'"}
54 return Completion.__multiple_replace(text, replacement)
55
56 @classmethod
57 def __join_response(cls, data) -> str:
58 data = data.decode("utf-8")
59 find_ans = re.findall(r'(?<={"msg":)[^}]*', str(data))
60 ans = [Completion.__convert_escape_codes(x[1:-1]) for x in find_ans]
61 response = "".join(ans)
62 return response