| 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() |
|
|
|
|