import streamlit as st
import torch
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
from diffusers import StableDiffusionPipeline
from nltk.corpus import wordnet
import nltk
nltk.download('wordnet')
def generate_text(prompt, temperature=0.7, top_k=50, repetition_penalty=1.2, max_length=None, min_length=10):
text_model = "gpt2"
tokenizer = AutoTokenizer.from_pretrained(text_model)
model = AutoModelForCausalLM.from_pretrained(text_model)
generator = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
device=0 if torch.cuda.is_available() else -1
)
return generator(
prompt,
max_length=max_length,
min_length=min_length,
do_sample=True,
top_k=top_k,
temperature=temperature,
repetition_penalty=repetition_penalty,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
)[0]["generated_text"]
def generate_image(prompt):
image_model = "runwayml/stable-diffusion-v1-5"
device = "cuda" if torch.cuda.is_available() else "cpu"
pipe = StableDiffusionPipeline.from_pretrained(image_model, torch_dtype=torch.float32)
pipe = pipe.to(device)
image = pipe(prompt).images[0]
return image
def get_synonyms(word):
synonyms = set()
for syn in wordnet.synsets(word):
for lemma in syn.lemmas():
synonyms.add(lemma.name().replace('_', ' '))
return list(synonyms)
st.title(":black[_AI-Generated Blog Post_]")
title = st.text_input("Topic of the Article")
keywords_selection = st.selectbox('Do you want to select Keywords Manually or Automatic',['','Manually','Automatic'])
if keywords_selection == 'Manually' :
keywords_input = st.text_input("Enter Some Keywords About The Topic (Separate keywords with commas)")
keywords = [word.strip() for word in keywords_input.split(',')]
keywords.append(title)
if keywords_selection == 'Automatic' :
keywords = get_synonyms(title)
st.write(f'Your keywords Are {keywords}')
try :
if st.button('Generate Article'):
if keywords:
generated_text = " ".join(keywords)
formatted_title = title.capitalize()
st.markdown(
f"
{formatted_title}
",
unsafe_allow_html=True
)
col1, col2, col3 = st.columns([1, 2, 1])
with col2:
generated_image1 = generate_image(generated_text)
new_image1 = generated_image1.resize((700, 500))
st.image(new_image1, use_column_width=True)
# Introduction
st.subheader("Introduction")
intro_text = generate_text(f'introduction about : {generated_text}', min_length=100, max_length=200)
intro_text = intro_text.replace(f"introduction about : {generated_text}", "")
st.write(intro_text.strip()) # Display the generated introduction text
modified_prompt = generated_text + 'bright'
generated_image2 = generate_image(modified_prompt)
new_image2 = generated_image2.resize((700, 300))
st.image(new_image2, use_column_width=True)
# Body 1
col1, col2 = st.columns(2)
with col1:
st.subheader("Body")
body_text1 = generate_text(f'article about : {generated_text}', min_length=100, max_length=150)
body_text1 = body_text1.replace(f"article about : {generated_text}", "")
st.write(body_text1.strip()) # Display the generated introduction text
with col2:
modified_prompt2 = generated_text + 'shade'
generated_image3 = generate_image(modified_prompt2)
st.markdown("
", unsafe_allow_html=True)
st.image(generated_image3, use_column_width=True)
# Body 2
body_text2 = generate_text(f'article about : {generated_text}', min_length=200, max_length=300)
body_text2 = body_text2.replace(f"{generated_text}", "")
st.write(body_text2.strip()) # Display the generated introduction text
modified_prompt3 = generated_text + title
generated_image4 = generate_image(modified_prompt3)
new_image3 = generated_image4.resize((700, 300))
st.image(new_image3, use_column_width=True)
# Conclusion
st.subheader("Conclusion")
conclusion_text = generate_text(f'conclusion about : {generated_text}', min_length=100, max_length=200)
conclusion_text = conclusion_text.replace(f"conclusion about : {generated_text}", "")
st.write(conclusion_text.strip()) # Display the generated introduction text
else:
st.warning("Please input keywords to generate content.")
except :
st.warning('Please Enter Title and Keywords')
st.sidebar.title("Instructions")
st.sidebar.write(
"1. Enter title and keywords related to the topic you want to generate content about."
"\n2. Click 'Generate Article' to create the AI-generated blog post."
"\n3. Explore the Introduction, Body, and Conclusion sections of the generated content."
)