GeminiChatbot / app.py
Osc17-2003's picture
Update app.py
2f25014 verified
import os
os.system("pip install google-generativeai")
os.system("pip install streamlit")
os.system("pip install PyMuPDF")
os.system("pip install python-dotenv")
import streamlit as st
import os
import google.generativeai as genai
from dotenv import load_dotenv
import fitz # PyMuPDF para leer PDFs
# Cargar variables de entorno
load_dotenv()
# Obtener API Key de Gemini
GEMINI_API_KEY = os.getenv("AIzaSyBtzGXVrrY5_y99zVR-sSlZ_KEJI7HhuKs")
# Configurar la API de Gemini
genai.configure(api_key="AIzaSyBtzGXVrrY5_y99zVR-sSlZ_KEJI7HhuKs")
# Modelo de Gemini
MODEL_NAME = "gemini-2.0-flash-thinking-exp-01-21"
# Función para generar contenido con Gemini
def generate_response(user_input):
try:
model = genai.GenerativeModel(MODEL_NAME)
response = model.generate_content(user_input)
return response.text if response else "No se recibió respuesta."
except Exception as e:
return f"Error en la generación de contenido: {str(e)}"
# Función para extraer texto de un PDF
def extract_text_from_pdf(pdf_file):
try:
doc = fitz.open(stream=pdf_file.read(), filetype="pdf")
text = "\n".join([page.get_text() for page in doc])
return text if text else "No se pudo extraer texto del PDF."
except Exception as e:
return f"Error al leer el PDF: {str(e)}"
# Interfaz con Streamlit
st.set_page_config(page_title="Chat AI", layout="centered")
st.title("Chat AI by Oscar")
# Entrada del usuario (texto manual)
user_input = st.text_area("Escribe algo:", "")
# Opción para subir un archivo PDF
uploaded_file = st.file_uploader("O sube un PDF", type=["pdf"])
# Botón para generar respuesta
if st.button("Generar respuesta"):
if uploaded_file:
st.write("⏳ Extrayendo texto del PDF...")
extracted_text = extract_text_from_pdf(uploaded_file)
st.text_area("Texto extraído:", extracted_text, height=200)
user_input = extracted_text # Usar el texto extraído para la consulta
if user_input:
st.write("Procesando con Gemini...")
response = generate_response(user_input)
st.subheader("Respuesta de Gemini:")
st.write(response)
else:
st.warning("Ingresa un texto o sube un PDF antes de continuar.")