返回提交历史
Modified
docs/providers-and-models.md
+2
-1
Added
g4f/Provider/ChatHub.py
+84
-0
Modified
g4f/Provider/PerplexityLabs.py
+4
-4
Modified
g4f/Provider/__init__.py
+1
-0
Modified
g4f/models.py
+50
-27
XFEstudio/gpt4free
New provider added ChatHub
105b4aac
代码差异
5 个文件
+141
-32
@@ -28,6 +28,7 @@
28
28
|[chatgpt4online.org](https://chatgpt4online.org)|`g4f.Provider.Chatgpt4Online`|`gpt-4`|❌|❌|✔||❌|
29
29
|[chatgpt4o.one](https://chatgpt4o.one)|`g4f.Provider.Chatgpt4o`|`gpt-4o-mini`|❌|❌|❌||❌|
30
30
|[chatgptfree.ai](https://chatgptfree.ai)|`g4f.Provider.ChatgptFree`|`gpt-4o-mini`|❌|❌|?||❌|
31
|[app.chathub.gg](https://app.chathub.gg)|`g4f.Provider.ChatHub`|`llama-3.1-8b, mixtral-8x7b, gemma-2, sonar-online`|❌|❌|✔||❌|
31
32
|[duckduckgo.com](https://duckduckgo.com/duckchat/v1/chat)|`g4f.Provider.DDG`|`gpt-4o-mini, claude-3-haiku, llama-3.1-70b, mixtral-8x7b`|❌|❌|✔||❌|
32
33
|[deepinfra.com](https://deepinfra.com)|`g4f.Provider.DeepInfra`|✔|❌|❌|✔||✔|
33
34
|[deepinfra.com/chat](https://deepinfra.com/chat)|`g4f.Provider.DeepInfraChat`|`llama-3.1-405b, llama-3.1-70b, Llama-3.1-8B, mixtral-8x22b, mixtral-8x7b, wizardlm-2-8x22b, wizardlm-2-7b, qwen-2-72b, phi-3-medium-4k, gemma-2b-27b, minicpm-llama-3-v2.5, mistral-7b, lzlv_70b, openchat-3.6-8b, phind-codellama-34b-v2, dolphin-2.9.1-llama-3-70b`|❌|`minicpm-llama-3-v2.5`|❌||❌|
@@ -55,7 +56,7 @@
55
56
|[chatgpt.com](https://chatgpt.com/)|`g4f.Provider.OpenaiChat`|`gpt-4o, gpt-4o-mini, gpt-4`|❌|✔|||✔|
56
57
|[www.perplexity.ai)](https://www.perplexity.ai)|`g4f.Provider.PerplexityAi`|✔|❌|❌|?||❌|
57
58
|[perplexity.ai](https://www.perplexity.ai)|`g4f.Provider.PerplexityApi`|✔|❌|❌|?||✔|
58
|[labs.perplexity.ai](https://labs.perplexity.ai)|`g4f.Provider.PerplexityLabs`|`llama-3.1-8b, llama-3.1-70b`|❌|❌|?||❌|
59
|[labs.perplexity.ai](https://labs.perplexity.ai)|`g4f.Provider.PerplexityLabs`|`sonar-online, sonar-chat, llama-3.1-8b, llama-3.1-70b`|❌|❌|?||❌|
59
60
|[pi.ai/talk](https://pi.ai/talk)|`g4f.Provider.Pi`|`pi`|❌|❌|?||❌|
60
61
|[]()|`g4f.Provider.Pizzagpt`|`gpt-4o-mini`|❌|❌|✔||❌|
61
62
|[poe.com](https://poe.com)|`g4f.Provider.Poe`|✔|❌|❌|?||✔|
@@ -0,0 +1,84 @@
1
from __future__ import annotations
2
3
import json
4
from aiohttp import ClientSession
5
6
from ..typing import AsyncResult, Messages
7
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
8
from .helper import format_prompt
9
10
class ChatHub(AsyncGeneratorProvider, ProviderModelMixin):
11
label = "ChatHub"
12
url = "https://app.chathub.gg"
13
api_endpoint = "https://app.chathub.gg/api/v3/chat/completions"
14
working = True
15
supports_stream = True
16
supports_system_message = True
17
supports_message_history = True
18
19
default_model = 'meta/llama3.1-8b'
20
models = [
21
'meta/llama3.1-8b',
22
'mistral/mixtral-8x7b',
23
'google/gemma-2',
24
'perplexity/sonar-online',
25
]
26
27
model_aliases = {
28
"llama-3.1-8b": "meta/llama3.1-8b",
29
"mixtral-8x7b": "mistral/mixtral-8x7b",
30
"gemma-2": "google/gemma-2",
31
"sonar-online": "perplexity/sonar-online",
32
}
33
34
@classmethod
35
def get_model(cls, model: str) -> str:
36
if model in cls.models:
37
return model
38
elif model in cls.model_aliases:
39
return cls.model_aliases[model]
40
else:
41
return cls.default_model
42
43
@classmethod
44
async def create_async_generator(
45
cls,
46
model: str,
47
messages: Messages,
48
proxy: str = None,
49
**kwargs
50
) -> AsyncResult:
51
model = cls.get_model(model)
52
53
headers = {
54
'accept': '*/*',
55
'accept-language': 'en-US,en;q=0.9',
56
'content-type': 'application/json',
57
'origin': cls.url,
58
'referer': f"{cls.url}/chat/cloud-llama3.1-8b",
59
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
60
'x-app-id': 'web'
61
}
62
63
async with ClientSession(headers=headers) as session:
64
prompt = format_prompt(messages)
65
data = {
66
"model": model,
67
"messages": [{"role": "user", "content": prompt}],
68
"tools": []
69
}
70
71
async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
72
response.raise_for_status()
73
async for line in response.content:
74
if line:
75
decoded_line = line.decode('utf-8')
76
if decoded_line.startswith('data:'):
77
try:
78
data = json.loads(decoded_line[5:])
79
if data['type'] == 'text-delta':
80
yield data['textDelta']
81
elif data['type'] == 'done':
82
break
83
except json.JSONDecodeError:
84
continue
@@ -24,10 +24,10 @@ class PerplexityLabs(AsyncGeneratorProvider, ProviderModelMixin):
24
24
]
25
25
26
26
model_aliases = {
27
"llama-3.1-8b": "llama-3.1-sonar-large-128k-online",
28
"llama-3.1-8b": "sonar-small-128k-online",
29
"llama-3.1-8b": "llama-3.1-sonar-large-128k-chat",
30
"llama-3.1-8b": "llama-3.1-sonar-small-128k-chat",
27
"sonar-online": "llama-3.1-sonar-large-128k-online",
28
"sonar-online": "sonar-small-128k-online",
29
"sonar-chat": "llama-3.1-sonar-large-128k-chat",
30
"sonar-chat": "llama-3.1-sonar-small-128k-chat",
31
31
"llama-3.1-8b": "llama-3.1-8b-instruct",
32
32
"llama-3.1-70b": "llama-3.1-70b-instruct",
33
33
}
@@ -27,6 +27,7 @@ from .Chatgpt4Online import Chatgpt4Online
27
27
from .Chatgpt4o import Chatgpt4o
28
28
from .ChatGptEs import ChatGptEs
29
29
from .ChatgptFree import ChatgptFree
30
from .ChatHub import ChatHub
30
31
from .DDG import DDG
31
32
from .DeepInfra import DeepInfra
32
33
from .DeepInfraChat import DeepInfraChat
@@ -16,6 +16,7 @@ from .Provider import (
16
16
Chatgpt4Online,
17
17
ChatGptEs,
18
18
ChatgptFree,
19
ChatHub,
19
20
DDG,
20
21
DeepInfra,
21
22
DeepInfraChat,
@@ -96,9 +97,7 @@ default = Model(
96
97
gpt_3 = Model(
97
98
name = 'gpt-3',
98
99
base_provider = 'OpenAI',
99
best_provider = IterListProvider([
100
Nexra,
101
])
100
best_provider = Nexra
102
101
)
103
102
104
103
# gpt-3.5
@@ -167,7 +166,7 @@ meta = Model(
167
166
llama_2_13b = Model(
168
167
name = "llama-2-13b",
169
168
base_provider = "Meta Llama",
170
best_provider = IterListProvider([Airforce])
169
best_provider = Airforce
171
170
)
172
171
173
172
# llama 3
@@ -193,7 +192,7 @@ llama_3 = Model(
193
192
llama_3_1_8b = Model(
194
193
name = "llama-3.1-8b",
195
194
base_provider = "Meta Llama",
196
best_provider = IterListProvider([Blackbox, DeepInfraChat, Airforce, PerplexityLabs])
195
best_provider = IterListProvider([Blackbox, DeepInfraChat, ChatHub, Airforce, PerplexityLabs])
197
196
)
198
197
199
198
llama_3_1_70b = Model(
@@ -225,7 +224,7 @@ mistral_7b = Model(
225
224
mixtral_8x7b = Model(
226
225
name = "mixtral-8x7b",
227
226
base_provider = "Mistral",
228
best_provider = IterListProvider([DDG, ReplicateHome, DeepInfraChat, Airforce, DeepInfra])
227
best_provider = IterListProvider([DDG, ReplicateHome, DeepInfraChat, ChatHub, Airforce, DeepInfra])
229
228
)
230
229
231
230
mixtral_8x22b = Model(
@@ -245,7 +244,7 @@ mistral_nemo = Model(
245
244
mixtral_8x7b_dpo = Model(
246
245
name = "mixtral-8x7b-dpo",
247
246
base_provider = "NousResearch",
248
best_provider = IterListProvider([Airforce])
247
best_provider = Airforce
249
248
)
250
249
251
250
hermes_3 = Model(
@@ -259,7 +258,7 @@ hermes_3 = Model(
259
258
phi_3_medium_4k = Model(
260
259
name = "phi-3-medium-4k",
261
260
base_provider = "Microsoft",
262
best_provider = IterListProvider([DeepInfraChat])
261
best_provider = DeepInfraChat
263
262
)
264
263
265
264
phi_3_5_mini = Model(
@@ -295,7 +294,7 @@ gemini = Model(
295
294
gemma_2b_9b = Model(
296
295
name = 'gemma-2b-9b',
297
296
base_provider = 'Google',
298
best_provider = IterListProvider([Airforce])
297
best_provider = Airforce
299
298
)
300
299
301
300
gemma_2b_27b = Model(
@@ -313,37 +312,43 @@ gemma_2b = Model(
313
312
])
314
313
)
315
314
315
gemma_2 = Model(
316
name = 'gemma-2',
317
base_provider = 'Google',
318
best_provider = ChatHub
319
)
320
316
321
317
322
### Anthropic ###
318
323
claude_2 = Model(
319
324
name = 'claude-2',
320
325
base_provider = 'Anthropic',
321
best_provider = IterListProvider([You])
326
best_provider = You
322
327
)
323
328
324
329
claude_2_0 = Model(
325
330
name = 'claude-2.0',
326
331
base_provider = 'Anthropic',
327
best_provider = IterListProvider([Liaobots])
332
best_provider = Liaobots
328
333
)
329
334
330
335
claude_2_1 = Model(
331
336
name = 'claude-2.1',
332
337
base_provider = 'Anthropic',
333
best_provider = IterListProvider([Liaobots])
338
best_provider = Liaobots
334
339
)
335
340
336
341
# claude 3
337
342
claude_3_opus = Model(
338
343
name = 'claude-3-opus',
339
344
base_provider = 'Anthropic',
340
best_provider = IterListProvider([Liaobots])
345
best_provider = Liaobots
341
346
)
342
347
343
348
claude_3_sonnet = Model(
344
349
name = 'claude-3-sonnet',
345
350
base_provider = 'Anthropic',
346
best_provider = IterListProvider([Liaobots])
351
best_provider = Liaobots
347
352
)
348
353
349
354
claude_3_haiku = Model(
@@ -390,7 +395,7 @@ reka_core = Model(
390
395
blackbox = Model(
391
396
name = 'blackbox',
392
397
base_provider = 'Blackbox AI',
393
best_provider = IterListProvider([Blackbox])
398
best_provider = Blackbox
394
399
)
395
400
396
401
@@ -406,7 +411,7 @@ dbrx_instruct = Model(
406
411
command_r_plus = Model(
407
412
name = 'command-r-plus',
408
413
base_provider = 'CohereForAI',
409
best_provider = IterListProvider([HuggingChat])
414
best_provider = HuggingChat
410
415
)
411
416
412
417
@@ -422,19 +427,19 @@ sparkdesk_v1_1 = Model(
422
427
qwen_1_5_14b = Model(
423
428
name = 'qwen-1.5-14b',
424
429
base_provider = 'Qwen',
425
best_provider = IterListProvider([FreeChatgpt])
430
best_provider = FreeChatgpt
426
431
)
427
432
428
433
qwen_1_5_72b = Model(
429
434
name = 'qwen-1.5-72b',
430
435
base_provider = 'Qwen',
431
best_provider = IterListProvider([Airforce])
436
best_provider = Airforce
432
437
)
433
438
434
439
qwen_1_5_110b = Model(
435
440
name = 'qwen-1.5-110b',
436
441
base_provider = 'Qwen',
437
best_provider = IterListProvider([Airforce])
442
best_provider = Airforce
438
443
)
439
444
440
445
qwen_2_72b = Model(
@@ -446,7 +451,7 @@ qwen_2_72b = Model(
446
451
qwen_turbo = Model(
447
452
name = 'qwen-turbo',
448
453
base_provider = 'Qwen',
449
best_provider = IterListProvider([Bixin123])
454
best_provider = Bixin123
450
455
)
451
456
452
457
qwen = Model(
@@ -462,13 +467,13 @@ qwen = Model(
462
467
glm_3_6b = Model(
463
468
name = 'glm-3-6b',
464
469
base_provider = 'Zhipu AI',
465
best_provider = IterListProvider([FreeChatgpt])
470
best_provider = FreeChatgpt
466
471
)
467
472
468
473
glm_4_9b = Model(
469
474
name = 'glm-4-9B',
470
475
base_provider = 'Zhipu AI',
471
best_provider = IterListProvider([FreeChatgpt])
476
best_provider = FreeChatgpt
472
477
)
473
478
474
479
glm_4 = Model(
@@ -484,13 +489,13 @@ glm_4 = Model(
484
489
yi_1_5_9b = Model(
485
490
name = 'yi-1.5-9b',
486
491
base_provider = '01-ai',
487
best_provider = IterListProvider([FreeChatgpt])
492
best_provider = FreeChatgpt
488
493
)
489
494
490
495
yi_34b = Model(
491
496
name = 'yi-34b',
492
497
base_provider = '01-ai',
493
best_provider = IterListProvider([Airforce])
498
best_provider = Airforce
494
499
)
495
500
496
501
@@ -498,7 +503,7 @@ yi_34b = Model(
498
503
solar_1_mini = Model(
499
504
name = 'solar-1-mini',
500
505
base_provider = 'Upstage',
501
best_provider = IterListProvider([Upstage])
506
best_provider = Upstage
502
507
)
503
508
504
509
solar_10_7b = Model(
@@ -525,14 +530,14 @@ pi = Model(
525
530
deepseek = Model(
526
531
name = 'deepseek',
527
532
base_provider = 'DeepSeek',
528
best_provider = IterListProvider([Airforce])
533
best_provider = Airforce
529
534
)
530
535
531
536
### WizardLM ###
532
537
wizardlm_2_7b = Model(
533
538
name = 'wizardlm-2-7b',
534
539
base_provider = 'WizardLM',
535
best_provider = IterListProvider([DeepInfraChat])
540
best_provider = DeepInfraChat
536
541
)
537
542
538
543
wizardlm_2_8x22b = Model(
@@ -610,6 +615,19 @@ grok_2_mini = Model(
610
615
best_provider = Liaobots
611
616
)
612
617
618
# Perplexity
619
sonar_online = Model(
620
name = 'sonar-online',
621
base_provider = 'Perplexity',
622
best_provider = IterListProvider([ChatHub, PerplexityLabs])
623
)
624
625
sonar_chat = Model(
626
name = 'sonar-chat',
627
base_provider = 'Perplexity',
628
best_provider = PerplexityLabs
629
)
630
613
631
614
632
615
633
#############
@@ -817,6 +835,7 @@ class ModelUtils:
817
835
'gemma-2b': gemma_2b,
818
836
'gemma-2b-9b': gemma_2b_9b,
819
837
'gemma-2b-27b': gemma_2b_27b,
838
'gemma-2': gemma_2,
820
839
821
840
822
841
### Anthropic ###
@@ -928,6 +947,10 @@ class ModelUtils:
928
947
'grok-2': grok_2,
929
948
'grok-2-mini': grok_2_mini,
930
949
950
### Perplexity ###
951
'sonar-online': sonar_online,
952
'sonar-chat': sonar_chat,
953
931
954
932
955
933
956
#############