File size: 4,240 Bytes
f5f3ef7
 
 
 
2f88d07
f5f3ef7
c25b879
f5f3ef7
 
c25b879
f5f3ef7
 
c25b879
2f88d07
5648b1a
 
 
2f88d07
 
0a0249b
c25b879
dd58045
 
54d2171
 
c21059d
2f88d07
1be58a4
2f88d07
54d2171
ebf9ab4
 
2f88d07
ebf9ab4
a41074a
 
 
 
 
4371e3a
99716c8
 
 
 
 
 
a41074a
 
99716c8
dd58045
99716c8
dd58045
4afdcbe
c25b879
 
f5f3ef7
c25b879
 
f5f3ef7
c25b879
24967bd
c25b879
 
 
 
80e5215
 
 
 
1be58a4
80e5215
0d4afba
80e5215
2f88d07
 
4d5b062
0d4afba
2f88d07
 
 
 
 
0c66df4
 
2f88d07
f23090a
9acbe00
 
 
f23090a
0d4afba
80e5215
 
 
4d5b062
a96b2b7
1be58a4
4d5b062
dd58045
 
 
 
 
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
from dotenv import load_dotenv
import streamlit as st
import os
import google.generativeai as genai
from story_formulas import story_formulas

# Cargar variables de entorno
load_dotenv()

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

# Función para obtener la respuesta del modelo Gemini
def get_gemini_response(input_prompt, formula_type, length, mood, target_audience, cta_type):
    if not input_prompt:
        return "Por favor, escribe un mensaje para generar contenido."
    
    formula = story_formulas[formula_type]
    
    model = genai.GenerativeModel('gemini-2.0-flash')
    full_prompt = f"""
    You are a creative storyteller. Write THREE different {mood} stories in Spanish about "{input_prompt}" using everyday words and natural conversation. 
    Each story should use exactly {length} words.

    Target Audience: {target_audience}
    Call to Action: {cta_type}
    Story Formula: {formula_type}

    {formula["description"]}

    Keep in mind:
    - Write for {target_audience}
    - Use simple, clear language
    - Tell the story in short paragraphs
    - The CTA must be conversational and focus on benefits:
      * Instead of: "Inscríbete al curso de marketing"
      * Use: "¿Quieres aprender a conseguir más clientes? Acompáñanos este jueves..."
      * Instead of: "Reserva tu consulta"
      * Use: "Da el primer paso hacia tu transformación aquí..."
    
    CRITICAL INSTRUCTIONS:
    - Output ONLY the story text
    - DO NOT include any labels like (Problem), (Solution), etc.
    - DO NOT include any structural markers or formula explanations
    - Write as a continuous narrative with natural paragraph breaks
    - The story should flow naturally between sections without any visible structure markers
    - Make the CTA feel like a natural part of the conversation, focusing on what the reader will gain
    - Avoid promotional language in the CTA
    - DO NOT explain or mention the formula parts in the text
    - Separate each story with "---"
    
    Format: Three clean story texts with natural paragraphs, separated by "---", no labels, no explanations.
    """
    response = model.generate_content([full_prompt])
    return response.parts[0].text if response and response.parts else "Error al generar contenido."

# Configurar la aplicación Streamlit
st.set_page_config(page_title="Story Generator", page_icon=":pencil:", layout="wide")

# Título de la app
st.markdown("""
    <h1 style='text-align: center;'>Generador de Historias</h1>
    <h3 style='text-align: center;'>Escribe una idea y la IA creará una historia única.</h3>
""", unsafe_allow_html=True)

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

# Columna izquierda para inputs
# Remove the benefit input field
with col1:
    # Entrada de texto principal
    input_prompt = st.text_area("Escribe de qué quieres que trate la historia:", placeholder="Escribe aquí tu idea...")
    target_audience = st.text_input("Público Objetivo:", placeholder="Ejemplo: Profesionales de 25-35 años...")
    cta_type = st.text_input("Llamado a la acción:", placeholder="Ejemplo: Curso de marketing digital...")
    
    with st.expander("Opciones avanzadas"):
        formula_type = st.selectbox(
            "Fórmula narrativa:",
            options=list(story_formulas.keys()),
            format_func=lambda x: x
        )
        # Remove or comment out this line
        # st.info(story_formulas[formula_type])
        
        length = st.slider("Longitud del texto (palabras):", 
                          min_value=100, 
                          max_value=150, 
                          value=125,
                          step=5)
        mood = st.selectbox("Estado de ánimo:", ["Emocional", "Triste", "Feliz", "Horror", "Comedia", "Romántico"])
    generate_button = st.button("Generar historia")
with col2:
    if generate_button:
        response = get_gemini_response(
            input_prompt, formula_type, length,
            mood, target_audience, cta_type
        )
        stories = response.split("---")
        for i, story in enumerate(stories, 1):
            st.subheader(f"Historia {i}:")
            st.write(story.strip())
            st.divider()