File size: 2,521 Bytes
c9d2fa0
ac9c332
d17b90e
19a6024
f021bfb
5d5b826
c9d2fa0
 
d17b90e
c9d2fa0
d17b90e
 
 
 
 
ac9c332
f021bfb
 
54e50a3
a7c3e81
d17b90e
 
f021bfb
 
 
19a6024
5d5b826
f021bfb
 
 
19a6024
 
 
 
f021bfb
19a6024
d17b90e
c9d2fa0
d17b90e
 
c9d2fa0
d17b90e
 
 
dce22b5
 
f021bfb
dce22b5
 
d17b90e
19a6024
d17b90e
 
 
 
 
f021bfb
 
 
 
 
 
 
d17b90e
 
 
 
 
c9d2fa0
d17b90e
c9d2fa0
 
dce22b5
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
70
71
72
73
74
# streamlit_app.py
import os
import streamlit as st
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
from peft import PeftModel

# -----------------------------
# Ensure cache dirs are writable in Spaces
# -----------------------------
os.environ.setdefault("HF_HOME", "/tmp/huggingface")
os.environ.setdefault("TRANSFORMERS_CACHE", "/tmp/huggingface/transformers")
os.environ.setdefault("HF_DATASETS_CACHE", "/tmp/huggingface/datasets")
os.environ.setdefault("HUGGINGFACE_HUB_CACHE", "/tmp/huggingface/hub")
os.environ.setdefault("XDG_CACHE_HOME", "/tmp/huggingface")

# Base and adapter model IDs
BASE_MODEL = "microsoft/BioGPT-Large-PubMedQA"
ADAPTER_MODEL = "kirubel1738/biogpt-pubmedqa-finetuned"

@st.cache_resource
def load_model():
    """Load BioGPT with your Biology-QA adapter."""
    # Pick device automatically
    device = 0 if torch.cuda.is_available() else -1

    tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
    base_model = AutoModelForCausalLM.from_pretrained(BASE_MODEL)
    model = PeftModel.from_pretrained(base_model, ADAPTER_MODEL)  # apply adapter
    
    generator = pipeline(
        "text-generation",
        model=model,
        tokenizer=tokenizer,
        device=device
    )
    return generator

# Load once
generator = load_model()

# -----------------------------
# Streamlit UI
# -----------------------------
st.set_page_config(page_title="BioGPT β€” Pubmed Demo", layout="centered")
st.title("🧬 BioGPT β€” Pubmed chatbot")

st.write("Ask a biology-related question and get an answer.")
st.write("Generated by BioGPT-Large-PubMedQA fine-tuned on cais/mmlu and allenai/sciq datasets.")

user_input = st.text_area("Enter your biology question:", height=150)

if st.button("Get Answer"):
    if user_input.strip():
        with st.spinner("Generating answer..."):
            try:
                result = generator(
                    user_input,
                    max_new_tokens=128,
                    do_sample=True,
                    temperature=0.7,
                    top_p=0.9
                )
                output_text = result[0]["generated_text"]
                st.success("Answer:")
                st.write(output_text)
            except Exception as e:
                st.error(f"Generation failed: {e}")
    else:
        st.warning("Please enter a question.")

st.markdown("---")
st.caption("Model: microsoft/BioGPT-Large-PubMedQA + adapter kirubel1738/biogpt-pubmedqa-finetuned | Runs on CPU automatically")