JaphetHernandez commited on
Commit
763be08
1 Parent(s): 9e259a4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -38
app.py CHANGED
@@ -8,22 +8,22 @@ from threading import Thread
8
  huggingface_token = st.secrets["HUGGINGFACEHUB_API_TOKEN"]
9
  login(huggingface_token)
10
 
11
- # Cambiar a la versión Meta Llama 3.1 1B
12
- model_id = "meta-llama/Llama-3.2-1B"
13
-
14
  # Cargar el tokenizador y el modelo
 
15
  tokenizer = AutoTokenizer.from_pretrained(model_id)
16
  model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
17
  tokenizer.pad_token = tokenizer.eos_token
18
 
19
- # Definir longitud máxima de tokens
20
  MAX_INPUT_TOKEN_LENGTH = 4096
21
 
22
- def generate_response(input_text, temperature=0.2, max_new_tokens=100):
23
- """Función de generación de texto con el modelo."""
24
  input_ids = tokenizer.encode(input_text, return_tensors='pt').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,
@@ -31,58 +31,60 @@ def generate_response(input_text, temperature=0.2, max_new_tokens=100):
31
  do_sample=True,
32
  top_k=50,
33
  top_p=0.9,
34
- num_beams=3, # Beam search con 3 opciones
35
  temperature=temperature,
36
  eos_token_id=[tokenizer.eos_token_id]
37
  )
38
 
39
- # Generación de texto en un hilo separado
40
- t = Thread(target=model.generate, kwargs=generate_kwargs)
41
- t.start()
 
42
 
43
- outputs = []
44
- for text in streamer:
45
- outputs.append(text)
46
-
47
- # Devolver la respuesta completa
48
- return "".join(outputs)
 
 
 
49
 
50
  def main():
51
  st.title("Chat con Meta Llama 3.2 1B")
52
 
53
- # Subir archivo CSV
54
  uploaded_file = st.file_uploader("Por favor, sube un archivo CSV para iniciar:", type=["csv"])
55
 
56
  if uploaded_file is not None:
57
  df = pd.read_csv(uploaded_file)
58
- query = "aspiring human resources specialist"
59
- st.write("Archivo CSV cargado exitosamente:")
60
- st.write(df.head()) # Mostrar las primeras filas del dataframe
61
- job_titles = df['job_title'].tolist()
 
 
 
62
 
63
- # Prompt mejorado
64
- initial_prompt = f"Here is a list of job titles: {job_titles}. Please only return the first job title from this list without any additional text."
65
- st.write(f"Query: {query}")
66
- st.write(f"Prompt inicial: {initial_prompt}")
 
 
 
 
 
 
 
67
 
68
- # Generar la respuesta del modelo
69
- if st.button("Generar respuesta"):
70
- with st.spinner("Generando respuesta..."):
71
- response = generate_response(initial_prompt, temperature=0.7)
72
- if response:
73
- st.write(f"Respuesta del modelo: {response}")
74
- else:
75
- st.warning("No se pudo generar una respuesta.")
76
-
77
- # Terminar la conversación
78
  st.success("La conversación ha terminado.")
79
 
80
- # Opción para reiniciar o finalizar
81
  if st.button("Iniciar nueva conversación"):
82
  st.experimental_rerun()
83
  elif st.button("Terminar"):
84
  st.stop()
 
 
85
 
86
  if __name__ == "__main__":
87
  main()
88
-
 
8
  huggingface_token = st.secrets["HUGGINGFACEHUB_API_TOKEN"]
9
  login(huggingface_token)
10
 
 
 
 
11
  # Cargar el tokenizador y el modelo
12
+ model_id = "meta-llama/Llama-3.2-1B"
13
  tokenizer = AutoTokenizer.from_pretrained(model_id)
14
  model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
15
  tokenizer.pad_token = tokenizer.eos_token
16
 
 
17
  MAX_INPUT_TOKEN_LENGTH = 4096
18
 
19
+ def generate_response(input_text, temperature=0.7, max_new_tokens=100):
 
20
  input_ids = tokenizer.encode(input_text, return_tensors='pt').to(model.device)
21
 
22
+ if input_ids.shape[1] > MAX_INPUT_TOKEN_LENGTH:
23
+ input_ids = input_ids[:, -MAX_INPUT_TOKEN_LENGTH:]
24
+ st.warning(f"Se recortó la entrada porque excedió el límite de {MAX_INPUT_TOKEN_LENGTH} tokens.")
25
+
26
+ streamer = TextIteratorStreamer(tokenizer, timeout=30.0, skip_prompt=True, skip_special_tokens=True)
27
  generate_kwargs = dict(
28
  input_ids=input_ids,
29
  streamer=streamer,
 
31
  do_sample=True,
32
  top_k=50,
33
  top_p=0.9,
 
34
  temperature=temperature,
35
  eos_token_id=[tokenizer.eos_token_id]
36
  )
37
 
38
+ try:
39
+ t = Thread(target=model.generate, kwargs=generate_kwargs)
40
+ t.start()
41
+ t.join() # Esperar a que el hilo termine
42
 
43
+ outputs = []
44
+ for text in streamer:
45
+ outputs.append(text)
46
+ if not outputs:
47
+ raise ValueError("No se generó ninguna respuesta.")
48
+ return "".join(outputs)
49
+ except Exception as e:
50
+ st.error(f"Error durante la generación: {e}")
51
+ return "Error en la generación de texto."
52
 
53
  def main():
54
  st.title("Chat con Meta Llama 3.2 1B")
55
 
 
56
  uploaded_file = st.file_uploader("Por favor, sube un archivo CSV para iniciar:", type=["csv"])
57
 
58
  if uploaded_file is not None:
59
  df = pd.read_csv(uploaded_file)
60
+
61
+ if 'job_title' in df.columns:
62
+ job_titles = df['job_title'].tolist()
63
+ query = "aspiring human resources specialist"
64
+
65
+ st.write("Archivo CSV cargado exitosamente:")
66
+ st.write(df.head())
67
 
68
+ initial_prompt = f"Here is a list of job titles: {job_titles}. Could you extract the first job title from this list and print it clearly?"
69
+ st.write(f"Query: {query}")
70
+ st.write(f"Prompt inicial: {initial_prompt}")
71
+
72
+ if st.button("Generar respuesta"):
73
+ with st.spinner("Generando respuesta..."):
74
+ response = generate_response(initial_prompt, temperature=0.2)
75
+ if response:
76
+ st.write(f"Respuesta del modelo: {response}")
77
+ else:
78
+ st.warning("No se pudo generar una respuesta.")
79
 
 
 
 
 
 
 
 
 
 
 
80
  st.success("La conversación ha terminado.")
81
 
 
82
  if st.button("Iniciar nueva conversación"):
83
  st.experimental_rerun()
84
  elif st.button("Terminar"):
85
  st.stop()
86
+ else:
87
+ st.error("La columna 'job_title' no se encuentra en el archivo CSV.")
88
 
89
  if __name__ == "__main__":
90
  main()