1
0
Fork 0
This commit is contained in:
t.me/xtekky 2023-04-30 12:42:43 +01:00
commit 21c82d873a
7 changed files with 91 additions and 115 deletions

View file

@ -19,9 +19,8 @@ Please note the following:
3. **Educational Purposes Only**: This repository and its content are provided strictly for educational purposes. By using the information and code provided, users acknowledge that they are using the APIs and models at their own risk and agree to comply with any applicable laws and regulations.
## Table of Contents
| Section | Description | Link | Status |
| -------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | --- | --- |
| ------- | ----------- | ---- | ------ |
| **To do list** | List of tasks to be done | [![Link to Section](https://img.shields.io/badge/Link-Go%20to%20Section-blue)](#todo) | - |
| **Current Sites** | Current websites or platforms that can be used as APIs | [![Link to Section](https://img.shields.io/badge/Link-Go%20to%20Section-blue)](#current-sites) | - |
| **Best Sites for gpt4** | Recommended websites or platforms for gpt4 | [![Link to Section](https://img.shields.io/badge/Link-Go%20to%20Section-blue)](#best-sites) | - |
@ -33,8 +32,8 @@ Please note the following:
| **Copyright** | Copyright information | [![Link to Section](https://img.shields.io/badge/Link-Go%20to%20Section-blue)](#copyright) | - |
| **Star History** | Star History | [![Link to Section](https://img.shields.io/badge/Link-Go%20to%20Section-blue)](#star-history) | - |
| **Usage Examples** | | | |
| `theb` | Example usage for theb (gpt-3.5) | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](openai_rev/theb/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) |
| `forefront` | Example usage for forefront (gpt-4) | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](gpt4free/forefront/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) | | |
| `theb` | Example usage for theb (gpt-3.5) | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](gpt4free/theb/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) |
| `forefront` | Example usage for forefront (gpt-4) | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](gpt4free/forefront/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) | ||
| `quora (poe)` | Example usage for quora | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](gpt4free/quora/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) |
| `you` | Example usage for you | [![Link to File](https://img.shields.io/badge/Link-Go%20to%20File-blue)](gpt4free/you/README.md) | ![Active](https://img.shields.io/badge/Active-brightgreen) |
| **Try it Out** | | | |
@ -102,6 +101,10 @@ Run
```
docker run -p 8501:8501 gpt4free:latest
```
Another way - docker-compose (no docker build/run needed)
```
docker-compose up -d
```
## Deploy using docker-compose

9
docker-compose.yaml Normal file
View file

@ -0,0 +1,9 @@
version: "3.9"
services:
gpt4free:
build:
context: .
dockerfile: Dockerfile
ports:
- "8501:8501"

View file

@ -9,29 +9,52 @@ class CoCalcResponse(BaseModel):
class Completion:
"""A class for generating text completions using CoCalc's GPT-based chatbot."""
API_ENDPOINT = "https://cocalc.com/api/v2/openai/chatgpt"
DEFAULT_SYSTEM_PROMPT = "ASSUME I HAVE FULL ACCESS TO COCALC. "
@staticmethod
def create(prompt: str, cookie_input: str) -> CoCalcResponse:
"""
Generate a text completion for the given prompt using CoCalc's GPT-based chatbot.
Args:
prompt: The text prompt to complete.
cookie_input: The cookie required to authenticate the chatbot API request.
Returns:
A CoCalcResponse object containing the text completion and a boolean indicating
whether the request was successful.
"""
# Initialize a session with custom headers
session = Completion._initialize_session(cookie_input)
# Set the data that will be submitted
payload = Completion._create_payload(prompt, 'ASSUME I HAVE FULL ACCESS TO COCALC. ')
payload = Completion._create_payload(prompt, Completion.DEFAULT_SYSTEM_PROMPT)
try:
# Submit the request and return the results
return Completion._submit_request(session, payload)
response = session.post(Completion.API_ENDPOINT, json=payload).json()
return CoCalcResponse(text=response['output'], status=response['success'])
except requests.exceptions.RequestException as e:
# Handle exceptions that may occur during the request
print(f"Error: {e}")
return CoCalcResponse(text="", status=False)
@classmethod
def _initialize_session(cls, conversation_cookie) -> requests.Session:
def _initialize_session(cls, conversation_cookie: str) -> requests.Session:
"""Initialize a session with custom headers for the request."""
session = requests.Session()
headers = {
'Accept': '*/*',
'Accept-Language': 'en-US,en;q=0.5',
'Origin': 'https://cocalc.com',
'Referer': 'https://cocalc.com/api/v2/openai/chatgpt',
'Cookie': conversation_cookie,
'User-Agent': UserAgent().random,
"Accept": "*/*",
"Accept-Language": "en-US,en;q=0.5",
"Origin": "https://cocalc.com",
"Referer": "https://cocalc.com/api/v2/openai/chatgpt",
"Cookie": conversation_cookie,
"User-Agent": UserAgent().random,
}
session.headers.update(headers)
@ -39,9 +62,6 @@ class Completion:
@staticmethod
def _create_payload(prompt: str, system_prompt: str) -> dict:
return {'input': prompt, 'system': system_prompt, 'tag': 'next:index'}
"""Create the payload for the API request."""
@staticmethod
def _submit_request(session: requests.Session, payload: dict) -> CoCalcResponse:
response = session.post('https://cocalc.com/api/v2/openai/chatgpt', json=payload).json()
return CoCalcResponse(text=response['output'], status=response['success'])
return {"input": prompt, "system": system_prompt, "tag": "next:index"}

View file

@ -1,14 +1,14 @@
from json import loads
from re import match
from re import findall
from time import time, sleep
from typing import Generator, Optional
from uuid import uuid4
from fake_useragent import UserAgent
from requests import post
from pymailtm import MailTm, Message
from tls_client import Session
from .mail import Mail
from .typing import ForeFrontResponse
@ -19,11 +19,8 @@ class Account:
start = time()
mail_client = Mail(proxies)
mail_token = None
mail_address = mail_client.get_mail()
# print(mail_address)
mail_client = MailTm().get_account()
mail_address = mail_client.address
client = Session(client_identifier='chrome110')
client.proxies = proxies
@ -33,7 +30,7 @@ class Account:
}
response = client.post(
'https://clerk.forefront.ai/v1/client/sign_ups?_clerk_js_version=4.32.6',
'https://clerk.forefront.ai/v1/client/sign_ups?_clerk_js_version=4.38.4',
data={'email_address': mail_address},
)
@ -45,9 +42,10 @@ class Account:
return 'Failed to create account!'
response = client.post(
f'https://clerk.forefront.ai/v1/client/sign_ups/{trace_token}/prepare_verification?_clerk_js_version=4.32.6',
f'https://clerk.forefront.ai/v1/client/sign_ups/{trace_token}/prepare_verification?_clerk_js_version=4.38.4',
data={
'strategy': 'email_code',
'strategy': 'email_link',
'redirect_url': 'https://accounts.forefront.ai/sign-up/verify'
},
)
@ -59,26 +57,23 @@ class Account:
while True:
sleep(1)
for _ in mail_client.fetch_inbox():
new_message: Message = mail_client.wait_for_message()
if logging:
print(mail_client.get_message_content(_['id']))
mail_token = match(r'(\d){5,6}', mail_client.get_message_content(_['id'])).group(0)
print(new_message.data['id'])
if mail_token:
verification_url = findall(r'https:\/\/clerk\.forefront\.ai\/v1\/verify\?token=\w.+', new_message.text)[0]
if verification_url:
break
if logging:
print(mail_token)
print(verification_url)
response = client.post(
f'https://clerk.forefront.ai/v1/client/sign_ups/{trace_token}/attempt_verification?_clerk_js_version=4.38.4',
data={'code': mail_token, 'strategy': 'email_code'},
)
response = client.get(verification_url)
if logging:
print(response.json())
response = client.get('https://clerk.forefront.ai/v1/client?_clerk_js_version=4.38.4')
token = response.json()['client']['sessions'][0]['last_active_token']['jwt']
token = response.json()['response']['sessions'][0]['last_active_token']['jwt']
with open('accounts.txt', 'a') as f:
f.write(f'{mail_address}:{token}\n')

View file

@ -1,52 +0,0 @@
from random import choices
from string import ascii_letters
from requests import Session
class Mail:
def __init__(self, proxies: dict = None) -> None:
self.client = Session()
self.client.proxies = proxies
self.client.headers = {
"host": "api.mail.tm",
"connection": "keep-alive",
"sec-ch-ua": "\"Google Chrome\";v=\"111\", \"Not(A:Brand\";v=\"8\", \"Chromium\";v=\"111\"",
"accept": "application/json, text/plain, */*",
"content-type": "application/json",
"sec-ch-ua-mobile": "?0",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36",
"sec-ch-ua-platform": "\"macOS\"",
"origin": "https://mail.tm",
"sec-fetch-site": "same-site",
"sec-fetch-mode": "cors",
"sec-fetch-dest": "empty",
"referer": "https://mail.tm/",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-GB,en-US;q=0.9,en;q=0.8",
}
def get_mail(self) -> str:
token = ''.join(choices(ascii_letters, k=14)).lower()
init = self.client.post(
"https://api.mail.tm/accounts", json={"address": f"{token}@bugfoo.com", "password": token}
)
if init.status_code == 201:
resp = self.client.post("https://api.mail.tm/token", json={**init.json(), "password": token})
self.client.headers['authorization'] = 'Bearer ' + resp.json()['token']
return f"{token}@bugfoo.com"
else:
raise Exception("Failed to create email")
def fetch_inbox(self):
return self.client.get(f"https://api.mail.tm/messages").json()["hydra:member"]
def get_message(self, message_id: str):
return self.client.get(f"https://api.mail.tm/messages/{message_id}").json()
def get_message_content(self, message_id: str):
return self.get_message(message_id)["text"]

View file

@ -10,7 +10,7 @@ response = you.Completion.create(
detailed=True,
include_links=True, )
print(response)
print(response.dict())
# {
# "response": "...",
@ -32,7 +32,7 @@ while True:
prompt=prompt,
chat=chat)
print("Bot:", response["response"])
print("Bot:", response.text)
chat.append({"question": prompt, "answer": response["response"]})
chat.append({"question": prompt, "answer": response.text})
```

View file

@ -11,3 +11,4 @@ fake-useragent
twocaptcha
https://github.com/AI-Yash/st-chat/archive/refs/pull/24/head.zip
pydantic
pymailtm