Spaces:
Sleeping
Sleeping
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') |