File size: 5,149 Bytes
85ad972
 
05650ec
 
 
 
 
0f7ceaf
 
05650ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0f7ceaf
05650ec
 
 
e5dc2b1
b909630
b2a494b
6ad76d6
aff374c
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
 
 
05650ec
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
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

from llama_index.llms.HuggingFaceLLM import HuggingFaceLLM
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.indexes import RagIndex
from langchain.retrievers import HuggingFaceRetriever

# Inicializar el modelo LLaMA 3.2 desde Hugging Face usando HuggingFaceLLM
llm = HuggingFaceLLM.from_pretrained("meta-llama/Llama-3.2", model_kwargs={"temperature": 0})

# Crear un prompt para la similitud de coseno
prompt_template = (
    "Dado el siguiente par de frases, calcula la similitud de coseno: "
    "Frase 1: '{phrase_1}' y Frase 2: '{phrase_2}'. "
    "Proporciona solo el puntaje de similitud de coseno como un número entre 0 y 1."
)

# Crear el template de prompt
prompt = PromptTemplate.from_template(prompt_template)

# Crear un RAG Index usando LangChain y Hugging Face Retriever
retriever = HuggingFaceRetriever.from_pretrained(
    "facebook/rag-token-nq", index_name="exact"
)
index = Ra


'''
import pandas as pd
from langchain.chains import LLMChain, RAGChain
from langchain.prompts import PromptTemplate
from langchain_community.llms import HuggingFaceHub
from langchain.llms.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")
'''