alex16052G commited on
Commit
4f94531
·
verified ·
1 Parent(s): 54b5ba7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -16
app.py CHANGED
@@ -6,12 +6,24 @@ import gradio as gr
6
  chat_model_state = None
7
  chat_tokenizer_state = None
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  def load_chat_model():
10
  """Función para cargar el modelo de chat."""
11
  global chat_model_state, chat_tokenizer_state
12
  try:
13
  model_name = "Qwen/Qwen2.5-3B-Instruct"
14
- print("Cargando el modelo de chat...")
15
  # Cargar el modelo en CPU o GPU según disponibilidad
16
  chat_model_state = AutoModelForCausalLM.from_pretrained(
17
  model_name,
@@ -22,13 +34,11 @@ def load_chat_model():
22
  print("Modelo cargado exitosamente.")
23
  except Exception as e:
24
  print(f"Error al cargar el modelo de chat: {e}")
25
- chat_model_state = None
26
- chat_tokenizer_state = None
27
 
28
- def generate_response(messages):
29
  """Genera una respuesta usando el modelo de chat."""
30
  try:
31
- if chat_model_state is None or chat_tokenizer_state is None:
32
  raise ValueError("El modelo de chat o el tokenizer no están cargados.")
33
 
34
  # Construir el prompt manualmente a partir del historial de mensajes
@@ -46,17 +56,17 @@ def generate_response(messages):
46
  prompt += "Assistant:"
47
 
48
  # Tokenizar el prompt
49
- model_inputs = chat_tokenizer_state(prompt, return_tensors="pt").to(chat_model_state.device)
50
- generated_ids = chat_model_state.generate(
51
  **model_inputs,
52
  max_new_tokens=512,
53
  temperature=0.7,
54
  top_p=0.95,
55
- eos_token_id=chat_tokenizer_state.eos_token_id,
56
  )
57
 
58
  # Decodificar la respuesta generada
59
- generated_text = chat_tokenizer_state.decode(generated_ids[0], skip_special_tokens=True)
60
 
61
  # Extraer solo la respuesta del asistente
62
  response = generated_text[len(prompt):].strip()
@@ -74,12 +84,7 @@ with gr.Blocks() as app_chat:
74
  clear_btn_chat = gr.Button("Limpiar Conversación")
75
 
76
  conversation_state = gr.State(
77
- value=[
78
- {
79
- "role": "system",
80
- "content": "Eres un chatbot. Responde a las preguntas del usuario de manera concisa y clara.",
81
- }
82
- ]
83
  )
84
 
85
  def process_input(text, history, conv_state):
@@ -91,7 +96,7 @@ with gr.Blocks() as app_chat:
91
  history.append((text, None))
92
 
93
  # Generar la respuesta del modelo de chat
94
- response = generate_response(conv_state)
95
 
96
  conv_state.append({"role": "assistant", "content": response})
97
  history[-1] = (text, response)
 
6
  chat_model_state = None
7
  chat_tokenizer_state = None
8
 
9
+ # Inicialización de ZeroGPU (opcional)
10
+ def initialize_zero_gpu():
11
+ """Inicializa ZeroGPU si es requerido por el entorno."""
12
+ try:
13
+ import spaces
14
+ spaces.GPU(lambda x: x) # Realiza una inicialización dummy
15
+ print("ZeroGPU inicializado correctamente.")
16
+ except ImportError:
17
+ print("ZeroGPU no está disponible o no es necesario en este entorno.")
18
+
19
+ # Llamamos a la inicialización de ZeroGPU al inicio
20
+ initialize_zero_gpu()
21
+
22
  def load_chat_model():
23
  """Función para cargar el modelo de chat."""
24
  global chat_model_state, chat_tokenizer_state
25
  try:
26
  model_name = "Qwen/Qwen2.5-3B-Instruct"
 
27
  # Cargar el modelo en CPU o GPU según disponibilidad
28
  chat_model_state = AutoModelForCausalLM.from_pretrained(
29
  model_name,
 
34
  print("Modelo cargado exitosamente.")
35
  except Exception as e:
36
  print(f"Error al cargar el modelo de chat: {e}")
 
 
37
 
38
+ def generate_response(messages, model, tokenizer):
39
  """Genera una respuesta usando el modelo de chat."""
40
  try:
41
+ if model is None or tokenizer is None:
42
  raise ValueError("El modelo de chat o el tokenizer no están cargados.")
43
 
44
  # Construir el prompt manualmente a partir del historial de mensajes
 
56
  prompt += "Assistant:"
57
 
58
  # Tokenizar el prompt
59
+ model_inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
60
+ generated_ids = model.generate(
61
  **model_inputs,
62
  max_new_tokens=512,
63
  temperature=0.7,
64
  top_p=0.95,
65
+ eos_token_id=tokenizer.eos_token_id,
66
  )
67
 
68
  # Decodificar la respuesta generada
69
+ generated_text = tokenizer.decode(generated_ids[0], skip_special_tokens=True)
70
 
71
  # Extraer solo la respuesta del asistente
72
  response = generated_text[len(prompt):].strip()
 
84
  clear_btn_chat = gr.Button("Limpiar Conversación")
85
 
86
  conversation_state = gr.State(
87
+ value=[{"role": "system", "content": "Eres un chatbot. Responde a las preguntas del usuario de manera concisa y clara."}]
 
 
 
 
 
88
  )
89
 
90
  def process_input(text, history, conv_state):
 
96
  history.append((text, None))
97
 
98
  # Generar la respuesta del modelo de chat
99
+ response = generate_response(conv_state, chat_model_state, chat_tokenizer_state)
100
 
101
  conv_state.append({"role": "assistant", "content": response})
102
  history[-1] = (text, response)