|
import gradio as gr |
|
import random |
|
from gpti import bing, gpt |
|
|
|
def error_alert(message): |
|
gr.Warning(message) |
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown(""" |
|
# ChatGPT |
|
与GPT-4、GPT-3.5或Bing互动,探索充满智能答案和信息发现的世界。 |
|
""") |
|
chatbot = gr.Chatbot() |
|
radio = gr.Radio(["ChatGPT", "ChatGPT v2", "Bing"], value="ChatGPT", label="Select the AI model you want to chat with", info="AI") |
|
drp = gr.Dropdown( |
|
interactive=True, choices=["gpt-4", "gpt-3.5-turbo"], value="gpt-4", label="Select Model", info="ChatGPT", visible=True |
|
) |
|
msg = gr.Textbox(placeholder="Message", show_label=False) |
|
clear = None |
|
btnRandom = None |
|
with gr.Row(): |
|
btnRandom = gr.Button("Random message") |
|
clear = gr.ClearButton([msg, chatbot]) |
|
|
|
def change_model(req): |
|
match req.lower(): |
|
case "bing": |
|
return gr.Dropdown( |
|
interactive=True, choices=["Balanced", "Creative", "Precise"], value="Balanced", label="Select Model", info="Bing", visible=True |
|
) |
|
case "chatgpt": |
|
return gr.Dropdown( |
|
interactive=True, choices=["gpt-4", "gpt-3.5-turbo"], value="gpt-4", label="Select Model", info="ChatGPT", visible=True |
|
) |
|
case _: |
|
return gr.Dropdown( |
|
visible=False |
|
) |
|
|
|
def user_msg(message, history): |
|
return "", history + [[message, None]] |
|
|
|
def strm_message(history, option, model): |
|
model_ai = None |
|
if option.lower() if option is not None else "" and option.lower() in ["chatgpt", "bing"]: |
|
model_ai = model |
|
ai_option = option if option is not None else "chatgpt" |
|
|
|
messages_history = [] |
|
cnt = 0 |
|
for x in range(len(history)): |
|
cnt = x |
|
for user, assistant in list(history): |
|
if assistant != None: |
|
messages_history.append({ |
|
"role": "assistant", |
|
"content": assistant |
|
}) |
|
if user != None: |
|
messages_history.append({ |
|
"role": "user", |
|
"content": user |
|
}) |
|
|
|
res = None |
|
if ai_option.lower() == "chatgpt": |
|
try: |
|
res = gpt.v1(messages=messages_history, model=model_ai, markdown=False) |
|
|
|
if res.error != None: |
|
error_alert("The error has occurred. Please try again.") |
|
history[cnt][1] = None |
|
yield history |
|
else: |
|
res_bot = res.result |
|
if res_bot.get("gpt") != None: |
|
history[cnt][1] = res_bot.get("gpt") |
|
yield history |
|
else: |
|
error_alert("The error has occurred. Please try again.") |
|
history[cnt][1] = None |
|
yield history |
|
except Exception as e: |
|
error_alert("The error has occurred. Please try again.") |
|
history[cnt][1] = None |
|
yield history |
|
elif ai_option.lower() == "bing": |
|
try: |
|
res = bing(messages=messages_history, conversation_style=model_ai, markdown=False, stream=True) |
|
|
|
if res.error != None: |
|
error_alert("The error has occurred. Please try again.") |
|
history[cnt][1] = None |
|
yield history |
|
else: |
|
msg_x = None |
|
for chunk in res.stream(): |
|
if chunk.get("error") != None and chunk.get("error") != True and chunk.get("message") != None: |
|
msg_x = chunk.get("message") |
|
history[cnt][1] = msg_x |
|
yield history |
|
if msg_x != None: |
|
history[cnt][1] = msg_x |
|
yield history |
|
else: |
|
error_alert("The error has occurred. Please try again.") |
|
msg_x = None |
|
history[cnt][1] = None |
|
yield history |
|
except Exception as e: |
|
error_alert("The error has occurred. Please try again.") |
|
history[cnt][1] = None |
|
yield history |
|
elif ai_option.lower() == "chatgpt v2": |
|
try: |
|
res = gpt.v2(messages=messages_history, stream=True, markdown=False) |
|
|
|
if res.error != None: |
|
error_alert("The error has occurred. Please try again.") |
|
history[cnt][1] = None |
|
yield history |
|
else: |
|
msg_x = None |
|
for chunk in res.stream(): |
|
if chunk.get("error") != None and chunk.get("error") != True and chunk.get("message") != None: |
|
msg_x = chunk.get("message") |
|
history[cnt][1] = msg_x |
|
yield history |
|
if msg_x != None: |
|
history[cnt][1] = msg_x |
|
yield history |
|
else: |
|
error_alert("The error has occurred. Please try again.") |
|
msg_x = None |
|
history[cnt][1] = None |
|
yield history |
|
except Exception as e: |
|
error_alert("The error has occurred. Please try again.") |
|
history[cnt][1] = None |
|
yield history |
|
else: |
|
error_alert("You haven't selected an AI model to start") |
|
history[cnt][1] = None |
|
yield history |
|
|
|
def rand_message(): |
|
try: |
|
res = gpt.prompts(lang="en", limit=4, offset=0) |
|
|
|
if res.error != None: |
|
error_alert("The error has occurred. Please try again.") |
|
return "" |
|
else: |
|
result = res.result |
|
if result.get("items") != None: |
|
random_prompt = random.choice(result.get("items")) |
|
if random_prompt != None and random_prompt.get("prompt") != None: |
|
return str(random_prompt.get("prompt")) |
|
else: |
|
error_alert("The error has occurred. Please try again.") |
|
return "" |
|
else: |
|
error_alert("The error has occurred. Please try again.") |
|
return "" |
|
except Exception as e: |
|
error_alert("The error has occurred. Please try again.") |
|
return "" |
|
|
|
radio.change(fn=change_model, inputs=radio, outputs=drp) |
|
btnRandom.click(fn=rand_message, outputs=[msg]) |
|
|
|
msg.submit(user_msg, inputs=[msg, chatbot], outputs=[msg, chatbot], queue=True).then( |
|
strm_message, [chatbot, radio, drp], chatbot |
|
) |
|
|
|
demo.queue() |
|
if __name__ == "__main__": |
|
demo.launch() |