diff options
-rw-r--r-- | README.md | 11 | ||||
-rw-r--r-- | g4f/Provider/Providers/EasyChat.py | 37 | ||||
-rw-r--r-- | g4f/Provider/Providers/Raycast.py | 50 | ||||
-rw-r--r-- | g4f/Provider/__init__.py | 1 | ||||
-rw-r--r-- | requirements.txt | 1 |
5 files changed, 84 insertions, 16 deletions
@@ -126,7 +126,16 @@ from g4f.Provider import ( H2o, ChatgptLogin, DeepAi, - GetGpt + GetGpt, + AItianhu, + EasyChat, + Acytoo, + DfeHub, + AiService, + BingHuan, + Wewordle, + ChatgptAi, + opchatgpts, ) # usage: diff --git a/g4f/Provider/Providers/EasyChat.py b/g4f/Provider/Providers/EasyChat.py index 909428fa..c6621f4e 100644 --- a/g4f/Provider/Providers/EasyChat.py +++ b/g4f/Provider/Providers/EasyChat.py @@ -7,40 +7,47 @@ model = ['gpt-3.5-turbo'] supports_stream = True needs_auth = False working = True +active_servers = [ + "https://chat10.fastgpt.me", + "https://chat9.fastgpt.me", + "https://chat1.fastgpt.me", + "https://chat2.fastgpt.me", + "https://chat3.fastgpt.me", + "https://chat4.fastgpt.me" +] +# Change server if not work current server +server = active_servers[0] def _create_completion(model: str, messages: list, stream: bool, **kwargs): + req = requests.Session() + headers = { - 'authority': 'free.easychat.work', + 'authority': f'{server}'.replace("https://",""), 'accept': 'text/event-stream', - 'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3', + 'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3,fa=0.2', 'content-type': 'application/json', - 'endpoint': '', - 'origin': 'https://free.easychat.work', - 'plugins': '0', - 'referer': 'https://free.easychat.work/', + 'origin': f'{server}', + 'referer': f'{server}/', 'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"macOS"', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-origin', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', - 'usesearch': 'false', 'x-requested-with': 'XMLHttpRequest', } json_data = { 'messages': messages, 'stream': True, - 'model': model, + 'model': "gpt-3.5-turbo", 'temperature': kwargs.get('temperature', 0.5), 'presence_penalty': kwargs.get('presence_penalty', 0), 'frequency_penalty': kwargs.get('frequency_penalty', 0), 'top_p': kwargs.get('top_p', 1), } - response = requests.post('https://free.easychat.work/api/openai/v1/chat/completions', + # init cookies from server + req.get(f'{server}/') + + response = req.post(f'{server}/api/openai/v1/chat/completions', headers=headers, json=json_data) for chunk in response.iter_lines(): @@ -49,4 +56,4 @@ def _create_completion(model: str, messages: list, stream: bool, **kwargs): yield (data['choices'][0]['delta']['content']) params = f'g4f.Providers.{os.path.basename(__file__)[:-3]} supports: ' + \ - '(%s)' % ', '.join([f"{name}: {get_type_hints(_create_completion)[name].__name__}" for name in _create_completion.__code__.co_varnames[:_create_completion.__code__.co_argcount]])
\ No newline at end of file + '(%s)' % ', '.join([f"{name}: {get_type_hints(_create_completion)[name].__name__}" for name in _create_completion.__code__.co_varnames[:_create_completion.__code__.co_argcount]]) diff --git a/g4f/Provider/Providers/Raycast.py b/g4f/Provider/Providers/Raycast.py new file mode 100644 index 00000000..1704b4e8 --- /dev/null +++ b/g4f/Provider/Providers/Raycast.py @@ -0,0 +1,50 @@ +import json +import os + +import requests +from g4f.typing import get_type_hints + +url = "https://backend.raycast.com/api/v1/ai/chat_completions" +model = ['gpt-3.5-turbo', 'gpt-4'] +supports_stream = True +needs_auth = True +working = True + + +def _create_completion(model: str, messages: list, stream: bool, **kwargs): + auth = kwargs.get('auth') + headers = { + 'Accept': 'application/json', + 'Accept-Language': 'en-US,en;q=0.9', + 'Authorization': f'Bearer {auth}', + 'Content-Type': 'application/json', + 'User-Agent': 'Raycast/0 CFNetwork/1410.0.3 Darwin/22.6.0', + } + parsed_messages = [] + for message in messages: + parsed_messages.append({ + 'author': message['role'], + 'content': {'text': message['content']} + }) + data = { + "debug": False, + "locale": "en-CN", + "messages": parsed_messages, + "model": model, + "provider": "openai", + "source": "ai_chat", + "system_instruction": "markdown", + "temperature": 0.5 + } + response = requests.post(url, headers=headers, json=data, stream=True) + for token in response.iter_lines(): + if b'data: ' not in token: + continue + completion_chunk = json.loads(token.decode().replace('data: ', '')) + token = completion_chunk['text'] + if token != None: + yield token + + +params = f'g4f.Providers.{os.path.basename(__file__)[:-3]} supports: ' + \ + '(%s)' % ', '.join([f"{name}: {get_type_hints(_create_completion)[name].__name__}" for name in _create_completion.__code__.co_varnames[:_create_completion.__code__.co_argcount]]) diff --git a/g4f/Provider/__init__.py b/g4f/Provider/__init__.py index ee434400..9d0442d0 100644 --- a/g4f/Provider/__init__.py +++ b/g4f/Provider/__init__.py @@ -24,6 +24,7 @@ from .Providers import ( Wewordle, ChatgptAi, opchatgpts, + Raycast, ) Palm = Bard diff --git a/requirements.txt b/requirements.txt index 7f51ed28..d87062ec 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,3 +6,4 @@ certifi browser_cookie3 websockets pyexecjs +js2py |