🎨

App Multimodal

👨‍🍳👑 Master Chef⏱️ 50 minutos

📋 Prerequisitos sugeridos

  • Python
  • Streamlit

Lo que vas a construir

Una aplicacion web que entiende texto, imagenes, y audio. Todo en una sola interfaz con IA.

Escribes una pregunta, subes una foto, o grabas un audio, y la IA entiende y responde. Puedes preguntarle "que hay en esta imagen?", subir un PDF y pedir un resumen, o grabar tu voz para hacer preguntas.

Al terminar tendras una app con Streamlit que usa Gemini para procesar multiples tipos de entrada. Con historial de conversacion y una interfaz limpia que puedes desplegar en minutos.


El prompt para empezar

Crea una app Streamlit multimodal que:

  1. Acepte texto, imagen o audio como input
  2. Use Gemini para procesar todos los tipos
  3. Muestre respuesta formateada
  4. Guarde historial de conversacion

Lo que la IA creará

import streamlit as st
import google.generativeai as genai
from PIL import Image
import io
import os

genai.configure(api_key=os.environ["GEMINI_API_KEY"])
model = genai.GenerativeModel("gemini-1.5-flash")

st.set_page_config(page_title="App Multimodal", page_icon="🎨")
st.title("🎨 App Multimodal con IA")

# Historial en session state
if "messages" not in st.session_state:
    st.session_state.messages = []

# Mostrar historial
for msg in st.session_state.messages:
    with st.chat_message(msg["role"]):
        st.write(msg["content"])
        if msg.get("image"):
            st.image(msg["image"], width=300)

# Tabs para diferentes inputs
tab1, tab2, tab3 = st.tabs(["💬 Texto", "🖼️ Imagen", "🎤 Audio"])

with tab1:
    text_input = st.text_area("Escribe tu mensaje:")
    if st.button("Enviar texto"):
        if text_input:
            st.session_state.messages.append({
                "role": "user",
                "content": text_input
            })
            response = model.generate_content(text_input)
            st.session_state.messages.append({
                "role": "assistant",
                "content": response.text
            })
            st.rerun()

with tab2:
    uploaded_image = st.file_uploader(
        "Sube una imagen:",
        type=["png", "jpg", "jpeg"]
    )
    image_prompt = st.text_input("¿Qué quieres saber de la imagen?")

    if st.button("Analizar imagen"):
        if uploaded_image and image_prompt:
            image = Image.open(uploaded_image)
            st.session_state.messages.append({
                "role": "user",
                "content": image_prompt,
                "image": image
            })

            response = model.generate_content([image_prompt, image])
            st.session_state.messages.append({
                "role": "assistant",
                "content": response.text
            })
            st.rerun()

with tab3:
    audio_file = st.file_uploader(
        "Sube un audio:",
        type=["mp3", "wav", "m4a"]
    )
    if st.button("Transcribir"):
        if audio_file:
            st.info("Transcripción con Whisper/Gemini próximamente")

# Botón limpiar
if st.button("🗑️ Limpiar historial"):
    st.session_state.messages = []
    st.rerun()

Ejecutar

pip install streamlit google-generativeai pillow
streamlit run app.py

Siguiente nivel

Fine-tuning de Modelo