import google.generativeai as genai import faiss import numpy as np import PyPDF2 from flask import Flask, render_template, request, jsonify from embeddings import get_embedding, chunks # 🔹 Configurar la API de Gemini (Google AI) GEMINI_API_KEY = "AIzaSyD-dXDkZuxNNlDwHJgEQCWbXHyn3iTzcU8" genai.configure(api_key=GEMINI_API_KEY) # 🔹 Crear embeddings de los documentos PDF document_embeddings = np.array([get_embedding(chunk) for chunk in chunks]) # 🔹 Crear índice FAISS dimension = len(document_embeddings[0]) index = faiss.IndexFlatL2(dimension) index.add(document_embeddings) # 🔹 Iniciar la aplicación Flask app = Flask(__name__) # 🔹 Función para responder preguntas usando RAG def answer_question(query): query_embedding = get_embedding(query).reshape(1, -1) _, indices = index.search(query_embedding, k=1) retrieved_docs = [chunks[i] for i in indices[0]] # Crear el prompt prompt = f"Usa solo la siguiente información para responder:\n{retrieved_docs}\n\nPregunta: {query}\nRespuesta:" try: model = genai.GenerativeModel("gemini-pro") response = model.generate_content(prompt, request_options={"timeout": 20}) return response.text, prompt except Exception as e: # El bloque except debe estar alineado con try return f"Error en la API de Gemini: {str(e)}", prompt # 🔹 Ruta principal @app.route("/", methods=["GET", "POST"]) def index(): return render_template("index.html") # 🔹 Ruta para procesar consultas @app.route("/ask", methods=["POST"]) def ask(): query = request.form.get("query") if not query: return jsonify({"response": "Por favor, ingrese una consulta.", "prompt": ""}) response, prompt = answer_question(query) return jsonify({"response": response, "prompt": prompt}) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000, debug=True)