Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 44 additions & 43 deletions server.py
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
"""Make some requests to OpenAI's chatbot"""
#!/usr/bin/env python3
# -*- coding:utf-8 -*-


import time
import os
import time
import flask

from flask import g

from flask import request
from playwright.sync_api import sync_playwright

APP = flask.Flask(__name__)
PLAY = sync_playwright().start()
BROWSER = PLAY.chromium.launch_persistent_context(
user_data_dir="/tmp/playwright",
headless=False,
)
PAGE = BROWSER.new_page()
app = flask.Flask(__name__)
playwright = sync_playwright().start()
browser = playwright.chromium.launch_persistent_context(user_data_dir="/tmp/playwright", headless=False)
page = browser.new_page()


def get_input_box():
"""Get the child textarea of `PromptTextarea__TextareaWrapper`"""
return PAGE.query_selector("textarea")
return page.query_selector("textarea")


def is_logged_in():
# See if we have a textarea with data-id="root"
return get_input_box() is not None


def is_loading_response() -> bool:
"""See if the send button is diabled, if it does, we're not loading"""
return not PAGE.query_selector("textarea ~ button").is_enabled()
"""See if the send button is disabled, if it is, we're still loading"""
return not page.query_selector("textarea ~ button").is_enabled()


def send_message(message):
# Send the message
Expand All @@ -36,77 +36,78 @@ def send_message(message):
box.fill(message)
box.press("Enter")


def get_last_message():
"""Get the latest message"""
while is_loading_response():
time.sleep(0.25)
page_elements = PAGE.query_selector_all("div[class*='request-:']")
last_element = page_elements.pop()
page_elements = page.query_selector_all("div[class*='request-:']")
last_element = page_elements[-1]
return last_element.inner_text()


def regenerate_response():
"""Clicks on the Try again button.
Returns None if there is no button"""
try_again_button = PAGE.query_selector("button:has-text('Try again')")
try_again_button = page.query_selector("button:has-text('Try again')")
if try_again_button is not None:
try_again_button.click()
time.sleep(0.5)
return try_again_button


def get_reset_button():
"""Returns the reset thread button (it is an a tag not a button)"""
return PAGE.query_selector("a:has-text('Reset thread')")
return page.query_selector("a:has-text('Reset chat')")

@APP.route("/chat", methods=["GET"]) #TODO: make this a POST

@app.route("/chat", methods=["POST"])
def chat():
message = flask.request.args.get("q")
print("Sending message: ", message)
message = request.form.get("message")
send_message(message)
response = get_last_message()
print("Response: ", response)
return response

# create a route for regenerating the response
@APP.route("/regenerate", methods=["POST"])

@app.route("/regenerate", methods=["POST"])
def regenerate():
print("Regenerating response")
if regenerate_response() is None:
return "No response to regenerate"
response = get_last_message()
print("Response: ", response)
return response

@APP.route("/reset", methods=["POST"])

@app.route("/reset", methods=["POST"])
def reset():
print("Resetting chat")
get_reset_button().click()
return "Chat thread reset"

@APP.route("/restart", methods=["POST"])

@app.route("/restart", methods=["POST"])
def restart():
global PAGE,BROWSER,PLAY
PAGE.close()
BROWSER.close()
PLAY.stop()
global page, browser, playwright
page.close()
browser.close()
playwright.stop()
time.sleep(0.25)
PLAY = sync_playwright().start()
BROWSER = PLAY.chromium.launch_persistent_context(
user_data_dir="/tmp/playwright",
headless=False,
)
PAGE = BROWSER.new_page()
PAGE.goto("https://chat.openai.com/")
playwright = sync_playwright().start()
browser = playwright.chromium.launch_persistent_context(user_data_dir="/tmp/playwright", headless=False)
page = browser.new_page()
page.goto("https://chat.openai.com/")
return "API restart!"


def start_browser():
PAGE.goto("https://chat.openai.com/")
page.goto("https://chat.openai.com/")
if not is_logged_in():
print("Please log in to OpenAI Chat")
print("Press enter when you're done")
input()
else:
print("Logged in")
APP.run(port=5001, threaded=False)

app.run(port=5001, threaded=False, host="0.0.0.0")


if __name__ == "__main__":
start_browser()