JeCabrera commited on
Commit
c20a805
·
verified ·
1 Parent(s): b0e8c17

Upload 11 files

Browse files
Files changed (1) hide show
  1. app.py +98 -33
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
- ad_target_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Madres trabajadoras de 30-45 años")
84
- ad_product = st.text_input("¿Qué producto tienes en mente?", placeholder="Ejemplo: Curso de gestión del tiempo")
85
- input_prompt = st.text_area("Escribe de qué quieres que trate la historia:", placeholder="Escribe aquí tu idea...")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- # Removed language selector
123
-
124
  ad_temperature = st.slider(
125
  "Nivel de creatividad",
126
  min_value=0.0,
127
  max_value=2.0,
128
- value=1.0,
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
- with st.spinner('Generando anuncio...'):
139
- generated_ad = generate_fb_ad(
140
- ad_target_audience,
141
- ad_product,
142
- ad_temperature,
143
- ad_formula,
144
- emotional_angle,
145
- ad_persona,
146
- input_prompt, # Pass the new story prompt
147
- selected_objective
148
- )
149
- if not isinstance(generated_ad, str):
150
- col2.error("Error al generar el anuncio")
151
- else:
152
- col2.markdown(f"""
153
- <div style="{styles['results_container']}">
154
- <h3>Anuncio Generado:</h3>
155
- <p>{generated_ad}</p>
156
- </div>
157
- """, unsafe_allow_html=True)
 
 
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.")