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

XFEstudio/gpt4free

Update (g4f/models.py g4f/Provider/ChatGpt.py)

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

代码差异

2 个文件 +63 -55
Modified g4f/Provider/ChatGpt.py +59 -51
@@ -3,7 +3,10 @@ from __future__ import annotations
3 3 from ..typing import Messages, CreateResult
4 4 from ..providers.base_provider import AbstractProvider, ProviderModelMixin
5 5
6 import time, uuid, random, json
6 import time
7 import uuid
8 import random
9 import json
7 10 from requests import Session
8 11
9 12 from .openai.new import (
@@ -72,17 +75,34 @@ def init_session(user_agent):
72 75
73 76 class ChatGpt(AbstractProvider, ProviderModelMixin):
74 77 label = "ChatGpt"
78 url = "https://chatgpt.com"
75 79 working = True
76 80 supports_message_history = True
77 81 supports_system_message = True
78 82 supports_stream = True
83 default_model = 'auto'
79 84 models = [
85 default_model,
86 'gpt-3.5-turbo',
80 87 'gpt-4o',
81 88 'gpt-4o-mini',
82 89 'gpt-4',
83 90 'gpt-4-turbo',
84 91 'chatgpt-4o-latest',
85 92 ]
93
94 model_aliases = {
95 "gpt-4o": "chatgpt-4o-latest",
96 }
97
98 @classmethod
99 def get_model(cls, model: str) -> str:
100 if model in cls.models:
101 return model
102 elif model in cls.model_aliases:
103 return cls.model_aliases[model]
104 else:
105 return cls.default_model
86 106
87 107 @classmethod
88 108 def create_completion(
@@ -92,30 +112,17 @@ class ChatGpt(AbstractProvider, ProviderModelMixin):
92 112 stream: bool,
93 113 **kwargs
94 114 ) -> CreateResult:
115 model = cls.get_model(model)
116 if model not in cls.models:
117 raise ValueError(f"Model '{model}' is not available. Available models: {', '.join(cls.models)}")
118
95 119
96 if model in [
97 'gpt-4o',
98 'gpt-4o-mini',
99 'gpt-4',
100 'gpt-4-turbo',
101 'chatgpt-4o-latest'
102 ]:
103 model = 'auto'
104
105 elif model in [
106 'gpt-3.5-turbo'
107 ]:
108 model = 'text-davinci-002-render-sha'
109
110 else:
111 raise ValueError(f"Invalid model: {model}")
112
113 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'
120 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'
114 121 session: Session = init_session(user_agent)
115 122
116 config = get_config(user_agent)
117 pow_req = get_requirements_token(config)
118 headers = {
123 config = get_config(user_agent)
124 pow_req = get_requirements_token(config)
125 headers = {
119 126 'accept': '*/*',
120 127 'accept-language': 'en-US,en;q=0.8',
121 128 'content-type': 'application/json',
@@ -134,39 +141,35 @@ class ChatGpt(AbstractProvider, ProviderModelMixin):
134 141 }
135 142
136 143 response = session.post('https://chatgpt.com/backend-anon/sentinel/chat-requirements',
137 headers=headers, json={'p': pow_req})
144 headers=headers, json={'p': pow_req})
138 145
139 146 if response.status_code != 200:
140 print(f"Request failed with status: {response.status_code}")
141 print(f"Response content: {response.content}")
142 147 return
143 148
144 149 response_data = response.json()
145 150 if "detail" in response_data and "Unusual activity" in response_data["detail"]:
146 print(f"Blocked due to unusual activity: {response_data['detail']}")
147 151 return
148 152
149 turnstile = response_data.get('turnstile', {})
153 turnstile = response_data.get('turnstile', {})
150 154 turnstile_required = turnstile.get('required')
151 pow_conf = response_data.get('proofofwork', {})
155 pow_conf = response_data.get('proofofwork', {})
152 156
153 157 if turnstile_required:
154 turnstile_dx = turnstile.get('dx')
158 turnstile_dx = turnstile.get('dx')
155 159 turnstile_token = process_turnstile(turnstile_dx, pow_req)
156 160
157 headers = headers | {
158 'openai-sentinel-turnstile-token' : turnstile_token,
159 'openai-sentinel-chat-requirements-token': response_data.get('token'),
160 'openai-sentinel-proof-token' : get_answer_token(
161 pow_conf.get('seed'), pow_conf.get('difficulty'), config
162 )
163 }
164
161 headers = {**headers,
162 'openai-sentinel-turnstile-token': turnstile_token,
163 'openai-sentinel-chat-requirements-token': response_data.get('token'),
164 'openai-sentinel-proof-token': get_answer_token(
165 pow_conf.get('seed'), pow_conf.get('difficulty'), config
166 )}
167
165 168 json_data = {
166 169 'action': 'next',
167 170 'messages': format_conversation(messages),
168 171 'parent_message_id': str(uuid.uuid4()),
169 'model': 'auto',
172 'model': model,
170 173 'timezone_offset_min': -120,
171 174 'suggestions': [
172 175 '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.',
@@ -189,7 +192,7 @@ class ChatGpt(AbstractProvider, ProviderModelMixin):
189 192 'conversation_origin': None,
190 193 'client_contextual_info': {
191 194 'is_dark_mode': True,
192 'time_since_loaded': random.randint(22,33),
195 'time_since_loaded': random.randint(22, 33),
193 196 'page_height': random.randint(600, 900),
194 197 'page_width': random.randint(500, 800),
195 198 'pixel_ratio': 2,
@@ -201,25 +204,30 @@ class ChatGpt(AbstractProvider, ProviderModelMixin):
201 204 time.sleep(2)
202 205
203 206 response = session.post('https://chatgpt.com/backend-anon/conversation',
204 headers=headers, json=json_data, stream=True)
207 headers=headers, json=json_data, stream=True)
205 208
206 209 replace = ''
207 210 for line in response.iter_lines():
208 211 if line:
209 212 decoded_line = line.decode()
210 print(f"Received line: {decoded_line}")
213 print(decoded_line)
214
211 215 if decoded_line.startswith('data:'):
212 json_string = decoded_line[6:]
213 if json_string.strip():
216 json_string = decoded_line[6:].strip()
217
218 if json_string == '[DONE]':
219 break
220
221 if json_string:
214 222 try:
215 223 data = json.loads(json_string)
216 except json.JSONDecodeError as e:
217 print(f"Error decoding JSON: {e}, content: {json_string}")
224 except json.JSONDecodeError:
218 225 continue
219 226
220 if data.get('message').get('author').get('role') == 'assistant':
221 tokens = (data.get('message').get('content').get('parts')[0])
222
223 yield tokens.replace(replace, '')
224
225 replace = tokens
227 if data.get('message') and data['message'].get('author'):
228 role = data['message']['author'].get('role')
229 if role == 'assistant':
230 tokens = data['message']['content'].get('parts', [])
231 if tokens:
232 yield tokens[0].replace(replace, '')
233 replace = tokens[0]
Modified g4f/models.py +4 -4
@@ -137,25 +137,25 @@ gpt_35_turbo = Model(
137 137 gpt_4o = Model(
138 138 name = 'gpt-4o',
139 139 base_provider = 'OpenAI',
140 best_provider = IterListProvider([Blackbox, ChatGptEs, DarkAI, Editee, NexraChatGPT, Airforce, Liaobots, OpenaiChat])
140 best_provider = IterListProvider([Blackbox, ChatGptEs, DarkAI, Editee, NexraChatGPT, Airforce, ChatGpt, Liaobots, OpenaiChat])
141 141 )
142 142
143 143 gpt_4o_mini = Model(
144 144 name = 'gpt-4o-mini',
145 145 base_provider = 'OpenAI',
146 best_provider = IterListProvider([DDG, ChatGptEs, FreeNetfly, Pizzagpt, MagickPen, RubiksAI, Liaobots, Airforce, ChatgptFree, Koala, OpenaiChat, ChatGpt])
146 best_provider = IterListProvider([DDG, ChatGptEs, FreeNetfly, Pizzagpt, MagickPen, RubiksAI, Liaobots, ChatGpt, Airforce, ChatgptFree, Koala, OpenaiChat])
147 147 )
148 148
149 149 gpt_4_turbo = Model(
150 150 name = 'gpt-4-turbo',
151 151 base_provider = 'OpenAI',
152 best_provider = IterListProvider([Liaobots, Airforce, Bing])
152 best_provider = IterListProvider([Liaobots, Airforce, ChatGpt, Bing])
153 153 )
154 154
155 155 gpt_4 = Model(
156 156 name = 'gpt-4',
157 157 base_provider = 'OpenAI',
158 best_provider = IterListProvider([Chatgpt4Online, Ai4Chat, NexraBing, NexraChatGPT, Airforce, Bing, OpenaiChat, gpt_4_turbo.best_provider, gpt_4o.best_provider, gpt_4o_mini.best_provider])
158 best_provider = IterListProvider([Chatgpt4Online, Ai4Chat, NexraBing, NexraChatGPT, ChatGpt, Airforce, Bing, OpenaiChat, gpt_4_turbo.best_provider, gpt_4o.best_provider, gpt_4o_mini.best_provider])
159 159 )
160 160
161 161 # o1