File size: 3,675 Bytes
91a0d7e
a8fd769
 
 
d51e47b
 
 
a8fd769
d51e47b
1ff0df4
 
 
a8fd769
1ff0df4
 
 
 
 
 
a8fd769
1ff0df4
 
 
a8fd769
 
 
1ff0df4
d51e47b
1ff0df4
 
d51e47b
1ff0df4
a8fd769
 
bef3dc5
1ff0df4
a8fd769
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1ff0df4
 
a8fd769
 
1ff0df4
 
 
 
 
 
 
 
 
 
a8fd769
1ff0df4
a8fd769
60ce54c
1ff0df4
a8fd769
1ff0df4
a8fd769
1ff0df4
a8fd769
 
 
 
 
1ff0df4
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
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
def get_gemini_response(target_audience, product, text_type, length, language, mood, model_choice):
    model = genai.GenerativeModel(model_choice)
    
    # Crear el prompt completo basado en los campos del frontend
    full_prompt = f"""
    Eres un escritor creativo famoso. Crea un {length} {text_type} en {language}. 
    El {text_type} debe ser {mood}, dirigido a este público objetivo: {target_audience}, y relacionado con el producto: "{product}".
    Asegúrate de que contenga elementos realistas y emocionales.
    """
    
    response = model.generate_content([full_prompt])

    # Comprobar si la respuesta es válida y devolver el texto
    if response and response.parts:
        return response.parts[0].text
    else:
        raise ValueError("Lo sentimos, intenta con una combinación diferente de entradas.")

# Inicializar la aplicación Streamlit
st.set_page_config(page_title="Poetic Vision", page_icon=":pencil:", layout="wide")  # Configurar el diseño en ancho

# Componentes principales de la UI
st.markdown("<h1 style='text-align: center;'>VisionTales</h1>", unsafe_allow_html=True)
st.markdown("<h3 style='text-align: center;'>Convierte tus ideas en historias inolvidables.</h3>", unsafe_allow_html=True)

# Añadir CSS personalizado para el botón
st.markdown("""
    <style>
    div.stButton > button {
        background-color: #FFCC00; /* Color llamativo */
        color: black;  /* Texto en negro */
        width: 90%;
        height: 60px;
        font-weight: bold;
        font-size: 22px; /* Tamaño más grande */
        text-transform: uppercase; /* Texto en mayúsculas */
        border: 1px solid #000000; /* Borde negro de 1px */
        border-radius: 8px;
        display: block;
        margin: 0 auto;  /* Centramos el botón */
    }
    div.stButton > button:hover {
        background-color: #FFD700; /* Color al pasar el mouse */
        color: black;  /* Texto sigue en negro */
    }
    </style>
    """, unsafe_allow_html=True)

# Crear dos columnas para el diseño (40% y 60%)
col1, col2 = st.columns([2, 3])  # 2 + 3 = 5 partes en total

with col1:
    # Entradas del usuario
    target_audience = st.text_input("Público objetivo:", placeholder="Especifica tu público aquí...")
    product = st.text_input("Producto:", placeholder="Especifica el producto aquí...")
    text_type = st.selectbox("Tipo de texto:", ["Historia", "Shayari", "Sher", "Poema", "Cita"])
    length = st.selectbox("Longitud del texto:", ["Corto", "Largo"])
    language = st.selectbox("Idioma del texto:", ["Español", "Inglés"])
    mood = st.selectbox("Tono del Texto:", ["Emocional", "Triste", "Feliz", "Horror", "Comedia", "Romántico"])
    
    # Opción para seleccionar el modelo
    model_choice = st.selectbox("Selecciona el modelo:", ["gemini-1.5-flash", "gemini-1.5-pro"], index=0)

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

# Manejo del clic en el botón
if submit:
    if target_audience and product:  # Verificar que se haya proporcionado el público objetivo y el producto
        try:
            response = get_gemini_response(target_audience, product, text_type, length, language, mood, model_choice)
            col2.subheader("Contenido generado:")
            col2.write(response)
        except ValueError as e:
            col2.error(f"Error: {str(e)}")
    else:
        col2.error("Por favor, proporciona el público objetivo y el producto.")