返回提交历史
Modified
docs/providers-and-models.md
+2
-5
Modified
g4f/Provider/nexra/NexraChatGPT.py
+233
-37
Deleted
g4f/Provider/nexra/NexraChatGPT4o.py
+0
-86
Deleted
g4f/Provider/nexra/NexraChatGptV2.py
+0
-92
Deleted
g4f/Provider/nexra/NexraChatGptWeb.py
+0
-64
Modified
g4f/Provider/nexra/__init__.py
+0
-3
Modified
g4f/models.py
+2
-5
XFEstudio/gpt4free
Update (docs/providers-and-models.md g4f/models.py g4f/Provider/nexra/)
8768a057
代码差异
7 个文件
+237
-292
@@ -64,10 +64,7 @@ This document provides an overview of various AI providers and models, including
64
64
|[app.myshell.ai/chat](https://app.myshell.ai/chat)|`g4f.Provider.MyShell`|✔|❌|?|?||❌|
65
65
|[nexra.aryahcr.cc/bing](https://nexra.aryahcr.cc/documentation/bing/en)|`g4f.Provider.NexraBing`|✔|❌|❌|✔||❌|
66
66
|[nexra.aryahcr.cc/blackbox](https://nexra.aryahcr.cc/documentation/blackbox/en)|`g4f.Provider.NexraBlackbox`|`blackboxai` |❌|❌|✔||❌|
67
|[nexra.aryahcr.cc/chatgpt](https://nexra.aryahcr.cc/documentation/chatgpt/en)|`g4f.Provider.NexraChatGPT`|`gpt-4, gpt-3.5-turbo, gpt-3` |❌|❌|✔||❌|
68
|[nexra.aryahcr.cc/chatgpt](https://nexra.aryahcr.cc/documentation/chatgpt/en)|`g4f.Provider.NexraChatGPT4o`|`gpt-4o` |❌|❌|✔||❌|
69
|[nexra.aryahcr.cc/chatgpt](https://nexra.aryahcr.cc/documentation/chatgpt/en)|`g4f.Provider.NexraChatGptV2`|`gpt-4` |❌|❌|✔||❌|
70
|[nexra.aryahcr.cc/chatgpt](https://nexra.aryahcr.cc/documentation/chatgpt/en)|`g4f.Provider.NexraChatGptWeb`|`gpt-4` |❌|❌|✔||❌|
67
|[nexra.aryahcr.cc/chatgpt](https://nexra.aryahcr.cc/documentation/chatgpt/en)|`g4f.Provider.NexraChatGPT`|`gpt-4, gpt-3.5-turbo, gpt-3, gpt-4o` |❌|❌|✔||❌|
71
68
|[nexra.aryahcr.cc/dall-e](https://nexra.aryahcr.cc/documentation/dall-e/en)|`g4f.Provider.NexraDallE`|❌|`dalle`|❌|❌||❌|
72
69
|[nexra.aryahcr.cc/dall-e](https://nexra.aryahcr.cc/documentation/dall-e/en)|`g4f.Provider.NexraDallE2`|❌|`dalle-2`|❌|❌||❌|
73
70
|[nexra.aryahcr.cc/emi](https://nexra.aryahcr.cc/documentation/emi/en)|`g4f.Provider.NexraEmi`|❌|`emi`|❌|❌||❌|
@@ -109,7 +106,7 @@ This document provides an overview of various AI providers and models, including
109
106
|-------|---------------|-----------|---------|
110
107
|gpt-3|OpenAI|1+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-base)|
111
108
|gpt-3.5-turbo|OpenAI|5+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-3-5-turbo)|
112
|gpt-4|OpenAI|9+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4-turbo-and-gpt-4)|
109
|gpt-4|OpenAI|7+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4-turbo-and-gpt-4)|
113
110
|gpt-4-turbo|OpenAI|3+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4-turbo-and-gpt-4)|
114
111
|gpt-4o|OpenAI|10+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4o)|
115
112
|gpt-4o-mini|OpenAI|14+ Providers|[platform.openai.com](https://platform.openai.com/docs/models/gpt-4o-mini)|
@@ -1,45 +1,52 @@
1
1
from __future__ import annotations
2
2
3
import asyncio
3
4
import json
4
5
import requests
6
from typing import Any, Dict
5
7
6
from ...typing import CreateResult, Messages
7
from ..base_provider import ProviderModelMixin, AbstractProvider
8
from ...typing import AsyncResult, Messages
9
from ..base_provider import AsyncGeneratorProvider, ProviderModelMixin
8
10
from ..helper import format_prompt
9
11
10
class NexraChatGPT(AbstractProvider, ProviderModelMixin):
12
13
class NexraChatGPT(AsyncGeneratorProvider, ProviderModelMixin):
11
14
label = "Nexra ChatGPT"
12
15
url = "https://nexra.aryahcr.cc/documentation/chatgpt/en"
13
api_endpoint = "https://nexra.aryahcr.cc/api/chat/gpt"
16
api_endpoint_nexra_chatgpt = "https://nexra.aryahcr.cc/api/chat/gpt"
17
api_endpoint_nexra_chatgpt4o = "https://nexra.aryahcr.cc/api/chat/complements"
18
api_endpoint_nexra_chatgpt_v2 = "https://nexra.aryahcr.cc/api/chat/complements"
19
api_endpoint_nexra_gptweb = "https://nexra.aryahcr.cc/api/chat/gptweb"
14
20
working = True
21
supports_system_message = True
22
supports_message_history = True
23
supports_stream = True
15
24
16
25
default_model = 'gpt-3.5-turbo'
17
models = ['gpt-4', 'gpt-4-0613', 'gpt-4-0314', 'gpt-4-32k-0314', default_model, 'gpt-3.5-turbo-16k', 'gpt-3.5-turbo-0613', 'gpt-3.5-turbo-16k-0613', 'gpt-3.5-turbo-0301', 'text-davinci-003', 'text-davinci-002', 'code-davinci-002', 'gpt-3', 'text-curie-001', 'text-babbage-001', 'text-ada-001', 'davinci', 'curie', 'babbage', 'ada', 'babbage-002', 'davinci-002']
26
nexra_chatgpt = [
27
'gpt-4', 'gpt-4-0613', 'gpt-4-0314', 'gpt-4-32k-0314',
28
default_model, 'gpt-3.5-turbo-16k', 'gpt-3.5-turbo-0613', 'gpt-3.5-turbo-16k-0613', 'gpt-3.5-turbo-0301',
29
'text-davinci-003', 'text-davinci-002', 'code-davinci-002', 'gpt-3', 'text-curie-001', 'text-babbage-001', 'text-ada-001', 'davinci', 'curie', 'babbage', 'ada', 'babbage-002', 'davinci-002'
30
]
31
nexra_chatgpt4o = ['gpt-4o']
32
nexra_chatgptv2 = ['chatgpt']
33
nexra_gptweb = ['gptweb']
34
models = nexra_chatgpt + nexra_chatgpt4o + nexra_chatgptv2 + nexra_gptweb
18
35
19
36
model_aliases = {
20
37
"gpt-4": "gpt-4-0613",
21
"gpt-4": "gpt-4-32k",
22
"gpt-4": "gpt-4-0314",
23
"gpt-4": "gpt-4-32k-0314",
24
38
"gpt-4-32k": "gpt-4-32k-0314",
25
39
"gpt-3.5-turbo": "gpt-3.5-turbo-16k",
26
"gpt-3.5-turbo": "gpt-3.5-turbo-0613",
27
"gpt-3.5-turbo": "gpt-3.5-turbo-16k-0613",
28
"gpt-3.5-turbo": "gpt-3.5-turbo-0301",
29
40
"gpt-3.5-turbo-0613": "gpt-3.5-turbo-16k-0613",
30
41
"gpt-3": "text-davinci-003",
31
"gpt-3": "text-davinci-002",
32
"gpt-3": "code-davinci-002",
33
"gpt-3": "text-curie-001",
34
"gpt-3": "text-babbage-001",
35
"gpt-3": "text-ada-001",
36
"gpt-3": "text-ada-001",
37
"gpt-3": "davinci",
38
"gpt-3": "curie",
39
"gpt-3": "babbage",
40
"gpt-3": "ada",
41
"gpt-3": "babbage-002",
42
"gpt-3": "davinci-002",
42
"text-davinci-002": "code-davinci-002",
43
"text-curie-001": "text-babbage-001",
44
"text-ada-001": "davinci",
45
"curie": "babbage",
46
"ada": "babbage-002",
47
"davinci-002": "davinci-002",
48
"chatgpt": "chatgpt",
49
"gptweb": "gptweb"
43
50
}
44
51
45
52
@classmethod
@@ -50,40 +57,229 @@ class NexraChatGPT(AbstractProvider, ProviderModelMixin):
50
57
return cls.model_aliases[model]
51
58
else:
52
59
return cls.default_model
53
60
54
61
@classmethod
55
def create_completion(
62
async def create_async_generator(
56
63
cls,
57
64
model: str,
58
65
messages: Messages,
66
stream: bool = False,
59
67
proxy: str = None,
60
68
markdown: bool = False,
61
69
**kwargs
62
) -> CreateResult:
63
model = cls.get_model(model)
70
) -> AsyncResult:
71
if model in cls.nexra_chatgpt:
72
async for chunk in cls._create_async_generator_nexra_chatgpt(model, messages, proxy, **kwargs):
73
yield chunk
74
elif model in cls.nexra_chatgpt4o:
75
async for chunk in cls._create_async_generator_nexra_chatgpt4o(model, messages, stream, proxy, markdown, **kwargs):
76
yield chunk
77
elif model in cls.nexra_chatgptv2:
78
async for chunk in cls._create_async_generator_nexra_chatgpt_v2(model, messages, stream, proxy, markdown, **kwargs):
79
yield chunk
80
elif model in cls.nexra_gptweb:
81
async for chunk in cls._create_async_generator_nexra_gptweb(model, messages, proxy, **kwargs):
82
yield chunk
64
83
84
@classmethod
85
async def _create_async_generator_nexra_chatgpt(
86
cls,
87
model: str,
88
messages: Messages,
89
proxy: str = None,
90
markdown: bool = False,
91
**kwargs
92
) -> AsyncResult:
93
model = cls.get_model(model)
94
65
95
headers = {
66
'Content-Type': 'application/json'
96
"Content-Type": "application/json"
67
97
}
68
98
99
prompt = format_prompt(messages)
69
100
data = {
70
"messages": [],
71
"prompt": format_prompt(messages),
101
"messages": messages,
102
"prompt": prompt,
72
103
"model": model,
73
104
"markdown": markdown
74
105
}
106
107
loop = asyncio.get_event_loop()
108
try:
109
response = await loop.run_in_executor(None, cls._sync_post_request, cls.api_endpoint_nexra_chatgpt, data, headers, proxy)
110
filtered_response = cls._filter_response(response)
111
112
for chunk in filtered_response:
113
yield chunk
114
except Exception as e:
115
print(f"Error during API request (nexra_chatgpt): {e}")
116
117
@classmethod
118
async def _create_async_generator_nexra_chatgpt4o(
119
cls,
120
model: str,
121
messages: Messages,
122
stream: bool = False,
123
proxy: str = None,
124
markdown: bool = False,
125
**kwargs
126
) -> AsyncResult:
127
model = cls.get_model(model)
75
128
76
response = requests.post(cls.api_endpoint, headers=headers, json=data)
129
headers = {
130
"Content-Type": "application/json"
131
}
132
133
prompt = format_prompt(messages)
134
data = {
135
"messages": [
136
{
137
"role": "user",
138
"content": prompt
139
}
140
],
141
"stream": stream,
142
"markdown": markdown,
143
"model": model
144
}
77
145
78
return cls.process_response(response)
146
loop = asyncio.get_event_loop()
147
try:
148
response = await loop.run_in_executor(None, cls._sync_post_request, cls.api_endpoint_nexra_chatgpt4o, data, headers, proxy, stream)
149
150
if stream:
151
async for chunk in cls._process_streaming_response(response):
152
yield chunk
153
else:
154
for chunk in cls._process_non_streaming_response(response):
155
yield chunk
156
except Exception as e:
157
print(f"Error during API request (nexra_chatgpt4o): {e}")
79
158
80
159
@classmethod
81
def process_response(cls, response):
160
async def _create_async_generator_nexra_chatgpt_v2(
161
cls,
162
model: str,
163
messages: Messages,
164
stream: bool = False,
165
proxy: str = None,
166
markdown: bool = False,
167
**kwargs
168
) -> AsyncResult:
169
model = cls.get_model(model)
170
171
headers = {
172
"Content-Type": "application/json"
173
}
174
175
prompt = format_prompt(messages)
176
data = {
177
"messages": [
178
{
179
"role": "user",
180
"content": prompt
181
}
182
],
183
"stream": stream,
184
"markdown": markdown,
185
"model": model
186
}
187
188
loop = asyncio.get_event_loop()
189
try:
190
response = await loop.run_in_executor(None, cls._sync_post_request, cls.api_endpoint_nexra_chatgpt_v2, data, headers, proxy, stream)
191
192
if stream:
193
async for chunk in cls._process_streaming_response(response):
194
yield chunk
195
else:
196
for chunk in cls._process_non_streaming_response(response):
197
yield chunk
198
except Exception as e:
199
print(f"Error during API request (nexra_chatgpt_v2): {e}")
200
201
@classmethod
202
async def _create_async_generator_nexra_gptweb(
203
cls,
204
model: str,
205
messages: Messages,
206
proxy: str = None,
207
markdown: bool = False,
208
**kwargs
209
) -> AsyncResult:
210
model = cls.get_model(model)
211
212
headers = {
213
"Content-Type": "application/json"
214
}
215
216
prompt = format_prompt(messages)
217
data = {
218
"prompt": prompt,
219
"markdown": markdown,
220
}
221
222
loop = asyncio.get_event_loop()
223
try:
224
response = await loop.run_in_executor(None, cls._sync_post_request, cls.api_endpoint_nexra_gptweb, data, headers, proxy)
225
226
for chunk in response.iter_content(1024):
227
if chunk:
228
decoded_chunk = chunk.decode().lstrip('_')
229
try:
230
response_json = json.loads(decoded_chunk)
231
if response_json.get("status"):
232
yield response_json.get("gpt", "")
233
except json.JSONDecodeError:
234
continue
235
except Exception as e:
236
print(f"Error during API request (nexra_gptweb): {e}")
237
238
@staticmethod
239
def _sync_post_request(url: str, data: Dict[str, Any], headers: Dict[str, str], proxy: str = None, stream: bool = False) -> requests.Response:
240
proxies = {
241
"http": proxy,
242
"https": proxy,
243
} if proxy else None
244
245
try:
246
response = requests.post(url, json=data, headers=headers, proxies=proxies, stream=stream)
247
response.raise_for_status()
248
return response
249
except requests.RequestException as e:
250
print(f"Request failed: {e}")
251
raise
252
253
@staticmethod
254
def _process_non_streaming_response(response: requests.Response) -> str:
82
255
if response.status_code == 200:
83
256
try:
84
data = response.json()
85
return data.get('gpt', '')
257
content = response.text.lstrip('')
258
data = json.loads(content)
259
return data.get('message', '')
86
260
except json.JSONDecodeError:
87
261
return "Error: Unable to decode JSON response"
88
262
else:
89
263
return f"Error: {response.status_code}"
264
265
@staticmethod
266
async def _process_streaming_response(response: requests.Response):
267
full_message = ""
268
for line in response.iter_lines(decode_unicode=True):
269
if line:
270
try:
271
line = line.lstrip('')
272
data = json.loads(line)
273
if data.get('finish'):
274
break
275
message = data.get('message', '')
276
if message:
277
yield message[len(full_message):]
278
full_message = message
279
except json.JSONDecodeError:
280
pass
281
282
@staticmethod
283
def _filter_response(response: requests.Response) -> str:
284
response_json = response.json()
285
return response_json.get("gpt", "")
@@ -1,86 +0,0 @@
1
from __future__ import annotations
2
3
import json
4
import requests
5
6
from ...typing import CreateResult, Messages
7
from ..base_provider import ProviderModelMixin, AbstractProvider
8
from ..helper import format_prompt
9
10
class NexraChatGPT4o(AbstractProvider, ProviderModelMixin):
11
label = "Nexra ChatGPT4o"
12
url = "https://nexra.aryahcr.cc/documentation/chatgpt/en"
13
api_endpoint = "https://nexra.aryahcr.cc/api/chat/complements"
14
working = True
15
supports_stream = True
16
17
default_model = "gpt-4o"
18
models = [default_model]
19
20
@classmethod
21
def get_model(cls, model: str) -> str:
22
return cls.default_model
23
24
@classmethod
25
def create_completion(
26
cls,
27
model: str,
28
messages: Messages,
29
stream: bool,
30
proxy: str = None,
31
markdown: bool = False,
32
**kwargs
33
) -> CreateResult:
34
model = cls.get_model(model)
35
36
headers = {
37
'Content-Type': 'application/json'
38
}
39
40
data = {
41
"messages": [
42
{
43
"role": "user",
44
"content": format_prompt(messages)
45
}
46
],
47
"stream": stream,
48
"markdown": markdown,
49
"model": model
50
}
51
52
response = requests.post(cls.api_endpoint, headers=headers, json=data, stream=stream)
53
54
if stream:
55
return cls.process_streaming_response(response)
56
else:
57
return cls.process_non_streaming_response(response)
58
59
@classmethod
60
def process_non_streaming_response(cls, response):
61
if response.status_code == 200:
62
try:
63
content = response.text.lstrip('')
64
data = json.loads(content)
65
return data.get('message', '')
66
except json.JSONDecodeError:
67
return "Error: Unable to decode JSON response"
68
else:
69
return f"Error: {response.status_code}"
70
71
@classmethod
72
def process_streaming_response(cls, response):
73
full_message = ""
74
for line in response.iter_lines(decode_unicode=True):
75
if line:
76
try:
77
line = line.lstrip('')
78
data = json.loads(line)
79
if data.get('finish'):
80
break
81
message = data.get('message', '')
82
if message and message != full_message:
83
yield message[len(full_message):]
84
full_message = message
85
except json.JSONDecodeError:
86
pass
@@ -1,92 +0,0 @@
1
from __future__ import annotations
2
3
import json
4
import requests
5
6
from ...typing import CreateResult, Messages
7
from ..base_provider import ProviderModelMixin, AbstractProvider
8
from ..helper import format_prompt
9
10
class NexraChatGptV2(AbstractProvider, ProviderModelMixin):
11
label = "Nexra ChatGPT v2"
12
url = "https://nexra.aryahcr.cc/documentation/chatgpt/en"
13
api_endpoint = "https://nexra.aryahcr.cc/api/chat/complements"
14
working = True
15
supports_stream = True
16
17
default_model = 'chatgpt'
18
models = [default_model]
19
model_aliases = {"gpt-4": "chatgpt"}
20
21
@classmethod
22
def get_model(cls, model: str) -> str:
23
if model in cls.models:
24
return model
25
elif model in cls.model_aliases:
26
return cls.model_aliases[model]
27
else:
28
return cls.default_model
29
30
@classmethod
31
def create_completion(
32
cls,
33
model: str,
34
messages: Messages,
35
stream: bool,
36
proxy: str = None,
37
markdown: bool = False,
38
**kwargs
39
) -> CreateResult:
40
model = cls.get_model(model)
41
42
headers = {
43
'Content-Type': 'application/json'
44
}
45
46
data = {
47
"messages": [
48
{
49
"role": "user",
50
"content": format_prompt(messages)
51
}
52
],
53
"stream": stream,
54
"markdown": markdown,
55
"model": model
56
}
57
58
response = requests.post(cls.api_endpoint, headers=headers, json=data, stream=stream)
59
60
if stream:
61
return cls.process_streaming_response(response)
62
else:
63
return cls.process_non_streaming_response(response)
64
65
@classmethod
66
def process_non_streaming_response(cls, response):
67
if response.status_code == 200:
68
try:
69
content = response.text.lstrip('')
70
data = json.loads(content)
71
return data.get('message', '')
72
except json.JSONDecodeError:
73
return "Error: Unable to decode JSON response"
74
else:
75
return f"Error: {response.status_code}"
76
77
@classmethod
78
def process_streaming_response(cls, response):
79
full_message = ""
80
for line in response.iter_lines(decode_unicode=True):
81
if line:
82
try:
83
line = line.lstrip('')
84
data = json.loads(line)
85
if data.get('finish'):
86
break
87
message = data.get('message', '')
88
if message:
89
yield message[len(full_message):]
90
full_message = message
91
except json.JSONDecodeError:
92
pass
@@ -1,64 +0,0 @@
1
from __future__ import annotations
2
3
import json
4
import requests
5
6
from ...typing import CreateResult, Messages
7
from ..base_provider import ProviderModelMixin, AbstractProvider
8
from ..helper import format_prompt
9
10
class NexraChatGptWeb(AbstractProvider, ProviderModelMixin):
11
label = "Nexra ChatGPT Web"
12
url = "https://nexra.aryahcr.cc/documentation/chatgpt/en"
13
working = True
14
15
default_model = "gptweb"
16
models = [default_model]
17
model_aliases = {"gpt-4": "gptweb"}
18
api_endpoints = {"gptweb": "https://nexra.aryahcr.cc/api/chat/gptweb"}
19
20
@classmethod
21
def get_model(cls, model: str) -> str:
22
if model in cls.models:
23
return model
24
elif model in cls.model_aliases:
25
return cls.model_aliases[model]
26
else:
27
return cls.default_model
28
29
@classmethod
30
def create_completion(
31
cls,
32
model: str,
33
messages: Messages,
34
proxy: str = None,
35
markdown: bool = False,
36
**kwargs
37
) -> CreateResult:
38
model = cls.get_model(model)
39
api_endpoint = cls.api_endpoints.get(model, cls.api_endpoints[cls.default_model])
40
41
headers = {
42
'Content-Type': 'application/json'
43
}
44
45
data = {
46
"prompt": format_prompt(messages),
47
"markdown": markdown
48
}
49
50
response = requests.post(api_endpoint, headers=headers, json=data)
51
52
return cls.process_response(response)
53
54
@classmethod
55
def process_response(cls, response):
56
if response.status_code == 200:
57
try:
58
content = response.text.lstrip('_')
59
json_response = json.loads(content)
60
return json_response.get('gpt', '')
61
except json.JSONDecodeError:
62
return "Error: Unable to decode JSON response"
63
else:
64
return f"Error: {response.status_code}"
@@ -1,9 +1,6 @@
1
1
from .NexraBing import NexraBing
2
2
from .NexraBlackbox import NexraBlackbox
3
3
from .NexraChatGPT import NexraChatGPT
4
from .NexraChatGPT4o import NexraChatGPT4o
5
from .NexraChatGptV2 import NexraChatGptV2
6
from .NexraChatGptWeb import NexraChatGptWeb
7
4
from .NexraDallE import NexraDallE
8
5
from .NexraDallE2 import NexraDallE2
9
6
from .NexraEmi import NexraEmi
@@ -42,9 +42,6 @@ from .Provider import (
42
42
NexraBing,
43
43
NexraBlackbox,
44
44
NexraChatGPT,
45
NexraChatGPT4o,
46
NexraChatGptV2,
47
NexraChatGptWeb,
48
45
NexraDallE,
49
46
NexraDallE2,
50
47
NexraEmi,
@@ -140,7 +137,7 @@ gpt_35_turbo = Model(
140
137
gpt_4o = Model(
141
138
name = 'gpt-4o',
142
139
base_provider = 'OpenAI',
143
best_provider = IterListProvider([NexraChatGPT4o, Blackbox, ChatGptEs, AmigoChat, DarkAI, Editee, GizAI, Airforce, Liaobots, OpenaiChat])
140
best_provider = IterListProvider([NexraChatGPT, Blackbox, ChatGptEs, AmigoChat, DarkAI, Editee, GizAI, Airforce, Liaobots, OpenaiChat])
144
141
)
145
142
146
143
gpt_4o_mini = Model(
@@ -158,7 +155,7 @@ gpt_4_turbo = Model(
158
155
gpt_4 = Model(
159
156
name = 'gpt-4',
160
157
base_provider = 'OpenAI',
161
best_provider = IterListProvider([Chatgpt4Online, Ai4Chat, NexraBing, NexraChatGPT, NexraChatGptV2, NexraChatGptWeb, 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, Airforce, Bing, OpenaiChat, gpt_4_turbo.best_provider, gpt_4o.best_provider, gpt_4o_mini.best_provider])
162
159
)
163
160
164
161
# o1