JaphetHernandez's picture
Update app.py
88f9f20 verified
raw
history blame
2.35 kB
import torch
import pandas as pd
import streamlit as st
from transformers import AutoModelForCausalLM, AutoTokenizer
from langchain.llms import HuggingFacePipeline
from huggingface_hub import login
from pydantic import BaseModel, model_validator
# Token secreto de Hugging Face
huggingface_token = st.secrets["HUGGINGFACEHUB_API_TOKEN"]
login(huggingface_token)
# Cargar el modelo Llama 3.1
model_name = "meta-llama/llama-3.1-8b-instruct"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
pipe = pipeline("feature-extraction", model=model, tokenizer=tokenizer)
# Usar transformers pipeline para cargar el modelo y tokenizer
llm_pipeline = HuggingFacePipeline(pipeline=pipe)
# Interfaz de Streamlit
st.title("Cosine Similarity con Llama 3.1")
# Subida de archivo CSV
uploaded_file = st.file_uploader("Sube un archivo CSV", type=["csv"])
if uploaded_file is not None:
# Leer el archivo CSV
df = pd.read_csv(uploaded_file)
# Solicitar un query al usuario
query = st.text_input("Por favor ingresa tu consulta:")
if query:
# Crear el prompt para calcular la similitud del coseno
prompt = f"""
Con la columna 'job_title' del csv, tiene que calcular los cosine similarity score entre cada registro y el query,
tiene que crear una columna nueva 'Score' con dichos scores y adem谩s tiene que ordenar los registros de mayor a menor valor de 'Score'.
El query es: {query}
"""
# Llamar al modelo con el prompt
try:
response = llm_pipeline(prompt)
# Mostrar la respuesta del modelo
st.write("Respuesta del modelo:", response)
except Exception as e:
st.error(f"Ocurri贸 un error al procesar el modelo: {str(e)}")
# Modelo de validaci贸n de datos con Pydantic
class ConsultaModelo(BaseModel):
query: str
@model_validator(mode='before')
def validar_query(cls, values):
query = values.get('query')
if not query:
raise ValueError("El query no puede estar vac铆o.")
return values
# Ejemplo de uso del modelo de validaci贸n
if query:
try:
valid_query = ConsultaModelo(query=query)
st.success("Consulta v谩lida.")
except ValueError as e:
st.error(f"Error de validaci贸n: {e}")