File size: 2,354 Bytes
bec3852
1860099
bec3852
4ddd510
325b992
bec3852
c478c9d
581c82f
4ddd510
bec3852
 
7db4d16
8517578
d751e33
8517578
4ddd510
565090b
88f9f20
 
4ddd510
88f9f20
bec3852
 
 
 
 
 
bb4b951
1860099
bb4b951
a7f4c99
bec3852
 
 
 
 
 
 
 
 
 
 
4ddd510
565090b
4ddd510
565090b
 
 
 
 
bec3852
4ddd510
c478c9d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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}")