JaphetHernandez commited on
Commit
ea3c34e
verified
1 Parent(s): 211c09e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -57
app.py CHANGED
@@ -2,78 +2,76 @@ from transformers import AutoModelForCausalLM, AutoTokenizer
2
  import streamlit as st
3
  from huggingface_hub import login
4
  import pandas as pd
 
5
 
6
  # Token Secret of Hugging Face
7
  huggingface_token = st.secrets["HUGGINGFACEHUB_API_TOKEN"]
8
  login(huggingface_token)
9
 
10
- # Cargar el modelo y el tokenizer
11
- model_name = "meta-llama/Llama-3.2-1B-Instruct"
12
- model = AutoModelForCausalLM.from_pretrained(model_name)
13
- tokenizer = AutoTokenizer.from_pretrained(model_name)
14
 
15
- # Asignar el eos_token como pad_token
 
 
 
16
  tokenizer.pad_token = tokenizer.eos_token
17
 
18
- # Control deslizante para ajustar la temperatura
19
- temperature = st.slider("Ajustar temperatura", min_value=0.1, max_value=1.5, value=0.7, step=0.1)
20
-
21
- # Upload CSV file
22
- uploaded_file = st.file_uploader("Upload a CSV file", type=["csv"])
23
 
24
- # Leer el archivo CSV si se ha subido
25
- if uploaded_file is not None:
26
- df = pd.read_csv(uploaded_file)
27
- st.write(df.head()) # Mostrar las primeras filas del dataframe
28
 
29
- # Verificar si la columna 'job_title' est谩 en el dataframe
30
- if 'job_title' in df.columns:
31
- job_titles = df['job_title'].tolist()
32
- else:
33
- st.error("La columna 'job_title' no se encuentra en el archivo CSV.")
34
- job_titles = [] # Asignar una lista vac铆a si la columna no existe
 
 
 
35
 
36
- else:
37
- st.warning("Por favor, sube un archivo CSV.")
38
- job_titles = [] # Asignar una lista vac铆a si no se ha subido un archivo
39
 
40
- # Definir la consulta
41
- query = "aspiring human resources specialist"
42
- st.write("Query:", query)
 
43
 
44
- # Texto de entrada para la generaci贸n
45
- input_text = (
46
- f"You are an AI assistant. You have a list of job titles and a search query.\n"
47
- f"Your task is to rank these job titles by their semantic similarity to the given query. "
48
- f"Please provide the ranking from most relevant to least relevant. "
49
- f"Do not calculate cosine similarity; instead, focus on understanding the semantic relevance of each job title to the query.\n"
50
- f"\n"
51
- f"Format your response like this:\n"
52
- f"1. [Most Relevant Job Title]\n"
53
- f"2. [Second Most Relevant Job Title]\n"
54
- f"...\n"
55
- f"N. [Least Relevant Job Title]\n"
56
- f"\n"
57
- f"Query: \"{query}\"\n"
58
- f"Job Titles: {job_titles}\n"
59
- )
60
 
61
- st.write("Texto de entrada para la generaci贸n:", input_text)
 
 
62
 
63
- # Codificar el texto de entrada
64
- input_ids = tokenizer.encode(input_text, return_tensors='pt')
 
 
 
65
 
66
- # Generar texto utilizando la temperatura ajustada
67
- outputs = model.generate(
68
- input_ids,
69
- max_length=2000,
70
- temperature=temperature, # Usar la temperatura ajustada
71
- top_k=50,
72
- top_p=0.9,
73
- do_sample=True
74
- )
75
 
76
- # Decodificar el texto generado
77
- generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
78
- st.write("Texto generado:", generated_text)
79
 
 
2
  import streamlit as st
3
  from huggingface_hub import login
4
  import pandas as pd
5
+ from threading import Thread
6
 
7
  # Token Secret of Hugging Face
8
  huggingface_token = st.secrets["HUGGINGFACEHUB_API_TOKEN"]
9
  login(huggingface_token)
10
 
 
 
 
 
11
 
12
+ # Cargar el modelo y el tokenizer
13
+ model_id = "meta-llama/Meta-Llama-3.1-8B-Instruct"
14
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
15
+ model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
16
  tokenizer.pad_token = tokenizer.eos_token
17
 
18
+ # Definir longitud m谩xima de tokens
19
+ MAX_INPUT_TOKEN_LENGTH = 4096
 
 
 
20
 
21
+ def generate_response(input_text, temperature=0.7, max_new_tokens=100):
22
+ """Funci贸n de generaci贸n de texto con el modelo."""
23
+ input_ids = tokenizer.encode(input_text, return_tensors='pt')
24
+ input_ids = input_ids.to(model.device)
25
 
26
+ streamer = TextIteratorStreamer(tokenizer, timeout=10.0, skip_prompt=True, skip_special_tokens=True)
27
+ generate_kwargs = dict(
28
+ input_ids=input_ids,
29
+ streamer=streamer,
30
+ max_new_tokens=max_new_tokens,
31
+ do_sample=temperature != 0,
32
+ temperature=temperature,
33
+ eos_token_id=[tokenizer.eos_token_id]
34
+ )
35
 
36
+ # Generaci贸n de texto en un hilo separado
37
+ t = Thread(target=model.generate, kwargs=generate_kwargs)
38
+ t.start()
39
 
40
+ outputs = []
41
+ for text in streamer:
42
+ outputs.append(text)
43
+ yield "".join(outputs)
44
 
45
+ def main():
46
+ st.title("Chat con Meta Llama 3.1 8B")
47
+
48
+ # Paso 1: Subir el archivo CSV
49
+ uploaded_file = st.file_uploader("Por favor, sube un archivo CSV para iniciar:", type=["csv"])
50
+
51
+ if uploaded_file is not None:
52
+ df = pd.read_csv(uploaded_file)
53
+ st.write("Archivo CSV cargado exitosamente:")
54
+ st.write(df.head()) # Mostrar las primeras filas del dataframe
 
 
 
 
 
 
55
 
56
+ # Prompt inicial
57
+ initial_prompt = "dame el nombre de un animal"
58
+ st.write(f"Prompt inicial: {initial_prompt}")
59
 
60
+ # Generar la respuesta del modelo
61
+ if st.button("Generar respuesta"):
62
+ with st.spinner("Generando respuesta..."):
63
+ response = list(generate_response(initial_prompt))[0] # Obtener la primera respuesta completa
64
+ st.write(f"Respuesta del modelo: {response}")
65
 
66
+ # Terminar la conversaci贸n
67
+ st.success("La conversaci贸n ha terminado.")
68
+
69
+ # Opci贸n para reiniciar o finalizar
70
+ if st.button("Iniciar nueva conversaci贸n"):
71
+ st.experimental_rerun() # Reinicia la aplicaci贸n
72
+ elif st.button("Terminar"):
73
+ st.stop()
 
74
 
75
+ if __name__ == "__main__":
76
+ main()
 
77