gusdelact commited on
Commit
bdf087d
1 Parent(s): f9bc25c

Gradio UI para RAG

Browse files
Files changed (1) hide show
  1. app.py +96 -0
app.py ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from langchain_community.document_loaders import PyPDFLoader
3
+ from langchain.text_splitter import CharacterTextSplitter
4
+ from langchain_community.embeddings import BedrockEmbeddings
5
+ from langchain_aws import ChatBedrock
6
+ from langchain_community.vectorstores import Chroma
7
+ from langchain.chains import ConversationalRetrievalChain
8
+ import os
9
+ import zipfile
10
+
11
+
12
+
13
+
14
+ def descomprimir_archivo_zip(ruta_zip, ruta_destino):
15
+ """
16
+ Descomprime un archivo ZIP en la ruta de destino especificada.
17
+
18
+ :param ruta_zip: Ruta del archivo ZIP a descomprimir.
19
+ :param ruta_destino: Directorio donde se descomprimirá el archivo.
20
+ """
21
+ # Verificar si la ruta de destino existe, si no, crearla
22
+ if not os.path.exists(ruta_destino):
23
+ os.makedirs(ruta_destino)
24
+
25
+ # Abrir el archivo ZIP
26
+ with zipfile.ZipFile(ruta_zip, 'r') as zip_ref:
27
+ # Extraer todos los archivos en la ruta de destino
28
+ zip_ref.extractall(ruta_destino)
29
+ print(f'Archivos extraídos en: {ruta_destino}')
30
+
31
+
32
+ def cargar_base_datos(directorio_data,embedder):
33
+ """
34
+ Carga una base de datos en el directorio especificado usando Chroma.
35
+
36
+ :param directorio_data: Ruta del directorio donde se encuentra la base de datos.
37
+ """
38
+ # Verificar si la ruta del directorio de datos existe
39
+ if not os.path.exists(directorio_data):
40
+ raise FileNotFoundError(f'El directorio {directorio_data} no existe.')
41
+
42
+ # Cargar la base de datos utilizando Chroma
43
+ vectorstore = Chroma(persist_directory =directorio_data,embedding_function=embedder)
44
+
45
+ print(f'Base de datos cargada desde: {directorio_data}')
46
+ return vectorstore
47
+
48
+
49
+
50
+
51
+
52
+ #Inicializar LLM y Embedding de Amazon BedRock
53
+ def initLLM():
54
+ return ChatBedrock(model_id="anthropic.claude-3-sonnet-20240229-v1:0")
55
+ def initEmbedder():
56
+ return BedrockEmbeddings(model_id='amazon.titan-embed-text-v1')
57
+
58
+
59
+
60
+ # Función para manejar el chat
61
+ def handle_chat(message, history):
62
+ # Ejemplo sencillo de respuesta de chat
63
+ print(chromaDB)
64
+ pdf_qa=ConversationalRetrievalChain.from_llm(llm=initLLM(),
65
+ retriever=chromaDB.as_retriever(search_kwargs={'k':10}),
66
+ verbose=True)
67
+ chat_history = []
68
+ resultado=pdf_qa({"question":message,"chat_history": chat_history})
69
+ return resultado["answer"]
70
+
71
+
72
+ # Definir la interfaz de Gradio
73
+ with gr.Blocks() as demo:
74
+ # with gr.Column():
75
+ # # Elemento para subir archivos
76
+ # pdf_upload =gr.UploadButton("📁 Upload PDF", file_types=[".pdf"])
77
+ # pdf_upload.upload(fn=handle_pdf_upload,inputs=pdf_upload)
78
+ with gr.Column():
79
+ # Elementos para el chat
80
+ chatbot = gr.ChatInterface(fn=handle_chat, undo_btn=None,clear_btn=None,retry_btn=None)
81
+
82
+
83
+
84
+ # Ejecutar la aplicación
85
+ if __name__ == "__main__":
86
+ bedrock_llm=initLLM()
87
+ bedrock_embedder=initEmbedder()
88
+ ruta_zip = './data.zip'
89
+ ruta_destino = '.'
90
+ print("Extrayendo base vectorial")
91
+ descomprimir_archivo_zip(ruta_zip, ruta_destino)
92
+ directorio_data = 'data' # Ruta del directorio de datos
93
+ chromaDB = cargar_base_datos(directorio_data,bedrock_embedder)
94
+ demo.launch()
95
+
96
+