Spaces:
Runtime error
Runtime error
| import random | |
| import gradio as gr | |
| import json | |
| from utils.data import dataset | |
| from utils.multiple_stream import stream_data | |
| from pages.summarization_playground import get_model_batch_generation | |
| from pages.summarization_playground import custom_css | |
| def random_data_selection(): | |
| datapoint = random.choice(dataset) | |
| datapoint = datapoint['section_text'] + '\n\nDialogue:\n' + datapoint['dialogue'] | |
| return datapoint | |
| def create_arena(): | |
| with open("prompt/prompt.json", "r") as file: | |
| json_data = file.read() | |
| prompts = json.loads(json_data) | |
| with gr.Blocks(css=custom_css) as demo: | |
| with gr.Group(): | |
| datapoint = random_data_selection() | |
| gr.Markdown("""This arena is designed to compare different prompts. Click the button to stream responses from randomly shuffled prompts. Each column represents a response generated from one randomly selected prompt. | |
| Once the streaming is complete, you can choose the best response.\u2764\ufe0f""") | |
| data_textbox = gr.Textbox(label="Data", lines=10, placeholder="Datapoints to test...", value=datapoint) | |
| with gr.Row(): | |
| random_selection_button = gr.Button("Change Data") | |
| stream_button = gr.Button("✨ Click to Streaming ✨") | |
| random_selection_button.click( | |
| fn=random_data_selection, | |
| inputs=[], | |
| outputs=[data_textbox] | |
| ) | |
| random.shuffle(prompts) | |
| random_selected_prompts = prompts[:3] | |
| # Store prompts in state components | |
| state_prompts = gr.State(value=prompts) | |
| state_random_selected_prompts = gr.State(value=random_selected_prompts) | |
| with gr.Row(): | |
| columns = [gr.Textbox(label=f"Prompt {i+1}", lines=10) for i in range(len(random_selected_prompts))] | |
| model = get_model_batch_generation("Qwen/Qwen2-1.5B-Instruct") | |
| def start_streaming(data, random_selected_prompts): | |
| content_list = [prompt['prompt'] + '\n{' + data + '}\n\nsummary:' for prompt in random_selected_prompts] | |
| for response_data in stream_data(content_list, model): | |
| updates = [gr.update(value=response_data[i]) for i in range(len(columns))] | |
| yield tuple(updates) | |
| stream_button.click( | |
| fn=start_streaming, | |
| inputs=[data_textbox, state_random_selected_prompts], | |
| outputs=columns, | |
| show_progress=False | |
| ) | |
| choice = gr.Radio(label="Choose the best response:", choices=["Response 1", "Response 2", "Response 3"]) | |
| submit_button = gr.Button("Submit") | |
| output = gr.Textbox(label="You selected:", visible=False) | |
| def update_prompt_metrics(selected_choice, prompts, random_selected_prompts): | |
| if selected_choice == "Response 1": | |
| prompt_id = random_selected_prompts[0]['id'] | |
| elif selected_choice == "Response 2": | |
| prompt_id = random_selected_prompts[1]['id'] | |
| elif selected_choice == "Response 3": | |
| prompt_id = random_selected_prompts[2]['id'] | |
| else: | |
| raise ValueError(f"No corresponding response of {selected_choice}") | |
| for prompt in prompts: | |
| if prompt['id'] == prompt_id: | |
| prompt["metric"]["winning_number"] += 1 | |
| break | |
| else: | |
| raise ValueError(f"No prompt of id {prompt_id}") | |
| with open("prompt/prompt.json", "w") as f: | |
| json.dump(prompts, f) | |
| return gr.update(value=f"You selected: {selected_choice}", visible=True), gr.update(interactive=False), gr.update(interactive=False) | |
| submit_button.click( | |
| fn=update_prompt_metrics, | |
| inputs=[choice, state_prompts, state_random_selected_prompts], | |
| outputs=[output, choice, submit_button], | |
| ) | |
| return demo | |
| if __name__ == "__main__": | |
| demo = create_arena() | |
| demo.queue() | |
| demo.launch() | |