File size: 4,211 Bytes
02cfe6e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2da7eee
02cfe6e
 
3ed3728
 
8925a22
ea827e7
02cfe6e
4208327
02cfe6e
 
ba80871
02cfe6e
 
 
 
 
 
 
 
 
d1ed8a8
7ade141
02cfe6e
 
 
 
 
efd92c7
02cfe6e
 
 
 
 
593b5e0
 
 
 
 
 
 
e8a3dce
d91e81c
 
e8a3dce
37f711a
d91e81c
e8a3dce
 
d91e81c
26ebe5f
d91e81c
 
26ebe5f
e8a3dce
593b5e0
 
 
 
 
 
 
 
ef9fd01
02cfe6e
6a3fbff
02cfe6e
f865812
6a3fbff
5e7b323
02cfe6e
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
89
90
91
92
93
"""
Este script realiza las siguientes tareas:
1. Carga archivos desde un directorio especificado utilizando la clase `Loader` del m贸dulo `preprocess`.
2. Procesa los archivos mediante limpieza de texto y divisi贸n en fragmentos.
3. Genera representaciones vectoriales de los textos utilizando `sentence-transformers`.
4. Almacena los vectores en una base de datos Chroma para su posterior recuperaci贸n.
5. Inicializa un modelo y ejecuta una interfaz para interactuar con los datos procesados.

M贸dulos utilizados:
- `preprocess`: Contiene la clase `Loader` para la carga y preprocesamiento de documentos.
- `vdb`: Se asume que gestiona la base de datos vectorial.
- `model_load`: M贸dulo para cargar el modelo de machine learning.
- `st`: Se asume que proporciona la interfaz de usuario.

Estructura del c贸digo:
1. Define el directorio de los archivos a procesar.
2. Carga los archivos y los procesa si el n煤mero de archivos es menor a 2.
3. Si hay m煤ltiples archivos, los procesa en un bucle y concatena los fragmentos.
4. Genera embeddings utilizando `sentence-transformers/all-MiniLM-L12-v2`.
5. Almacena los embeddings en ChromaDB y configura un recuperador basado en similitud.
6. Carga el modelo de machine learning.
7. Inicia la interfaz de usuario..

"""
#from langchain.vectorstores import Chroma
from langchain_chroma import Chroma
from tqdm.auto import tqdm
#from chromadb.utils import embedding_functions
from src.preprocess import Loader
from src.vdb import EmbeddingGen
import src.model_load
import src.st
import os

if __name__=="__main__":
    # Definici贸n de directorio
    archivo = [r"data/Calculo_Trascendentes_Tempranas_Zill_4t.pdf"]
    
    # Carga de archivos y procesamiento de texto
    if len(archivo) < 2:
        Load = Loader(archivo[0])
        documentos = Load.load_docs()
        textos_limpios = [Loader.limpiar_texto(texto=doc) for doc in documentos]
        textos = Loader.splitter(texto=textos_limpios, chunk_size=500, chunk_overlap=50)
    else:
        textos = []
        for i in range(len(archivo)):
            Load = Loader(archivo)
            documentos = Load.load_docs()
            textos_limpios = [Load.limpiar_texto(texto=doc) for doc in documentos]
            chunks = Load.splitter(texto=textos_limpios, chunk_size=500, chunk_overlap=50)
            textos.extend(chunks)
    
    # Generaci贸n de embeddings y almacenamiento en base de datos ChromaDB
    embeddings = EmbeddingGen("sentence-transformers/all-MiniLM-L12-v2")
    # Define la ruta donde deseas guardar el vector store
    persist_directory = './vectorstore_data'
    
    # Verifica si la carpeta de persistencia existe, si no la crea
    if not os.path.exists(persist_directory):
        os.makedirs(persist_directory)
    
        # Funci贸n para procesar documentos por lotes
    def process_in_batches(documents, batch_size):
        """Genera embeddings en lotes para evitar problemas de memoria."""
        for i in range(0, len(documents), batch_size):
            batch = [doc.page_content for doc in documents[i:i + batch_size]]
            embeddings_batch = embeddings.embed_documents(batch)  # Cambi茅 encode por embed_documents
            yield embeddings_batch
    vectorstore = Chroma(persist_directory=persist_directory)
    # Uso de la funci贸n con tqdm
    for embeddings_batch in tqdm(process_in_batches(textos, batch_size=16), desc="Procesando lotes de documentos"):
        # Procesar embeddings_batch aqu铆
        # Aqu铆 se asume que tienes alg煤n m茅todo para agregar estos embeddings al vectorstore
        vectorstore.add_documents(embeddings_batch)

    
    print("Vectorizado terminado")
    
    # Convierte el vector store en un recuperador (retriever) de similaridad
    retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 3})
    
    # Guarda el vector store para que persista entre ejecuciones
    vectorstore.persist()
    print("Vectorizado terminado")
    retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 3})
    print("Carga del modelo")
    # Carga del modelo y ejecuci贸n de la interfaz
    src.model_load.load_model()
    print("Lanzando interfaz")
    src.st.interfaz()