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

XFEstudio/gpt4free

Fix MyShell Provider

13e89d6a
Heiner Lohaus <heiner@lohaus.eu>
提交于

代码差异

10 个文件 +115 -30
Modified g4f/Provider/FakeGpt.py +2 -2
@@ -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:
Modified g4f/Provider/Geekgpt.py +6 -7
@@ -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
Modified g4f/Provider/Liaobots.py +1 -1
@@ -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
Added g4f/Provider/MyShell.py +89 -0
@@ -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}"
Modified g4f/Provider/Vercel.py +4 -4
@@ -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()
Modified g4f/Provider/Yqcloud.py +6 -5
@@ -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
Modified g4f/Provider/__init__.py +3 -1
@@ -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',
Renamed g4f/Provider/deprecated/Myshell.py +2 -2
@@ -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 = {
Modified g4f/Provider/deprecated/__init__.py +2 -1
@@ -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
Modified g4f/models.py +0 -7
@@ -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,