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

XFEstudio/gpt4free

Adding new providers AiChats.py Nexra.py Snova.py

7483a7c3
kqlio67 <kqlio67@users.noreply.github.com>
提交于

代码差异

5 个文件 +380 -9
Added g4f/Provider/AiChats.py +66 -0
@@ -0,0 +1,66 @@
1 from __future__ import annotations
2
3 from aiohttp import ClientSession
4 import json
5
6 from ..typing import AsyncResult, Messages
7 from .base_provider import AsyncGeneratorProvider
8 from .helper import format_prompt
9
10
11 class AiChats(AsyncGeneratorProvider):
12 url = "https://ai-chats.org"
13 api_endpoint = "https://ai-chats.org/chat/send2/"
14 working = True
15 supports_gpt_4 = True
16 supports_message_history = True
17
18 @classmethod
19 async def create_async_generator(
20 cls,
21 model: str,
22 messages: Messages,
23 proxy: str = None,
24 **kwargs
25 ) -> AsyncResult:
26
27 headers = {
28 "accept": "application/json, text/event-stream",
29 "accept-language": "en-US,en;q=0.9",
30 "cache-control": "no-cache",
31 "content-type": "application/json",
32 "origin": cls.url,
33 "pragma": "no-cache",
34 "referer": f"{cls.url}/chat/",
35 "sec-ch-ua": '"Chromium";v="127", "Not)A;Brand";v="99"',
36 "sec-ch-ua-mobile": "?0",
37 "sec-ch-ua-platform": '"Linux"',
38 "sec-fetch-dest": "empty",
39 "sec-fetch-mode": "cors",
40 "sec-fetch-site": "same-origin",
41 "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
42 }
43
44 async with ClientSession(headers=headers) as session:
45 prompt = format_prompt(messages)
46 data = {
47 "type": "chat",
48 "messagesHistory": [
49 {
50 "from": "you",
51 "content": prompt
52 }
53 ]
54 }
55 async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
56 response.raise_for_status()
57 full_response = await response.text()
58
59 message = ""
60 for line in full_response.split('\n'):
61 if line.startswith('data: ') and line != 'data: ':
62 message += line[6:]
63
64 message = message.strip()
65
66 yield message
Added g4f/Provider/Nexra.py +111 -0
@@ -0,0 +1,111 @@
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
11 class Nexra(AsyncGeneratorProvider, ProviderModelMixin):
12 url = "https://nexra.aryahcr.cc"
13 api_endpoint = "https://nexra.aryahcr.cc/api/chat/gpt"
14 working = True
15 supports_gpt_35_turbo = True
16 supports_gpt_4 = True
17 supports_stream = True
18 supports_system_message = True
19 supports_message_history = True
20
21 default_model = 'gpt-3.5-turbo'
22 models = [
23 # Working with text
24 'gpt-4',
25 'gpt-4-0613',
26 'gpt-4-32k',
27 'gpt-4-0314',
28 'gpt-4-32k-0314',
29
30 'gpt-3.5-turbo',
31 'gpt-3.5-turbo-16k',
32 'gpt-3.5-turbo-0613',
33 'gpt-3.5-turbo-16k-0613',
34 'gpt-3.5-turbo-0301',
35
36 'gpt-3',
37 'text-davinci-003',
38 'text-davinci-002',
39 'code-davinci-002',
40 'text-curie-001',
41 'text-babbage-001',
42 'text-ada-001',
43 'davinci',
44 'curie',
45 'babbage',
46 'ada',
47 'babbage-002',
48 'davinci-002',
49 ]
50
51 model_aliases = {
52 "gpt-4": "gpt-4-0613",
53 "gpt-4": "gpt-4-32k",
54 "gpt-4": "gpt-4-0314",
55 "gpt-4": "gpt-4-32k-0314",
56
57 "gpt-3.5-turbo": "gpt-3.5-turbo-16k",
58 "gpt-3.5-turbo": "gpt-3.5-turbo-0613",
59 "gpt-3.5-turbo": "gpt-3.5-turbo-16k-0613",
60 "gpt-3.5-turbo": "gpt-3.5-turbo-0301",
61
62 "gpt-3": "text-davinci-003",
63 "gpt-3": "text-davinci-002",
64 "gpt-3": "code-davinci-002",
65 "gpt-3": "text-curie-001",
66 "gpt-3": "text-babbage-001",
67 "gpt-3": "text-ada-001",
68 "gpt-3": "text-ada-001",
69 "gpt-3": "davinci",
70 "gpt-3": "curie",
71 "gpt-3": "babbage",
72 "gpt-3": "ada",
73 "gpt-3": "babbage-002",
74 "gpt-3": "davinci-002",
75 }
76
77 @classmethod
78 def get_model(cls, model: str) -> str:
79 if model in cls.models:
80 return model
81 elif model in cls.model_aliases:
82 return cls.model_aliases[model]
83 else:
84 return cls.default_model
85
86 @classmethod
87 async def create_async_generator(
88 cls,
89 model: str,
90 messages: Messages,
91 proxy: str = None,
92 **kwargs
93 ) -> AsyncResult:
94 model = cls.get_model(model)
95
96 headers = {
97 "Content-Type": "application/json",
98 }
99 async with ClientSession(headers=headers) as session:
100 data = {
101 "messages": messages,
102 "prompt": format_prompt(messages),
103 "model": model,
104 "markdown": False,
105 "stream": False,
106 }
107 async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
108 response.raise_for_status()
109 result = await response.text()
110 json_result = json.loads(result)
111 yield json_result["gpt"]
Added g4f/Provider/Snova.py +133 -0
@@ -0,0 +1,133 @@
1 from __future__ import annotations
2
3 import json
4 from typing import AsyncGenerator
5
6 from aiohttp import ClientSession
7
8 from ..typing import AsyncResult, Messages
9 from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
10 from .helper import format_prompt
11
12
13 class Snova(AsyncGeneratorProvider, ProviderModelMixin):
14 url = "https://fast.snova.ai"
15 api_endpoint = "https://fast.snova.ai/api/completion"
16 working = True
17 supports_stream = True
18 supports_system_message = True
19 supports_message_history = True
20
21 default_model = 'Meta-Llama-3.1-8B-Instruct'
22 models = [
23 'Meta-Llama-3.1-8B-Instruct',
24 'Meta-Llama-3.1-70B-Instruct',
25 'Meta-Llama-3.1-405B-Instruct',
26 'Samba-CoE',
27 'ignos/Mistral-T5-7B-v1',
28 'v1olet/v1olet_merged_dpo_7B',
29 'macadeliccc/WestLake-7B-v2-laser-truthy-dpo',
30 'cookinai/DonutLM-v1',
31 ]
32
33 model_aliases = {
34 "llama-3.1-8b": "Meta-Llama-3.1-8B-Instruct",
35 "llama-3.1-70b": "Meta-Llama-3.1-70B-Instruct",
36 "llama-3.1-405b": "Meta-Llama-3.1-405B-Instruct",
37
38 "mistral-7b": "ignos/Mistral-T5-7B-v1",
39
40 "samba-coe-v0.1": "Samba-CoE",
41 "v1olet-merged-7b": "v1olet/v1olet_merged_dpo_7B",
42 "westlake-7b-v2": "macadeliccc/WestLake-7B-v2-laser-truthy-dpo",
43 "donutlm-v1": "cookinai/DonutLM-v1",
44 }
45
46 @classmethod
47 def get_model(cls, model: str) -> str:
48 if model in cls.models:
49 return model
50 elif model in cls.model_aliases:
51 return cls.model_aliases[model]
52 else:
53 return cls.default_model
54
55 @classmethod
56 async def create_async_generator(
57 cls,
58 model: str,
59 messages: Messages,
60 proxy: str = None,
61 **kwargs
62 ) -> AsyncGenerator[str, None]:
63 model = cls.get_model(model)
64
65 headers = {
66 "accept": "text/event-stream",
67 "accept-language": "en-US,en;q=0.9",
68 "cache-control": "no-cache",
69 "content-type": "application/json",
70 "origin": cls.url,
71 "pragma": "no-cache",
72 "priority": "u=1, i",
73 "referer": f"{cls.url}/",
74 "sec-ch-ua": '"Chromium";v="127", "Not)A;Brand";v="99"',
75 "sec-ch-ua-mobile": "?0",
76 "sec-ch-ua-platform": '"Linux"',
77 "sec-fetch-dest": "empty",
78 "sec-fetch-mode": "cors",
79 "sec-fetch-site": "same-origin",
80 "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"
81 }
82 async with ClientSession(headers=headers) as session:
83 data = {
84 "body": {
85 "messages": [
86 {
87 "role": "system",
88 "content": "You are a helpful assistant."
89 },
90 {
91 "role": "user",
92 "content": format_prompt(messages),
93 "id": "1-id",
94 "ref": "1-ref",
95 "revision": 1,
96 "draft": False,
97 "status": "done",
98 "enableRealTimeChat": False,
99 "meta": None
100 }
101 ],
102 "max_tokens": 1000,
103 "stop": ["<|eot_id|>"],
104 "stream": True,
105 "stream_options": {"include_usage": True},
106 "model": model
107 },
108 "env_type": "tp16"
109 }
110 async with session.post(cls.api_endpoint, json=data, proxy=proxy) as response:
111 response.raise_for_status()
112 full_response = ""
113 async for line in response.content:
114 line = line.decode().strip()
115 if line.startswith("data: "):
116 data = line[6:]
117 if data == "[DONE]":
118 break
119 try:
120 json_data = json.loads(data)
121 choices = json_data.get("choices", [])
122 if choices:
123 delta = choices[0].get("delta", {})
124 content = delta.get("content", "")
125 full_response += content
126 except json.JSONDecodeError:
127 continue
128 except Exception as e:
129 print(f"Error processing chunk: {e}")
130 print(f"Problematic data: {data}")
131 continue
132
133 yield full_response.strip()
Modified g4f/Provider/__init__.py +3 -0
@@ -12,6 +12,7 @@ from .needs_auth import *
12 12 from .AI365VIP import AI365VIP
13 13 from .Allyfy import Allyfy
14 14 from .AiChatOnline import AiChatOnline
15 from .AiChats import AiChats
15 16 from .Aura import Aura
16 17 from .Bing import Bing
17 18 from .BingCreateImages import BingCreateImages
@@ -42,11 +43,13 @@ from .MagickPenAsk import MagickPenAsk
42 43 from .MagickPenChat import MagickPenChat
43 44 from .MetaAI import MetaAI
44 45 from .MetaAIAccount import MetaAIAccount
46 from .Nexra import Nexra
45 47 from .Ollama import Ollama
46 48 from .PerplexityLabs import PerplexityLabs
47 49 from .Pi import Pi
48 50 from .Pizzagpt import Pizzagpt
49 51 from .Reka import Reka
52 from .Snova import Snova
50 53 from .Replicate import Replicate
51 54 from .ReplicateHome import ReplicateHome
52 55 from .Rocks import Rocks
Modified g4f/models.py +67 -9
@@ -29,6 +29,7 @@ from .Provider import (
29 29 MagickPenAsk,
30 30 MagickPenChat,
31 31 MetaAI,
32 Nexra,
32 33 OpenaiChat,
33 34 PerplexityLabs,
34 35 Pi,
@@ -36,6 +37,7 @@ from .Provider import (
36 37 Reka,
37 38 Replicate,
38 39 ReplicateHome,
40 Snova,
39 41 TeachAnything,
40 42 TwitterBio,
41 43 Upstage,
@@ -86,20 +88,28 @@ default = Model(
86 88 ############
87 89
88 90 ### OpenAI ###
89 ### GPT-3.5 / GPT-4 ###
91 # gpt-3
92 gpt_3 = Model(
93 name = 'gpt-3',
94 base_provider = 'OpenAI',
95 best_provider = IterListProvider([
96 Nexra,
97 ])
98 )
99
90 100 # gpt-3.5
91 101 gpt_35_turbo = Model(
92 102 name = 'gpt-3.5-turbo',
93 base_provider = 'openai',
103 base_provider = 'OpenAI',
94 104 best_provider = IterListProvider([
95 Allyfy, TwitterBio,
105 Allyfy, TwitterBio, Nexra,
96 106 ])
97 107 )
98 108
99 109 # gpt-4
100 110 gpt_4o = Model(
101 111 name = 'gpt-4o',
102 base_provider = 'openai',
112 base_provider = 'OpenAI',
103 113 best_provider = IterListProvider([
104 114 Liaobots, Chatgpt4o, OpenaiChat,
105 115 ])
@@ -107,7 +117,7 @@ gpt_4o = Model(
107 117
108 118 gpt_4o_mini = Model(
109 119 name = 'gpt-4o-mini',
110 base_provider = 'openai',
120 base_provider = 'OpenAI',
111 121 best_provider = IterListProvider([
112 122 DDG, Liaobots, You, FreeNetfly, MagickPenAsk, MagickPenChat, Pizzagpt, ChatgptFree, AiChatOnline, OpenaiChat, Koala,
113 123 ])
@@ -115,17 +125,17 @@ gpt_4o_mini = Model(
115 125
116 126 gpt_4_turbo = Model(
117 127 name = 'gpt-4-turbo',
118 base_provider = 'openai',
128 base_provider = 'OpenAI',
119 129 best_provider = IterListProvider([
120 Liaobots, Bing
130 Nexra, Liaobots, Bing
121 131 ])
122 132 )
123 133
124 134 gpt_4 = Model(
125 135 name = 'gpt-4',
126 base_provider = 'openai',
136 base_provider = 'OpenAI',
127 137 best_provider = IterListProvider([
128 Chatgpt4Online, Bing,
138 Chatgpt4Online, Nexra, Bing,
129 139 gpt_4_turbo.best_provider, gpt_4o.best_provider, gpt_4o_mini.best_provider
130 140 ])
131 141 )
@@ -358,6 +368,35 @@ pi = Model(
358 368 best_provider = Pi
359 369 )
360 370
371 ### SambaNova ###
372 samba_coe_v0_1 = Model(
373 name = 'samba-coe-v0.1',
374 base_provider = 'SambaNova',
375 best_provider = Snova
376 )
377
378 ### Trong-Hieu Nguyen-Mau ###
379 v1olet_merged_7b = Model(
380 name = 'v1olet-merged-7b',
381 base_provider = 'Trong-Hieu Nguyen-Mau',
382 best_provider = Snova
383 )
384
385 ### Macadeliccc ###
386 westlake_7b_v2 = Model(
387 name = 'westlake-7b-v2',
388 base_provider = 'Macadeliccc',
389 best_provider = Snova
390 )
391
392 ### CookinAI ###
393 donutlm_v1 = Model(
394 name = 'donutlm-v1',
395 base_provider = 'CookinAI',
396 best_provider = Snova
397 )
398
399
361 400
362 401 #############
363 402 ### Image ###
@@ -436,6 +475,9 @@ class ModelUtils:
436 475 ############
437 476
438 477 ### OpenAI ###
478 # gpt-3
479 'gpt-3': gpt_3,
480
439 481 # gpt-3.5
440 482 'gpt-3.5-turbo': gpt_35_turbo,
441 483
@@ -536,6 +578,22 @@ class ModelUtils:
536 578
537 579 ### Pi ###
538 580 'pi': pi,
581
582
583 ### SambaNova ###
584 'samba-coe-v0.1': samba_coe_v0_1,
585
586
587 ### Trong-Hieu Nguyen-Mau ###
588 'v1olet-merged-7b': v1olet_merged_7b,
589
590
591 ### Macadeliccc ###
592 'westlake-7b-v2': westlake_7b_v2,
593
594
595 ### CookinAI ###
596 'donutlm-v1': donutlm_v1,
539 597
540 598
541 599