import subprocess import warnings, os warnings.filterwarnings("ignore") os.environ["CURL_CA_BUNDLE"] = "" from dotenv import load_dotenv import gradio as gr load_dotenv() hf_token = os.environ["HF_TOKEN"] SCRIPT_DOC_3GPP = "3gpp_tdoc_indexer.py" SCRIPT_SPEC_3GPP = "3gpp_spec_indexer.py" SCRIPT_BM25_3GPP = "3gpp_bm25_maker.py" SCRIPT_SPEC_ETSI = "etsi_spec_indexer.py" SCRIPT_BM25_ETSI = "etsi_bm25_maker.py" def get_script_output(script_path, current_log=""): accumulated_output = current_log process = subprocess.Popen( ["python", script_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1, universal_newlines=True ) for line in process.stdout: accumulated_output += line yield accumulated_output process.stdout.close() process.wait() yield accumulated_output def index_tdocs(): log_output = "⏳ Indexation en cours...\n" yield gr.update(interactive=False), gr.update(interactive=False), log_output for log in get_script_output(SCRIPT_DOC_3GPP, log_output): yield gr.update(interactive=False), gr.update(interactive=False), gr.update(interactive=False), log log_output = log log_output += "✅ Terminé.\n" yield gr.update(interactive=True), gr.update(interactive=True), gr.update(interactive=True), log_output def index_3gpp_specifications(): log_output = "⏳ Indexation en cours...\n" yield gr.update(interactive=False), gr.update(interactive=False), gr.update(interactive=False), log_output for log in get_script_output(SCRIPT_SPEC_3GPP, log_output): yield gr.update(interactive=False), gr.update(interactive=False), gr.update(interactive=False), log log_output = log for log in get_script_output(SCRIPT_BM25_3GPP, log_output): yield gr.update(interactive=False), gr.update(interactive=False), gr.update(interactive=False), log log_output = log log_output += "✅ Terminé.\n" yield gr.update(interactive=True), gr.update(interactive=True), gr.update(interactive=True), log_output def index_etsi_specifications(): log_output = "⏳ Indexation en cours...\n" yield gr.update(interactive=False), gr.update(interactive=False), gr.update(interactive=False), log_output for log in get_script_output(SCRIPT_SPEC_ETSI, log_output): yield gr.update(interactive=False), gr.update(interactive=False), gr.update(interactive=False), log log_output = log for log in get_script_output(SCRIPT_BM25_ETSI, log_output): yield gr.update(interactive=False), gr.update(interactive=False), gr.update(interactive=False), log log_output = log log_output += "✅ Terminé.\n" yield gr.update(interactive=True), gr.update(interactive=True), gr.update(interactive=True), log_output with gr.Blocks(theme=gr.themes.Soft()) as demo: gr.Markdown("# 📄 3GPP Indexer Main Menu") with gr.Row() as r1: with gr.Column(): tdocs_btn = gr.Button("Re-index TDocs", variant="primary") with gr.Column(): spec_btn_3gpp = gr.Button("Re-index 3GPP Specifications", variant="primary") spec_btn_etsi = gr.Button("Re-index ETSI Specifications", variant="primary") out = gr.Textbox(label="Output", lines=25, autoscroll=True, interactive=False) tdocs_btn.click(index_tdocs, outputs=[tdocs_btn, spec_btn_3gpp, spec_btn_etsi, out]) spec_btn_3gpp.click(index_3gpp_specifications, outputs=[tdocs_btn, spec_btn_3gpp, spec_btn_etsi, out]) spec_btn_etsi.click(index_etsi_specifications, outputs=[tdocs_btn, spec_btn_3gpp, spec_btn_etsi, out]) demo.queue().launch()