File size: 2,461 Bytes
b0e350e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import gradio as gr
from transformers import pipeline

# Load the Microsoft BioGPT text generation pipeline
generator = pipeline("text-generation", model="microsoft/BioGPT")

def generate_medical_text(prompt, temperature, top_p, max_length):
    # Clamp temperature to at least 0.01 to avoid division by zero errors
    temperature = max(0.01, float(temperature))
    
    # Generate text using the pipeline
    results = generator(
        prompt,
        max_length=int(max_length),
        temperature=temperature,
        top_p=float(top_p),
        do_sample=True,
        num_return_sequences=1,
        truncation=True,
        pad_token_id=generator.tokenizer.eos_token_id # Prevents padding warnings
    )
    
    return results[0]["generated_text"]

# Define interface text
title = "Medical Text Generator"
description = (
    "Designed for experimenting with medical and health-related text — "
    "clinical notes, symptom descriptions, patient scenarios, and health explanations. "
    "Powered by Microsoft's `BioGPT` model, which was trained on millions of biomedical research articles."
)

# Define preset examples (Format: [prompt, temperature, top_p, max_length])
examples = [["The patient presented with symptoms of", 0.5, 0.9, 120],["Common side effects of this medication include", 0.5, 0.9, 120],["The doctor examined the test results and concluded", 0.5, 0.9, 120],["A healthy diet for someone with diabetes should", 0.5, 0.9, 120],["The difference between a virus and a bacteria is", 0.5, 0.9, 120]
]

# Build the Gradio interface
demo = gr.Interface(
    fn=generate_medical_text,
    inputs=[
        gr.Textbox(
            lines=3, 
            label="Prompt", 
            placeholder="Enter a medical prompt here..."
        ),
        gr.Slider(
            minimum=0.1, maximum=2.0, value=0.5, step=0.1, 
            label="Temperature", 
            info="Controls how creative/wild the writing is"
        ),
        gr.Slider(
            minimum=0.1, maximum=1.0, value=0.9, step=0.05, 
            label="Top-p", 
            info="Controls word diversity"
        ),
        gr.Slider(
            minimum=20, maximum=200, value=120, step=1, 
            label="Max Length", 
            info="Controls how much text it generates"
        )
    ],
    outputs=gr.Textbox(label="Generated Text", lines=8),
    title=title,
    description=description,
    examples=examples
)

if __name__ == "__main__":
    demo.launch()