返回提交历史
Modified
g4f/Provider/Cohere.py
+1
-1
Modified
g4f/Provider/DuckDuckGo.py
+5
-2
Modified
g4f/Provider/Llama.py
+1
-1
Modified
g4f/Provider/PerplexityLabs.py
+5
-2
Modified
g4f/Provider/__init__.py
+1
-1
Modified
g4f/Provider/needs_auth/OpenaiChat.py
+2
-1
Modified
g4f/models.py
+46
-108
Modified
g4f/providers/retry_provider.py
+14
-27
XFEstudio/gpt4free
Update model list / providers
19944818
代码差异
8 个文件
+75
-143
@@ -9,7 +9,7 @@ from .helper import format_prompt
9
9
10
10
class Cohere(AbstractProvider):
11
11
url = "https://cohereforai-c4ai-command-r-plus.hf.space"
12
working = True
12
working = False
13
13
supports_gpt_35_turbo = False
14
14
supports_gpt_4 = False
15
15
supports_stream = True
@@ -16,8 +16,11 @@ class DuckDuckGo(AsyncGeneratorProvider, ProviderModelMixin):
16
16
supports_message_history = True
17
17
18
18
default_model = "gpt-3.5-turbo-0125"
19
models = ["gpt-3.5-turbo-0125", "claude-instant-1.2"]
20
model_aliases = {"gpt-3.5-turbo": "gpt-3.5-turbo-0125"}
19
models = ["gpt-3.5-turbo-0125", "claude-3-haiku-20240307"]
20
model_aliases = {
21
"gpt-3.5-turbo": "gpt-3.5-turbo-0125",
22
"claude-3-haiku": "claude-3-haiku-20240307"
23
}
21
24
22
25
status_url = "https://duckduckgo.com/duckchat/v1/status"
23
26
chat_url = "https://duckduckgo.com/duckchat/v1/chat"
@@ -9,7 +9,7 @@ from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
9
9
10
10
class Llama(AsyncGeneratorProvider, ProviderModelMixin):
11
11
url = "https://www.llama2.ai"
12
working = True
12
working = False
13
13
supports_message_history = True
14
14
default_model = "meta/meta-llama-3-70b-instruct"
15
15
models = [
@@ -21,11 +21,14 @@ class PerplexityLabs(AsyncGeneratorProvider, ProviderModelMixin):
21
21
"related"
22
22
]
23
23
model_aliases = {
24
"mistralai/Mistral-7B-Instruct-v0.1": "mistral-7b-instruct",
24
"mistralai/Mistral-7B-Instruct-v0.1": "mistral-7b-instruct",
25
"mistralai/Mistral-7B-Instruct-v0.2": "mistral-7b-instruct",
25
26
"mistralai/Mixtral-8x7B-Instruct-v0.1": "mixtral-8x7b-instruct",
26
27
"codellama/CodeLlama-70b-Instruct-hf": "codellama-70b-instruct",
27
28
"llava-v1.5-7b": "llava-v1.5-7b-wrapper",
28
'databricks/dbrx-instruct': "dbrx-instruct"
29
"databricks/dbrx-instruct": "dbrx-instruct",
30
"meta-llama/Meta-Llama-3-70B-Instruct": "llama-3-70b-instruct",
31
"meta-llama/Meta-Llama-3-8B-Instruct": "llama-3-8b-instruct"
29
32
}
30
33
31
34
@classmethod
@@ -1,7 +1,7 @@
1
1
from __future__ import annotations
2
2
3
3
from ..providers.types import BaseProvider, ProviderType
4
from ..providers.retry_provider import RetryProvider, IterProvider
4
from ..providers.retry_provider import RetryProvider, IterListProvider
5
5
from ..providers.base_provider import AsyncProvider, AsyncGeneratorProvider
6
6
from ..providers.create_images import CreateImagesProvider
7
7
@@ -373,6 +373,7 @@ class OpenaiChat(AsyncGeneratorProvider, ProviderModelMixin):
373
373
except NoValidHarFileError as e:
374
374
if cls._api_key is None and cls.needs_auth:
375
375
raise e
376
cls._create_request_args()
376
377
377
378
if cls.default_model is None:
378
379
cls.default_model = cls.get_model(await cls.get_default_model(session, cls._headers))
@@ -420,7 +421,7 @@ class OpenaiChat(AsyncGeneratorProvider, ProviderModelMixin):
420
421
**requirements["proofofwork"],
421
422
user_agent=cls._headers["user-agent"],
422
423
proofTokens=proofTokens
423
)
424
)
424
425
if debug.logging:
425
426
print(
426
427
'Arkose:', False if not need_arkose else arkose_token[:12]+"...",
@@ -2,27 +2,27 @@ from __future__ import annotations
2
2
3
3
from dataclasses import dataclass
4
4
5
from .Provider import RetryProvider, ProviderType
5
from .Provider import IterListProvider, ProviderType
6
6
from .Provider import (
7
7
Aichatos,
8
8
Bing,
9
9
Blackbox,
10
Chatgpt4Online,
11
10
ChatgptAi,
12
11
ChatgptNext,
13
Cohere,
14
12
Cnote,
15
13
DeepInfra,
14
DuckDuckGo,
15
Ecosia,
16
16
Feedough,
17
17
FreeGpt,
18
18
Gemini,
19
GeminiProChat,
19
GeminiPro,
20
20
GigaChat,
21
21
HuggingChat,
22
22
HuggingFace,
23
23
Koala,
24
24
Liaobots,
25
Llama,
25
MetaAI,
26
26
OpenaiChat,
27
27
PerplexityLabs,
28
28
Replicate,
@@ -32,7 +32,6 @@ from .Provider import (
32
32
Reka
33
33
)
34
34
35
36
35
@dataclass(unsafe_hash=True)
37
36
class Model:
38
37
"""
@@ -55,12 +54,12 @@ class Model:
55
54
default = Model(
56
55
name = "",
57
56
base_provider = "",
58
best_provider = RetryProvider([
57
best_provider = IterListProvider([
59
58
Bing,
60
59
ChatgptAi,
61
60
You,
62
Chatgpt4Online,
63
OpenaiChat
61
OpenaiChat,
62
Ecosia,
64
63
])
65
64
)
66
65
@@ -68,11 +67,14 @@ default = Model(
68
67
gpt_35_long = Model(
69
68
name = 'gpt-3.5-turbo',
70
69
base_provider = 'openai',
71
best_provider = RetryProvider([
70
best_provider = IterListProvider([
72
71
FreeGpt,
73
72
You,
74
73
ChatgptNext,
75
74
OpenaiChat,
75
Koala,
76
Ecosia,
77
DuckDuckGo,
76
78
])
77
79
)
78
80
@@ -80,7 +82,7 @@ gpt_35_long = Model(
80
82
gpt_35_turbo = Model(
81
83
name = 'gpt-3.5-turbo',
82
84
base_provider = 'openai',
83
best_provider = RetryProvider([
85
best_provider = IterListProvider([
84
86
FreeGpt,
85
87
You,
86
88
ChatgptNext,
@@ -95,7 +97,7 @@ gpt_35_turbo = Model(
95
97
gpt_4 = Model(
96
98
name = 'gpt-4',
97
99
base_provider = 'openai',
98
best_provider = RetryProvider([
100
best_provider = IterListProvider([
99
101
Bing, Liaobots,
100
102
])
101
103
)
@@ -103,8 +105,8 @@ gpt_4 = Model(
103
105
gpt_4o = Model(
104
106
name = 'gpt-4o',
105
107
base_provider = 'openai',
106
best_provider = RetryProvider([
107
You
108
best_provider = IterListProvider([
109
You, Liaobots
108
110
])
109
111
)
110
112
@@ -120,46 +122,22 @@ gigachat = Model(
120
122
best_provider = GigaChat
121
123
)
122
124
123
gigachat_plus = Model(
124
name = 'GigaChat-Plus',
125
base_provider = 'gigachat',
126
best_provider = GigaChat
127
)
128
129
gigachat_pro = Model(
130
name = 'GigaChat-Pro',
131
base_provider = 'gigachat',
132
best_provider = GigaChat
133
)
134
135
llama2_7b = Model(
136
name = "meta-llama/Llama-2-7b-chat-hf",
137
base_provider = 'meta',
138
best_provider = RetryProvider([Llama, DeepInfra])
139
)
140
141
llama2_13b = Model(
142
name = "meta-llama/Llama-2-13b-chat-hf",
143
base_provider = 'meta',
144
best_provider = RetryProvider([Llama, DeepInfra])
145
)
146
147
llama2_70b = Model(
148
name = "meta-llama/Llama-2-70b-chat-hf",
125
meta = Model(
126
name = "meta",
149
127
base_provider = "meta",
150
best_provider = RetryProvider([Llama, DeepInfra])
128
best_provider = MetaAI
151
129
)
152
130
153
131
llama3_8b_instruct = Model(
154
132
name = "meta-llama/Meta-Llama-3-8B-Instruct",
155
133
base_provider = "meta",
156
best_provider = RetryProvider([Llama, DeepInfra, Replicate])
134
best_provider = IterListProvider([DeepInfra, PerplexityLabs, Replicate])
157
135
)
158
136
159
137
llama3_70b_instruct = Model(
160
138
name = "meta-llama/Meta-Llama-3-70B-Instruct",
161
139
base_provider = "meta",
162
best_provider = RetryProvider([Llama, DeepInfra])
140
best_provider = IterListProvider([DeepInfra, PerplexityLabs, Replicate])
163
141
)
164
142
165
143
codellama_34b_instruct = Model(
@@ -171,61 +149,30 @@ codellama_34b_instruct = Model(
171
149
codellama_70b_instruct = Model(
172
150
name = "codellama/CodeLlama-70b-Instruct-hf",
173
151
base_provider = "meta",
174
best_provider = RetryProvider([DeepInfra, PerplexityLabs])
152
best_provider = IterListProvider([DeepInfra, PerplexityLabs])
175
153
)
176
154
177
155
# Mistral
178
156
mixtral_8x7b = Model(
179
157
name = "mistralai/Mixtral-8x7B-Instruct-v0.1",
180
158
base_provider = "huggingface",
181
best_provider = RetryProvider([DeepInfra, HuggingFace, PerplexityLabs])
159
best_provider = IterListProvider([DeepInfra, HuggingFace, PerplexityLabs])
182
160
)
183
161
184
162
mistral_7b = Model(
185
163
name = "mistralai/Mistral-7B-Instruct-v0.1",
186
164
base_provider = "huggingface",
187
best_provider = RetryProvider([HuggingChat, HuggingFace, PerplexityLabs])
165
best_provider = IterListProvider([HuggingChat, HuggingFace, PerplexityLabs])
188
166
)
189
167
190
168
mistral_7b_v02 = Model(
191
169
name = "mistralai/Mistral-7B-Instruct-v0.2",
192
170
base_provider = "huggingface",
193
best_provider = DeepInfra
194
)
195
196
mixtral_8x22b = Model(
197
name = "HuggingFaceH4/zephyr-orpo-141b-A35b-v0.1",
198
base_provider = "huggingface",
199
best_provider = DeepInfra
200
)
201
202
# Misc models
203
dolphin_mixtral_8x7b = Model(
204
name = "cognitivecomputations/dolphin-2.6-mixtral-8x7b",
205
base_provider = "huggingface",
206
best_provider = DeepInfra
207
)
208
209
lzlv_70b = Model(
210
name = "lizpreciatior/lzlv_70b_fp16_hf",
211
base_provider = "huggingface",
212
best_provider = DeepInfra
213
)
214
215
airoboros_70b = Model(
216
name = "deepinfra/airoboros-70b",
217
base_provider = "huggingface",
218
best_provider = DeepInfra
219
)
220
221
openchat_35 = Model(
222
name = "openchat/openchat_3.5",
223
base_provider = "huggingface",
224
best_provider = DeepInfra
171
best_provider = IterListProvider([DeepInfra, HuggingFace, PerplexityLabs])
225
172
)
226
173
227
174
# Bard
228
gemini = bard = palm = Model(
175
gemini = Model(
229
176
name = 'gemini',
230
177
base_provider = 'google',
231
178
best_provider = Gemini
@@ -234,7 +181,7 @@ gemini = bard = palm = Model(
234
181
claude_v2 = Model(
235
182
name = 'claude-v2',
236
183
base_provider = 'anthropic',
237
best_provider = RetryProvider([Vercel])
184
best_provider = IterListProvider([Vercel])
238
185
)
239
186
240
187
claude_3_opus = Model(
@@ -249,6 +196,12 @@ claude_3_sonnet = Model(
249
196
best_provider = You
250
197
)
251
198
199
claude_3_haiku = Model(
200
name = 'claude-3-haiku',
201
base_provider = 'anthropic',
202
best_provider = DuckDuckGo
203
)
204
252
205
gpt_35_turbo_16k = Model(
253
206
name = 'gpt-3.5-turbo-16k',
254
207
base_provider = 'openai',
@@ -288,7 +241,7 @@ gpt_4_32k_0613 = Model(
288
241
gemini_pro = Model(
289
242
name = 'gemini-pro',
290
243
base_provider = 'google',
291
best_provider = RetryProvider([GeminiProChat, You])
244
best_provider = IterListProvider([GeminiPro, You])
292
245
)
293
246
294
247
pi = Model(
@@ -300,13 +253,13 @@ pi = Model(
300
253
dbrx_instruct = Model(
301
254
name = 'databricks/dbrx-instruct',
302
255
base_provider = 'mistral',
303
best_provider = RetryProvider([DeepInfra, PerplexityLabs])
256
best_provider = IterListProvider([DeepInfra, PerplexityLabs])
304
257
)
305
258
306
259
command_r_plus = Model(
307
260
name = 'CohereForAI/c4ai-command-r-plus',
308
261
base_provider = 'mistral',
309
best_provider = RetryProvider([HuggingChat, Cohere])
262
best_provider = IterListProvider([HuggingChat])
310
263
)
311
264
312
265
blackbox = Model(
@@ -334,9 +287,8 @@ class ModelUtils:
334
287
'gpt-3.5-turbo-0613' : gpt_35_turbo_0613,
335
288
'gpt-3.5-turbo-16k' : gpt_35_turbo_16k,
336
289
'gpt-3.5-turbo-16k-0613' : gpt_35_turbo_16k_0613,
337
338
290
'gpt-3.5-long': gpt_35_long,
339
291
340
292
# gpt-4
341
293
'gpt-4o' : gpt_4o,
342
294
'gpt-4' : gpt_4,
@@ -345,52 +297,38 @@ class ModelUtils:
345
297
'gpt-4-32k-0613' : gpt_4_32k_0613,
346
298
'gpt-4-turbo' : gpt_4_turbo,
347
299
348
# Llama
349
'llama2-7b' : llama2_7b,
350
'llama2-13b': llama2_13b,
351
'llama2-70b': llama2_70b,
352
353
'llama3-8b' : llama3_8b_instruct, # alias
300
"meta-ai": meta,
301
'llama3-8b': llama3_8b_instruct, # alias
354
302
'llama3-70b': llama3_70b_instruct, # alias
355
303
'llama3-8b-instruct' : llama3_8b_instruct,
356
304
'llama3-70b-instruct': llama3_70b_instruct,
357
305
358
306
'codellama-34b-instruct': codellama_34b_instruct,
359
307
'codellama-70b-instruct': codellama_70b_instruct,
360
308
361
# GigaChat
362
'gigachat' : gigachat,
363
'gigachat_plus': gigachat_plus,
364
'gigachat_pro' : gigachat_pro,
365
366
309
# Mistral Opensource
367
310
'mixtral-8x7b': mixtral_8x7b,
368
311
'mistral-7b': mistral_7b,
369
312
'mistral-7b-v02': mistral_7b_v02,
370
'mixtral-8x22b': mixtral_8x22b,
371
'dolphin-mixtral-8x7b': dolphin_mixtral_8x7b,
372
313
373
314
# google gemini
374
315
'gemini': gemini,
375
316
'gemini-pro': gemini_pro,
376
317
377
318
# anthropic
378
319
'claude-v2': claude_v2,
379
320
'claude-3-opus': claude_3_opus,
380
321
'claude-3-sonnet': claude_3_sonnet,
381
322
'claude-3-haiku': claude_3_haiku,
323
382
324
# reka core
383
'reka-core': reka_core,
384
325
'reka': reka_core,
385
'Reka Core': reka_core,
386
326
387
327
# other
388
328
'blackbox': blackbox,
389
329
'command-r+': command_r_plus,
390
330
'dbrx-instruct': dbrx_instruct,
391
'lzlv-70b': lzlv_70b,
392
'airoboros-70b': airoboros_70b,
393
'openchat_3.5': openchat_35,
331
'gigachat': gigachat,
394
332
'pi': pi
395
333
}
396
334
@@ -4,11 +4,11 @@ import asyncio
4
4
import random
5
5
6
6
from ..typing import Type, List, CreateResult, Messages, Iterator, AsyncResult
7
from .types import BaseProvider, BaseRetryProvider
7
from .types import BaseProvider, BaseRetryProvider, ProviderType
8
8
from .. import debug
9
9
from ..errors import RetryProviderError, RetryNoProviderError
10
10
11
class NewBaseRetryProvider(BaseRetryProvider):
11
class IterListProvider(BaseRetryProvider):
12
12
def __init__(
13
13
self,
14
14
providers: List[Type[BaseProvider]],
@@ -45,21 +45,17 @@ class NewBaseRetryProvider(BaseRetryProvider):
45
45
Raises:
46
46
Exception: Any exception encountered during the completion process.
47
47
"""
48
providers = [p for p in self.providers if stream and p.supports_stream] if stream else self.providers
49
if self.shuffle:
50
random.shuffle(providers)
51
52
48
exceptions = {}
53
49
started: bool = False
54
50
55
for provider in providers:
51
for provider in self.get_providers(stream):
56
52
self.last_provider = provider
57
53
try:
58
54
if debug.logging:
59
55
print(f"Using {provider.__name__} provider")
60
56
for token in provider.create_completion(model, messages, stream, **kwargs):
61
57
yield token
62
started = True
58
started = True
63
59
if started:
64
60
return
65
61
except Exception as e:
@@ -87,13 +83,9 @@ class NewBaseRetryProvider(BaseRetryProvider):
87
83
Raises:
88
84
Exception: Any exception encountered during the asynchronous completion process.
89
85
"""
90
providers = self.providers
91
if self.shuffle:
92
random.shuffle(providers)
93
94
86
exceptions = {}
95
87
96
for provider in providers:
88
for provider in self.get_providers(False):
97
89
self.last_provider = provider
98
90
try:
99
91
if debug.logging:
@@ -109,8 +101,8 @@ class NewBaseRetryProvider(BaseRetryProvider):
109
101
110
102
raise_exceptions(exceptions)
111
103
112
def get_providers(self, stream: bool):
113
providers = [p for p in self.providers if stream and p.supports_stream] if stream else self.providers
104
def get_providers(self, stream: bool) -> list[ProviderType]:
105
providers = [p for p in self.providers if p.supports_stream] if stream else self.providers
114
106
if self.shuffle:
115
107
random.shuffle(providers)
116
108
return providers
@@ -138,7 +130,7 @@ class NewBaseRetryProvider(BaseRetryProvider):
138
130
else:
139
131
for token in provider.create_completion(model, messages, stream, **kwargs):
140
132
yield token
141
started = True
133
started = True
142
134
if started:
143
135
return
144
136
except Exception as e:
@@ -150,7 +142,7 @@ class NewBaseRetryProvider(BaseRetryProvider):
150
142
151
143
raise_exceptions(exceptions)
152
144
153
class RetryProvider(NewBaseRetryProvider):
145
class RetryProvider(IterListProvider):
154
146
def __init__(
155
147
self,
156
148
providers: List[Type[BaseProvider]],
@@ -188,11 +180,10 @@ class RetryProvider(NewBaseRetryProvider):
188
180
Raises:
189
181
Exception: Any exception encountered during the completion process.
190
182
"""
191
providers = self.get_providers(stream)
192
if self.single_provider_retry and len(providers) == 1:
183
if self.single_provider_retry:
193
184
exceptions = {}
194
185
started: bool = False
195
provider = providers[0]
186
provider = self.providers[0]
196
187
self.last_provider = provider
197
188
for attempt in range(self.max_retries):
198
189
try:
@@ -200,7 +191,7 @@ class RetryProvider(NewBaseRetryProvider):
200
191
print(f"Using {provider.__name__} provider (attempt {attempt + 1})")
201
192
for token in provider.create_completion(model, messages, stream, **kwargs):
202
193
yield token
203
started = True
194
started = True
204
195
if started:
205
196
return
206
197
except Exception as e:
@@ -229,14 +220,10 @@ class RetryProvider(NewBaseRetryProvider):
229
220
Raises:
230
221
Exception: Any exception encountered during the asynchronous completion process.
231
222
"""
232
providers = self.providers
233
if self.shuffle:
234
random.shuffle(providers)
235
236
223
exceptions = {}
237
224
238
if self.single_provider_retry and len(providers) == 1:
239
provider = providers[0]
225
if self.single_provider_retry:
226
provider = self.providers[0]
240
227
self.last_provider = provider
241
228
for attempt in range(self.max_retries):
242
229
try: