|
|
|
import io |
|
from fastapi import FastAPI, File, UploadFile |
|
|
|
import subprocess |
|
import os |
|
import requests |
|
import random |
|
|
|
import shutil |
|
import json |
|
|
|
from pydantic import BaseModel |
|
from typing import Annotated |
|
|
|
from fastapi import Form |
|
|
|
|
|
import selenium |
|
|
|
from selenium import webdriver |
|
from selenium.webdriver import ChromeOptions |
|
from selenium.webdriver.chrome.service import Service |
|
import threading |
|
import random |
|
import string |
|
import time |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
options = ChromeOptions() |
|
options.add_argument('--no-sandbox') |
|
options.add_argument('-headless') |
|
service = Service() |
|
|
|
driver = webdriver.Chrome(options= options,service=service) |
|
|
|
driver.get("https://yuntian-deng-chatgpt.hf.space/") |
|
|
|
|
|
class Query(BaseModel): |
|
text: str |
|
host:str |
|
|
|
|
|
|
|
|
|
from fastapi import FastAPI, Request, Depends, UploadFile, File |
|
from fastapi.exceptions import HTTPException |
|
from fastapi.middleware.cors import CORSMiddleware |
|
from fastapi.responses import JSONResponse |
|
|
|
|
|
app = FastAPI() |
|
|
|
app.add_middleware( |
|
CORSMiddleware, |
|
allow_origins=['*'], |
|
allow_credentials=True, |
|
allow_methods=['*'], |
|
allow_headers=['*'], |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.on_event("startup") |
|
async def startup_event(): |
|
print("on startup") |
|
|
|
|
|
|
|
from selenium.webdriver.common.by import By |
|
|
|
@app.post("/") |
|
async def get_answer(q: Query ): |
|
|
|
text = q.text |
|
host= q.host |
|
|
|
N = 20 |
|
res = ''.join(random.choices(string.ascii_uppercase + |
|
string.digits, k=N)) |
|
res= res+ str(time.time()) |
|
|
|
id= res |
|
|
|
t = threading.Thread(target=do_ML, args=(id,text,host,0)) |
|
t.start() |
|
|
|
|
|
dict= {"id":id} |
|
|
|
|
|
return JSONResponse(dict) |
|
|
|
|
|
|
|
|
|
def do_ML(id:str,text:str,host:str, trycount:int): |
|
try: |
|
starttime=time.time() |
|
driver.get("https://yuntian-deng-chatgpt.hf.space/") |
|
time.sleep(3+trycount) |
|
button = driver.find_element(By.ID,"component-23") |
|
button.click() |
|
time.sleep(1+trycount) |
|
alert = driver.switch_to.alert |
|
alert.accept() |
|
print("alert accepted") |
|
time.sleep(1+trycount) |
|
id_box = driver.find_element(By.XPATH,'//textarea[@data-testid="textbox"]') |
|
id_box.send_keys(text) |
|
time.sleep(1+trycount) |
|
run = driver.find_element(By.ID,"component-9") |
|
run.click() |
|
prev ="" |
|
time.sleep(2) |
|
while True: |
|
time.sleep(2+trycount) |
|
currtime= time.time() |
|
if(currtime>starttime+600): |
|
data=data={"id":id,"result":"","status":"Error"} |
|
x= requests.post(host,data= data) |
|
return |
|
|
|
div = driver.find_element(By.XPATH,'//div[@class="message bot svelte-a99nd8 latest"]') |
|
value = div.text |
|
if prev!="": |
|
if value==prev: |
|
data={"id":id,"result":value,"status":"Generated"} |
|
requests.post(host, data=data) |
|
break |
|
prev= value |
|
|
|
data=data={"id":id,"result":value,"status":"Generating --keep refreshing"} |
|
x= requests.post(host,data= data) |
|
print(x.text) |
|
|
|
except: |
|
if trycount>3: |
|
data=data={"id":id,"result":"","status":"Error"} |
|
x= requests.post(host,data= data) |
|
return |
|
do_ML(id,text,host,trycount+1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|