Spaces:
Sleeping
Sleeping
Upload 11 files
Browse files
app.py
CHANGED
@@ -78,82 +78,147 @@ st.markdown(styles["button"], unsafe_allow_html=True)
|
|
78 |
# Crear columnas
|
79 |
col1, col2 = st.columns([1, 2])
|
80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
# Columnas de entrada
|
82 |
with col1:
|
83 |
-
|
84 |
-
|
85 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
|
87 |
with st.expander("Opciones avanzadas"):
|
88 |
# Selector de fórmula de anuncio
|
89 |
ad_formula_key = st.selectbox(
|
90 |
"Fórmula de anuncio",
|
91 |
options=list(ads_formulas.keys()),
|
92 |
-
label_visibility="visible"
|
|
|
|
|
93 |
)
|
|
|
94 |
ad_formula = ads_formulas[ad_formula_key]
|
95 |
|
96 |
# Selector de ángulo emocional
|
97 |
emotional_angle_key = st.selectbox(
|
98 |
"Ángulo emocional",
|
99 |
options=list(emotional_angles.keys()),
|
100 |
-
label_visibility="visible"
|
|
|
|
|
101 |
)
|
|
|
102 |
emotional_angle = emotional_angles[emotional_angle_key]
|
103 |
|
104 |
# Selector de personalidad de copywriter
|
105 |
ad_persona_key = st.selectbox(
|
106 |
"Estilo de copywriter",
|
107 |
options=list(copywriter_personas.keys()),
|
108 |
-
index=0,
|
109 |
format_func=lambda x: x.replace("_", " "),
|
110 |
-
label_visibility="visible"
|
|
|
|
|
111 |
)
|
|
|
112 |
ad_persona = copywriter_personas[ad_persona_key]
|
113 |
|
114 |
# Selector de objetivo de anuncio
|
115 |
ad_objective_key = st.selectbox(
|
116 |
"Objetivo de la campaña",
|
117 |
options=list(ad_objectives.keys()),
|
118 |
-
label_visibility="visible"
|
|
|
|
|
119 |
)
|
|
|
120 |
selected_objective = ad_objectives[ad_objective_key] if ad_objective_key != "ninguno" else None
|
121 |
|
122 |
-
#
|
123 |
-
|
124 |
ad_temperature = st.slider(
|
125 |
"Nivel de creatividad",
|
126 |
min_value=0.0,
|
127 |
max_value=2.0,
|
128 |
-
value=
|
129 |
step=0.1,
|
130 |
-
label_visibility="visible"
|
|
|
131 |
)
|
|
|
132 |
|
|
|
133 |
submit_ad = st.button("GENERAR ANUNCIO")
|
134 |
|
135 |
# Mostrar el anuncio generado
|
136 |
if submit_ad:
|
137 |
-
if ad_target_audience and ad_product:
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
<
|
156 |
-
|
157 |
-
|
|
|
|
|
158 |
else:
|
159 |
col2.warning("Por favor, completa todos los campos antes de generar el anuncio.")
|
|
|
78 |
# Crear columnas
|
79 |
col1, col2 = st.columns([1, 2])
|
80 |
|
81 |
+
# Modificar la parte de la interfaz de usuario para usar session_state
|
82 |
+
|
83 |
+
# Inicializar valores en session_state si no existen
|
84 |
+
if 'ad_target_audience' not in st.session_state:
|
85 |
+
st.session_state.ad_target_audience = ""
|
86 |
+
if 'ad_product' not in st.session_state:
|
87 |
+
st.session_state.ad_product = ""
|
88 |
+
if 'input_prompt' not in st.session_state:
|
89 |
+
st.session_state.input_prompt = ""
|
90 |
+
if 'ad_formula_key' not in st.session_state:
|
91 |
+
st.session_state.ad_formula_key = list(ads_formulas.keys())[0]
|
92 |
+
if 'emotional_angle_key' not in st.session_state:
|
93 |
+
st.session_state.emotional_angle_key = list(emotional_angles.keys())[0]
|
94 |
+
if 'ad_persona_key' not in st.session_state:
|
95 |
+
st.session_state.ad_persona_key = list(copywriter_personas.keys())[0]
|
96 |
+
if 'ad_objective_key' not in st.session_state:
|
97 |
+
st.session_state.ad_objective_key = list(ad_objectives.keys())[0]
|
98 |
+
if 'ad_temperature' not in st.session_state:
|
99 |
+
st.session_state.ad_temperature = 1.0
|
100 |
+
|
101 |
+
# Funciones para actualizar el estado
|
102 |
+
def update_target_audience():
|
103 |
+
st.session_state.ad_target_audience = st.session_state.target_audience_input
|
104 |
+
|
105 |
+
def update_product():
|
106 |
+
st.session_state.ad_product = st.session_state.product_input
|
107 |
+
|
108 |
+
def update_prompt():
|
109 |
+
st.session_state.input_prompt = st.session_state.prompt_input
|
110 |
+
|
111 |
# Columnas de entrada
|
112 |
with col1:
|
113 |
+
st.text_input(
|
114 |
+
"¿Quién es tu público objetivo?",
|
115 |
+
placeholder="Ejemplo: Madres trabajadoras de 30-45 años",
|
116 |
+
key="target_audience_input",
|
117 |
+
value=st.session_state.ad_target_audience,
|
118 |
+
on_change=update_target_audience
|
119 |
+
)
|
120 |
+
|
121 |
+
st.text_input(
|
122 |
+
"¿Qué producto tienes en mente?",
|
123 |
+
placeholder="Ejemplo: Curso de gestión del tiempo",
|
124 |
+
key="product_input",
|
125 |
+
value=st.session_state.ad_product,
|
126 |
+
on_change=update_product
|
127 |
+
)
|
128 |
+
|
129 |
+
st.text_area(
|
130 |
+
"Escribe de qué quieres que trate la historia:",
|
131 |
+
placeholder="Escribe aquí tu idea...",
|
132 |
+
key="prompt_input",
|
133 |
+
value=st.session_state.input_prompt,
|
134 |
+
on_change=update_prompt
|
135 |
+
)
|
136 |
|
137 |
with st.expander("Opciones avanzadas"):
|
138 |
# Selector de fórmula de anuncio
|
139 |
ad_formula_key = st.selectbox(
|
140 |
"Fórmula de anuncio",
|
141 |
options=list(ads_formulas.keys()),
|
142 |
+
label_visibility="visible",
|
143 |
+
key="ad_formula_key",
|
144 |
+
index=list(ads_formulas.keys()).index(st.session_state.ad_formula_key)
|
145 |
)
|
146 |
+
st.session_state.ad_formula_key = ad_formula_key
|
147 |
ad_formula = ads_formulas[ad_formula_key]
|
148 |
|
149 |
# Selector de ángulo emocional
|
150 |
emotional_angle_key = st.selectbox(
|
151 |
"Ángulo emocional",
|
152 |
options=list(emotional_angles.keys()),
|
153 |
+
label_visibility="visible",
|
154 |
+
key="emotional_angle_key",
|
155 |
+
index=list(emotional_angles.keys()).index(st.session_state.emotional_angle_key)
|
156 |
)
|
157 |
+
st.session_state.emotional_angle_key = emotional_angle_key
|
158 |
emotional_angle = emotional_angles[emotional_angle_key]
|
159 |
|
160 |
# Selector de personalidad de copywriter
|
161 |
ad_persona_key = st.selectbox(
|
162 |
"Estilo de copywriter",
|
163 |
options=list(copywriter_personas.keys()),
|
|
|
164 |
format_func=lambda x: x.replace("_", " "),
|
165 |
+
label_visibility="visible",
|
166 |
+
key="ad_persona_key",
|
167 |
+
index=list(copywriter_personas.keys()).index(st.session_state.ad_persona_key)
|
168 |
)
|
169 |
+
st.session_state.ad_persona_key = ad_persona_key
|
170 |
ad_persona = copywriter_personas[ad_persona_key]
|
171 |
|
172 |
# Selector de objetivo de anuncio
|
173 |
ad_objective_key = st.selectbox(
|
174 |
"Objetivo de la campaña",
|
175 |
options=list(ad_objectives.keys()),
|
176 |
+
label_visibility="visible",
|
177 |
+
key="ad_objective_key",
|
178 |
+
index=list(ad_objectives.keys()).index(st.session_state.ad_objective_key)
|
179 |
)
|
180 |
+
st.session_state.ad_objective_key = ad_objective_key
|
181 |
selected_objective = ad_objectives[ad_objective_key] if ad_objective_key != "ninguno" else None
|
182 |
|
183 |
+
# Slider de temperatura
|
|
|
184 |
ad_temperature = st.slider(
|
185 |
"Nivel de creatividad",
|
186 |
min_value=0.0,
|
187 |
max_value=2.0,
|
188 |
+
value=st.session_state.ad_temperature,
|
189 |
step=0.1,
|
190 |
+
label_visibility="visible",
|
191 |
+
key="ad_temperature_slider"
|
192 |
)
|
193 |
+
st.session_state.ad_temperature = ad_temperature
|
194 |
|
195 |
+
# Usar los valores de session_state para el botón de generación
|
196 |
submit_ad = st.button("GENERAR ANUNCIO")
|
197 |
|
198 |
# Mostrar el anuncio generado
|
199 |
if submit_ad:
|
200 |
+
if st.session_state.ad_target_audience and st.session_state.ad_product:
|
201 |
+
# Mover el spinner a la segunda columna
|
202 |
+
with col2:
|
203 |
+
with st.spinner('Generando anuncio...'):
|
204 |
+
generated_ad = generate_fb_ad(
|
205 |
+
st.session_state.ad_target_audience,
|
206 |
+
st.session_state.ad_product,
|
207 |
+
st.session_state.ad_temperature,
|
208 |
+
ad_formula,
|
209 |
+
emotional_angle,
|
210 |
+
ad_persona,
|
211 |
+
st.session_state.input_prompt,
|
212 |
+
selected_objective
|
213 |
+
)
|
214 |
+
if not isinstance(generated_ad, str):
|
215 |
+
st.error("Error al generar el anuncio")
|
216 |
+
else:
|
217 |
+
st.markdown(f"""
|
218 |
+
<div style="{styles['results_container']}">
|
219 |
+
<h3>Anuncio Generado:</h3>
|
220 |
+
<p>{generated_ad}</p>
|
221 |
+
</div>
|
222 |
+
""", unsafe_allow_html=True)
|
223 |
else:
|
224 |
col2.warning("Por favor, completa todos los campos antes de generar el anuncio.")
|