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

XFEstudio/gpt4free

update ...

a7af3855
abc <98614666+xtekky@users.noreply.github.com>
提交于

代码差异

4 个文件 +939 -2
Added g4f/Provider/ChatGpt.py +200 -0
@@ -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
Modified g4f/Provider/__init__.py +1 -0
@@ -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
Modified g4f/models.py +3 -2
@@ -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