GPT-2 / test.py
kanhaiya-ML's picture
Update test.py
c147146 verified
Raw
History Blame Contribute Delete
2.79 kB
from transformers import pipeline
import streamlit as st
@st.cache_resource
def load_model(model_name):
return pipeline("text-generation", model=model_name)
st.title("✍️ GPT Text Generator")
st.write("Powered by GPT-2")
# Model selection
model_choice = st.selectbox(
"Choose Model:",
options={
"GPT-2 Small (Fast)": "gpt2",
"DistilGPT-2 (Tiny)": "distilgpt2"
}.keys()
)
models = {
"GPT-2 Small (Fast)": "gpt2",
"DistilGPT-2 (Tiny)": "distilgpt2"
}
styles = {
"None": "",
"Story": "Once upon a time, ",
"News Article": "Breaking News: ",
"Formal": "It is hereby stated that ",
"Poem": "Roses are red, violets are blue, ",
"Motivational": "Never give up because "
}
style_choice = st.selectbox(
"Writing Style:",
["None", "Story", "News Article", "Formal", "Poem", "Motivational"]
)
selected_model = models[model_choice]
generator = load_model(selected_model)
# Style selection
# User input
user_input = st.text_area("Enter Your Sentence:")
# Parameters
col1, col2 = st.columns(2)
with col1:
temperature = st.slider(
"Temperature (creativity)",
min_value=0.1,
max_value=1.5,
value=0.7,
step=0.1
)
max_length = st.slider(
"Output Length",
min_value=50,
max_value=300,
value=150
)
with col2:
num_sequences = st.slider(
"Number of Versions",
min_value=1,
max_value=3,
value=1
)
repetition_penalty = st.slider(
"Repetition Penalty",
min_value=1.0,
max_value=2.0,
value=1.3,
step=0.1
)
if st.button("Generate"):
if user_input.strip() == "":
st.warning("Please enter a sentence first")
else:
# Add style prefix
selected_style = styles[style_choice]
prompt = selected_style + user_input
with st.spinner(f"Generating with {model_choice}..."):
results = generator(
prompt,
max_length=max_length,
num_return_sequences=num_sequences,
temperature=temperature,
top_p=0.9,
top_k=50,
repetition_penalty=repetition_penalty,
do_sample=True,
truncation=True
)
for i, result in enumerate(results):
st.subheader(f"Version {i+1}")
# Remove input from output
generated_only = result['generated_text'][len(user_input):]
st.code(generated_only) # adds copy button automatically
st.write(generated_only)
st.caption(f"Word count: {len(generated_only.split())} words")
st.divider()