|
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")) |
|
|
|
|
|
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.") |
|
|
|
|
|
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.") |
|
|
|
|
|
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**: Begin with a hook that immediately grabs the attention of the {target_audience}. It could be a provocative question, an unexpected fact, or a statement that challenges their beliefs or assumptions. The goal is to create curiosity and make them want to read more. |
|
|
|
2. **Historia**: Tell a personal or fictional story based on the following story topic: "{story_topic}". Incorporate the following elements seamlessly into the narrative: |
|
- What was the initial situation or challenge the protagonist faced? |
|
- What conflict or problem arose and how did it affect them emotionally? |
|
- How did they feel and what did they learn from that experience? |
|
- What action did they take to resolve the situation or what did they learn in the process? |
|
- What was the outcome or lesson learned that could apply to the {target_audience}'s life? |
|
Make sure the story is engaging and retains the attention of the reader while providing a meaningful takeaway that resonates with their own struggles or aspirations. |
|
|
|
3. **Acci贸n**: Conclude with a natural call to action that invites the reader to take the next step, based on the lesson or transformation in the story. Make this invitation compelling and connected to the emotional shift the reader should experience. Avoid sounding repetitive by using the lesson as the bridge to your call to action, for example: |
|
- "Lo que aprend铆 es que ser honesto en mis historias conecta m谩s con la gente, y t煤 tambi茅n puedes lograrlo si compartes tus experiencias reales. Si quieres saber c贸mo hacerlo, 煤nete a mi clase en vivo hoy a las 05:00 pm." |
|
- "Tras superar mi fracaso, entend铆 que la vulnerabilidad es la clave para ganar confianza, y t煤 tambi茅n puedes mejorar tus relaciones si dejas ver tu humanidad. Si deseas descubrir c贸mo, cont谩ctame ahora y comencemos." |
|
Use the action to empower the reader, showing them that they can take a similar journey and achieve a positive outcome. |
|
|
|
Ensure that the entire narrative flows smoothly, making the call to action feel like a natural next step after the story, rather than a forced conclusion. |
|
""" |
|
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.") |
|
|
|
|
|
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) |
|
|
|
|
|
with st.expander("Selecciona la f贸rmula para generar tu historia"): |
|
formula = st.radio("Selecciona la f贸rmula para generar tu historia:", ["P.A.S.A.", "A.D.P.", "G.H.A."]) |
|
|
|
|
|
col1, col2 = st.columns([2, 3]) |
|
|
|
|
|
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?") |
|
|
|
|
|
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=150, value=100, 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.).") |
|
|
|
|
|
submit = st.button("Generar mi historia") |
|
|
|
|
|
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).") |
|
|