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() |