返回提交历史
Modified
g4f/Provider/ChatGpt.py
+36
-15
XFEstudio/gpt4free
feat(g4f/Provider/ChatGpt.py): enhance error handling and add debugging
d9e71dad
代码差异
1 个文件
+36
-15
@@ -134,11 +134,22 @@ class ChatGpt(AbstractProvider, ProviderModelMixin):
134
134
}
135
135
136
136
response = session.post('https://chatgpt.com/backend-anon/sentinel/chat-requirements',
137
headers=headers, json={'p': pow_req}).json()
137
headers=headers, json={'p': pow_req})
138
138
139
turnstile = response.get('turnstile', {})
139
# Додана перевірка на статус відповідей, якщо "незвична активність"
140
if response.status_code != 200:
141
print(f"Request failed with status: {response.status_code}")
142
print(f"Response content: {response.content}")
143
return
144
145
response_data = response.json()
146
if "detail" in response_data and "Unusual activity" in response_data["detail"]:
147
print(f"Blocked due to unusual activity: {response_data['detail']}")
148
return
149
150
turnstile = response_data.get('turnstile', {})
140
151
turnstile_required = turnstile.get('required')
141
pow_conf = response.get('proofofwork', {})
152
pow_conf = response_data.get('proofofwork', {})
142
153
143
154
if turnstile_required:
144
155
turnstile_dx = turnstile.get('dx')
@@ -146,7 +157,7 @@ class ChatGpt(AbstractProvider, ProviderModelMixin):
146
157
147
158
headers = headers | {
148
159
'openai-sentinel-turnstile-token' : turnstile_token,
149
'openai-sentinel-chat-requirements-token': response.get('token'),
160
'openai-sentinel-chat-requirements-token': response_data.get('token'),
150
161
'openai-sentinel-proof-token' : get_answer_token(
151
162
pow_conf.get('seed'), pow_conf.get('difficulty'), config
152
163
)
@@ -187,20 +198,30 @@ class ChatGpt(AbstractProvider, ProviderModelMixin):
187
198
'screen_width': random.randint(1200, 2000),
188
199
},
189
200
}
201
202
# Додав паузу між запитами для уникнення блокувань через частоту
203
time.sleep(2)
190
204
191
205
response = session.post('https://chatgpt.com/backend-anon/conversation',
192
206
headers=headers, json=json_data, stream=True)
193
207
194
208
replace = ''
195
209
for line in response.iter_lines():
196
210
if line:
197
if 'DONE' in line.decode():
198
break
199
200
data = json.loads(line.decode()[6:])
201
if data.get('message').get('author').get('role') == 'assistant':
202
tokens = (data.get('message').get('content').get('parts')[0])
203
204
yield tokens.replace(replace, '')
205
206
replace = tokens
211
decoded_line = line.decode()
212
print(f"Received line: {decoded_line}") # Debugging output
213
if decoded_line.startswith('data:'):
214
json_string = decoded_line[6:] # Extract JSON part after 'data:'
215
if json_string.strip(): # Check if there's actual content
216
try:
217
data = json.loads(json_string)
218
except json.JSONDecodeError as e:
219
print(f"Error decoding JSON: {e}, content: {json_string}")
220
continue
221
222
if data.get('message').get('author').get('role') == 'assistant':
223
tokens = (data.get('message').get('content').get('parts')[0])
224
225
yield tokens.replace(replace, '')
226
227
replace = tokens