Download app.py from Abhisingh-18/Blog-Craft.Ai: direct link, hf CLI and curl.
- Browser
- Download file 4.31 kB
-
https://huggingface.co/Abhisingh-18/Blog-Craft.Ai/resolve/main/app.py
- Command line
-
hf download hf://Abhisingh-18/Blog-Craft.Ai/app.py
-
curl -L -o app.py https://huggingface.co/Abhisingh-18/Blog-Craft.Ai/resolve/main/app.py
4.31 kB
| import streamlit as st | |
| import google.generativeai as genai | |
| import openai | |
| from apikey import google_gemini_api_key, openai_api_key | |
| from PIL import Image | |
| import requests | |
| from io import BytesIO | |
| import time | |
| # Configure the Gemini API with your API key | |
| genai.configure(api_key=google_gemini_api_key) | |
| # Configure the OpenAI API with your API key | |
| openai.api_key = openai_api_key | |
| # Define generation configuration settings for Gemini | |
| generation_config = { | |
| "temperature": 0.9, | |
| "top_p": 1, | |
| "top_k": 1, | |
| "max_output_tokens": 2048, | |
| } | |
| # Define safety settings to filter out harmful content | |
| safety_settings = [ | |
| {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"}, | |
| {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_MEDIUM_AND_ABOVE"}, | |
| {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"}, | |
| {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"}, | |
| ] | |
| # Initialize the GenerativeModel with the specified settings | |
| model = genai.GenerativeModel( | |
| model_name="gemini-1.5-pro", | |
| generation_config=generation_config, | |
| safety_settings=safety_settings, | |
| ) | |
| # Set the Streamlit app layout to wide mode | |
| st.set_page_config(layout="wide") | |
| # Adding emojis to the title | |
| st.title("✍️🤖 BlogCraft: Your AI Writing Companion") | |
| # Adding emojis to the subheader | |
| st.subheader("Now you can craft perfect blogs with the help of AI—BlogCraft is your new AI Blog Companion. 📝✨") | |
| # Sidebar for user inputs | |
| with st.sidebar: | |
| st.title("Input Your Blog Details") | |
| st.subheader("Enter Details of the Blog you want to generate") | |
| # Blog title input | |
| blog_title = st.text_input("Blog Title") | |
| # Keywords input | |
| keywords = st.text_area("Keywords (comma-separated)") | |
| # Number of words slider | |
| num_words = st.slider("Number of words", min_value=250, max_value=2500, step=250) | |
| # Number of images input | |
| num_images = st.number_input("Number of Images", min_value=0, max_value=10, step=1) | |
| # Generate Blog button | |
| submit_button = st.button("Generate Blog") | |
| # Function to generate images with retry mechanism | |
| def generate_image_with_retry(prompt, max_retries=3, delay=5): | |
| for attempt in range(max_retries): | |
| try: | |
| response = openai.Image.create( | |
| prompt=prompt, | |
| n=1, | |
| size="1024x1024", | |
| ) | |
| return response['data'][0]['url'] | |
| except Exception as e: | |
| if attempt < max_retries - 1: | |
| time.sleep(delay) | |
| delay *= 2 # Exponential backoff | |
| else: | |
| st.error(f"An error occurred while generating the image: {e}") | |
| return None | |
| # When the user clicks the "Generate Blog" button | |
| if submit_button: | |
| # Ensure that the blog title and keywords are provided | |
| if not blog_title: | |
| st.error("Please enter a blog title.") | |
| elif not keywords: | |
| st.error("Please enter at least one keyword.") | |
| else: | |
| # Create the prompt for the Gemini model | |
| prompt = ( | |
| f"Generate a comprehensive, engaging blog post relevant to the given title \"{blog_title}\" " | |
| f"and keywords \"{keywords}\". Make sure to incorporate these keywords in the blog post. " | |
| f"The blog should be approximately {num_words} words in length, suitable for an online audience. " | |
| f"Ensure the content is original, informative, and maintains a consistent tone throughout." | |
| ) | |
| # Generate the content using the Gemini model | |
| response = model.generate_content(prompt) | |
| # Display the generated blog content | |
| st.title("Your Blog Post:") | |
| st.write(response.text) | |
| # Generate images using OpenAI's DALL·E 3 model | |
| for i in range(num_images): | |
| image_prompt = f"{blog_title} - {keywords} - Image {i+1}" | |
| image_url = generate_image_with_retry(image_prompt) | |
| if image_url: | |
| response = requests.get(image_url) | |
| image = Image.open(BytesIO(response.content)) | |
| st.image(image, caption=f"Generated Image {i+1}") | |