Spaces:
Sleeping
Sleeping
File size: 6,356 Bytes
02cfe6e 2da7eee 02cfe6e 0e05e63 8b9de16 3ed3728 8925a22 ea827e7 02cfe6e 4208327 02cfe6e 56e8868 02cfe6e d1ed8a8 7ade141 02cfe6e efd92c7 02cfe6e 8b9de16 30d0ed3 0e05e63 b026195 ef9fd01 02cfe6e 6a3fbff 02cfe6e f865812 6a3fbff eba589f 04989bd eba589f |
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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
"""
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.embeddings import HuggingFaceEmbeddings
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 streamlit as st
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 = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L12-v2")
persist_directory = "./persist_directory"
db = Chroma(persist_directory=persist_directory, embedding_function=embeddings.embed_documents)
vectorstore = Chroma.from_documents(textos[:10], embeddings, persist_directory="./chroma_db")
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")
# Configuraci贸n de la p谩gina
st.set_page_config(
page_title="MathQA - Asistente de Matem谩ticas",
page_icon="馃М",
layout="centered",
initial_sidebar_state="expanded"
)
# Paleta de colores neutra
primary_color = "#010001"
secondary_color = "#E7E6E7"
background_color = "#FBFBFA"
# Estilos CSS
st.markdown(
f"""
<style>
.stApp {{ background-color: {background_color}; }}
.stTextInput>div>div>input {{
color: {primary_color};
background-color: {secondary_color};
border-radius: 8px;
}}
.stButton>button {{
color: {primary_color};
background-color: {secondary_color};
border-radius: 8px;
transition: all 0.3s;
}}
.history-box {{
border-left: 4px solid {secondary_color};
padding: 1rem;
margin: 1rem 0;
background-color: {secondary_color};
border-radius: 8px;
}}
</style>
""",
unsafe_allow_html=True
)
# Inicializar historial
if 'history' not in st.session_state:
st.session_state.history = []
# Variable auxiliar para gestionar el input
if 'temp_input' not in st.session_state:
st.session_state.temp_input = ""
# T铆tulo de la aplicaci贸n
st.title("馃М MathQA - Asistente de Matem谩ticas")
st.markdown("")
# Widget de entrada con variable auxiliar
user_input = st.text_input(
"Escribe tu pregunta matem谩tica aqu铆:",
value=st.session_state.temp_input,
key="user_input",
placeholder="Ej: 驴Que es una integral?"
)
# Bot贸n de acci贸n
col1, col2, col3 = st.columns([5, 4, 4]) # Columnas vac铆as a los lados para centrar
with col2:
if st.button("Resolver pregunta"):
if user_input: # Accedemos al valor ingresado
# Simular respuesta
mock_answer = src.model_load.ask(user_input, retriever)
# Agregar al historial
st.session_state.history.insert(0, (user_input, mock_answer))
# Limpiar la variable auxiliar
st.session_state.temp_input = ""
# Forzar actualizaci贸n
st.rerun()
# Mostrar historial
if st.session_state.history:
st.markdown("---")
st.subheader("Historial de Consultas")
for idx, (pregunta, respuesta) in enumerate(st.session_state.history):
with st.container():
st.markdown(
f"""
<div class="history-box">
<strong>Pregunta {len(st.session_state.history) - idx}:</strong>
<p>{pregunta}</p>
<strong>Respuesta:</strong>
<p>{respuesta}</p>
</div>
""",
unsafe_allow_html=True
)
# Pie de p谩gina
st.markdown("---")
st.markdown("馃攳 驴Necesitas ayuda con 谩lgebra, c谩lculo o geometr铆a? 隆Estoy aqu铆 para ayudarte!")
|