simple2poetic / app.py
reysarms's picture
final changes to poetry app
21dcf87
import streamlit as st
import google.generativeai as genai
import os
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
api_key = os.getenv("GEMINI_API_KEY") # Gets the Google Gemini API key
# Check if API key is set
if not api_key:
st.error("❌ Error: Google API key is missing. Please check your .env file.")
st.stop()
# Set up Google Gemini AI
genai.configure(api_key=api_key)
# Streamlit UI
st.set_page_config(page_title="REYREY's AI Poetry Translator", page_icon="🎭", layout="centered")
st.title("πŸ“ REYREY's Poetry Translator 🎭")
st.write("Enter a phrase, sentence, or paragraph, and I'll transform it into poetry!")
# Get user input
text_input = st.text_area("Enter text:", placeholder="Type something here...")
# Let user choose a poetry style
poetry_style = st.selectbox(
"Choose a poetry style:",
["Shakespearean", "Haiku", "Free Verse", "Sonnet", "Limerick", "Rhyming Couplets"]
)
# Generates a poem using Google Gemini AI
def generate_poetry(text, style, retry=False):
try:
prompt = f"Convert the following text into {style} poetry:\n\n{text}\n\nPoem:"
model = genai.GenerativeModel("gemini-pro") # Uses Google's Gemini Pro model
response = model.generate_content(prompt)
# Checks if AI returned a valid response
if response and hasattr(response, "text") and response.text:
return response.text.strip()
# Retries with a softer prompt if the first attempt is blocked
if not retry:
softer_prompt = f"Write a short {style} poem based on this idea: {text}"
response = model.generate_content(softer_prompt)
if response and hasattr(response, "text") and response.text:
return response.text.strip()
# Returns a friendly message if AI refuses to generate a poem
return "⚠️ AI couldn't generate a poem. Try rewording your input."
except Exception as e:
return f"❌ Error generating poem: {str(e)}"
# Runs when the user clicks the button
if st.button("Generate Poetry ✨"):
if text_input:
with st.spinner("Creating your poem... 🎭"):
poem = generate_poetry(text_input, poetry_style)
if poem.startswith("❌ Error"):
st.error(poem)
else:
st.success("Here’s your poetic masterpiece:")
st.text_area("Generated Poem:", poem, height=200)
st.button("πŸ“‹ Copy to Clipboard", on_click=lambda: st.session_state.update({"copy_text": poem}))
else:
st.warning("Please enter text to generate poetry!")
# Footer
st.markdown("---")
st.write("🎨 Created with ❀️ using Google Gemini & Streamlit")