|
import time |
|
import gradio as gr |
|
|
|
import pandas as pd |
|
from utility.util_providers import get_all_models, get_providers_for_model, get_provider_info, send_chat |
|
|
|
restart_server = False |
|
live_cam_active = False |
|
|
|
context_history = [] |
|
|
|
|
|
def prompt_ai(selected_model: str, selected_provider: str, prompt: str, chatbot): |
|
global context_history |
|
|
|
if len(prompt) < 1 or selected_model is None or len(selected_model) < 1: |
|
gr.Warning("No text or no model selected!") |
|
return '',chatbot |
|
|
|
|
|
if len(context_history) > 8: |
|
context_history.pop(0) |
|
context_history.pop(0) |
|
|
|
context_history.append({'role': 'user', 'content': str(prompt)}) |
|
result, context_history = send_chat(selected_model, selected_provider, context_history) |
|
chatbot.append((prompt, result)) |
|
return '',chatbot |
|
|
|
def check_providers(): |
|
return gr.Dropdown.update(choices=get_all_models()) |
|
|
|
|
|
def run(): |
|
available_themes = ["Default", "gradio/glass", "gradio/monochrome", "gradio/seafoam", "gradio/soft", "gstaff/xkcd", "freddyaboulton/dracula_revamped", "ysharma/steampunk"] |
|
modellist = get_all_models() |
|
|
|
server_name = None |
|
if server_name is None or len(server_name) < 1: |
|
server_name = None |
|
server_port = None |
|
|
|
|
|
df = pd.read_csv("examples.csv") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
examples = [] |
|
for i in range(len(df)): |
|
examples.append([df["name"].iloc[i], df["prompt"].iloc[i]]) |
|
|
|
run_server = True |
|
while run_server: |
|
|
|
with gr.Blocks(title=f'gpt4free UI', theme='Default', css="span {color: var(--block-info-text-color)}") as ui: |
|
with gr.Row(variant='panel'): |
|
gr.Markdown(f"### [gpt4free Frontend](https://github.com/C0untFloyd/gpt4free-gradio)") |
|
with gr.Row(variant='panel'): |
|
with gr.Column(): |
|
select_model = gr.Dropdown(modellist, label="Select Model") |
|
with gr.Column(): |
|
select_provider = gr.Dropdown(label="Select Provider", allow_custom_value=True, interactive=True) |
|
with gr.Column(): |
|
provider_info = gr.Markdown("") |
|
with gr.Column(): |
|
bt_check_providers = gr.Button("Check and update list", variant='secondary') |
|
with gr.Row(variant='panel'): |
|
chatbot = gr.Chatbot(label="Response", show_copy_button=True, avatar_images=('user.png','chatbot.png'), bubble_full_width=False) |
|
with gr.Row(variant='panel'): |
|
with gr.Column(): |
|
dummy_box = gr.Textbox(label="Category", visible=False) |
|
user_prompt = gr.Textbox(label="Prompt", placeholder="Hello") |
|
with gr.Row(variant='panel'): |
|
bt_send_prompt = gr.Button("π¨ Send", variant='primary') |
|
bt_clear_history = gr.Button("β Clear History", variant='stop') |
|
with gr.Column(): |
|
with gr.Row(variant='panel'): |
|
examples = gr.Examples(examples=examples, inputs=[dummy_box,user_prompt]) |
|
|
|
select_model.change(fn=on_select_model, inputs=select_model, outputs=select_provider) |
|
select_provider.change(fn=on_select_provider, inputs=[select_provider], outputs=provider_info) |
|
|
|
user_prompt.submit(fn=prompt_ai, inputs=[select_model, select_provider, user_prompt, chatbot], outputs=[user_prompt, chatbot]) |
|
bt_send_prompt.click(fn=prompt_ai, inputs=[select_model, select_provider, user_prompt, chatbot], outputs=[user_prompt, chatbot]) |
|
bt_clear_history.click(fn=on_clear_history, outputs=[chatbot]) |
|
|
|
restart_server = False |
|
try: |
|
ui.queue().launch(inbrowser=True, server_name=server_name, server_port=server_port, share=False, prevent_thread_lock=True, show_error=True) |
|
except: |
|
restart_server = True |
|
run_server = False |
|
try: |
|
while restart_server == False: |
|
time.sleep(5.0) |
|
except (KeyboardInterrupt, OSError): |
|
print("Keyboard interruption in main thread... closing server.") |
|
run_server = False |
|
ui.close() |
|
|
|
|
|
def on_select_model(model): |
|
global context_history |
|
|
|
context_history = [] |
|
newprovs = get_providers_for_model(model) |
|
if len(newprovs) > 0: |
|
return gr.Dropdown.update(choices=newprovs, value=newprovs[0]) |
|
return gr.Dropdown.update(choices=newprovs, value=None) |
|
|
|
def on_select_provider(provider): |
|
info = get_provider_info(provider) |
|
return info |
|
|
|
def on_clear_history(): |
|
global context_history |
|
|
|
context_history = [] |
|
return [] |
|
|
|
|
|
def restart(): |
|
global restart_server |
|
restart_server = True |
|
|
|
if __name__ == '__main__': |
|
run() |
|
|
|
|