import gradio as gr from transformers import pipeline import json from datetime import datetime import os LOG_FILE = "/tmp/log.jsonl" if not os.path.exists(LOG_FILE): with open(LOG_FILE, "w"): pass model = pipeline("token-classification", model="benchaffe/Bert-RAdam-Large", aggregation_strategy="simple") def to_serializable(obj): if isinstance(obj, (float, int, str, bool, type(None))): return obj elif isinstance(obj, dict): return {k: to_serializable(v) for k, v in obj.items()} elif isinstance(obj, list): return [to_serializable(i) for i in obj] else: return str(obj) def log_interaction(input_text, prediction): log_entry = { "timestamp": datetime.now().isoformat(), "input": input_text, "prediction": to_serializable(prediction) } with open(LOG_FILE, "a") as f: f.write(json.dumps(log_entry) + "\n") def predict_and_log(text): result = model(text) log_interaction(text, result) return result def get_log_file(): return LOG_FILE with gr.Blocks() as demo: gr.Markdown("## Biomedical Abbreviation Identifier") input_box = gr.Textbox(label="Enter biomedical text") output_box = gr.JSON(label="Model Prediction") download_output = gr.File(label="Click to download") submit_btn = gr.Button("Submit") download_btn = gr.Button("Download Log") submit_btn.click(fn=predict_and_log, inputs=input_box, outputs=output_box) download_btn.click(fn=get_log_file, outputs=download_output) demo.launch()