File size: 8,240 Bytes
91a0d7e
a8fd769
 
 
d51e47b
 
 
a8fd769
d51e47b
522d135
 
e8314b4
1ff0df4
522d135
 
 
 
 
 
 
 
 
1ff0df4
522d135
 
 
 
 
 
 
 
 
 
09f09fc
063a515
 
522d135
063a515
 
 
09f09fc
 
 
522d135
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93aa621
 
 
522d135
 
 
a8fd769
ff360f5
e8314b4
a8fd769
1ff0df4
d51e47b
1ff0df4
522d135
d51e47b
522d135
e8314b4
bef3dc5
522d135
 
a8fd769
03cdd46
 
dc809d3
03cdd46
 
 
 
a988be6
a8fd769
03cdd46
 
 
e5e600e
60ce54c
522d135
 
 
03cdd46
 
 
 
 
 
 
 
522d135
 
 
 
 
 
 
 
 
 
 
 
 
 
03cdd46
 
 
 
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
from dotenv import load_dotenv
import streamlit as st
import os
import google.generativeai as genai

load_dotenv()

genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))

# Funci贸n para obtener respuesta del modelo Gemini (P.A.S.A)
def get_pasa_response(target_audience, product, action, mood, length):
    model = genai.GenerativeModel("gemini-1.5-flash")
    full_prompt = f"""
    You are a skilled copywriter and storyteller. Create a persuasive story in Spanish following the P.A.S.A. formula (Problema, Agitaci贸n, Soluci贸n, Acci贸n). 
    Do not explicitly label or explain each section (Problema, Agitaci贸n, Soluci贸n, Acci贸n). Instead, weave these elements naturally into a cohesive, flowing narrative that emotionally connects with the {target_audience}.
    The story should have {length} words, with a {mood} tone. Here are the details:
    1. Problema: Describe a specific problem that keeps the {target_audience} awake at night.
    2. Agitaci贸n: Amplify the emotional and practical consequences of this problem.
    3. Soluci贸n: Highlight how the product '{product}' solves this problem and improves their life.
    4. Acci贸n: Adapt the provided call-to-action '{action}' and craft it in a way that motivates the reader to take immediate steps, using compelling language that encourages them to act.
    Write a cohesive, engaging, and emotionally resonant narrative tailored to connect with the {target_audience}.
    """
    response = model.generate_content([full_prompt])
    if response and response.parts:
        text = response.parts[0].text
        return text.strip()
    else:
        raise ValueError("Lo sentimos, intenta con una combinaci贸n diferente de entradas.")

# Funci贸n para obtener respuesta del modelo Gemini (A.D.P.)
def get_adp_response(target_audience, product, action, mood, length):
    model = genai.GenerativeModel("gemini-1.5-flash")
    full_prompt = f"""
    You are a skilled copywriter and storyteller. Create a creative and persuasive story in Spanish following the A.D.P. formula (Antes, Despu茅s, Puente). 
    Do not explicitly label or explain each section (Antes, Despu茅s, Puente). Instead, weave these elements naturally into a cohesive, flowing narrative that emotionally connects with the {target_audience}.
    The story should always be written in the second person (using 't煤') and should have unexpected twists to engage the {target_audience}. 
    The story should have {length} words, with a {mood} tone. Here are the details:

    1. Antes: Describe the current problem and frustrations that you {target_audience} are facing. Create an immersive situation where the reader can recognize themselves.
    2. Despu茅s: Paint a desired scenario where the problem of {target_audience} is solved and the benefits are clearly evident. Use a surprising twist to show how life can change.
    3. Puente: Introduce your solution '{product}' as the logical bridge between your frustration and the desired result. Make sure to emphasize the transformation you鈥檒l experience if you take action '{action}'. Conclude with a compelling call to action '{action}' inviting the reader to take immediate steps to improve their situation.
    Ensure that the story has a creative flow with unexpected turns and keeps the reader hooked, motivating them to act at the end.
    Write a cohesive, engaging, and emotionally resonant narrative tailored to connect deeply with you, the {target_audience}.
    """
    response = model.generate_content([full_prompt])
    if response and response.parts:
        text = response.parts[0].text
        return text.strip()
    else:
        raise ValueError("Lo sentimos, intenta con una combinaci贸n diferente de entradas.")

# Funci贸n para obtener respuesta del modelo Gemini (G.H.A.)
def get_gha_response(target_audience, product, action, mood, length, story_topic):
    model = genai.GenerativeModel("gemini-1.5-flash")
    full_prompt = f"""
    You are a skilled copywriter and storyteller. Create a persuasive story in Spanish following the G.H.A. formula (Gancho, Historia, Acci贸n). 
    Do not explicitly label or explain each section (Gancho, Historia, Acci贸n). Instead, weave these elements naturally into a cohesive, flowing narrative that emotionally connects with the {target_audience}.
    The story should have {length} words, with a {mood} tone. Here are the details:
    1. Gancho: Start with an attention-grabbing hook that immediately captures the {target_audience}'s interest. It can be a question, a surprising fact, or a statement that challenges their beliefs.
    2. Historia: Tell an engaging and emotional story about {story_topic}. This can be personal or fictional, but should always have a meaningful lesson or takeaway for the reader.
    3. Acci贸n: Conclude with a strong call-to-action, motivating the reader to take a specific step based on the insights from the story. Make the call-to-action compelling and clear, prompting immediate action.
    Write a cohesive, engaging, and emotionally resonant narrative tailored to connect with the {target_audience}.
    """
    response = model.generate_content([full_prompt])
    if response and response.parts:
        text = response.parts[0].text
        return text.strip()
    else:
        raise ValueError("Lo sentimos, intenta con una combinaci贸n diferente de entradas.")

# Inicializar la aplicaci贸n Streamlit
st.set_page_config(page_title="Generador de Historias", page_icon=":pencil:", layout="wide")

st.markdown("<h1 style='text-align: center;'>Generador de Historias</h1>", unsafe_allow_html=True)
st.markdown("<h3 style='text-align: center;'>Crea historias persuasivas con inteligencia artificial, dise帽adas para conectar emocionalmente con tu audiencia.</h3>", unsafe_allow_html=True)

# Crear el selector para elegir la f贸rmula
formula = st.radio("Selecciona la f贸rmula para generar tu historia:", ["P.A.S.A.", "A.D.P.", "G.H.A."])

# Crear las columnas para el dise帽o (40% para la izquierda, 60% para la derecha)
col1, col2 = st.columns([2, 3])

# Entradas del usuario en la columna izquierda (col1)
with col1:
    target_audience = st.text_input("P煤blico objetivo", placeholder="驴A qui茅n est谩 dirigido tu mensaje?")
    product = st.text_input("Producto/Servicio", placeholder="驴Qu茅 est谩s ofreciendo?")
    action = st.text_area("Llamado a la acci贸n", placeholder="驴Qu茅 acci贸n espec铆fica debe tomar tu audiencia?")

    # Personalizaci贸n adicional
    with st.expander("Personaliza tu historia"):
        mood = st.selectbox("Tono de la historia:", ["Emocional", "Triste", "Feliz", "Horror", "Comedia", "Rom谩ntico"])
        length = st.slider("Longitud de la historia (palabras):", min_value=50, max_value=200, value=150, step=10)

    if formula == "G.H.A.":
        story_topic = st.text_area("De qu茅 quieres que trate la historia", placeholder="Explica si hay algo espec铆fico sobre lo que te gustar铆a contar (puede ser una vivencia personal, pel铆cula, cuento, personaje ficticio, etc.).")

    # Bot贸n para generar contenido
    submit = st.button("Generar mi historia")

# Mostrar el contenido generado en la columna derecha (col2)
with col2:
    if submit:
        if target_audience and product and action:
            try:
                if formula == "P.A.S.A.":
                    response = get_pasa_response(target_audience, product, action, mood, length)
                elif formula == "A.D.P.":
                    response = get_adp_response(target_audience, product, action, mood, length)
                elif formula == "G.H.A.":
                    if story_topic:
                        response = get_gha_response(target_audience, product, action, mood, length, story_topic)
                    else:
                        st.error("Por favor, completa todos los campos requeridos para la f贸rmula G.H.A.")
                        response = ""
                
                if response:
                    st.subheader("Historia generada:")
                    st.write(response)
            except ValueError as e:
                st.error(f"Error: {str(e)}")
        else:
            st.error("Por favor, completa todos los campos requeridos (P煤blico objetivo, Producto y Acci贸n).")