mirror of
https://github.com/xtekky/gpt4free.git
synced 2024-12-25 20:22:47 +03:00
Merge pull request #739 from bagusindrayana/wewordle
add wewordle (reverse from android app)
This commit is contained in:
commit
f6d626eff2
1
testing/wewordle/README.md
Normal file
1
testing/wewordle/README.md
Normal file
@ -0,0 +1 @@
|
||||
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
|
97
testing/wewordle/Wewordle.py
Normal file
97
testing/wewordle/Wewordle.py
Normal file
@ -0,0 +1,97 @@
|
||||
import os,sys
|
||||
import requests
|
||||
import json
|
||||
import random
|
||||
import time
|
||||
import string
|
||||
# from ...typing import sha256, Dict, get_type_hints
|
||||
|
||||
url = "https://wewordle.org/gptapi/v1/android/turbo"
|
||||
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:'
|
||||
# randomize user id and app id
|
||||
_user_id = ''.join(random.choices(f'{string.ascii_lowercase}{string.digits}', k=16))
|
||||
_app_id = ''.join(random.choices(f'{string.ascii_lowercase}{string.digits}', k=31))
|
||||
# make current date with format utc
|
||||
_request_date = time.strftime("%Y-%m-%dT%H:%M:%S.000Z", time.gmtime())
|
||||
headers = {
|
||||
'accept': '*/*',
|
||||
'pragma': 'no-cache',
|
||||
'Content-Type': 'application/json',
|
||||
'Connection':'keep-alive'
|
||||
# user agent android client
|
||||
# 'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 10; SM-G975F Build/QP1A.190711.020)',
|
||||
|
||||
}
|
||||
data = {
|
||||
"user": _user_id,
|
||||
"messages": [
|
||||
{"role": "user", "content": base}
|
||||
],
|
||||
"subscriber": {
|
||||
"originalPurchaseDate": None,
|
||||
"originalApplicationVersion": None,
|
||||
"allPurchaseDatesMillis": {},
|
||||
"entitlements": {
|
||||
"active": {},
|
||||
"all": {}
|
||||
},
|
||||
"allPurchaseDates": {},
|
||||
"allExpirationDatesMillis": {},
|
||||
"allExpirationDates": {},
|
||||
"originalAppUserId": f"$RCAnonymousID:{_app_id}",
|
||||
"latestExpirationDate": None,
|
||||
"requestDate": _request_date,
|
||||
"latestExpirationDateMillis": None,
|
||||
"nonSubscriptionTransactions": [],
|
||||
"originalPurchaseDateMillis": None,
|
||||
"managementURL": None,
|
||||
"allPurchasedProductIdentifiers": [],
|
||||
"firstSeen": _request_date,
|
||||
"activeSubscriptions": []
|
||||
}
|
||||
}
|
||||
response = requests.post(url, headers=headers, data=json.dumps(data))
|
||||
if response.status_code == 200:
|
||||
_json = response.json()
|
||||
if 'message' in _json:
|
||||
yield _json['message']['content']
|
||||
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)
|
30
testing/wewordle/testing.py
Normal file
30
testing/wewordle/testing.py
Normal file
@ -0,0 +1,30 @@
|
||||
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)
|
Loading…
Reference in New Issue
Block a user