Spaces:
Sleeping
Sleeping
| 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"<h1 style='text-align: center; color: blue; font-size: 70px;'>{formatted_title}</h1>", | |
| 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("<br><br><br><br>", 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." | |
| ) | |