返回提交历史
Added
g4f/Provider/AiChats.py
+66
-0
Added
g4f/Provider/Nexra.py
+111
-0
Added
g4f/Provider/Snova.py
+133
-0
Modified
g4f/Provider/__init__.py
+3
-0
Modified
g4f/models.py
+67
-9
XFEstudio/gpt4free
Adding new providers AiChats.py Nexra.py Snova.py
7483a7c3
代码差异
5 个文件
+380
-9
@@ -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
@@ -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"]
@@ -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()
@@ -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
@@ -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