|
import gradio as gr |
|
import torch |
|
from peft import AutoPeftModelForCausalLM |
|
from transformers import AutoTokenizer, GenerationConfig |
|
import spaces |
|
|
|
|
|
model_name = "nafisneehal/Llama-3.2-3B-bnb-4bit-finetuned-TrialBrain-BaselineFeatures-it" |
|
load_in_4bit = True |
|
|
|
|
|
model = AutoPeftModelForCausalLM.from_pretrained(model_name, load_in_4bit=load_in_4bit) |
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
|
|
|
|
device = "cuda" if torch.cuda.is_available() else "cpu" |
|
model.to(device) |
|
|
|
|
|
test_instruction_string = """ |
|
You're a clinical trial expert. For each trial query, list probable baseline features (each in backticks and comma-separated). |
|
Baseline features are demographic characteristics used in primary outcome analysis, often shown by group in clinical publications. |
|
""" |
|
|
|
test_input_string = """ |
|
<Title:>Vinorelbine in Treating Patients With Advanced Solid Tumors That Have Not Responded to Treatment and Liver Dysfunction <BriefSummary:>RATIONALE: Drugs used in chemotherapy, such as vinorelbine, work in different ways to stop the growth of tumor cells, either by killing the cells or by stopping them from dividing. |
|
|
|
PURPOSE: This pilot trial is studying the side effects and best dose of vinorelbine in treating patients with advanced solid tumors that have not responded to treatment and liver dysfunction. <EligibilityCriteria:>DISEASE CHARACTERISTICS: |
|
|
|
* Histologically confirmed advanced solid tumor |
|
|
|
* Any histology allowed |
|
* Refractory to standard therapy OR no standard therapy exists |
|
|
|
* Previously untreated non-small cell lung cancer allowed, provided abnormal liver function is present, defined as moderate (group 3) or severe (group 4) |
|
* Measurable disease not required |
|
|
|
* Present measurable disease requires baseline measurements within 4 weeks of study entry |
|
* Patients with acute hepatitis from viral or drug etiologies should recover to a stable baseline prior to study therapy |
|
* History of brain metastasis allowed, provided the following criteria are met: |
|
|
|
* Metastasis has been controlled by radiotherapy or surgery |
|
* Patient is not currently on corticosteroids |
|
* Neurologic status is stable |
|
|
|
PATIENT CHARACTERISTICS: |
|
|
|
* Karnofsky performance status 70-100% |
|
* Life expectancy ≥ 2 months |
|
* ANC = 1,500/mm³ |
|
* Platelet count = 100,000/mm³ |
|
* Hemoglobin = 10 g/dL (transfusion to this level allowed) |
|
* Creatinine \< 1.5 mg/dL OR creatinine clearance \> 60 mL/ min |
|
* Patients with EKG evidence of first- or second-degree AV block or left or right bundle branch block are ineligible for the lidocaine bolus, but may otherwise be treated on this protocol |
|
* Not pregnant or nursing |
|
* Negative pregnancy test |
|
* Fertile patients must use effective contraception |
|
* No concurrent illness (e.g., cardiovascular, pulmonary, or central nervous system) that is poorly controlled or of such severity that the investigator deems unwise to enter the patient on protocol |
|
* Must have ability to comply with study treatment and required tests |
|
* Obstructive jaundice requires a drainage procedure prior to study treatment |
|
|
|
PRIOR CONCURRENT THERAPY: |
|
|
|
* See Disease Characteristics |
|
* Recovered from prior therapy |
|
* At least 3 weeks since prior chemotherapy (6 weeks for mitomycin or nitrosourea therapy) |
|
* No prior radiotherapy to \> 30% of the bone marrow or more than standard adjuvant pelvic radiotherapy for rectal cancer <Conditions:>Lung Cancer, Unspecified Adult Solid Tumor, Protocol Specific, <Interventions:>indocyanine green, lidocaine, vinorelbine ditartrate, high performance liquid chromatography, intracellular fluorescence polarization analysis, liquid chromatography, mass spectrometry, pharmacological study <StudyType:>INTERVENTIONAL <PrimaryOutcomes:>Area Under the Curve, Number of Participants With Grade 3 and 4 Toxicities <OverallStatus:>COMPLETED |
|
""" |
|
|
|
|
|
@spaces.GPU |
|
def generate_response(system_instruction, user_input): |
|
|
|
inputs = tokenizer([f"### Instruction:\n{system_instruction}\n### Input:\n{user_input}\n### Response:\n"], return_tensors="pt").to(device) |
|
|
|
|
|
meta_config = { |
|
"do_sample": False, |
|
"temperature": 0.0, |
|
"max_new_tokens": 256, |
|
"repetition_penalty": 1.2, |
|
"use_cache": True |
|
} |
|
generation_config = GenerationConfig(**meta_config) |
|
|
|
|
|
with torch.no_grad(): |
|
outputs = model.generate(**inputs, generation_config=generation_config) |
|
decoded_output = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0] |
|
assistant_response = decoded_output.split("### Response:")[-1].strip() |
|
|
|
return assistant_response |
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("# Clinical Trial Chatbot") |
|
|
|
with gr.Row(): |
|
|
|
with gr.Column(): |
|
system_instruction = gr.Textbox( |
|
value=test_instruction_string, |
|
placeholder="Enter system instruction here...", |
|
label="System Instruction" |
|
) |
|
user_input = gr.Textbox( |
|
value=test_input_string, |
|
placeholder="Type your message here...", |
|
label="Your Message" |
|
) |
|
submit_btn = gr.Button("Submit") |
|
|
|
|
|
with gr.Column(): |
|
response_display = gr.Textbox( |
|
label="Bot Response", interactive=False, placeholder="Response will appear here." |
|
) |
|
|
|
|
|
submit_btn.click(generate_response, [system_instruction, user_input], response_display) |
|
|
|
|
|
demo.launch() |
|
|