chat_quest / app.py
Danisz's picture
Changed login
01bf8c9
from functools import partial
import gradio as gr
from utils import *
demo = gr.Blocks(
css="#gradio_center {text-align: center} #char_icon {font-size: 24px; padding-top: 0px; padding-bottom: 0px;}",
analytics_enabled=False
).queue(concurrency_count=8, api_open=False)
with demo:
## State Elements
chat_init = [(None, sample_conversation.first_message)]
chat_history = gr.State(chat_init)
current_situation = gr.State(sample_conversation)
current_choices = gr.State(value=sample_conversation.starting_choices)
user_win_state = gr.State(False)
## Title
gr.Markdown('# Chat Quest!', elem_id='gradio_center')
with gr.Column(variant='panel'):
## Header
with gr.Row(variant='default'):
with gr.Column(min_width=25):
character_face = gr.Button(sample_conversation.character_emoji, elem_id='char_icon')
with gr.Column(min_width=0, scale=20):
character_name = gr.Markdown(format_chat_header(sample_conversation.character))
## Chat
with gr.Column():
chat_output = gr.Chatbot(
value=chat_init,
container=False,
bubble_full_width=False,
show_copy_button=False,
show_share_button=False,
height=300
)
situation_goal = gr.Markdown(format_goal_messsage(sample_conversation.goal_message))
choice_buttons = [gr.Button(e, min_width=10) for e in sample_conversation.starting_choices]
with gr.Column(variant='panel', visible=False) as outcome_won:
gr.Markdown('# You have WON!', elem_id='gradio_center')
continue_button = gr.Button('Continue')
with gr.Column(variant='panel', visible=False) as outcome_lost:
gr.Markdown('# You have LOST!', elem_id='gradio_center')
retry_button = gr.Button('Retry')
## UI LOGIC
for i, c in enumerate(choice_buttons):
c.click(
partial(update_chat, i),
inputs=[current_choices, chat_history],
outputs=[chat_output, chat_history] + choice_buttons,
queue=False
).then(
process_last_msg,
inputs=[chat_history, current_situation],
outputs=[user_win_state, current_choices, chat_output, chat_history] + choice_buttons + [outcome_won, outcome_lost]
)
retry_button.click(
retry_level,
inputs=[current_situation],
outputs=choice_buttons + [current_choices, outcome_lost, chat_output, chat_history],
queue=False
)
continue_button.click(
load_next_level,
inputs=[],
outputs=choice_buttons + [current_situation, current_choices, outcome_won, chat_output, chat_history] + [character_face, character_name, situation_goal, user_win_state],
queue=False
)
if __name__ == "__main__":
demo.launch(
server_port=None,
auth=validate_auth,
max_threads=4, show_api=False, share=False
)