Spaces:
Running
Running
File size: 11,414 Bytes
4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c 0157229 4d1746c |
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 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
import gradio as gr
from backend import get_handler
import queue
from db import collection
from info_table import api_info, api_samples
from app_utils import *
from state_manager import StateManager
state_manager = StateManager(collection)
shared_queue = queue.Queue()
def report_issue():
return gr.Info("Thank you for reporting the issue. Our team will look into it.")
with gr.Blocks(css=CUSTOM_CSS) as demo:
gr.Markdown("# Multiturn LLM Chat Interface")
with gr.Tabs() as tabs:
with gr.Tab("Single Model Demo"):
with gr.Row():
with gr.Column(scale=1):
gr.Markdown("## Configuration")
single_model_dropdown = gr.Dropdown(choices=MODELS, label="Select Model", value=MODELS[0], interactive=True)
single_temperature_slider = gr.Slider(0, 1, value=DEFAULT_TEMPERATURE_1, label="Temperature", interactive=True)
single_category_dropdown = gr.Dropdown(choices=CATEGORIES, label="Select Category", value=CATEGORIES[0], interactive=True)
with gr.Column(scale=2):
single_chatbot = gr.Chatbot(elem_id="chatbot", bubble_full_width=False, type="messages")
with gr.Row():
single_restart_btn = gr.Button("Restart")
single_report_btn = gr.Button("Report Issue")
single_chat_input = gr.MultimodalTextbox(
interactive=True,
file_count="multiple",
placeholder="Enter message or upload file...",
show_label=False,
)
demo.load(lambda: get_initial_state(), outputs=single_chatbot)
single_chat_msg = single_chat_input.submit(
state_manager.add_message, [single_chat_input], [single_chatbot, single_chat_input]
)
single_bot_msg = single_chat_msg.then(state_manager.get_reponse_single, [], single_chatbot, api_name="bot_response")
single_bot_msg.then(lambda: gr.MultimodalTextbox(interactive=True), None, [single_chat_input])
single_chatbot.like(print_like_dislike, None, None, like_user_message=True)
with gr.Row():
single_example_btn1 = gr.Button("Example 1 - GFSFileSystem")
single_example_btn2 = gr.Button("Example 2 - TradingBot")
single_example_btn3 = gr.Button("Example 3 - TravelAPI")
with gr.Tab("Dual Model Demo"):
with gr.Row():
with gr.Column(scale=1):
gr.Markdown("## Configurations")
dual_model_dropdown_1 = gr.Dropdown(choices=MODELS, label="Select Model 1", value=DEFAULT_MODEL_1, interactive=True)
dual_temperature_slider_1 = gr.Slider(0, 1, value=DEFAULT_TEMPERATURE_1, label="Temperature 1", interactive=True)
dual_model_dropdown_2 = gr.Dropdown(choices=MODELS, label="Select Model 2", value=DEFAULT_MODEL_2, interactive=True)
dual_temperature_slider_2 = gr.Slider(0, 1, value=DEFAULT_TEMPERATURE_2, label="Temperature 2", interactive=True)
dual_category_dropdown = gr.Dropdown(choices=CATEGORIES, label="Select Category", value=CATEGORIES[0], interactive=True)
with gr.Column(scale=3):
with gr.Row():
with gr.Column():
gr.Markdown("### Model 1")
dual_chatbot1 = gr.Chatbot(elem_id="chatbot1", bubble_full_width=False, type="messages")
with gr.Row():
dual_restart_btn_1 = gr.Button("Restart")
dual_report_btn_1 = gr.Button("Report Issue")
with gr.Column():
gr.Markdown("### Model 2")
dual_chatbot2 = gr.Chatbot(elem_id="chatbot2", bubble_full_width=False, type="messages")
with gr.Row():
dual_restart_btn_2 = gr.Button("Restart")
dual_report_btn_2 = gr.Button("Report Issue")
with gr.Row():
dual_target_dropdown = gr.Dropdown(choices=["Model 1", "Model 2", "Both"], container=False, value="Both", interactive=True, scale=1)
dual_chat_input = gr.MultimodalTextbox(
interactive=True,
file_count="multiple",
placeholder="Enter message or upload file...",
show_label=False,
scale=4
)
demo.load(lambda: get_initial_state(), outputs=dual_chatbot1)
demo.load(lambda: get_initial_state(), outputs=dual_chatbot2)
dual_chat_msg = dual_chat_input.submit(
state_manager.add_message, [dual_chat_input, dual_target_dropdown], [dual_chatbot1, dual_chatbot2, dual_chat_input]
)
dual_bot_msg = dual_chat_msg.then(state_manager.get_reponse_dual, inputs=[dual_target_dropdown], outputs=[dual_chatbot1, dual_chatbot2])
dual_bot_msg.then(lambda: gr.MultimodalTextbox(interactive=True), None, [dual_chat_input])
dual_chatbot1.like(print_like_dislike, None, None, like_user_message=True)
dual_chatbot2.like(print_like_dislike, None, None, like_user_message=True)
with gr.Row():
dual_example_btn1 = gr.Button("Example 1 - GFSFileSystem")
dual_example_btn2 = gr.Button("Example 2 - TradingBot")
dual_example_btn3 = gr.Button("Example 3 - TravelAPI")
with gr.Tab("Function Descriptions"):
for category in CATEGORIES:
with gr.Tab(category):
with gr.Group():
category_info = api_info[api_info["Class Name"] == category]
with gr.Accordion("Function description", open=False):
with gr.Group():
for i in range(len(category_info)):
with gr.Accordion(category_info.iloc[i]["Function Name"], open=False):
gr.Markdown(category_info.iloc[i]["Description"])
# Sample demo, limit 5 per categories
samples = [[sample['question'], sample['ground_truth']] for _, sample in api_samples.iterrows() if category in sample['involved_classes']][:5]
gr.Dataset(
components=[gr.HTML(), gr.Markdown()],
headers= ["Prompt", "API Use"],
samples= samples
)
single_model_dropdown.change(
state_manager.single_bot.update_handler,
[single_model_dropdown, single_temperature_slider],
[single_model_dropdown, single_chatbot]
)
# Update handler when the temperature is changed
single_temperature_slider.change(
state_manager.single_bot.update_handler,
[single_model_dropdown, single_temperature_slider],
[single_model_dropdown, single_chatbot]
)
# Update category and load config when a category is selected
single_category_dropdown.change(
state_manager.single_update_category_and_load_config,
inputs=single_category_dropdown,
outputs=single_category_dropdown
)
# Set up the event handler for the restart button to reset the chat and test_entry
# restart_btn.click(restart_chat, None, [chatbot])
single_restart_btn.click(state_manager.single_bot.restart_chat_and_save, [], [single_chatbot])
single_report_btn.click(report_issue, None, None)
single_example_btn1.click(state_manager.single_load_example_and_update, inputs=[single_example_btn1],
outputs=[single_model_dropdown, single_temperature_slider, single_category_dropdown, single_chat_input])
single_example_btn2.click(state_manager.single_load_example_and_update, inputs=[single_example_btn2],
outputs=[single_model_dropdown, single_temperature_slider, single_category_dropdown, single_chat_input])
single_example_btn3.click(state_manager.single_load_example_and_update, inputs=[single_example_btn3],
outputs=[single_model_dropdown, single_temperature_slider, single_category_dropdown, single_chat_input])
# Update handler when the model or temperature is changed
dual_model_dropdown_1.change(
state_manager.dual_bot1.update_handler,
[dual_model_dropdown_1, dual_temperature_slider_1],
[dual_model_dropdown_1, dual_chatbot1]
)
# Update handler when the model or temperature is changed
dual_model_dropdown_2.change(
state_manager.dual_bot2.update_handler,
[dual_model_dropdown_2, dual_temperature_slider_2],
[dual_model_dropdown_2, dual_chatbot2]
)
dual_temperature_slider_1.change(
state_manager.dual_bot1.update_handler,
[dual_model_dropdown_1, dual_temperature_slider_1],
[dual_model_dropdown_1, dual_chatbot1]
)
dual_temperature_slider_2.change(
state_manager.dual_bot2.update_handler,
[dual_model_dropdown_2, dual_temperature_slider_2],
[dual_model_dropdown_2, dual_chatbot2]
)
# Update category and load config when a category is selected
dual_category_dropdown.change(
state_manager.dual_update_category_and_load_config,
inputs=dual_category_dropdown,
outputs=dual_category_dropdown
)
# Set up the event handler for the restart button to reset the chat and test_entry
dual_restart_btn_1.click(state_manager.dual_bot1.restart_chat_and_save, [], [dual_chatbot1])
dual_report_btn_1.click(report_issue, None, None)
dual_restart_btn_2.click(state_manager.dual_bot2.restart_chat_and_save, [], [dual_chatbot2])
dual_report_btn_2.click(report_issue, None, None)
dual_example_btn1.click(state_manager.dual_load_example_and_update, inputs=[dual_example_btn1],
outputs=[dual_model_dropdown_1, dual_temperature_slider_1, dual_model_dropdown_2, dual_temperature_slider_2, dual_category_dropdown, dual_chat_input])
dual_example_btn2.click(state_manager.dual_load_example_and_update, inputs=[dual_example_btn2],
outputs=[dual_model_dropdown_1, dual_temperature_slider_1, dual_model_dropdown_2, dual_temperature_slider_2, dual_category_dropdown, dual_chat_input])
dual_example_btn3.click(state_manager.dual_load_example_and_update, inputs=[dual_example_btn3],
outputs=[dual_model_dropdown_1, dual_temperature_slider_1, dual_model_dropdown_2, dual_temperature_slider_2, dual_category_dropdown, dual_chat_input])
demo.launch(share=False)
|