import gradio as gr import json from game_word2vec import Semantrix as semantrix_word2vec from game import Semantrix as semantrix_sentence_transformers config_file_path = "config/lang.json" with open(config_file_path, "r") as file: Config_full = json.load(file) lang_conf = 0 if lang_conf == 1: Config = Config_full["ENG"]["Game"] Menu = Config_full["ENG"]["Menu"] else: Config = Config_full["SPA"]["Game"] Menu = Config_full["SPA"]["Menu"] def convert_to_markdown_centered(text): # Separar el texto de último intento y el historial lines = text.strip().split("\n") if not lines: return "" last_attempt = lines[0] history_attempts = lines[2:12] # Crear el formato Markdown markdown = '
" + Menu["N_try"] + " | \n" markdown += "" + Menu["Word"] + " | \n" markdown += "" + Menu["Score"] + " | \n" markdown += "
---|---|---|
{items[0]} | \n" markdown += f"{items[1]} | \n" markdown += f"{items[2]} | \n" markdown += "
""" + Menu["Header"] + """
""" ) def reset(difficulty, lang, model): global Config, game, Menu language = 1 if lang == "English" else 0 if model == "Word2Vec": game = semantrix_word2vec(language) else: game = semantrix_sentence_transformers(language) if language == 1: Config = Config_full["ENG"]["Game"] Menu = Config_full["ENG"]["Menu"] else: Config = Config_full["SPA"]["Game"] Menu = Config_full["SPA"]["Menu"] game.prepare_game(difficulty) output = [ -1, gr.Textbox(visible=False), gr.Textbox(visible=False), gr.Image(logo_path, visible=True, interactive=False), gr.Button(Menu["Start"], visible=True, variant="secondary"), gr.Radio(visible=False), gr.Textbox(visible=False), gr.Button(visible=False), gr.Markdown( """""" + Menu["Header"] + """
""" ), ] return output def change(state, inp): state = state + 1 return [state, inp] def update(state, radio, inp, hint): global difficulty dif_state = 4 output = [state] state_int = state if state_int == -1: output.extend( [ gr.Button(Menu["Start"], visible=True), gr.Radio(label="", visible=False), gr.Textbox( Config[list(Config.keys())[state_int]], visible=False, label="" ), gr.Button(Menu["Give_up"], visible=False), gr.Textbox(visible=False), gr.Image(interactive=False, visible=True), gr.Textbox(visible=False), gr.Button(visible=False), gr.Markdown(visible=False), ] ) elif state_int == 1: output.extend( [ gr.Button(visible=False), gr.Radio([Menu["Yes"], Menu["No"]], label="", visible=True), gr.Textbox( Config[list(Config.keys())[state_int]], visible=True, label="" ), gr.Button(Menu["Give_up"], visible=False), gr.Textbox(visible=False), gr.Image(interactive=False, visible=False), gr.Textbox(visible=False), gr.Button(visible=False), gr.Markdown(visible=False), ] ) elif state_int == 2: if radio == Menu["No"]: output = [ dif_state, gr.Button("Introducir", visible=True), gr.Radio(visible=False), gr.Textbox( Config[list(Config.keys())[state_int]], visible=True, label="" ), gr.Button(Menu["Give_up"], visible=False), gr.Textbox(visible=False), gr.Image(interactive=False, visible=False), gr.Textbox(visible=False), gr.Button(visible=False), gr.Markdown(visible=False), ] else: output.extend( [ gr.Button(Menu["Next"], visible=True), gr.Radio(visible=False), gr.Textbox( Config[list(Config.keys())[state_int]], visible=True, label="", ), gr.Button(Menu["Give_up"], visible=False), gr.Textbox(visible=False), gr.Image(interactive=False, visible=False), gr.Textbox(visible=False), gr.Button(visible=False), gr.Markdown(visible=False), ] ) elif state_int == dif_state: output.extend( [ gr.Button(Menu["Next"], visible=False), gr.Radio( [Menu["Easy"], Menu["Normal"], Menu["Hard"], Menu["Expert"]], visible=True, ), gr.Textbox( Config[list(Config.keys())[state_int]], visible=True, label="" ), gr.Button(Menu["Give_up"], visible=False), gr.Textbox(visible=False), gr.Image(interactive=False, visible=False), gr.Textbox(visible=False), gr.Button(visible=False), gr.Markdown(visible=False), ] ) elif state_int == dif_state + 1: if radio == Menu["Easy"]: difficulty = 1 elif radio == Menu["Normal"]: difficulty = 2 elif radio == Menu["Hard"]: difficulty = 3 else: difficulty = 4 output.extend( [ gr.Button(Menu["Start"], visible=True, variant="primary"), gr.Radio(visible=False), gr.Textbox( Config[list(Config.keys())[state_int]], visible=True, label="" ), gr.Button(Menu["Give_up"], visible=False), gr.Textbox(visible=False), gr.Image(interactive=False, visible=False), gr.Textbox(visible=False), gr.Button(visible=False), gr.Markdown(visible=False), ] ) elif state_int == dif_state + 2: game.prepare_game(difficulty) output.extend( [ gr.Button(Menu["Send"], visible=True, variant="primary"), gr.Radio(label="", visible=False), gr.Textbox(visible=False, label=""), gr.Button(visible=True, variant="stop"), gr.Textbox(value="", visible=True, placeholder=Menu["New_word"]), gr.Image(interactive=False, visible=False), gr.Textbox(visible=False), gr.Button(visible=False), gr.Markdown(visible=False), ] ) elif state_int > dif_state + 2: feed = game.play_game(inp) feedback_trim = feed.split("[rank]") if len(feedback_trim) > 1: ranking_md = convert_to_markdown_centered(feedback_trim[1]) feedback = feedback_trim[0].split("[hint]") win = feedback_trim[0].split("[win]") lose = feedback_trim[0].split("[lose]") if len(feedback) > 1: hint = True else: hint = False if len(win) > 1 or len(lose) > 1: won = True if len(win) > 1 else False curiosity = game.curiosity() output.extend( [ gr.Button(Menu["Send"], visible=False, variant="primary"), gr.Radio(label="", visible=False), gr.Textbox(win[1] if won else lose[1], visible=True, label=""), gr.Button(visible=False, variant="stop"), gr.Textbox( value="", visible=False, placeholder=Menu["New_word"] ), gr.Image( logo_win_path if won else logo_path, interactive=False, visible=True, ), gr.Textbox(curiosity, visible=True, label=Menu["Curiosity"]), gr.Button(visible=True), gr.Markdown(visible=False), ] ) return output output.extend( [ gr.Button(Menu["Send"], visible=True, variant="primary"), gr.Radio(label="", visible=False), gr.Textbox(feedback[0], visible=True, label=""), gr.Button(visible=True, variant="stop"), gr.Textbox(value="", visible=True, placeholder=Menu["New_word"]), gr.Image(logo_path, interactive=False, visible=False), gr.Textbox( feedback[1] if hint else "", visible=hint, label="Pista" ), gr.Button(visible=False), gr.Markdown(ranking_md, visible=True), ] ) else: output.extend( [ gr.Button(Menu["Next"], visible=True), gr.Radio(label="", visible=False), gr.Textbox( Config[list(Config.keys())[state_int]], visible=True, label="" ), gr.Button("Pista", visible=False), gr.Textbox(visible=False), gr.Image(interactive=False, visible=False), gr.Textbox(visible=False), gr.Button(visible=False), gr.Markdown(visible=False), ] ) return output img = gr.Image(logo_path, height=430, interactive=False, visible=True) ranking = gr.Markdown(visible=False) with gr.Row(): out = gr.Textbox(visible=False, placeholder=Config[list(Config.keys())[0]]) hint_out = gr.Textbox(visible=False) radio = gr.Radio(visible=False) with gr.Row(): inp = gr.Textbox(visible=False, interactive=True, label="") but = gr.Button(Menu["Start"]) give_up = gr.Button("Pista", visible=False) reload = gr.Button(Menu["Play_again"], visible=False) with gr.Accordion("Configuración/Settings", open=False): with gr.Row(): model = ( gr.Dropdown( ["Sentence Transformers", "Word2Vec"], value="Sentence Transformers", label="Embedding Model", ), ) lang = ( gr.Dropdown( ["Español", "English"], value="Español", label="Idioma/Language" ), ) inp.submit(change, inputs=[state, inp], outputs=[state, inp]) but.click(change, inputs=[state, inp], outputs=[state, inp]) give_up.click( change, inputs=[ state, gr.Textbox("give_up", visible=False, interactive=True, label=""), ], outputs=[state, inp], ) radio.input(change, inputs=[state, inp], outputs=[state, inp]) reload.click( reset, inputs=[difficulty, lang[0], model[0]], outputs=[state, out, inp, img, but, radio, hint_out, reload, header], ) demo.load( reset, inputs=[difficulty, lang[0], model[0]], outputs=[state, out, inp, img, but, radio, hint_out, reload, header], ) lang[0].select( reset, inputs=[difficulty, lang[0], model[0]], outputs=[state, out, inp, img, but, radio, hint_out, reload, header], ) model[0].select( reset, inputs=[difficulty, lang[0], model[0]], outputs=[state, out, inp, img, but, radio, hint_out, reload, header], ) state.change( update, inputs=[state, radio, inp, hint], outputs=[state, but, radio, out, give_up, inp, img, hint_out, reload, ranking], ) if __name__ == "__main__": demo.launch()