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")