Skip to content

Commit

Permalink
Forefront fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
oubrax committed May 4, 2023
1 parent 1f2f16f commit c60d33c
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 55 deletions.
4 changes: 4 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"editor.tabCompletion": "on",
"diffEditor.codeLens": true
}
78 changes: 23 additions & 55 deletions gpt4free/forefront/__init__.py
Original file line number Diff line number Diff line change
@@ -1,49 +1,26 @@
import os
import pickle
from json import loads
from xtempmail import Email
from re import findall
from faker import Faker
from time import time, sleep
from typing import Generator, Optional
from uuid import uuid4

from fake_useragent import UserAgent
from pymailtm import MailTm, Message
from requests import post
from tls_client import Session

from .typing import ForeFrontResponse


class Account:
COOKIES_FILE_NAME = 'cookies.pickle'

@staticmethod
def login(proxy: Optional[str] = None, logging: bool = False) -> str:
if not os.path.isfile(Account.COOKIES_FILE_NAME):
return Account.create(proxy, logging)

with open(Account.COOKIES_FILE_NAME, 'rb') as f:
cookies = pickle.load(f)
proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy} if proxy else False

client = Session(client_identifier='chrome110')
client.proxies = proxies
client.cookies.update(cookies)

if Account.is_cookie_enabled(client):
response = client.get('https://clerk.forefront.ai/v1/client?_clerk_js_version=4.38.4')
return response.json()['response']['sessions'][0]['last_active_token']['jwt']
else:
return Account.create(proxy, logging)

@staticmethod
def create(proxy: Optional[str] = None, logging: bool = False, save_cookies: bool = False) -> str:
def create(proxy: Optional[str] = None, logging: bool = False):
proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy} if proxy else False
faker = Faker()
name = (faker.name().replace(' ', '_')).lower()

start = time()

mail_client = MailTm().get_account()
mail_address = mail_client.address
mail_client = Email(name=name)
mail_address = mail_client.email

client = Session(client_identifier='chrome110')
client.proxies = proxies
Expand All @@ -66,39 +43,34 @@ def create(proxy: Optional[str] = None, logging: bool = False, save_cookies: boo

response = client.post(
f'https://clerk.forefront.ai/v1/client/sign_ups/{trace_token}/prepare_verification?_clerk_js_version=4.38.4',
data={'strategy': 'email_link', 'redirect_url': 'https://accounts.forefront.ai/sign-up/verify'},
data={
'strategy': 'email_link',
'redirect_url': 'https://accounts.forefront.ai/sign-up/verify'
},
)

if logging:
print(response.text)

if 'sign_up_attempt' not in response.text:
return 'Failed to create account!'

while True:
sleep(1)
new_message: Message = mail_client.wait_for_message()
if logging:
print(new_message.data['id'])

verification_url = findall(r'https:\/\/clerk\.forefront\.ai\/v1\/verify\?token=\w.+', new_message.text)[0]

verification_url = None
new_message = mail_client.get_new_message(5)
for msg in new_message:
verification_url = findall(r'https:\/\/clerk\.forefront\.ai\/v1\/verify\?token=\w.+', msg.text)[0]
if verification_url:
break


if verification_url is None or not verification_url:
raise RuntimeError('Error while obtaining verfication URL!')
if logging:
print(verification_url)

response = client.get(verification_url)

response = client.get('https://clerk.forefront.ai/v1/client?_clerk_js_version=4.38.4')

token = response.json()['response']['sessions'][0]['last_active_token']['jwt']

if save_cookies:
with open(Account.COOKIES_FILE_NAME, 'wb') as f:
pickle.dump(client.cookies, f)

with open('accounts.txt', 'a') as f:
f.write(f'{mail_address}:{token}\n')

Expand All @@ -107,11 +79,6 @@ def create(proxy: Optional[str] = None, logging: bool = False, save_cookies: boo

return token

@staticmethod
def is_cookie_enabled(client: Session) -> bool:
response = client.get('https://chat.forefront.ai/')
return 'window.startClerk' in response.text


class StreamingCompletion:
@staticmethod
Expand All @@ -122,14 +89,14 @@ def create(
action_type='new',
default_persona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default
model='gpt-4',
proxy=None,
proxy=None
) -> Generator[ForeFrontResponse, None, None]:
if not token:
raise Exception('Token is required!')
if not chat_id:
chat_id = str(uuid4())

proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy} if proxy else None
proxies = { 'http': 'http://' + proxy, 'https': 'http://' + proxy } if proxy else None

headers = {
'authority': 'chat-server.tenant-forefront-default.knative.chi.coreweave.com',
Expand Down Expand Up @@ -197,7 +164,7 @@ def create(
action_type='new',
default_persona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default
model='gpt-4',
proxy=None,
proxy=None
) -> ForeFrontResponse:
text = ''
final_response = None
Expand All @@ -208,7 +175,7 @@ def create(
action_type=action_type,
default_persona=default_persona,
model=model,
proxy=proxy,
proxy=proxy
):
if response:
final_response = response
Expand All @@ -220,3 +187,4 @@ def create(
raise Exception('Unable to get the response, Please try again')

return final_response

0 comments on commit c60d33c

Please sign in to comment.