File size: 3,658 Bytes
8c40b3a
 
 
 
354893a
d335b54
8c40b3a
 
d335b54
 
8c40b3a
d335b54
 
8c40b3a
 
 
 
 
 
3168540
8c40b3a
3168540
8c40b3a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79f9eb4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c40b3a
 
 
 
 
 
 
 
 
 
 
 
 
 
e9bb5df
4c118b8
30d689e
04d6377
30d689e
04d6377
8c40b3a
 
dc64f5a
8c40b3a
 
 
74ef55f
8c40b3a
 
 
d335b54
 
 
 
 
 
 
 
 
 
 
8c40b3a
dc64f5a
8c40b3a
 
 
 
 
 
6172969
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import gradio as gr
from revChatGPT.V1 import Chatbot

#You can setup login information here, or login in from UI

# If you want to use Email/Password to login, put your account information here
email = None
password = None

# If you have an access token, replace the None with your token 
access_token = None

# If you have a session token, put your session token here
session_token = None

def configure_chatbot(method, info):
    
    if method=="Email/Password":
        email, password = info.split()
    elif method=="Access token":
        access_token = info
    elif method=="Session token":
        session_token = info

    config = {}
    if email and password:
        config.update({"email": email,
                      "password": password})
    elif access_token:
        config.update({"access_token": access_token})
    elif session_token:
        config.update({"session_token": session_token})

    global chatbot
    chatbot = Chatbot(config=config)

login_method = ['Email/Password',
                'Access token',
                'Session token',
                ]

def ask_bot(prompt):
    message = ""
    for data in chatbot.ask(prompt):
        message = data["message"]
    return parse_text(message)

def parse_text(text):
    lines = text.split("\n")
    for i,line in enumerate(lines):
        if "```" in line:
            items = line.split('`')
            if items[-1]:
                lines[i] = f'<pre><code class="{items[-1]}">'
            else:
                lines[i] = f'</code></pre>'
        else:
            if i>0:
                lines[i] = '<br/>'+line.replace(" ", "&nbsp;")
    return "".join(lines)

def chatgpt_clone(inputs, history):
    history = history or []
    # s = list(sum(history, ()))
    # s.append(inputs)
    # inp = ' '.join(s)
    # print(inp)
    output = ask_bot(inputs)
    history.append((inputs, output))
    return history, history

with gr.Blocks() as demo:
    gr.Markdown("""<h1><center>ChatGPT BOT build by revChatGPT & Gradio</center></h1>
    """)
    gr.Markdown(
        "#### Author: [dotmet](https://github.com/dotmet)  Github link:[ChatGPTWEB](https://github.com/dotmet/chatgpt_webui)")
    gr.Markdown(
        "I have used my own OpenAI account for this demo,you can skip Login and try chat.")
    gr.Markdown(
        "Duplicate this space and run for your own account: [demo](https://huggingface.co/spaces/dotmet/chatgpt_webui?duplicate=true).")

    if not ((email and password) or access_token or session_token):
        gr.Markdown("""<h2>Login to OpenAI</h2>""")
        with gr.Row():
            with gr.Group():
                method = gr.Dropdown(label="Login Method", choices=login_method)
                info = gr.Textbox(placeholder="email password/access_token/session_token", label="Login Information (select login method first)")
                with gr.Row():
                    login = gr.Button("Login")
                    login.click(configure_chatbot, inputs=[method, info])
    else:
        if email and password:
            method = "Email/Password"
            info = email + " " + password
        elif access_token:
            method = "Access token"
            info = access_token
        elif session_token:
            method = "Session token"
            info = session_token
        configure_chatbot(method, info)

    gr.Markdown("""<h2>Start Chatting ...</h2>""")
    chatbot1 = gr.Chatbot()
    message = gr.Textbox(placeholder="Chat here")
    state = gr.State()
    submit = gr.Button("SEND")
    submit.click(chatgpt_clone, inputs=[message, state], outputs=[chatbot1, state])

    demo.launch(debug = True, share=False)