File size: 4,208 Bytes
e5dc2b1
392e9e0
 
b2a494b
6ad76d6
 
b2a494b
 
9e12e9c
6ad76d6
 
b2a494b
6ad76d6
b2a494b
 
 
6ad76d6
b2a494b
 
 
 
 
 
 
 
6ad76d6
b79cdd4
b2a494b
 
6ad76d6
b2a494b
 
 
 
 
 
 
6ad76d6
b2a494b
 
 
 
6ad76d6
b2a494b
 
 
6ad76d6
e4ad9d2
6ad76d6
 
5ef9654
6ad76d6
b2a494b
 
7e97ebd
6ad76d6
 
951f385
6ad76d6
7e97ebd
 
 
 
6ad76d6
7e97ebd
b2a494b
6ad76d6
b2a494b
 
6ad76d6
b2a494b
 
 
 
 
 
 
9719344
2e7c9a7
992a0a7
e5dc2b1
15fed86
992a0a7
e5dc2b1
992a0a7
15fed86
e5dc2b1
992a0a7
e5dc2b1
15fed86
992a0a7
 
 
 
 
 
 
 
 
b19e79b
992a0a7
2e7c9a7
992a0a7
2e7c9a7
 
 
992a0a7
 
 
 
2e7c9a7
611a5f2
2e7c9a7
992a0a7
 
 
 
 
 
 
 
 
 
2e7c9a7
992a0a7
2e7c9a7
b2a494b
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
import pandas as pd
from langchain import RAGChain
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain_community.llms import HuggingFaceHub
from langchain.rag import RagIndex
import streamlit as st
import sys
import re
from transformers import LlamaForCausalLM, AutoTokenizer
from huggingface_hub import login

# Inicialización de Hugging Face
huggingface_token = st.secrets["SECRET"]
login(huggingface_token)

# Cargar archivo CSV
uploaded_file = st.file_uploader("Sube un archivo CSV con la columna 'job_title':", type=["csv"])

if uploaded_file:
    df = pd.read_csv(uploaded_file)
    st.dataframe(df)

    query = "aspiring human resources specialist"

    # Modelo LLaMA
    model_name = "meta-llama/Llama-3.2-1B"
    modelo = LlamaForCausalLM.from_pretrained(model_name)

    # Tokenizador
    try:
        tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=True)
        print("Tokenizador cargado con éxito.")
    except Exception as e:
        print(f"Error al cargar el tokenizador: {e}")
        sys.exit(1)

    # Prompt para cadena LLM
    prompt_template = PromptTemplate(
        input_variables=["query", "texto"],
        template=(
            "Calcular el cosine similarity score entre '{query}' y '{texto}'. "
            "Responde solo con un número entre 0 y 1 en formato float, sin texto adicional."
        )
    )

    # Cargar índice RAG
    rag_index = RagIndex.from_huggingface("meta-llama/Llama-3.2-1B")

    # Crear cadena RAG
    llm = HuggingFaceHub(repo_id=model_name, huggingfacehub_api_token=huggingface_token, model_kwargs={"max_new_tokens": 3})
    rag_chain = RAGChain(llm=llm, index=rag_index, prompt=prompt_template)

    def calcular_similitud(texto):
        prompt = {"query": query, "texto": texto}
        resultado = rag_chain.run(prompt)
        print("Resultado del modelo:", resultado)
        
        match = re.search(r"\b(0\.\d+|1\.0)\b", resultado)
        if match:
            score = float(match.group(1))
            return score
        else:
            st.error(f"No se pudo extraer el puntaje de similitud: {resultado}")
            return None

    # Calcular similitud para cada job title
    df['Score'] = df['job_title'].apply(calcular_similitud)

    # Reportar resultados
    st.write(df)
else:
    st.write("No se ha subido un archivo")

'''
import pandas as pd
from langchain.chains import LLMChain
from langchain_huggingface import HuggingFacePipeline
from transformers import LlamaForCausalLM, AutoTokenizer
from langchain.llms import HuggingFaceHub
from huggingface_hub import login
import streamlit as st
import sys

# Inicialización de Hugging Face
huggingface_token = st.secrets["SECRET"]
login(huggingface_token)

# Cargar el archivo CSV
uploaded_file = st.file_uploader("Sube un archivo CSV con la columna 'job_title':", type=["csv"])

if uploaded_file:
    df = pd.read_csv(uploaded_file)
    st.dataframe(df)

    # Ingreso del query
    query = "aspiring human resources specialist"

    # Crear un modelo LLaMA
    model_name = "meta-llama/Llama-3.2-1B"  # Usa un nombre de modelo válido en Hugging Face
    modelo = LlamaForCausalLM.from_pretrained(model_name)

    try:
        # Usar AutoTokenizer para manejar automáticamente el tokenizador adecuado
        tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=True)
        print("Tokenizador cargado con éxito.")
    except Exception as e:
        print(f"Error al cargar el tokenizador: {e}")
        sys.exit(1)

    # Crear una cadena LLM con LangChain usando HuggingFaceHub
    llm = HuggingFaceHub(repo_id=model_name, model_kwargs={"device_map": "auto"}, huggingfacehub_api_token=huggingface_token)
    chain = LLMChain(llm=llm)

    def calcular_similitud(texto):
        prompt = f"Calcular el cosine similarity score entre '{query}' y '{texto}'. Responde con el score como un valor numérico entre 0 y 1."
        resultado = chain.run(prompt)
        return float(resultado)

    # Calcular la similitud para cada job title
    df['Score'] = df['job_title'].apply(calcular_similitud)

    # Reportar los resultados
    st.write(df)
else:
    st.write("No se ha subido un archivo")
'''