返回提交历史
Modified
README.md
+1
-1
Modified
g4f/Provider/You.py
+15
-5
Modified
g4f/Provider/you/har_file.py
+26
-8
Modified
g4f/models.py
+9
-0
XFEstudio/gpt4free
gpt-4o (beta)
1399758a
代码差异
4 个文件
+51
-14
@@ -301,7 +301,7 @@ set G4F_PROXY=http://host:port
301
301
While we wait for gpt-5, here is a list of new models that are at least better than gpt-3.5-turbo. **Some are better than gpt-4**. Expect this list to grow.
302
302
303
303
| Website | Provider | parameters | better than |
304
| ------ | ------- | ------ | ------ |
304
| ------ | ------- | ------ | ------ |
305
305
| [claude-3-opus](https://anthropic.com/) | `g4f.Provider.You` | ?B | gpt-4-0125-preview |
306
306
| [command-r+](https://txt.cohere.com/command-r-plus-microsoft-azure/) | `g4f.Provider.HuggingChat` | 104B | gpt-4-0314 |
307
307
| [llama-3-70b](https://meta.ai/) | `g4f.Provider.Llama` or `DeepInfra` | 70B | gpt-4-0314 |
@@ -1,5 +1,3 @@
1
from __future__ import annotations
2
3
1
import re
4
2
import json
5
3
import base64
@@ -24,6 +22,7 @@ class You(AsyncGeneratorProvider, ProviderModelMixin):
24
22
image_models = ["dall-e"]
25
23
models = [
26
24
default_model,
25
"gpt-4o",
27
26
"gpt-4",
28
27
"gpt-4-turbo",
29
28
"claude-instant",
@@ -42,7 +41,8 @@ class You(AsyncGeneratorProvider, ProviderModelMixin):
42
41
*image_models
43
42
]
44
43
model_aliases = {
45
"claude-v2": "claude-2"
44
"claude-v2": "claude-2",
45
"gpt-4o": "gpt-4o",
46
46
}
47
47
_cookies = None
48
48
_cookies_used = 0
@@ -99,7 +99,9 @@ class You(AsyncGeneratorProvider, ProviderModelMixin):
99
99
"selectedChatMode": chat_mode,
100
100
}
101
101
if chat_mode == "custom":
102
# print(f"You model: {model}")
102
103
params["selectedAIModel"] = model.replace("-", "_")
104
103
105
async with (session.post if chat_mode == "default" else session.get)(
104
106
f"{cls.url}/api/streamingSearch",
105
107
data=data,
@@ -183,7 +185,15 @@ class You(AsyncGeneratorProvider, ProviderModelMixin):
183
185
@classmethod
184
186
async def create_cookies(cls, client: StreamSession) -> Cookies:
185
187
if not cls._telemetry_ids:
186
cls._telemetry_ids = await get_telemetry_ids()
188
try:
189
cls._telemetry_ids = await get_telemetry_ids()
190
except RuntimeError as e:
191
if str(e) == "Event loop is closed":
192
if debug.logging:
193
print("Event loop is closed error occurred in create_cookies.")
194
else:
195
raise
196
187
197
user_uuid = str(uuid.uuid4())
188
198
telemetry_id = cls._telemetry_ids.pop()
189
199
if debug.logging:
@@ -212,4 +222,4 @@ class You(AsyncGeneratorProvider, ProviderModelMixin):
212
222
'stytch_session_jwt': session["session_jwt"],
213
223
'ydc_stytch_session': session["session_token"],
214
224
'ydc_stytch_session_jwt': session["session_jwt"],
215
}
225
}
@@ -4,11 +4,14 @@ import json
4
4
import os
5
5
import os.path
6
6
import random
7
import logging
7
8
8
9
from ...requests import StreamSession, raise_for_status
9
10
from ...errors import MissingRequirementsError
10
11
from ... import debug
11
12
13
logging.basicConfig(level=logging.ERROR)
14
12
15
class NoValidHarFileError(Exception):
13
16
...
14
17
@@ -62,10 +65,16 @@ def parseHAREntry(entry) -> arkReq:
62
65
return tmpArk
63
66
64
67
async def sendRequest(tmpArk: arkReq, proxy: str = None):
65
async with StreamSession(headers=tmpArk.arkHeaders, cookies=tmpArk.arkCookies, proxy=proxy) as session:
66
async with session.post(tmpArk.arkURL, data=tmpArk.arkBody) as response:
67
await raise_for_status(response)
68
return await response.text()
68
try:
69
async with StreamSession(headers=tmpArk.arkHeaders, cookies=tmpArk.arkCookies, proxy=proxy) as session:
70
async with session.post(tmpArk.arkURL, data=tmpArk.arkBody) as response:
71
await raise_for_status(response)
72
return await response.text()
73
except RuntimeError as e:
74
if str(e) == "Event loop is closed":
75
print("Event loop is closed error occurred in sendRequest.")
76
else:
77
raise
69
78
70
79
async def create_telemetry_id(proxy: str = None):
71
80
global chatArks
@@ -78,9 +87,9 @@ async def get_telemetry_ids(proxy: str = None) -> list:
78
87
return [await create_telemetry_id(proxy)]
79
88
except NoValidHarFileError as e:
80
89
if debug.logging:
81
print(e)
90
logging.error(e)
82
91
if debug.logging:
83
print('Getting telemetry_id for you.com with nodriver')
92
logging.error('Getting telemetry_id for you.com with nodriver')
84
93
try:
85
94
from nodriver import start
86
95
except ImportError:
@@ -100,6 +109,15 @@ async def get_telemetry_ids(proxy: str = None) -> list:
100
109
)
101
110
102
111
return [await get_telemetry_id()]
112
103
113
finally:
104
if page is not None:
105
await page.close()
114
try:
115
if page is not None:
116
await page.close()
117
118
if browser is not None:
119
await browser.close()
120
121
except Exception as e:
122
if debug.logging:
123
logging.error(e)
@@ -100,6 +100,14 @@ gpt_4 = Model(
100
100
])
101
101
)
102
102
103
gpt_4o = Model(
104
name = 'gpt-4o',
105
base_provider = 'openai',
106
best_provider = RetryProvider([
107
You
108
])
109
)
110
103
111
gpt_4_turbo = Model(
104
112
name = 'gpt-4-turbo',
105
113
base_provider = 'openai',
@@ -330,6 +338,7 @@ class ModelUtils:
330
338
'gpt-3.5-long': gpt_35_long,
331
339
332
340
# gpt-4
341
'gpt-4o' : gpt_4o,
333
342
'gpt-4' : gpt_4,
334
343
'gpt-4-0613' : gpt_4_0613,
335
344
'gpt-4-32k' : gpt_4_32k,