Home

Awesome

Discord Discussion Current State: Not maintained. Not Working.

Sorry guys! Really busy with private projects. This was very fun!

🔥 PyChatGPT

Read More - How OpenAI filters requests made by bots/scrapers

Python PyPi PyPi

⭐️ Like this repo? please star & consider donating to keep it maintained

<a href="https://www.buymeacoffee.com/rawandahmed" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>

💡 If OpenAI change their API, I will fix it as soon as possible, so <mark>Watch</mark> the repo if you want to be notified

Features

Web Demo

Integrated into Huggingface Spaces 🤗 using Gradio. Try out the Web Demo

Hugging Face Spaces

<p align="center">Chatting</p>

Screenshot 1

<p align="center">Creating a token</p>

Screenshot 2

You: Hi there, My name is Rawa
Chat GPT: Hello Rawa, nice to meet you. Is there something you would like to talk about or ask me? I'm here to help with any questions you may have.
You: great, now say my name like Heisenberg
Chat GPT: Sure, Rawa like Heisenberg. Is there anything else you would like to talk about? I'm here to help with any questions you may have.
You: Sorry I meant like the episode of Breaking Bad where Walter White says Heisenberg
Chat GPT: Ah, I see. In that case, you could try saying it like this: "My name is Rawa, like Heisenberg." This is a reference to the character Walter White from the TV show Breaking Bad, who often used the pseudonym "Heisenberg" when conducting illegal activities. The character was known for his cool and calculated demeanor, so saying your name like Heisenberg in this context would mean saying it with confidence and authority.

Install

pip install chatgptpy --upgrade

Usage

[NEW] Pass a options() object to the ChatGPT() constructor to customize the session

[NEW] You can now save your conversations to a file

from pychatgpt import Chat, Options

options = Options()

# [New] Pass Moderation. https://github.com/rawandahmad698/PyChatGPT/discussions/103
# options.pass_moderation = False

# [New] Enable, Disable logs
options.log = True

# Track conversation
options.track = True 

# Use a proxy
options.proxies = 'http://localhost:8080'

# Optionally, you can pass a file path to save the conversation
# They're created if they don't exist

# options.chat_log = "chat_log.txt"
# options.id_log = "id_log.txt"

# Create a Chat object
chat = Chat(email="email", password="password", options=options)
answer = chat.ask("How are you?")
print(answer)

[NEW] Resume a conversation

from pychatgpt import Chat

# Create a Chat object
chat = Chat(email="email", password="password", 
            conversation_id="Parent Conversation ID", 
            previous_convo_id="Previous Conversation ID")

answer, parent_conversation_id, conversation_id = chat.ask("How are you?")

print(answer)

# Or change the conversation id later
answer, _, _ = chat.ask("How are you?", 
                        previous_convo_id="Parent Conversation ID",
                        conversation_id="Previous Conversation ID")
print(answer)

Start a CLI Session

from pychatgpt import Chat

chat = Chat(email="email", password="password")
chat.cli_chat()

Ask a one time question

from pychatgpt import Chat

# Initializing the chat class will automatically log you in, check access_tokens
chat = Chat(email="email", password="password") 
answer, parent_conversation_id, conversation_id = chat.ask("Hello!")

You could also manually set, get the token

import time
from pychatgpt import OpenAI

# Manually set the token
OpenAI.Auth(email_address="email", password="password").save_access_token(access_token="", expiry=time.time() + 3600)

# Get the token, expiry
access_token, expiry = OpenAI.get_access_token()

# Check if the token is valid
is_expired = OpenAI.token_expired() # Returns True or False
<details><summary>Change Log</summary>

Update using pip install chatgptpy --upgrade

1.0.8

1.0.7

1.0.6

1.0.5

1.0.4

1.0.3

1.0.2

1.0.0

</details>

Other notes

If the token creation process is failing:

  1. Try to use a proxy (I recommend using this always)
  2. Don't try to log in too fast. At least wait 10 minutes if you're being rate limited.
  3. If you're still having issues, try to use a VPN. On a VPN, the script should work fine.

What's next?

I'm planning to add a few more features, such as:

The whole process

I have been looking for a way to interact with the new Chat GPT API, but most of the sources here on GitHub require you to have a Chromium instance running in the background. or by using the Web Inspector to grab Access Token manually.

No more. I have been able to reverse engineer the API and use a TLS client to mimic a real user, allowing the script to login without setting off any bot detection techniques by Auth0

Basically, the script logs in on your behalf, using a TLS client, then grabs the Access Token. It's pretty fast.

First, I'd like to tell you that "just making http" requests is not going to be enough, Auth0 is smart, each process is guarded by a state token, which is a JWT token. This token is used to prevent CSRF attacks, and it's also used to prevent bots from logging in. If you look at the auth.py file, there are over nine functions, each one of them is responsible for a different task, and they all work together to create a token for you. allow-redirects played a huge role in this, as it allowed to navigate through the login process

I work at MeshMonitors.io, We make amazing tools (Check it out yo!). I decided not to spend too much time on this, but here we are.

Why did I do this?

No one has been able to do this, and I wanted to see if I could.

Credits