mirror of
https://github.com/xtekky/gpt4free.git
synced 2024-12-22 10:31:36 +03:00
98 lines
3.4 KiB
Python
98 lines
3.4 KiB
Python
|
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)
|