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

XFEstudio/gpt4free

New provider added ChatHub

105b4aac
kqlio67 <kqlio67@users.noreply.github.com>
提交于

代码差异

5 个文件 +141 -32
Modified docs/providers-and-models.md +2 -1
@@ -28,6 +28,7 @@
28 28 |[chatgpt4online.org](https://chatgpt4online.org)|`g4f.Provider.Chatgpt4Online`|`gpt-4`|❌|❌|✔|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
29 29 |[chatgpt4o.one](https://chatgpt4o.one)|`g4f.Provider.Chatgpt4o`|`gpt-4o-mini`|❌|❌|❌|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
30 30 |[chatgptfree.ai](https://chatgptfree.ai)|`g4f.Provider.ChatgptFree`|`gpt-4o-mini`|❌|❌|?|![Cloudflare](https://img.shields.io/badge/Cloudflare-f48d37)|❌|
31 |[app.chathub.gg](https://app.chathub.gg)|`g4f.Provider.ChatHub`|`llama-3.1-8b, mixtral-8x7b, gemma-2, sonar-online`|❌|❌|✔|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
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`|❌|❌|✔|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
32 33 |[deepinfra.com](https://deepinfra.com)|`g4f.Provider.DeepInfra`|✔|❌|❌|✔|![Unknown](https://img.shields.io/badge/Unknown-grey)|✔|
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`|❌|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
@@ -55,7 +56,7 @@
55 56 |[chatgpt.com](https://chatgpt.com/)|`g4f.Provider.OpenaiChat`|`gpt-4o, gpt-4o-mini, gpt-4`|❌|✔||![Unknown](https://img.shields.io/badge/Unknown-grey)|✔|
56 57 |[www.perplexity.ai)](https://www.perplexity.ai)|`g4f.Provider.PerplexityAi`|✔|❌|❌|?|![Disabled](https://img.shields.io/badge/Disabled-red)|❌|
57 58 |[perplexity.ai](https://www.perplexity.ai)|`g4f.Provider.PerplexityApi`|✔|❌|❌|?|![Unknown](https://img.shields.io/badge/Unknown-grey)|✔|
58 |[labs.perplexity.ai](https://labs.perplexity.ai)|`g4f.Provider.PerplexityLabs`|`llama-3.1-8b, llama-3.1-70b`|❌|❌|?|![Cloudflare](https://img.shields.io/badge/Cloudflare-f48d37)|❌|
59 |[labs.perplexity.ai](https://labs.perplexity.ai)|`g4f.Provider.PerplexityLabs`|`sonar-online, sonar-chat, llama-3.1-8b, llama-3.1-70b`|❌|❌|?|![Cloudflare](https://img.shields.io/badge/Cloudflare-f48d37)|❌|
59 60 |[pi.ai/talk](https://pi.ai/talk)|`g4f.Provider.Pi`|`pi`|❌|❌|?|![Unknown](https://img.shields.io/badge/Unknown-grey)|❌|
60 61 |[]()|`g4f.Provider.Pizzagpt`|`gpt-4o-mini`|❌|❌|✔|![Active](https://img.shields.io/badge/Active-brightgreen)|❌|
61 62 |[poe.com](https://poe.com)|`g4f.Provider.Poe`|✔|❌|❌|?|![Unknown](https://img.shields.io/badge/Unknown-grey)|✔|
Added g4f/Provider/ChatHub.py +84 -0
@@ -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
Modified g4f/Provider/PerplexityLabs.py +4 -4
@@ -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 }
Modified g4f/Provider/__init__.py +1 -0
@@ -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
Modified g4f/models.py +50 -27
@@ -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 #############