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

XFEstudio/gpt4free

feat(g4f/Provider/ChatGpt.py): enhance error handling and add debugging

d9e71dad
kqlio67 <kqlio67@users.noreply.github.com>
提交于

代码差异

1 个文件 +36 -15
Modified g4f/Provider/ChatGpt.py +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