返回提交历史
Added
g4f/Provider/ChatGpt.py
+200
-0
Modified
g4f/Provider/__init__.py
+1
-0
Added
g4f/Provider/openai/new.py
+735
-0
Modified
g4f/models.py
+3
-2
XFEstudio/gpt4free
update ...
a7af3855
代码差异
4 个文件
+939
-2
@@ -0,0 +1,200 @@
1
from __future__ import annotations
2
3
from ..typing import Messages, CreateResult
4
from ..providers.base_provider import AbstractProvider, ProviderModelMixin
5
6
import time, uuid, random, json
7
from requests import Session
8
9
from .openai.new import (
10
get_config,
11
get_answer_token,
12
process_turnstile,
13
get_requirements_token
14
)
15
16
def format_conversation(messages: list):
17
conversation = []
18
19
for message in messages:
20
conversation.append({
21
'id': str(uuid.uuid4()),
22
'author': {
23
'role': message['role'],
24
},
25
'content': {
26
'content_type': 'text',
27
'parts': [
28
message['content'],
29
],
30
},
31
'metadata': {
32
'serialization_metadata': {
33
'custom_symbol_offsets': [],
34
},
35
},
36
'create_time': round(time.time(), 3),
37
})
38
39
return conversation
40
41
def init_session(user_agent):
42
session = Session()
43
44
cookies = {
45
'_dd_s': '',
46
}
47
48
headers = {
49
'accept': '*/*',
50
'accept-language': 'en-US,en;q=0.8',
51
'cache-control': 'no-cache',
52
'pragma': 'no-cache',
53
'priority': 'u=0, i',
54
'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
55
'sec-ch-ua-arch': '"arm"',
56
'sec-ch-ua-bitness': '"64"',
57
'sec-ch-ua-mobile': '?0',
58
'sec-ch-ua-model': '""',
59
'sec-ch-ua-platform': '"macOS"',
60
'sec-ch-ua-platform-version': '"14.4.0"',
61
'sec-fetch-dest': 'document',
62
'sec-fetch-mode': 'navigate',
63
'sec-fetch-site': 'none',
64
'sec-fetch-user': '?1',
65
'upgrade-insecure-requests': '1',
66
'user-agent': user_agent,
67
}
68
69
session.get('https://chatgpt.com/', cookies=cookies, headers=headers)
70
71
return session
72
73
class ChatGpt(AbstractProvider, ProviderModelMixin):
74
label = "ChatGpt"
75
working = True
76
supports_message_history = True
77
supports_system_message = True
78
supports_stream = True
79
80
81
@classmethod
82
def create_completion(
83
cls,
84
model: str,
85
messages: Messages,
86
stream: bool,
87
**kwargs
88
) -> CreateResult:
89
90
if model in [
91
'gpt-4o',
92
'gpt-4o-mini',
93
'gpt-4',
94
'gpt-4-turbo',
95
'chatgpt-4o-latest'
96
]:
97
model = 'auto'
98
99
elif model in [
100
'gpt-3.5-turbo'
101
]:
102
model = 'text-davinci-002-render-sha'
103
104
else:
105
raise ValueError(f"Invalid model: {model}")
106
107
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
108
session: Session = init_session(user_agent)
109
110
config = get_config(user_agent)
111
pow_req = get_requirements_token(config)
112
headers = {
113
'accept': '*/*',
114
'accept-language': 'en-US,en;q=0.8',
115
'content-type': 'application/json',
116
'oai-device-id': f'{uuid.uuid4()}',
117
'oai-language': 'en-US',
118
'origin': 'https://chatgpt.com',
119
'priority': 'u=1, i',
120
'referer': 'https://chatgpt.com/',
121
'sec-ch-ua-mobile': '?0',
122
'sec-ch-ua-platform': '"Linux"',
123
'sec-fetch-dest': 'empty',
124
'sec-fetch-mode': 'cors',
125
'sec-fetch-site': 'same-origin',
126
'sec-gpc': '1',
127
'user-agent': f'{user_agent}'
128
}
129
130
response = session.post('https://chatgpt.com/backend-anon/sentinel/chat-requirements',
131
headers=headers, json={'p': pow_req}).json()
132
133
turnstile = response.get('turnstile', {})
134
turnstile_required = turnstile.get('required')
135
pow_conf = response.get('proofofwork', {})
136
137
if turnstile_required:
138
turnstile_dx = turnstile.get('dx')
139
turnstile_token = process_turnstile(turnstile_dx, pow_req)
140
141
headers = headers | {
142
'openai-sentinel-turnstile-token' : turnstile_token,
143
'openai-sentinel-chat-requirements-token': response.get('token'),
144
'openai-sentinel-proof-token' : get_answer_token(
145
pow_conf.get('seed'), pow_conf.get('difficulty'), config
146
)
147
}
148
149
json_data = {
150
'action': 'next',
151
'messages': format_conversation(messages),
152
'parent_message_id': str(uuid.uuid4()),
153
'model': 'auto',
154
'timezone_offset_min': -120,
155
'suggestions': [
156
'Can you help me create a personalized morning routine that would help increase my productivity throughout the day? Start by asking me about my current habits and what activities energize me in the morning.',
157
'Could you help me plan a relaxing day that focuses on activities for rejuvenation? To start, can you ask me what my favorite forms of relaxation are?',
158
'I have a photoshoot tomorrow. Can you recommend me some colors and outfit options that will look good on camera?',
159
'Make up a 5-sentence story about "Sharky", a tooth-brushing shark superhero. Make each sentence a bullet point.',
160
],
161
'history_and_training_disabled': False,
162
'conversation_mode': {
163
'kind': 'primary_assistant',
164
},
165
'force_paragen': False,
166
'force_paragen_model_slug': '',
167
'force_nulligen': False,
168
'force_rate_limit': False,
169
'reset_rate_limits': False,
170
'websocket_request_id': str(uuid.uuid4()),
171
'system_hints': [],
172
'force_use_sse': True,
173
'conversation_origin': None,
174
'client_contextual_info': {
175
'is_dark_mode': True,
176
'time_since_loaded': random.randint(22,33),
177
'page_height': random.randint(600, 900),
178
'page_width': random.randint(500, 800),
179
'pixel_ratio': 2,
180
'screen_height': random.randint(800, 1200),
181
'screen_width': random.randint(1200, 2000),
182
},
183
}
184
185
response = session.post('https://chatgpt.com/backend-anon/conversation',
186
headers=headers, json=json_data, stream=True)
187
188
replace = ''
189
for line in response.iter_lines():
190
if line:
191
if 'DONE' in line.decode():
192
break
193
194
data = json.loads(line.decode()[6:])
195
if data.get('message').get('author').get('role') == 'assistant':
196
tokens = (data.get('message').get('content').get('parts')[0])
197
198
yield tokens.replace(replace, '')
199
200
replace = tokens
@@ -61,6 +61,7 @@ from .Upstage import Upstage
61
61
from .Vercel import Vercel
62
62
from .WhiteRabbitNeo import WhiteRabbitNeo
63
63
from .You import You
64
from .ChatGpt import ChatGpt
64
65
65
66
import sys
66
67
@@ -13,6 +13,7 @@ from .Provider import (
13
13
Blackbox,
14
14
ChatGot,
15
15
Chatgpt4Online,
16
ChatGpt,
16
17
Chatgpt4o,
17
18
ChatgptFree,
18
19
CodeNews,
@@ -115,7 +116,7 @@ gpt_4o = Model(
115
116
base_provider = 'OpenAI',
116
117
best_provider = IterListProvider([
117
118
Liaobots, Chatgpt4o, Airforce,
118
OpenaiChat,
119
OpenaiChat
119
120
])
120
121
)
121
122
@@ -124,7 +125,7 @@ gpt_4o_mini = Model(
124
125
base_provider = 'OpenAI',
125
126
best_provider = IterListProvider([
126
127
DDG, Liaobots, You, FreeNetfly, Pizzagpt, ChatgptFree, AiChatOnline, CodeNews, MagickPen, Airforce,
127
OpenaiChat, Koala,
128
OpenaiChat, Koala, ChatGpt
128
129
])
129
130
)
130
131