返回提交历史
Added
g4f/Provider/MagickPenAsk.py
+50
-0
Added
g4f/Provider/MagickPenChat.py
+50
-0
Added
g4f/Provider/TeachAnything.py
+62
-0
Modified
g4f/Provider/__init__.py
+3
-0
Modified
g4f/models.py
+6
-4
XFEstudio/gpt4free
Added new providers TeachAnything MagickPenAsk MagickPenChat
93fa8960
代码差异
5 个文件
+171
-4
@@ -0,0 +1,50 @@
1
from __future__ import annotations
2
3
from aiohttp import ClientSession
4
5
from ..typing import AsyncResult, Messages
6
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
7
from .helper import format_prompt
8
9
10
class MagickPenAsk(AsyncGeneratorProvider, ProviderModelMixin):
11
url = "https://api.magickpen.com"
12
api_endpoint = "/ask"
13
working = True
14
supports_gpt_4 = True
15
default_model = "gpt-4o"
16
17
@classmethod
18
async def create_async_generator(
19
cls,
20
model: str,
21
messages: Messages,
22
proxy: str = None,
23
**kwargs
24
) -> AsyncResult:
25
headers = {
26
"accept": "application/json, text/plain, */*",
27
"accept-language": "en-US,en;q=0.9",
28
"content-type": "application/json",
29
"dnt": "1",
30
"origin": "https://magickpen.com",
31
"priority": "u=1, i",
32
"referer": "https://magickpen.com/",
33
"sec-ch-ua": '"Not/A)Brand";v="8", "Chromium";v="126"',
34
"sec-ch-ua-mobile": "?0",
35
"sec-ch-ua-platform": '"Linux"',
36
"sec-fetch-dest": "empty",
37
"sec-fetch-mode": "cors",
38
"sec-fetch-site": "same-site",
39
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
40
}
41
async with ClientSession(headers=headers) as session:
42
data = {
43
"query": format_prompt(messages),
44
"plan": "Pay as you go"
45
}
46
async with session.post(f"{cls.url}{cls.api_endpoint}", json=data, proxy=proxy) as response:
47
response.raise_for_status()
48
async for chunk in response.content:
49
if chunk:
50
yield chunk.decode()
@@ -0,0 +1,50 @@
1
from __future__ import annotations
2
3
from aiohttp import ClientSession
4
5
from ..typing import AsyncResult, Messages
6
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
7
from .helper import format_prompt
8
9
10
class MagickPenChat(AsyncGeneratorProvider, ProviderModelMixin):
11
url = "https://api.magickpen.com"
12
api_endpoint = "/chat/free"
13
working = True
14
supports_gpt_4 = True
15
default_model = "gpt-4o-mini"
16
17
@classmethod
18
async def create_async_generator(
19
cls,
20
model: str,
21
messages: Messages,
22
proxy: str = None,
23
**kwargs
24
) -> AsyncResult:
25
headers = {
26
"accept": "application/json, text/plain, */*",
27
"accept-language": "en-US,en;q=0.9",
28
"access-control-allow-origin": "*",
29
"content-type": "application/json",
30
"dnt": "1",
31
"origin": "https://magickpen.com",
32
"priority": "u=1, i",
33
"referer": "https://magickpen.com/",
34
"sec-ch-ua": '"Not/A)Brand";v="8", "Chromium";v="126"',
35
"sec-ch-ua-mobile": "?0",
36
"sec-ch-ua-platform": '"Linux"',
37
"sec-fetch-dest": "empty",
38
"sec-fetch-mode": "cors",
39
"sec-fetch-site": "same-site",
40
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
41
}
42
async with ClientSession(headers=headers) as session:
43
data = {
44
"history": [{"role": "user", "content": format_prompt(messages)}]
45
}
46
async with session.post(f"{cls.url}{cls.api_endpoint}", json=data, proxy=proxy) as response:
47
response.raise_for_status()
48
async for chunk in response.content:
49
if chunk:
50
yield chunk.decode()
@@ -0,0 +1,62 @@
1
from __future__ import annotations
2
3
from typing import Any, Dict
4
5
from aiohttp import ClientSession, ClientTimeout
6
7
from ..typing import AsyncResult, Messages
8
from .base_provider import AsyncGeneratorProvider, ProviderModelMixin
9
from .helper import format_prompt
10
11
12
class TeachAnything(AsyncGeneratorProvider, ProviderModelMixin):
13
url = "https://www.teach-anything.com"
14
api_endpoint = "/api/generate"
15
working = True
16
default_model = "llama-3-70b-instruct"
17
18
@classmethod
19
async def create_async_generator(
20
cls,
21
model: str,
22
messages: Messages,
23
proxy: str | None = None,
24
**kwargs: Any
25
) -> AsyncResult:
26
headers = cls._get_headers()
27
28
async with ClientSession(headers=headers) as session:
29
prompt = format_prompt(messages)
30
data = {"prompt": prompt}
31
32
timeout = ClientTimeout(total=60)
33
34
async with session.post(
35
f"{cls.url}{cls.api_endpoint}",
36
json=data,
37
proxy=proxy,
38
timeout=timeout
39
) as response:
40
response.raise_for_status()
41
async for chunk in response.content.iter_any():
42
if chunk:
43
yield chunk.decode()
44
45
@staticmethod
46
def _get_headers() -> Dict[str, str]:
47
return {
48
"accept": "*/*",
49
"accept-language": "en-US,en;q=0.9",
50
"content-type": "application/json",
51
"dnt": "1",
52
"origin": "https://www.teach-anything.com",
53
"priority": "u=1, i",
54
"referer": "https://www.teach-anything.com/",
55
"sec-ch-ua": '"Not/A)Brand";v="8", "Chromium";v="126"',
56
"sec-ch-ua-mobile": "?0",
57
"sec-ch-ua-platform": '"Linux"',
58
"sec-fetch-dest": "empty",
59
"sec-fetch-mode": "cors",
60
"sec-fetch-site": "same-origin",
61
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
62
}
@@ -40,6 +40,8 @@ from .Liaobots import Liaobots
40
40
from .LiteIcoding import LiteIcoding
41
41
from .Llama import Llama
42
42
from .Local import Local
43
from .MagickPenAsk import MagickPenAsk
44
from .MagickPenChat import MagickPenChat
43
45
from .Marsyoo import Marsyoo
44
46
from .MetaAI import MetaAI
45
47
from .MetaAIAccount import MetaAIAccount
@@ -50,6 +52,7 @@ from .Pizzagpt import Pizzagpt
50
52
from .Reka import Reka
51
53
from .Replicate import Replicate
52
54
from .ReplicateHome import ReplicateHome
55
from .TeachAnything import TeachAnything
53
56
from .Vercel import Vercel
54
57
from .WhiteRabbitNeo import WhiteRabbitNeo
55
58
from .You import You
@@ -27,6 +27,8 @@ from .Provider import (
27
27
Koala,
28
28
Liaobots,
29
29
LiteIcoding,
30
MagickPenAsk,
31
MagickPenChat,
30
32
Marsyoo,
31
33
MetaAI,
32
34
OpenaiChat,
@@ -36,6 +38,7 @@ from .Provider import (
36
38
Reka,
37
39
Replicate,
38
40
ReplicateHome,
41
TeachAnything,
39
42
You,
40
43
)
41
44
@@ -109,7 +112,6 @@ gpt_35_turbo = Model(
109
112
Koala,
110
113
ChatgptFree,
111
114
FreeChatgpt,
112
DDG,
113
115
AI365VIP,
114
116
Pizzagpt,
115
117
Allyfy,
@@ -136,7 +138,7 @@ gpt_4o = Model(
136
138
name = 'gpt-4o',
137
139
base_provider = 'openai',
138
140
best_provider = IterListProvider([
139
You, Liaobots, Chatgpt4o, AI365VIP, OpenaiChat, Marsyoo, LiteIcoding
141
You, Liaobots, Chatgpt4o, AI365VIP, OpenaiChat, Marsyoo, LiteIcoding, MagickPenAsk,
140
142
])
141
143
)
142
144
@@ -144,7 +146,7 @@ gpt_4o_mini = Model(
144
146
name = 'gpt-4o-mini',
145
147
base_provider = 'openai',
146
148
best_provider = IterListProvider([
147
Liaobots, OpenaiChat, You, FreeNetfly
149
DDG, Liaobots, OpenaiChat, You, FreeNetfly, MagickPenChat,
148
150
])
149
151
)
150
152
@@ -179,7 +181,7 @@ llama_3_70b_instruct = Model(
179
181
llama_3_70b_instruct = Model(
180
182
name = "meta/meta-llama-3-70b-instruct",
181
183
base_provider = "meta",
182
best_provider = IterListProvider([ReplicateHome])
184
best_provider = IterListProvider([ReplicateHome, TeachAnything])
183
185
)
184
186
185
187
llama_3_70b_chat_hf = Model(