返回提交历史
Modified
g4f/Provider/FakeGpt.py
+2
-2
Modified
g4f/Provider/Geekgpt.py
+6
-7
Modified
g4f/Provider/Liaobots.py
+1
-1
Added
g4f/Provider/MyShell.py
+89
-0
Modified
g4f/Provider/Vercel.py
+4
-4
Modified
g4f/Provider/Yqcloud.py
+6
-5
Modified
g4f/Provider/__init__.py
+3
-1
Renamed
g4f/Provider/deprecated/Myshell.py
+2
-2
Modified
g4f/Provider/deprecated/__init__.py
+2
-1
Modified
g4f/models.py
+0
-7
XFEstudio/gpt4free
Fix MyShell Provider
13e89d6a
代码差异
10 个文件
+115
-30
@@ -83,8 +83,8 @@ class FakeGpt(AsyncGeneratorProvider):
83
83
line = json.loads(line)
84
84
if line["message"]["metadata"]["message_type"] == "next":
85
85
new_message = line["message"]["content"]["parts"][0]
86
yield new_message[len(last_message):]
87
last_message = new_message
86
yield new_message[len(last_message):]
87
last_message = new_message
88
88
except:
89
89
continue
90
90
if not last_message:
@@ -21,12 +21,12 @@ class GeekGpt(BaseProvider):
21
21
22
22
json_data = {
23
23
'messages': messages,
24
'model': model,
25
'temperature': kwargs.get('temperature', 0.9),
26
'presence_penalty': kwargs.get('presence_penalty', 0),
27
'top_p': kwargs.get('top_p', 1),
28
'frequency_penalty': kwargs.get('frequency_penalty', 0),
29
'stream': True
24
'model': model,
25
'temperature': kwargs.get('temperature', 0.9),
26
'presence_penalty': kwargs.get('presence_penalty', 0),
27
'top_p': kwargs.get('top_p', 1),
28
'frequency_penalty': kwargs.get('frequency_penalty', 0),
29
'stream': True
30
30
}
31
31
32
32
data = dumps(json_data, separators=(',', ':'))
@@ -61,7 +61,6 @@ class GeekGpt(BaseProvider):
61
61
62
62
try:
63
63
content = json.loads(json_data)["choices"][0]["delta"].get("content")
64
65
64
except Exception as e:
66
65
raise RuntimeError(f'error | {e} :', json_data)
67
66
@@ -30,7 +30,7 @@ models = {
30
30
31
31
class Liaobots(AsyncGeneratorProvider):
32
32
url = "https://liaobots.site"
33
working = False
33
working = True
34
34
supports_gpt_35_turbo = True
35
35
supports_gpt_4 = True
36
36
_auth_code = None
@@ -0,0 +1,89 @@
1
from __future__ import annotations
2
3
import time, random, json
4
5
from ..requests import StreamSession
6
from ..typing import AsyncResult, Messages
7
from .base_provider import AsyncGeneratorProvider
8
from .helper import format_prompt
9
10
class MyShell(AsyncGeneratorProvider):
11
url = "https://api.myshell.ai/v1/bot/chat/send_message"
12
13
@classmethod
14
async def create_async_generator(
15
cls,
16
model: str,
17
messages: Messages,
18
proxy: str = None,
19
timeout: int = 120,
20
**kwargs
21
) -> AsyncResult:
22
user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
23
headers = {
24
"User-Agent": user_agent,
25
"Myshell-Service-Name": "organics-api",
26
"Visitor-Id": generate_visitor_id(user_agent)
27
}
28
async with StreamSession(
29
impersonate="chrome107",
30
proxies={"https": proxy},
31
timeout=timeout,
32
headers=headers
33
) as session:
34
prompt = format_prompt(messages)
35
data = {
36
"botId": "1",
37
"conversation_scenario": 3,
38
"message": prompt,
39
"messageType": 1
40
}
41
async with session.post(cls.url, json=data) as response:
42
response.raise_for_status()
43
event = None
44
async for line in response.iter_lines():
45
if line.startswith(b"event: "):
46
event = line[7:]
47
elif event == b"MESSAGE_REPLY_SSE_ELEMENT_EVENT_NAME_TEXT":
48
if line.startswith(b"data: "):
49
yield json.loads(line[6:])["content"]
50
if event == b"MESSAGE_REPLY_SSE_ELEMENT_EVENT_NAME_TEXT_STREAM_PUSH_FINISHED":
51
break
52
53
54
def xor_hash(B: str):
55
r = []
56
i = 0
57
58
def o(e, t):
59
o_val = 0
60
for i in range(len(t)):
61
o_val |= r[i] << (8 * i)
62
return e ^ o_val
63
64
for e in range(len(B)):
65
t = ord(B[e])
66
r.insert(0, 255 & t)
67
68
if len(r) >= 4:
69
i = o(i, r)
70
r = []
71
72
if len(r) > 0:
73
i = o(i, r)
74
75
return hex(i)[2:]
76
77
def performance() -> str:
78
t = int(time.time() * 1000)
79
e = 0
80
while t == int(time.time() * 1000):
81
e += 1
82
return hex(t)[2:] + hex(e)[2:]
83
84
def generate_visitor_id(user_agent: str) -> str:
85
f = performance()
86
r = hex(int(random.random() * (16**16)))[2:-2]
87
d = xor_hash(user_agent)
88
e = hex(1080 * 1920)[2:]
89
return f"{f}-{r}-{d}-{e}-{f}"
@@ -4,7 +4,6 @@ import json, base64, requests, execjs, random, uuid
4
4
5
5
from ..typing import Messages, TypedDict, CreateResult, Any
6
6
from .base_provider import BaseProvider
7
from abc import abstractmethod
8
7
from ..debug import logging
9
8
10
9
@@ -15,12 +14,13 @@ class Vercel(BaseProvider):
15
14
supports_stream = True
16
15
17
16
@staticmethod
18
@abstractmethod
19
17
def create_completion(
20
18
model: str,
21
19
messages: Messages,
22
20
stream: bool,
23
proxy: str = None, **kwargs) -> CreateResult:
21
proxy: str = None,
22
**kwargs
23
) -> CreateResult:
24
24
25
25
if not model:
26
26
model = "gpt-3.5-turbo"
@@ -65,7 +65,7 @@ class Vercel(BaseProvider):
65
65
headers=headers, json=json_data, stream=True, proxies={"https": proxy})
66
66
try:
67
67
response.raise_for_status()
68
except Exception:
68
except:
69
69
continue
70
70
for token in response.iter_content(chunk_size=None):
71
71
yield token.decode()
@@ -1,7 +1,7 @@
1
1
from __future__ import annotations
2
2
3
3
import random
4
from aiohttp import ClientSession
4
from ..requests import StreamSession
5
5
6
6
from ..typing import AsyncResult, Messages
7
7
from .base_provider import AsyncGeneratorProvider, format_prompt
@@ -19,13 +19,13 @@ class Yqcloud(AsyncGeneratorProvider):
19
19
proxy: str = None,
20
20
**kwargs,
21
21
) -> AsyncResult:
22
async with ClientSession(
23
headers=_create_header()
22
async with StreamSession(
23
headers=_create_header(), proxies={"https": proxy}
24
24
) as session:
25
25
payload = _create_payload(messages, **kwargs)
26
async with session.post("https://api.aichatos.cloud/api/generateStream", proxy=proxy, json=payload) as response:
26
async with session.post("https://api.aichatos.cloud/api/generateStream", json=payload) as response:
27
27
response.raise_for_status()
28
async for chunk in response.content.iter_any():
28
async for chunk in response.iter_content():
29
29
if chunk:
30
30
chunk = chunk.decode()
31
31
if "sorry, 您的ip已由于触发防滥用检测而被封禁" in chunk:
@@ -38,6 +38,7 @@ def _create_header():
38
38
"accept" : "application/json, text/plain, */*",
39
39
"content-type" : "application/json",
40
40
"origin" : "https://chat9.yqcloud.top",
41
"referer" : "https://chat9.yqcloud.top/"
41
42
}
42
43
43
44
@@ -26,7 +26,7 @@ from .GptGo import GptGo
26
26
from .GptGod import GptGod
27
27
from .Liaobots import Liaobots
28
28
from .Llama2 import Llama2
29
from .Myshell import Myshell
29
from .MyShell import MyShell
30
30
from .NoowAi import NoowAi
31
31
from .Opchatgpts import Opchatgpts
32
32
from .Phind import Phind
@@ -90,6 +90,7 @@ class ProviderUtils:
90
90
'Lockchat': Lockchat,
91
91
'MikuChat': MikuChat,
92
92
'Myshell': Myshell,
93
'MyShell': MyShell,
93
94
'NoowAi': NoowAi,
94
95
'Opchatgpts': Opchatgpts,
95
96
'OpenAssistant': OpenAssistant,
@@ -159,6 +160,7 @@ __all__ = [
159
160
'Llama2',
160
161
'Lockchat',
161
162
'Myshell',
163
'MyShell',
162
164
'NoowAi',
163
165
'Opchatgpts',
164
166
'Raycast',
@@ -8,8 +8,8 @@ from aiohttp import ClientSession
8
8
from aiohttp.http import WSMsgType
9
9
import asyncio
10
10
11
from ..typing import AsyncResult, Messages
12
from .base_provider import AsyncGeneratorProvider, format_prompt
11
from ...typing import AsyncResult, Messages
12
from ..base_provider import AsyncGeneratorProvider, format_prompt
13
13
14
14
15
15
models = {
@@ -12,4 +12,5 @@ from .V50 import V50
12
12
from .FastGpt import FastGpt
13
13
from .Aivvm import Aivvm
14
14
from .Vitalentum import Vitalentum
15
from .H2o import H2o
15
from .H2o import H2o
16
from .Myshell import Myshell
@@ -3,18 +3,13 @@ from dataclasses import dataclass
3
3
from .typing import Union
4
4
from .Provider import BaseProvider, RetryProvider
5
5
from .Provider import (
6
ChatgptLogin,
7
ChatgptDuo,
8
6
GptForLove,
9
7
ChatgptAi,
10
8
GptChatly,
11
Liaobots,
12
9
ChatgptX,
13
10
ChatBase,
14
Yqcloud,
15
11
GeekGpt,
16
12
FakeGpt,
17
Myshell,
18
13
FreeGpt,
19
14
NoowAi,
20
15
Vercel,
@@ -23,9 +18,7 @@ from .Provider import (
23
18
AiAsk,
24
19
GptGo,
25
20
Phind,
26
Ylokh,
27
21
Bard,
28
Aibn,
29
22
Bing,
30
23
You,
31
24
H2o,