article-chatbot / app.py
Amelia-James's picture
Create app.py
d398d0b verified
import streamlit as st
from transformers import pipeline
import time
# Load the text generation pipeline (Use a smaller model if 2.7B is too resource-intensive)
generator = pipeline("text-generation", model="EleutherAI/gpt-neo-2.7B")
def generate_article(title, intro, key_points, tone, style):
# Prompt to guide the model toward a humanized output
prompt = (
f"Write an article with the following details:\n"
f"Title: {title}\n\n"
f"Introduction: {intro}\n\n"
f"Main Points:\n{key_points}\n\n"
f"Tone: {tone}\nStyle: {style}\n\n"
f"Please write in a human-like, engaging, and coherent manner.\n\n"
f"Full Article:\n"
)
start_time = time.time()
result = generator(
prompt,
max_length=4000, # Approximate length for 2000 words
temperature=0.85, # Increased temperature for a more human-like output
top_p=0.9, # Nucleus sampling for coherence
repetition_penalty=1.2 # Reduces repetitiveness
)
end_time = time.time()
generated_text = result[0]['generated_text']
time_taken = f"Time taken: {round(end_time - start_time, 2)} seconds"
return generated_text, time_taken
# Streamlit App Structure
st.title("Humanized Article Writer Chatbot")
st.write("Generate a human-like, 2000-word article by providing structured prompts. This tool is designed to produce natural, engaging text.")
# Input fields
title = st.text_input("Article Title")
intro = st.text_area("Introduction (What is the article about?)", placeholder="Enter the main theme or opening lines...")
key_points = st.text_area("Key Points (Provide bullet points or main ideas)", placeholder="List the main points or topics to cover...")
tone = st.text_input("Tone (e.g., Informative, Casual, Formal)", placeholder="Enter the desired tone...")
style = st.text_input("Style (e.g., Blog Post, Essay, News Article)", placeholder="Enter the desired style...")
# Generate article button
if st.button("Generate Article"):
if title and intro and key_points and tone and style:
with st.spinner("Generating article..."):
generated_text, time_taken = generate_article(title, intro, key_points, tone, style)
st.success(time_taken)
st.write(generated_text)
else:
st.warning("Please fill in all fields before generating the article.")