JaphetHernandez's picture
Update app.py
fcf77ef verified
import streamlit as st
import pandas as pd
import torch
from langchain import LLMChain, PromptTemplate
from langchain.llms import HuggingFaceHub
from sentence_transformers import SentenceTransformer, util
# Configuraci贸n de la app
st.title("Subida de archivo CSV e interacci贸n con Llama 3.1")
# Subir archivo CSV
uploaded_file = st.file_uploader("Sube un archivo CSV", type=["csv"])
if uploaded_file is not None:
# Leer el archivo CSV en un DataFrame
df = pd.read_csv(uploaded_file)
# Mostrar una vista previa del archivo
st.write("Vista previa del archivo CSV:")
st.write(df.head())
# Especificar la columna de t铆tulos de trabajo
job_title_column = st.selectbox("Selecciona la columna de t铆tulos de trabajo", df.columns)
# Definir el prompt
prompt = "Toma el query 'aspiring human resources specialist' y calcula el cosine similarity score de cada job_title. Crea una nueva columna 'Score' con dichos valores."
# Procesar el prompt con Langchain cuando se presione el bot贸n
if st.button("Calcular Similitud"):
# Paso 1: Usar Llama para generar texto o aclaraciones
prompt_template = PromptTemplate(
template="El usuario ha subido un CSV con la columna de t铆tulos de trabajo. {user_prompt}",
input_variables=["user_prompt"]
)
# Instancia del modelo Llama en HuggingFace
hf_token = st.secrets["HUGGINGFACEHUB_API_TOKEN"]
llm = HuggingFaceHub(repo_id="meta-llama/LLaMA-3.1-8B-Instruct", huggingfacehub_api_token=hf_token)
llm_chain = LLMChain(llm=llm, prompt=prompt_template)
# Ejecutar Llama
llama_response = llm_chain.run({
"user_prompt": prompt
})
# Mostrar la respuesta generada por Llama
st.write("Respuesta generada por Llama:")
st.write(llama_response)
# Paso 2: Usar Sentence Transformers para calcular la similitud de coseno
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
# Query que queremos comparar
query = "aspiring human resources specialist"
# Obtener embeddings del query
query_embedding = model.encode(query, convert_to_tensor=True)
# Obtener embeddings de los t铆tulos de trabajo
job_titles = df[job_title_column].astype(str).tolist()
job_title_embeddings = model.encode(job_titles, convert_to_tensor=True)
# Calcular la similitud de coseno
cosine_scores = util.pytorch_cos_sim(query_embedding, job_title_embeddings)
# Agregar los puntajes de similitud al DataFrame original
df['Score'] = cosine_scores.squeeze().tolist()
# Mostrar el DataFrame actualizado
st.write("DataFrame con los puntajes de similitud:")
st.write(df)
else:
st.write("Por favor, sube un archivo CSV.")