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. 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 ## Table of Contents
| Section | Description | Link | Status | | 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) | - | | **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) | - | | **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) | - | | **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) | - | | **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) | - | | **Star History** | Star History | [![Link to Section](https://img.shields.io/badge/Link-Go%20to%20Section-blue)](#star-history) | - |
| **Usage Examples** | | | | | **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) | | `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) | | | | `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) | | `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) | | `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** | | | | | **Try it Out** | | | |
@ -102,6 +101,10 @@ Run
``` ```
docker run -p 8501:8501 gpt4free:latest docker run -p 8501:8501 gpt4free:latest
``` ```
Another way - docker-compose (no docker build/run needed)
```
docker-compose up -d
```
## Deploy using docker-compose ## 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: 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 @staticmethod
def create(prompt: str, cookie_input: str) -> CoCalcResponse: 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 # Initialize a session with custom headers
session = Completion._initialize_session(cookie_input) session = Completion._initialize_session(cookie_input)
# Set the data that will be submitted # 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 # 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 @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.""" """Initialize a session with custom headers for the request."""
session = requests.Session() session = requests.Session()
headers = { headers = {
'Accept': '*/*', "Accept": "*/*",
'Accept-Language': 'en-US,en;q=0.5', "Accept-Language": "en-US,en;q=0.5",
'Origin': 'https://cocalc.com', "Origin": "https://cocalc.com",
'Referer': 'https://cocalc.com/api/v2/openai/chatgpt', "Referer": "https://cocalc.com/api/v2/openai/chatgpt",
'Cookie': conversation_cookie, "Cookie": conversation_cookie,
'User-Agent': UserAgent().random, "User-Agent": UserAgent().random,
} }
session.headers.update(headers) session.headers.update(headers)
@ -39,9 +62,6 @@ class Completion:
@staticmethod @staticmethod
def _create_payload(prompt: str, system_prompt: str) -> dict: 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 return {"input": prompt, "system": system_prompt, "tag": "next:index"}
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'])

View file

@ -1,14 +1,14 @@
from json import loads from json import loads
from re import match from re import findall
from time import time, sleep from time import time, sleep
from typing import Generator, Optional from typing import Generator, Optional
from uuid import uuid4 from uuid import uuid4
from fake_useragent import UserAgent from fake_useragent import UserAgent
from requests import post from requests import post
from pymailtm import MailTm, Message
from tls_client import Session from tls_client import Session
from .mail import Mail
from .typing import ForeFrontResponse from .typing import ForeFrontResponse
@ -19,11 +19,8 @@ class Account:
start = time() start = time()
mail_client = Mail(proxies) mail_client = MailTm().get_account()
mail_token = None mail_address = mail_client.address
mail_address = mail_client.get_mail()
# print(mail_address)
client = Session(client_identifier='chrome110') client = Session(client_identifier='chrome110')
client.proxies = proxies client.proxies = proxies
@ -33,7 +30,7 @@ class Account:
} }
response = client.post( 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}, data={'email_address': mail_address},
) )
@ -45,9 +42,10 @@ class Account:
return 'Failed to create account!' return 'Failed to create account!'
response = client.post( 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={ data={
'strategy': 'email_code', 'strategy': 'email_link',
'redirect_url': 'https://accounts.forefront.ai/sign-up/verify'
}, },
) )
@ -59,26 +57,23 @@ class Account:
while True: while True:
sleep(1) sleep(1)
for _ in mail_client.fetch_inbox(): new_message: Message = mail_client.wait_for_message()
if logging: if logging:
print(mail_client.get_message_content(_['id'])) print(new_message.data['id'])
mail_token = match(r'(\d){5,6}', mail_client.get_message_content(_['id'])).group(0)
if mail_token: verification_url = findall(r'https:\/\/clerk\.forefront\.ai\/v1\/verify\?token=\w.+', new_message.text)[0]
if verification_url:
break break
if logging: if logging:
print(mail_token) print(verification_url)
response = client.post( response = client.get(verification_url)
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'},
)
if logging: response = client.get('https://clerk.forefront.ai/v1/client?_clerk_js_version=4.38.4')
print(response.json())
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: with open('accounts.txt', 'a') as f:
f.write(f'{mail_address}:{token}\n') 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, detailed=True,
include_links=True, ) include_links=True, )
print(response) print(response.dict())
# { # {
# "response": "...", # "response": "...",
@ -32,7 +32,7 @@ while True:
prompt=prompt, prompt=prompt,
chat=chat) 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 twocaptcha
https://github.com/AI-Yash/st-chat/archive/refs/pull/24/head.zip https://github.com/AI-Yash/st-chat/archive/refs/pull/24/head.zip
pydantic pydantic
pymailtm