JeCabrera's picture
Update app.py
0c7ecd0 verified
raw
history blame
5.16 kB
import streamlit as st
import google.generativeai as genai
import os
from dotenv import load_dotenv
from styles import get_custom_css
from formulas import offer_formulas
# Set page to wide mode to use full width
st.set_page_config(layout="wide")
# Load environment variables
load_dotenv()
# Configure Google Gemini API
genai.configure(api_key=os.getenv('GOOGLE_API_KEY'))
model = genai.GenerativeModel('gemini-2.0-flash')
# Initialize session state variables if they don't exist
if 'submitted' not in st.session_state:
st.session_state.submitted = False
if 'offer_result' not in st.session_state:
st.session_state.offer_result = ""
# Hide Streamlit menu and footer
st.markdown("""
<style>
#MainMenu {visibility: hidden;}
footer {visibility: hidden;}
header {visibility: hidden;}
</style>
""", unsafe_allow_html=True)
# Custom CSS
st.markdown(get_custom_css(), unsafe_allow_html=True)
# App title and description
st.title('🚀 Great Offer Generator')
st.markdown('''### Transform your skills into compelling offers!''')
# Create two columns for layout - left column 40%, right column 60%
col1, col2 = st.columns([4, 6])
# Main input section in left column
with col1:
skills = st.text_area('💪 Tus Habilidades', height=70,
help='Lista tus habilidades y experiencia clave')
product_service = st.text_area('🎯 Producto/Servicio', height=70,
help='Describe tu producto o servicio')
# Accordion for additional settings
with st.expander('⚙️ Configuración Avanzada'):
target_audience = st.text_area('👥 Público Objetivo', height=70,
help='Describe tu cliente o público ideal')
# Selector de fórmula
formula_type = st.selectbox(
'📋 Tipo de Fórmula',
options=list(offer_formulas.keys()),
help='Selecciona el tipo de fórmula para tu oferta'
)
# Removed the "Ver detalles de la fórmula" expander section
temperature = st.slider('🌡️ Nivel de Creatividad', min_value=0.0, max_value=2.0, value=0.7,
help='Valores más altos hacen que el resultado sea más creativo pero menos enfocado')
# Generate button with callback
def generate_offer():
if not skills or not product_service:
st.error('Por favor completa los campos de Habilidades y Producto/Servicio')
else:
# Set submitted flag to True
st.session_state.submitted = True
# Store input values in session state
st.session_state.skills = skills
st.session_state.product_service = product_service
st.session_state.target_audience = target_audience
st.session_state.temperature = temperature
st.session_state.formula_type = formula_type
st.button('Generar Oferta 🎉', on_click=generate_offer)
# Results column
with col2:
# Check if form has been submitted
if st.session_state.submitted:
with st.spinner('Creando tu oferta perfecta...'):
prompt = f"""Based on the following information, create a compelling offer using the {st.session_state.formula_type} formula:
Skills: {st.session_state.skills}
Product/Service: {st.session_state.product_service}
Target Audience: {st.session_state.target_audience if st.session_state.target_audience else 'General audience'}
Formula Description:
{offer_formulas[st.session_state.formula_type]["description"]}
Please create a professional and engaging offer that highlights the value proposition
and appeals to the target audience. Include a clear call to action.
Use the formula structure provided above to craft the offer."""
try:
# Create generation config with temperature
generation_config = genai.GenerationConfig(temperature=st.session_state.temperature)
# Pass the generation config to generate_content
response = model.generate_content(prompt, generation_config=generation_config)
st.session_state.offer_result = response.text
# Display result
st.markdown('### 📝 Oferta Generada')
st.markdown(st.session_state.offer_result)
# Add download button below the result with 80% width
col_download, col_empty = st.columns([8, 2])
with col_download:
st.download_button(
label="Descargar Oferta",
data=st.session_state.offer_result,
file_name="oferta_generada.txt",
mime="text/plain"
)
except Exception as e:
st.error(f'Ocurrió un error: {str(e)}')
st.session_state.submitted = False
# Footer
st.markdown('---')
st.markdown('Made with ❤️ by Jesús Cabrera')