File size: 5,250 Bytes
09b8bec
 
25d1401
 
d3c442c
09b8bec
d3c442c
 
 
 
25d1401
09b8bec
25d1401
09b8bec
 
25d1401
 
d3c442c
09b8bec
 
 
 
25d1401
09b8bec
 
d3c442c
 
09b8bec
 
 
 
d3c442c
09b8bec
 
 
d3c442c
 
 
 
25d1401
09b8bec
d3c442c
09b8bec
 
 
d3c442c
09b8bec
 
 
 
 
 
 
 
 
 
 
 
d3c442c
 
09b8bec
 
 
 
 
 
 
 
 
d3c442c
 
09b8bec
 
d3c442c
 
 
 
09b8bec
 
d3c442c
09b8bec
d3c442c
 
 
 
09b8bec
 
d3c442c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
09b8bec
d3c442c
 
09b8bec
 
 
 
 
 
 
d3c442c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
09b8bec
d3c442c
 
09b8bec
 
 
d3c442c
 
09b8bec
 
25d1401
09b8bec
d3c442c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
from dotenv import load_dotenv
import streamlit as st
import os
import google.generativeai as genai
from ads_formulas import ads_formulas  # Import the ads formulas
from style import styles
from prompts import create_fb_ad_instruction
from emotional_angles import emotional_angles
from copywriter_personas import copywriter_personas
from ad_objectives import ad_objectives  # Import ad objectives

# Cargar las variables de entorno
load_dotenv()

# Configurar la API de Google
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))

# Función para generar modelo
@st.cache_resource
def get_model(temperature):
    generation_config = {
        "temperature": temperature,
    }
    return genai.GenerativeModel('gemini-2.0-flash', generation_config=generation_config)

# Function to generate Facebook ads
def generate_fb_ad(target_audience, product, temperature, selected_formula, selected_angle, selected_persona, ad_objective=None):
    if not target_audience or not product:
        return "Por favor, completa todos los campos requeridos."
    
    model = get_model(temperature)
    ad_instruction = create_fb_ad_instruction(
        target_audience, 
        product, 
        selected_formula,
        selected_angle,
        selected_persona,
        ad_objective,
        language="español"  # Fixed to Spanish
    )
    
    response = model.generate_content([ad_instruction], generation_config={"temperature": temperature})
    return response.parts[0].text if response and response.parts else "Error generating content."

# Configurar la interfaz de usuario con Streamlit
st.set_page_config(page_title="Facebook Ads Generator", layout="wide")

# Leer el contenido del archivo manual.md
with open("manual.md", "r", encoding="utf-8") as file:
    manual_content = file.read()

# Mostrar el contenido del manual en el sidebar
st.sidebar.markdown(manual_content)

# Ocultar elementos de la interfaz
st.markdown(styles["main_layout"], unsafe_allow_html=True)

# Centrar el título y el subtítulo
st.markdown("<h1 style='text-align: center;'>Facebook Ads Generator</h1>", unsafe_allow_html=True)
st.markdown("<h4 style='text-align: center;'>Crea anuncios persuasivos que conectan con tu audiencia y generan conversiones.</h4>", unsafe_allow_html=True)

# Añadir CSS personalizado para el botón
st.markdown(styles["button"], unsafe_allow_html=True)

# Crear columnas
col1, col2 = st.columns([1, 2])  

# Columnas de entrada
with col1:
    ad_target_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Madres trabajadoras de 30-45 años")
    ad_product = st.text_input("¿Qué producto tienes en mente?", placeholder="Ejemplo: Curso de gestión del tiempo")

    with st.expander("Opciones avanzadas"):
        # Selector de fórmula de anuncio
        ad_formula_key = st.selectbox(
            "Fórmula de anuncio",
            options=list(ads_formulas.keys()),
            label_visibility="visible"
        )
        ad_formula = ads_formulas[ad_formula_key]

        # Selector de ángulo emocional
        emotional_angle_key = st.selectbox(
            "Ángulo emocional",
            options=list(emotional_angles.keys()),
            label_visibility="visible"
        )
        emotional_angle = emotional_angles[emotional_angle_key]
        
        # Selector de personalidad de copywriter
        ad_persona_key = st.selectbox(
            "Estilo de copywriter",
            options=list(copywriter_personas.keys()),
            index=0,
            format_func=lambda x: x.replace("_", " "),
            label_visibility="visible"
        )
        ad_persona = copywriter_personas[ad_persona_key]
        
        # Selector de objetivo de anuncio
        ad_objective_key = st.selectbox(
            "Objetivo de la campaña",
            options=list(ad_objectives.keys()),
            label_visibility="visible"
        )
        selected_objective = ad_objectives[ad_objective_key] if ad_objective_key != "ninguno" else None

        # Removed language selector

        ad_temperature = st.slider(
            "Nivel de creatividad",
            min_value=0.0, 
            max_value=2.0, 
            value=1.0, 
            step=0.1,
            label_visibility="visible"
        )

    submit_ad = st.button("GENERAR ANUNCIO")

# Mostrar el anuncio generado
if submit_ad:
    if ad_target_audience and ad_product:
        with st.spinner('Generando anuncio...'):
            generated_ad = generate_fb_ad(
                ad_target_audience, 
                ad_product, 
                ad_temperature, 
                ad_formula,
                emotional_angle,
                ad_persona,
                selected_objective
                # Removed language parameter
            )
            if not isinstance(generated_ad, str):
                col2.error("Error al generar el anuncio")
            else:
                col2.markdown(f"""
                    <div style="{styles['results_container']}">
                        <h3>Anuncio Generado:</h3>
                        <p>{generated_ad}</p>
                    </div>
                """, unsafe_allow_html=True)

    else:
        col2.warning("Por favor, completa todos los campos antes de generar el anuncio.")