in pyrit/ui/scorer.py [0:0]
def start_gradio(self, open_browser=False):
with gr.Blocks() as demo:
is_connected = gr.State(False)
next_prompt_state = gr.State("")
self.connect_status = ConnectionStatusHandler(is_connected, self.rpc_client)
with gr.Column(visible=False) as main_interface:
prompt = gr.Markdown("Prompt: ")
prompt.height = "200px"
with gr.Row():
safe = gr.Button("Safe")
unsafe = gr.Button("Unsafe")
safe.click(
fn=lambda: [gr.update(interactive=False)] * 2 + [""], outputs=[safe, unsafe, next_prompt_state]
).then(fn=self._safe_clicked, outputs=next_prompt_state)
unsafe.click(
fn=lambda: [gr.update(interactive=False)] * 2 + [""], outputs=[safe, unsafe, next_prompt_state]
).then(fn=self._unsafe_clicked, outputs=next_prompt_state)
with gr.Row() as loading_animation:
loading_text = gr.Markdown("Connecting to PyRIT")
timer = gr.Timer(GRADIO_POLLING_RATE)
timer.tick(fn=self._loading_dots, outputs=loading_text)
next_prompt_state.change(
fn=self._on_next_prompt_change, inputs=[next_prompt_state], outputs=[prompt, safe, unsafe]
)
self.connect_status.setup(
main_interface=main_interface, loading_animation=loading_animation, next_prompt_state=next_prompt_state
)
demo.load(
fn=self._main_interface_loaded,
outputs=[main_interface, loading_animation, next_prompt_state, is_connected],
)
if open_browser:
demo.launch(inbrowser=True)
else:
_, url, _ = demo.launch(prevent_thread_lock=True)
self.url = url
print("Gradio launched")
webview.create_window("PyRIT - Scorer", self.url)
webview.start()
print("Webview closed!")
if self.rpc_client:
self.rpc_client.stop()