Spaces:
Sleeping
Sleeping
import gradio as gr | |
from akinator.async_aki import Akinator | |
import akinator | |
aki = Akinator() | |
game_type = "en" | |
count = 0 | |
to_verify = False | |
game_ended = False | |
def clear_state(): | |
global count, to_verify | |
count = 0 | |
to_verify = False | |
def change_game_type(value): | |
global game_type | |
game_type = value | |
async def fetch_response(message, history, value): | |
global count, to_verify, game_type, game_ended | |
if message == "start": | |
q = await aki.start_game( | |
language=game_type, | |
child_mode=True | |
) | |
clear_state() | |
count += 1 | |
game_ended = False | |
q = f"{count}. " + q | |
elif (aki.progression <= 80) and (message == "back") and (not game_ended): | |
try: | |
count -= 1 | |
q = await aki.back() | |
q = f"{count}. " + q | |
except akinator.CantGoBackAnyFurther: | |
pass | |
elif (aki.progression <= 80) and (not game_ended): | |
count += 1 | |
q = await aki.answer(message) | |
q = f"{count}. " + q | |
elif to_verify and message == "yes" and (not game_ended): | |
q = "Yay!!" | |
game_ended = True | |
elif to_verify and message == "no" and (not game_ended): | |
q = "Oof.." | |
game_ended = True | |
elif (not game_ended): | |
await aki.win() | |
count += 1 | |
q = f"It's {aki.first_guess['name']} ({aki.first_guess['description']})! Was I correct?\n{aki.first_guess['absolute_picture_path']}\n\t" | |
q = f"{count}. " + q | |
to_verify = True | |
elif game_ended: | |
q = "The game has ended. To replay, enter `start` again." | |
return q | |
clear_button = gr.Button("Clear") | |
drop_down_ls = gr.Dropdown(choices=["en", "en_animals", "en_objects"], | |
value="en", | |
label="Game Mode") | |
chat = gr.ChatInterface( | |
fn=fetch_response, | |
textbox=gr.Textbox( | |
placeholder=( | |
"Send `start` to start the game and answer me genuinely, " | |
"I will guess what is in your mind :)" | |
), | |
container=False, scale=7), | |
examples=[["start"], ["yes"], ["no"], ["i don't know"], ["probably"], ["probably not"], ["back"]], | |
clear_btn=clear_button, | |
additional_inputs=[drop_down_ls] | |
) | |
with gr.Blocks(fill_height=True) as demo: | |
chat.render() | |
clear_button.click(fn=clear_state) | |
drop_down_ls.input(fn=change_game_type, inputs=[drop_down_ls]) | |
if __name__ == "__main__": | |
demo.launch() |