From 6fb45515400488b32ac970bbd9f6f51023259b9f Mon Sep 17 00:00:00 2001 From: Bagus Indrayana Date: Wed, 12 Jul 2023 07:49:23 +0800 Subject: [PATCH] refactor/move provider from testing folder --- g4f/Provider/Providers/AiService.py | 40 ++++++++++++ g4f/Provider/Providers/BingHuan.py | 27 ++++++++ .../Provider/Providers}/Wewordle.py | 32 ++-------- .../Provider/Providers}/helpers/binghuan.py | 0 g4f/Provider/__init__.py | 3 + testing/aiservice/AiService.py | 62 ------------------- testing/aiservice/README.md | 2 - testing/aiservice/testing.py | 30 --------- testing/binghuan/BingHuan.py | 49 --------------- testing/binghuan/README.md | 7 --- testing/binghuan/testing.py | 31 ---------- testing/wewordle/README.md | 1 - testing/wewordle/testing.py | 30 --------- 13 files changed, 74 insertions(+), 240 deletions(-) create mode 100644 g4f/Provider/Providers/AiService.py create mode 100644 g4f/Provider/Providers/BingHuan.py rename {testing/wewordle => g4f/Provider/Providers}/Wewordle.py (65%) rename {testing/binghuan => g4f/Provider/Providers}/helpers/binghuan.py (100%) delete mode 100644 testing/aiservice/AiService.py delete mode 100644 testing/aiservice/README.md delete mode 100644 testing/aiservice/testing.py delete mode 100644 testing/binghuan/BingHuan.py delete mode 100644 testing/binghuan/README.md delete mode 100644 testing/binghuan/testing.py delete mode 100644 testing/wewordle/README.md delete mode 100644 testing/wewordle/testing.py diff --git a/g4f/Provider/Providers/AiService.py b/g4f/Provider/Providers/AiService.py new file mode 100644 index 00000000..8d475118 --- /dev/null +++ b/g4f/Provider/Providers/AiService.py @@ -0,0 +1,40 @@ +import os,sys +import requests +from ...typing import get_type_hints + +url = "https://aiservice.vercel.app/api/chat/answer" +model = ['gpt-3.5-turbo'] +supports_stream = False +needs_auth = False + + +def _create_completion(model: str, messages: list, stream: bool, **kwargs): + base = '' + for message in messages: + base += '%s: %s\n' % (message['role'], message['content']) + base += 'assistant:' + + headers = { + "accept": "*/*", + "content-type": "text/plain;charset=UTF-8", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-origin", + "Referer": "https://aiservice.vercel.app/chat", + } + data = { + "input": base + } + response = requests.post(url, headers=headers, json=data) + if response.status_code == 200: + _json = response.json() + yield _json['data'] + else: + print(f"Error Occurred::{response.status_code}") + return None + + + +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 diff --git a/g4f/Provider/Providers/BingHuan.py b/g4f/Provider/Providers/BingHuan.py new file mode 100644 index 00000000..7344a342 --- /dev/null +++ b/g4f/Provider/Providers/BingHuan.py @@ -0,0 +1,27 @@ +import os,sys +import json +import subprocess +from ...typing import sha256, Dict, get_type_hints + +url = 'https://b.ai-huan.xyz' +model = ['gpt-3.5-turbo', 'gpt-4'] +supports_stream = True +needs_auth = False + +def _create_completion(model: str, messages: list, stream: bool, **kwargs): + path = os.path.dirname(os.path.realpath(__file__)) + config = json.dumps({ + 'messages': messages, + 'model': model}, separators=(',', ':')) + cmd = ['python', f'{path}/helpers/binghuan.py', config] + + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + + for line in iter(p.stdout.readline, b''): + yield line.decode('cp1252') + + + +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 diff --git a/testing/wewordle/Wewordle.py b/g4f/Provider/Providers/Wewordle.py similarity index 65% rename from testing/wewordle/Wewordle.py rename to g4f/Provider/Providers/Wewordle.py index 0d79c5c7..95966fbd 100644 --- a/testing/wewordle/Wewordle.py +++ b/g4f/Provider/Providers/Wewordle.py @@ -4,7 +4,7 @@ import json import random import time import string -# from ...typing import sha256, Dict, get_type_hints +from ...typing import sha256, Dict, get_type_hints url = "https://wewordle.org/gptapi/v1/android/turbo" model = ['gpt-3.5-turbo'] @@ -68,30 +68,6 @@ def _create_completion(model: str, messages: list, stream: bool, **kwargs): print(f"Error Occurred::{response.status_code}") return None -# 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]]) - - -# Temporary For ChatCompletion Class -class ChatCompletion: - @staticmethod - def create(model: str, messages: list, provider: None or str, stream: bool = False, auth: str = False, **kwargs): - kwargs['auth'] = auth - - if provider and needs_auth and not auth: - print( - f'ValueError: {provider} requires authentication (use auth="cookie or token or jwt ..." param)', file=sys.stderr) - sys.exit(1) - - try: - - - return (_create_completion(model, messages, stream, **kwargs) - if stream else ''.join(_create_completion(model, messages, stream, **kwargs))) - except TypeError as e: - print(e) - arg: str = str(e).split("'")[1] - print( - f"ValueError: {provider} does not support '{arg}' argument", file=sys.stderr) - sys.exit(1) +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 diff --git a/testing/binghuan/helpers/binghuan.py b/g4f/Provider/Providers/helpers/binghuan.py similarity index 100% rename from testing/binghuan/helpers/binghuan.py rename to g4f/Provider/Providers/helpers/binghuan.py diff --git a/g4f/Provider/__init__.py b/g4f/Provider/__init__.py index 3a86291d..e8fbf617 100644 --- a/g4f/Provider/__init__.py +++ b/g4f/Provider/__init__.py @@ -19,6 +19,9 @@ from .Providers import ( EasyChat, Acytoo, DFEHub, + AiService, + BingHuan, + Wewordle ) Palm = Bard diff --git a/testing/aiservice/AiService.py b/testing/aiservice/AiService.py deleted file mode 100644 index 287a39ef..00000000 --- a/testing/aiservice/AiService.py +++ /dev/null @@ -1,62 +0,0 @@ -import os,sys -import requests -# from ...typing import get_type_hints - -url = "https://aiservice.vercel.app/api/chat/answer" -model = ['gpt-3.5-turbo'] -supports_stream = False -needs_auth = False - - -def _create_completion(model: str, messages: list, stream: bool, **kwargs): - base = '' - for message in messages: - base += '%s: %s\n' % (message['role'], message['content']) - base += 'assistant:' - - headers = { - "accept": "*/*", - "content-type": "text/plain;charset=UTF-8", - "sec-fetch-dest": "empty", - "sec-fetch-mode": "cors", - "sec-fetch-site": "same-origin", - "Referer": "https://aiservice.vercel.app/chat", - } - data = { - "input": base - } - response = requests.post(url, headers=headers, json=data) - if response.status_code == 200: - _json = response.json() - yield _json['data'] - else: - print(f"Error Occurred::{response.status_code}") - return None - - - -# 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]]) - - -# Temporary For ChatCompletion Class -class ChatCompletion: - @staticmethod - def create(model: str, messages: list, provider: None or str, stream: bool = False, auth: str = False, **kwargs): - kwargs['auth'] = auth - - if provider and needs_auth and not auth: - print( - f'ValueError: {provider} requires authentication (use auth="cookie or token or jwt ..." param)', file=sys.stderr) - sys.exit(1) - - try: - return (_create_completion(model, messages, stream, **kwargs) - if stream else ''.join(_create_completion(model, messages, stream, **kwargs))) - except TypeError as e: - print(e) - arg: str = str(e).split("'")[1] - print( - f"ValueError: {provider} does not support '{arg}' argument", file=sys.stderr) - sys.exit(1) \ No newline at end of file diff --git a/testing/aiservice/README.md b/testing/aiservice/README.md deleted file mode 100644 index 83b06481..00000000 --- a/testing/aiservice/README.md +++ /dev/null @@ -1,2 +0,0 @@ -https://github.com/xtekky/gpt4free/issues/40#issuecomment-1629152431 -probably gpt-3.5 \ No newline at end of file diff --git a/testing/aiservice/testing.py b/testing/aiservice/testing.py deleted file mode 100644 index 5cb6c5ef..00000000 --- a/testing/aiservice/testing.py +++ /dev/null @@ -1,30 +0,0 @@ -from AiService import ChatCompletion - -# Test 1 -response = ChatCompletion.create(model="gpt-3.5-turbo", - provider="AiService", - stream=False, - messages=[{'role': 'user', 'content': 'who are you?'}]) - -print(response) - -# Test 2 -response = ChatCompletion.create(model="gpt-3.5-turbo", - provider="AiService", - stream=False, - messages=[{'role': 'user', 'content': 'what you can do?'}]) - -print(response) - - -# Test 3 -response = ChatCompletion.create(model="gpt-3.5-turbo", - provider="AiService", - stream=False, - messages=[ - {'role': 'user', 'content': 'now your name is Bob'}, - {'role': 'assistant', 'content': 'Hello Im Bob, you asistant'}, - {'role': 'user', 'content': 'what your name again?'}, - ]) - -print(response) \ No newline at end of file diff --git a/testing/binghuan/BingHuan.py b/testing/binghuan/BingHuan.py deleted file mode 100644 index 8c859c08..00000000 --- a/testing/binghuan/BingHuan.py +++ /dev/null @@ -1,49 +0,0 @@ -import os,sys -import json -import subprocess -# from ...typing import sha256, Dict, get_type_hints - -url = 'https://b.ai-huan.xyz' -model = ['gpt-3.5-turbo', 'gpt-4'] -supports_stream = True -needs_auth = False - -def _create_completion(model: str, messages: list, stream: bool, **kwargs): - path = os.path.dirname(os.path.realpath(__file__)) - config = json.dumps({ - 'messages': messages, - 'model': model}, separators=(',', ':')) - cmd = ['python', f'{path}/helpers/binghuan.py', config] - - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - - for line in iter(p.stdout.readline, b''): - yield line.decode('cp1252') - - - -# 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]]) - - -# Temporary For ChatCompletion Class -class ChatCompletion: - @staticmethod - def create(model: str, messages: list, provider: None or str, stream: bool = False, auth: str = False, **kwargs): - kwargs['auth'] = auth - - if provider and needs_auth and not auth: - print( - f'ValueError: {provider} requires authentication (use auth="cookie or token or jwt ..." param)', file=sys.stderr) - sys.exit(1) - - try: - return (_create_completion(model, messages, stream, **kwargs) - if stream else ''.join(_create_completion(model, messages, stream, **kwargs))) - except TypeError as e: - print(e) - arg: str = str(e).split("'")[1] - print( - f"ValueError: {provider} does not support '{arg}' argument", file=sys.stderr) - sys.exit(1) \ No newline at end of file diff --git a/testing/binghuan/README.md b/testing/binghuan/README.md deleted file mode 100644 index 642f1fee..00000000 --- a/testing/binghuan/README.md +++ /dev/null @@ -1,7 +0,0 @@ -https://github.com/xtekky/gpt4free/issues/40#issuecomment-1630946450 -flow chat process is realy like real Bing (create conversation,listern to websocket and more) -so i just use code Bing Provider from https://gitler.moe/g4f/gpt4free/ version and replace API endpoint and some conversationstyles and work fine - -but bing dont realy support multi/continues conversation (using prompt template from original Provider : def convert(messages) : https://github.com/xtekky/gpt4free/blob/e594500c4e7a8443e9b3f4af755c72f42dae83f0/g4f/Provider/Providers/Bing.py#L322) - -also i have problem with emoji encoding idk how to fix that \ No newline at end of file diff --git a/testing/binghuan/testing.py b/testing/binghuan/testing.py deleted file mode 100644 index 2db0b427..00000000 --- a/testing/binghuan/testing.py +++ /dev/null @@ -1,31 +0,0 @@ -from BingHuan import ChatCompletion - -# Test 1 -response = ChatCompletion.create(model="gpt-3.5-turbo", - provider="BingHuan", - stream=False, - messages=[{'role': 'user', 'content': 'who are you?'}]) - -print(response) - -# Test 2 -# this prompt will return emoji in end of response -response = ChatCompletion.create(model="gpt-3.5-turbo", - provider="BingHuan", - stream=False, - messages=[{'role': 'user', 'content': 'what you can do?'}]) - -print(response) - - -# Test 3 -response = ChatCompletion.create(model="gpt-4", - provider="BingHuan", - stream=False, - messages=[ - {'role': 'user', 'content': 'now your name is Bob'}, - {'role': 'assistant', 'content': 'Hello Im Bob, you asistant'}, - {'role': 'user', 'content': 'what your name again?'}, - ]) - -print(response) \ No newline at end of file diff --git a/testing/wewordle/README.md b/testing/wewordle/README.md deleted file mode 100644 index ec2289c2..00000000 --- a/testing/wewordle/README.md +++ /dev/null @@ -1 +0,0 @@ -original from website https://chat-gpt.com/chat https://github.com/xtekky/gpt4free/issues/40#issuecomment-1629152431, i got api https://wewordle.org/gptapi/v1/web/turbo but it got limit so i try to try reverse they android app and i got api https://wewordle.org/gptapi/v1/android/turbo and just randomize user id to bypass limit \ No newline at end of file diff --git a/testing/wewordle/testing.py b/testing/wewordle/testing.py deleted file mode 100644 index cebcaeed..00000000 --- a/testing/wewordle/testing.py +++ /dev/null @@ -1,30 +0,0 @@ -from Wewordle import ChatCompletion - -# Test 1 -response = ChatCompletion.create(model="gpt-3.5-turbo", - provider="Wewordle", - stream=False, - messages=[{'role': 'user', 'content': 'who are you?'}]) - -print(response) - -# Test 2 -response = ChatCompletion.create(model="gpt-3.5-turbo", - provider="Wewordle", - stream=False, - messages=[{'role': 'user', 'content': 'what you can do?'}]) - -print(response) - - -# Test 3 -response = ChatCompletion.create(model="gpt-3.5-turbo", - provider="Wewordle", - stream=False, - messages=[ - {'role': 'user', 'content': 'now your name is Bob'}, - {'role': 'assistant', 'content': 'Hello Im Bob, you asistant'}, - {'role': 'user', 'content': 'what your name again?'}, - ]) - -print(response)